@import url(https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@300;400;500;600&family=IBM+Plex+Sans:wght@300;400;500;600;700&display=swap);:root{--bg:#eef1f4;--surface:#fff;--surface-muted:#f7f8fa;--text:#101828;--text-soft:#667085;--text-muted:#98a2b3;--border:#e4e7ec;--border-strong:#d0d5dd;--shadow-soft:0 14px 40px #10182814;--c-ok:#10b981;--c-flowguard:#2563eb;--c-warn:#f59e0b;--c-err:#ef4444;--c-software:#e85d3a;--c-api:#059669;--c-app:#0ea5e9;--font-sans:"IBM Plex Sans",ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif;--font-mono:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,monospace}*{box-sizing:border-box}#root,body,html{margin:0;min-height:100%}body{background:radial-gradient(circle at 8% 0,#2563eb0f,#0000 28%),radial-gradient(circle at 95% 6%,#10b9810f,#0000 30%),#eef1f4;background:radial-gradient(circle at 8% 0,#2563eb0f,#0000 28%),radial-gradient(circle at 95% 6%,#10b9810f,#0000 30%),var(--bg);color:#101828;color:var(--text);font-family:IBM Plex Sans,ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif;font-family:var(--font-sans)}.container{margin:0 auto;max-width:1400px;padding:20px}.h1{color:#101828;color:var(--text);font-size:22px;font-weight:700;margin:0 0 14px}.page-loading{color:#667085;color:var(--text-soft);font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-family:var(--font-mono);font-size:12px;padding:24px;text-align:center}.nav{align-items:center;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#ffffffd9;border-bottom:1px solid #e4e7ec;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;padding:12px 20px;position:-webkit-sticky;position:sticky;top:0;z-index:20}.nav-brand{align-items:baseline;color:#101828;color:var(--text);display:flex;font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-family:var(--font-mono);font-size:14px;font-weight:600;gap:8px;letter-spacing:1.4px}.nav-brand span{color:#2563eb;color:var(--c-flowguard)}.nav-brand small{color:#98a2b3;color:var(--text-muted);font-size:10px;font-weight:400;letter-spacing:.3px}.nav-links{display:flex;gap:8px}.nav-link{border:1px solid #0000;border-radius:999px;color:#667085;color:var(--text-soft);font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-family:var(--font-mono);font-size:12px;padding:6px 12px;text-decoration:none}.nav-link:hover{background:#fff;background:var(--surface);border-color:#e4e7ec;border-color:var(--border);color:#101828;color:var(--text)}.nav-link.active{background:#101828;background:var(--text);border-color:#101828;border-color:var(--text);color:#fff;color:var(--surface)}.home-layout{display:flex;flex-direction:column;gap:12px}.home-head{align-items:center;display:flex;justify-content:space-between;margin-bottom:4px}.home-brand{align-items:baseline;display:inline-flex;font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-family:var(--font-mono);font-size:14px;font-weight:600;gap:8px;letter-spacing:1.8px}.home-brand span{color:#2563eb;color:var(--c-flowguard)}.home-brand small{color:#98a2b3;color:var(--text-muted);font-size:10px;font-weight:400;letter-spacing:.4px}.home-head-right{align-items:center;display:flex;gap:10px}.clock{color:#98a2b3;color:var(--text-muted);font-size:11px}.clock,.live-pill{font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-family:var(--font-mono)}.live-pill{align-items:center;background:#fff;background:var(--surface);border:1px solid #e4e7ec;border:1px solid var(--border);border-radius:999px;display:inline-flex;font-size:10px;gap:6px;letter-spacing:.8px;padding:5px 12px}.live-dot{animation:pulse 1.4s ease-in-out infinite;border-radius:50%;height:7px;width:7px}.live-dot,.live-pill.is-live .live-dot{background:#10b981;background:var(--c-ok)}.live-pill.is-dead .live-dot{animation:none;background:var(--c-error)}.live-pill.is-connecting .live-dot{animation:pulse .8s ease-in-out infinite;background:#f59e0b}.live-pill.is-dead{border-color:var(--c-error);color:var(--c-error);opacity:.8}.live-pill.is-connecting{border-color:#f59e0b;color:#f59e0b;opacity:.9}@keyframes pulse{0%,to{opacity:1}50%{opacity:.35}}.stats-grid{grid-gap:12px;display:grid;gap:12px;grid-template-columns:repeat(4,1fr)}.stat-card{background:#fff;background:var(--surface);border:1px solid #e4e7ec;border:1px solid var(--border);border-radius:12px;box-shadow:0 14px 40px #10182814;box-shadow:var(--shadow-soft);overflow:hidden;padding:14px 16px;position:relative}.stat-card:before{content:"";height:3px;left:0;position:absolute;right:0;top:0}.stat-ok:before{background:#10b981;background:var(--c-ok)}.stat-flow:before{background:#2563eb;background:var(--c-flowguard)}.stat-warn:before{background:#f59e0b;background:var(--c-warn)}.stat-err:before{background:#ef4444;background:var(--c-err)}.stat-label{color:#98a2b3;color:var(--text-muted);font-size:10px;letter-spacing:1px;margin-bottom:8px;text-transform:uppercase}.stat-label,.stat-main{font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-family:var(--font-mono)}.stat-main{font-size:28px;font-weight:500;line-height:1}.stat-sub{color:#98a2b3;color:var(--text-muted);font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-family:var(--font-mono);font-size:10px;margin-top:4px}.stat-ok .stat-main{color:#10b981;color:var(--c-ok)}.stat-flow .stat-main{color:#2563eb;color:var(--c-flowguard)}.stat-warn .stat-main{color:#f59e0b;color:var(--c-warn)}.stat-err .stat-main{color:#ef4444;color:var(--c-err)}.panel{background:#fff;background:var(--surface);border:1px solid #e4e7ec;border:1px solid var(--border);border-radius:12px;box-shadow:0 14px 40px #10182814;box-shadow:var(--shadow-soft)}.panel-head{align-items:center;border-bottom:1px solid #e4e7ec;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;padding:14px 18px}.panel-kicker{color:#98a2b3;color:var(--text-muted);font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-family:var(--font-mono);font-size:10px;letter-spacing:1.2px;text-transform:uppercase}.panel-meta{color:#667085;color:var(--text-soft);font-size:12px}.panel-foot{border-top:1px solid #e4e7ec;border-top:1px solid var(--border);color:#98a2b3;color:var(--text-muted);font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-family:var(--font-mono);font-size:10px;padding:10px 18px}.chart-panel .recharts-responsive-container{padding:8px 10px 8px 0}.topology-panel{border-radius:16px;overflow:visible}.flow-legend{gap:8px}.flow-legend,.flow-legend-wrap{align-items:center;display:flex}.flow-legend-wrap{gap:10px}.legend-note{color:#98a2b3;color:var(--text-muted)}.legend-chip,.legend-note{font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-family:var(--font-mono);font-size:10px}.legend-chip{align-items:center;background:#fff;background:var(--surface);border:1px solid #e4e7ec;border:1px solid var(--border);border-radius:999px;color:#667085;color:var(--text-soft);display:inline-flex;padding:5px 10px}.legend-chip.is-forward{background:#2563eb14;border-color:#2563eb4d;color:#1e40af}.legend-chip.is-reverse{background:#10b98114;border-color:#10b9814d;color:#047857}.legend-chip.is-back{background:#e85d3a14;border-color:#e85d3a4d;color:#9a3412}.topology-stage{background:radial-gradient(circle at 12% 0,#e85d3a1f,#0000 34%),radial-gradient(circle at 50% 0,#2563eb1f,#0000 35%),radial-gradient(circle at 88% 0,#0ea5e91f,#0000 34%),linear-gradient(180deg,#fbfdff,#f5f8fc);height:180px;padding:0 12px;position:relative}.flow-svg{display:block;height:100%;inset:0;position:absolute;width:100%;z-index:0}.transfer-dot-layer{inset:0;pointer-events:none;position:absolute;z-index:1}.transport-rail{stroke:#94a3b86b;stroke-width:1;stroke-linecap:round}.node-orbit-row{inset:0;padding:0;position:absolute;z-index:2}.transfer-dot{border-radius:50%;box-shadow:0 0 0 3px #2563eb1f;height:8px;width:8px}.node-orbit,.transfer-dot{position:absolute;transform:translate(-50%,-50%)}.node-orbit{background:#0000;border:none;cursor:pointer;height:118px;padding:0;top:50%;transition:transform .18s ease;width:118px}.node-orbit:hover{transform:translate(-50%,calc(-50% - 2px)) scale(1.015)}.orbit-ring{--node-color:#2563eb;--node-rgb:37,99,235;background:rgba(var(--node-rgb),.12);border:2px solid rgba(var(--node-rgb),.4);border-radius:50%;box-shadow:0 0 0 8px rgba(var(--node-rgb),.08),0 8px 22px rgba(var(--node-rgb),.16);display:grid;inset:10px;overflow:hidden;place-content:center;position:absolute;text-align:center}.orbit-ring:before{background:#f7fbff;border-radius:50%;content:"";inset:8px;position:absolute}.orbit-ring>span{position:relative;z-index:1}.node-orbit.is-active .orbit-ring{box-shadow:0 0 0 10px rgba(var(--node-rgb),.16),0 12px 28px rgba(var(--node-rgb),.24)}.orbit-badge{align-items:center;background:#2563eb;border-radius:999px;box-shadow:0 6px 14px #2563eb3d;color:#fff;display:inline-flex;font-size:10px;height:23px;justify-content:center;min-width:23px;padding:0 7px;position:absolute;right:8px;top:8px;z-index:3}.node-label-main,.orbit-badge{font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-family:var(--font-mono)}.node-label-main{color:var(--node-color);font-size:11px;font-weight:600;letter-spacing:.9px}.node-label-sub{color:#98a2b3;color:var(--text-muted);font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-family:var(--font-mono);font-size:10px;margin-top:2px}.node-tooltip{animation:tooltipIn .12s ease;background:#0f172a;border:1px solid #ffffff14;border-radius:12px;bottom:calc(100% + 14px);box-shadow:0 8px 32px #00000047;min-width:170px;padding:12px 14px;pointer-events:none;z-index:100}.node-tooltip,.node-tooltip:after{left:50%;position:absolute;transform:translateX(-50%)}.node-tooltip:after{border:6px solid #0000;border-top-color:#0f172a;content:"";top:100%}.node-tooltip-title{color:#fff;font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-family:var(--font-mono);font-size:11px;font-weight:600;letter-spacing:.6px;margin-bottom:10px}.node-tooltip-title span{color:#ffffff73;font-size:10px;font-weight:400;margin-left:5px}.node-tooltip-row{align-items:center;border-bottom:1px solid #ffffff0d;color:#ffffff8c;display:flex;font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-family:var(--font-mono);font-size:10px;gap:16px;justify-content:space-between;padding:3px 0}.node-tooltip-row:last-child{border-bottom:none}.node-tooltip-row strong{color:#fff;font-weight:600}.node-tooltip-row strong.ok{color:#34d399}.node-tooltip-row strong.err{color:#f87171}@keyframes tooltipIn{0%{opacity:0;transform:translateX(-50%) translateY(4px)}to{opacity:1;transform:translateX(-50%) translateY(0)}}.node-detail{border-top:1px solid #e4e7ec;border-top:1px solid var(--border);display:grid;grid-template-columns:1fr 1fr}.detail-col{padding:28px 32px}.detail-col+.detail-col{border-left:1px solid #e4e7ec;border-left:1px solid var(--border)}.detail-title{color:#98a2b3;color:var(--text-muted);font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-family:var(--font-mono);font-size:10px;letter-spacing:1.4px;margin-bottom:18px;text-transform:uppercase}.detail-kpi-grid{grid-gap:12px;display:grid;gap:12px;grid-template-columns:1fr 1fr}.kpi-card{background:#f7f8fa;background:var(--surface-muted);border:1px solid #e4e7ec;border:1px solid var(--border);border-radius:10px;display:flex;flex-direction:column;gap:6px;padding:16px 18px}.kpi-label{color:#98a2b3;color:var(--text-muted);font-size:10px;letter-spacing:.8px;text-transform:uppercase}.kpi-label,.kpi-value{font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-family:var(--font-mono)}.kpi-value{color:#101828;color:var(--text);font-size:26px;font-weight:700;line-height:1}.kpi-ok{color:#059669}.kpi-warn{color:#d97706}.kpi-err{color:#dc2626}.detail-log{display:flex;flex-direction:column;gap:4px;max-height:240px;overflow-y:auto}.detail-log-empty{color:#98a2b3;color:var(--text-muted);padding:20px 0;text-align:center}.detail-log-empty,.detail-log-line{font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-family:var(--font-mono);font-size:11px}.detail-log-line{grid-gap:10px;align-items:center;background:#f7f8fa;background:var(--surface-muted);border:1px solid #0000;border-radius:8px;display:grid;gap:10px;grid-template-columns:76px 50px 1fr auto;padding:9px 12px;transition:border-color .12s,background .12s}.detail-log-line:hover{background:#f0f4ff;border-color:#2563eb26}.detail-log-time{color:#98a2b3;color:var(--text-muted);font-size:10px}.log-status{border:1px solid;border-radius:6px;font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-family:var(--font-mono);font-size:11px;font-weight:600;padding:3px 7px;text-align:center}.log-status.ok{background:#10b9811f;border-color:#10b98159;color:#047857}.log-status.err{background:#ef44441f;border-color:#ef444459;color:#b42318}.detail-log-endpoint{color:#101828;color:var(--text);font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.detail-log-btn{font-size:10px;opacity:.6;padding:3px 9px;transition:opacity .1s}.detail-log-line:hover .detail-log-btn{opacity:1}.feed-card{background:#fff;background:var(--surface);border:1px solid #e4e7ec;border:1px solid var(--border);border-radius:12px;box-shadow:0 14px 40px #10182814;box-shadow:var(--shadow-soft);overflow:hidden}.feed-toolbar{background:#f7f8fa;background:var(--surface-muted);border-bottom:1px solid #e4e7ec;border-bottom:1px solid var(--border);flex-wrap:wrap;padding:10px 12px}.feed-toolbar,.search-wrap{align-items:center;display:flex;gap:8px}.search-wrap{background:#fff;background:var(--surface);border:1px solid #e4e7ec;border:1px solid var(--border);border-radius:8px;color:#98a2b3;color:var(--text-muted);flex:1 1;min-width:220px;padding:7px 10px}.search-wrap input{background:#0000;border:none;font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-family:var(--font-mono);font-size:11px;outline:none;width:100%}.filter-group{display:flex;flex-wrap:wrap;gap:6px}.filter-chip{background:#0000;border:1px solid #e4e7ec;border:1px solid var(--border);border-radius:999px;color:#667085;color:var(--text-soft);cursor:pointer;font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-family:var(--font-mono);font-size:10px;padding:5px 10px}.filter-chip:hover{border-color:#d0d5dd;border-color:var(--border-strong);color:#101828;color:var(--text)}.filter-chip.is-active{background:#101828;background:var(--text);border-color:#101828;border-color:var(--text);color:#fff;color:var(--surface)}.feed-count{color:#98a2b3;color:var(--text-muted);font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-family:var(--font-mono);font-size:10px;margin-left:auto}.feed-head,.feed-row{grid-gap:12px;align-items:center;display:grid;gap:12px;grid-template-columns:150px 160px 54px 1fr 62px 170px 86px 92px;padding:11px 16px}.feed-head{background:#f7f8fa;background:var(--surface-muted);border-bottom:1px solid #e4e7ec;border-bottom:1px solid var(--border);color:#98a2b3;color:var(--text-muted);font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-family:var(--font-mono);font-size:9px;letter-spacing:1px;text-transform:uppercase}.feed-body{max-height:480px;overflow:auto}.feed-row{border-bottom:1px solid #e4e7ec;border-bottom:1px solid var(--border);font-size:12.5px;position:relative;transition:background .1s}.feed-row:before{background:#0000;border-radius:0 2px 2px 0;bottom:0;content:"";left:0;position:absolute;top:0;transition:background .1s;width:3px}.feed-row:hover{background:#f5f8ff}.feed-row:hover:before{background:#2563eb;background:var(--c-flowguard)}.feed-empty{color:#98a2b3;color:var(--text-muted);font-size:11px;padding:20px;text-align:center}.feed-empty,.mono{font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-family:var(--font-mono)}.mono{font-size:10px}.dim{color:#98a2b3;color:var(--text-muted)}.code-pill,.dir-chip,.method-pill,.state-pill{align-items:center;border:1px solid;border-radius:6px;display:inline-flex;font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-family:var(--font-mono);font-size:10px;font-weight:500;justify-content:center;letter-spacing:.3px;padding:4px 9px;white-space:nowrap}.dir-app{background:#2563eb14;border-color:#2563eb40;color:#1e40af}.dir-software{background:#e85d3a1a;border-color:#e85d3a47;color:#9a3412}.dir-back{background:#0ea5e91a;border-color:#0ea5e947;color:#0c4a6e}.dir-unknown{background:#f1f5f9;border-color:#dbe2ea;color:#667085;color:var(--text-soft)}.method-pill{background:#10b98114;border-color:#10b98140;color:#047857}.endpoint{color:#101828;color:var(--text);font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-family:var(--font-mono);font-size:12px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.code-2xx{background:#10b98117;border-color:#10b98147;color:#047857}.code-4xx{background:#f59e0b1a;border-color:#f59e0b47;color:#b54708}.code-5xx{background:#ef44441a;border-color:#ef444447;color:#b42318}.code-unknown{background:#f7f8fa;background:var(--surface-muted);border-color:#e4e7ec;border-color:var(--border);color:#667085;color:var(--text-soft)}.state-ok{background:#10b98114;border-color:#10b9814d;color:#047857}.state-warn{background:#f59e0b1a;border-color:#f59e0b47;color:#b54708}.latency{color:#667085;color:var(--text-soft);font-size:12px;font-weight:500}.center{text-align:center}.right{text-align:right}.feed-pagination{align-items:center;background:#f7f8fa;background:var(--surface-muted);border-top:1px solid #e4e7ec;border-top:1px solid var(--border);display:flex;gap:10px;justify-content:center;padding:12px}.page-badge{border:1px solid #e4e7ec;border:1px solid var(--border);border-radius:999px;color:#667085;color:var(--text-soft);padding:4px 10px}.btn,.page-badge{background:#fff;background:var(--surface);font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-family:var(--font-mono);font-size:10px}.btn{border:1px solid #e4e7ec;border:1px solid var(--border);border-radius:8px;color:#101828;color:var(--text);cursor:pointer;padding:6px 10px}.btn:hover:enabled{background:#f7f8fa;background:var(--surface-muted);border-color:#d0d5dd;border-color:var(--border-strong)}.btn:disabled{cursor:not-allowed;opacity:.5}.btn-danger{background:#ef44441a;border-color:#ef444459;color:#b42318}.modal-backdrop{align-items:center;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#10182873;display:flex;inset:0;justify-content:center;position:fixed;z-index:100}.modal{background:#fff;background:var(--surface);border:1px solid #e4e7ec;border:1px solid var(--border);border-radius:12px;box-shadow:0 24px 60px #10182840;max-height:90vh;overflow:auto;padding:18px;width:min(980px,94vw)}.modal-header{align-items:center;display:flex;gap:12px;justify-content:space-between;margin-bottom:14px}.modal-grid{grid-gap:14px;display:grid;gap:14px;grid-template-columns:1fr 1fr}.spark-title{color:#98a2b3;color:var(--text-muted);font-size:10px;letter-spacing:1px;margin-bottom:8px;text-transform:uppercase}.pre-json,.spark-title{font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-family:var(--font-mono)}.pre-json{background:#111827;border:1px solid #ffffff14;border-radius:10px;color:#e5e7eb;font-size:11px;margin:0;max-height:50vh;overflow:auto;padding:10px;white-space:pre-wrap;word-break:break-word}@media (max-width:1200px){.stats-grid{grid-template-columns:repeat(2,1fr)}.topology-stage{background:linear-gradient(180deg,#fbfdff,#f5f8fc);height:auto;padding:12px}.flow-svg{display:none}.node-orbit-row{grid-gap:10px;display:grid;gap:10px;grid-template-columns:repeat(3,minmax(0,1fr));padding:0;position:static}.node-orbit{height:110px;justify-self:center;left:auto!important;position:relative;top:auto;transform:none;width:110px}.node-orbit:hover{transform:translateY(-2px) scale(1.015)}.feed-head,.feed-row{grid-template-columns:132px 148px 52px 1fr 56px 148px 76px 86px}}@media (max-width:860px){.container{padding:14px}.home-head,.nav,.panel-head{align-items:flex-start;flex-direction:column;gap:8px}.node-detail{grid-template-columns:1fr}.flow-legend,.flow-legend-wrap{flex-wrap:wrap}.node-orbit-row{grid-template-columns:1fr}.detail-col+.detail-col{border-left:none;border-top:1px solid #e4e7ec;border-top:1px solid var(--border)}.feed-head{display:none}.feed-row{gap:6px;grid-template-columns:1fr;padding:10px 12px}.center,.right{text-align:left}.modal-grid{grid-template-columns:1fr}}
/*# sourceMappingURL=main.3342bec8.css.map*/