:root{--bg: #0f1117;--bg-card: #1a1d27;--bg-card-hover: #21242f;--border: #2a2d3a;--text: #e1e4ed;--text-dim: #8b8fa3;--green: #22c55e;--green-bg: rgba(34, 197, 94, .1);--red: #ef4444;--red-bg: rgba(239, 68, 68, .1);--yellow: #f59e0b;--yellow-bg: rgba(245, 158, 11, .1);--blue: #3b82f6;--blue-bg: rgba(59, 130, 246, .1);--purple: #8b5cf6;--purple-bg: rgba(139, 92, 246, .1);--cyan: #06b6d4;--cyan-bg: rgba(6, 182, 212, .1);--orange: #f97316;--orange-bg: rgba(249, 115, 22, .1);font-family:Inter,system-ui,-apple-system,sans-serif;line-height:1.5;color:var(--text);background-color:var(--bg);font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}*{box-sizing:border-box;margin:0;padding:0}body{min-height:100vh}#root{width:100%}.dashboard-page{max-width:1200px;margin:0 auto;padding:24px}button{font-family:inherit;cursor:pointer;border:none;border-radius:8px;font-size:14px;font-weight:500;padding:8px 16px;transition:all .15s}button:disabled{opacity:.5;cursor:not-allowed}.map-page{position:fixed;inset:0;background:var(--bg);display:flex;flex-direction:column;overflow:hidden;z-index:10}.map-topbar{display:flex;align-items:center;justify-content:space-between;height:48px;padding:0 16px;background:var(--bg-card);border-bottom:1px solid var(--border);flex-shrink:0;z-index:20}.map-topbar-left{display:flex;align-items:center;gap:16px}.map-topbar-right{display:flex;align-items:center;gap:12px}.map-nav-btn{background:var(--bg-card-hover)!important;color:var(--text);border:1px solid var(--border)!important;padding:5px 14px;font-size:13px;border-radius:6px;cursor:pointer}.map-nav-btn:hover{background:var(--border)!important}.map-title{font-size:15px;font-weight:600;color:var(--text);letter-spacing:.3px}.map-zoom-label{font-size:12px;color:var(--text-dim);font-family:JetBrains Mono,Fira Code,monospace;min-width:40px;text-align:right}.map-run-all-btn{background:var(--green)!important;color:#fff;border:none!important;padding:5px 16px;font-size:12px;font-weight:600;border-radius:6px;cursor:pointer;letter-spacing:.3px;transition:opacity .2s}.map-run-all-btn:hover{opacity:.85}.map-run-all-btn:disabled{opacity:.5;cursor:not-allowed}.map-tab-bar{display:flex;align-items:center;height:40px;padding:0 16px;gap:0;background:var(--bg);border-bottom:1px solid var(--border);flex-shrink:0;overflow-x:auto;z-index:20}.map-tab{padding:8px 16px;font-size:13px;color:var(--text-dim);background:none!important;border:none!important;border-bottom:2px solid transparent!important;border-radius:0;cursor:pointer;white-space:nowrap;transition:all .15s;line-height:1}.map-tab:hover{color:var(--text);background:var(--bg-card)!important}.map-tab.active{color:var(--blue);border-bottom-color:var(--blue)!important}.map-tab.target{font-style:italic}.map-svg{flex:1;width:100%;display:block;-webkit-user-select:none;user-select:none;touch-action:none}.map-zoom-controls{position:fixed;bottom:24px;right:24px;display:flex;flex-direction:column;gap:2px;z-index:20}.map-zoom-btn{width:40px;height:40px;display:flex;align-items:center;justify-content:center;background:var(--bg-card)!important;color:var(--text);border:1px solid var(--border)!important;border-radius:0;font-size:20px;font-weight:400;cursor:pointer;line-height:1;padding:0}.map-zoom-btn:first-child{border-radius:8px 8px 0 0}.map-zoom-btn:last-child{border-radius:0 0 8px 8px}.map-zoom-btn:hover{background:var(--bg-card-hover)!important;color:var(--blue)}.map-zoom-fit{font-size:16px}.minimap-container{position:fixed;bottom:156px;right:24px;background:var(--bg-card);border:1px solid var(--border);border-radius:8px;padding:4px;z-index:20;opacity:.85;transition:opacity .2s}.minimap-container:hover{opacity:1}.map-legend{position:fixed;bottom:24px;left:24px;display:flex;flex-direction:column;gap:6px;background:var(--bg-card);border:1px solid var(--border);border-radius:10px;padding:12px 16px;z-index:20}.map-legend-item{display:flex;align-items:center;gap:8px;font-size:11px;color:var(--text-dim)}.map-legend-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}.map-legend-separator{height:1px;background:var(--border);margin:2px 0}.map-legend-keys{font-size:9px;color:var(--text-dim);opacity:.6}.node-testable{cursor:pointer}.node-testable:hover .node-rect{stroke-opacity:1!important;filter:brightness(1.3)}.node-glow-pulse .node-rect{animation:glow-pulse 3s ease-in-out infinite}@keyframes glow-pulse{0%,to{stroke-opacity:.6}50%{stroke-opacity:1}}.node-testing .node-rect{animation:testing-pulse .8s ease-in-out infinite}@keyframes testing-pulse{0%,to{stroke-opacity:.3}50%{stroke-opacity:1}}.connection-animated{animation:dash-flow 1.5s linear infinite}@keyframes dash-flow{to{stroke-dashoffset:-20}}.panel-backdrop{position:fixed;inset:0;background:#00000080;z-index:99;opacity:0;pointer-events:none;transition:opacity .3s ease}.panel-backdrop.open{opacity:1;pointer-events:auto}.node-panel{position:fixed;top:0;right:0;width:440px;max-width:90vw;height:100vh;background:var(--bg);border-left:1px solid var(--border);transform:translate(100%);transition:transform .3s cubic-bezier(.4,0,.2,1);z-index:100;overflow-y:auto;padding:24px}.node-panel.open{transform:translate(0)}.panel-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:20px;padding-bottom:16px;border-bottom:1px solid var(--border)}.panel-header-info h2{font-size:20px;font-weight:600;margin-bottom:4px}.panel-header-info .panel-sublabel{font-size:13px;color:var(--text-dim);font-family:JetBrains Mono,Fira Code,monospace}.panel-close{background:none!important;border:none!important;color:var(--text-dim);font-size:22px;cursor:pointer;padding:4px 8px;border-radius:6px;line-height:1}.panel-close:hover{color:var(--text);background:var(--bg-card)!important}.panel-health{display:flex;align-items:center;gap:10px;margin-bottom:20px;padding:12px 16px;background:var(--bg-card);border-radius:10px;border:1px solid var(--border)}.panel-health .health-dot{width:12px;height:12px;border-radius:50%;flex-shrink:0}.panel-health .health-dot.up{background:var(--green);box-shadow:0 0 8px var(--green)}.panel-health .health-dot.down{background:var(--red);box-shadow:0 0 8px var(--red)}.panel-health .health-dot.unknown{background:var(--text-dim)}.panel-health-text{font-size:14px;font-weight:500}.panel-actions{margin-bottom:24px}.panel-results{margin-top:20px}.panel-results .panel-summary{display:flex;gap:16px;margin-bottom:16px;flex-wrap:wrap}.panel-results .panel-stat{display:flex;flex-direction:column;align-items:center;gap:2px}.panel-results .panel-stat-value{font-size:24px;font-weight:700}.panel-results .panel-stat-label{font-size:11px;color:var(--text-dim);text-transform:uppercase;letter-spacing:.5px}.panel-progress{height:5px;border-radius:3px;background:var(--border);overflow:hidden;display:flex;margin-bottom:16px}.panel-progress .pass-seg{background:var(--green)}.panel-progress .fail-seg{background:var(--red)}.panel-test-item{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-bottom:1px solid var(--border);font-size:13px}.panel-test-item:last-child{border-bottom:none}.panel-test-name{display:flex;align-items:center;gap:8px;font-family:JetBrains Mono,Fira Code,monospace;font-size:12px}.panel-test-duration{font-family:JetBrains Mono,Fira Code,monospace;font-size:11px;color:var(--text-dim)}.panel-test-error{padding:6px 12px 12px;font-size:11px;color:var(--red);font-family:JetBrains Mono,Fira Code,monospace;background:var(--red-bg);border-radius:6px;margin:0 12px 8px;word-break:break-word}.panel-test-list{background:var(--bg-card);border:1px solid var(--border);border-radius:10px;overflow:hidden}@media(max-width:640px){.node-panel{width:100vw}.map-legend{bottom:12px;left:12px}.map-zoom-controls{bottom:12px;right:12px}.minimap-container{display:none}.map-tab-bar{padding:0 8px}.map-tab{padding:8px 10px;font-size:12px}}.explorer{display:flex;flex-direction:column;gap:24px}.explorer-section{background:var(--bg-card);border:1px solid var(--border);border-radius:12px;padding:20px}.explorer-section h2{font-size:16px;font-weight:600;margin-bottom:16px;display:flex;align-items:center;gap:12px}.auth-login{display:flex;flex-direction:column;align-items:flex-start;gap:12px}.auth-hint{font-size:13px;color:var(--text-dim)}.auth-info{display:flex;flex-direction:column;gap:12px}.auth-status{display:flex;align-items:center;gap:8px;font-size:14px}.auth-tenant{color:var(--text-dim);font-size:12px;margin-left:8px;font-family:JetBrains Mono,Fira Code,monospace}.token-display{display:flex;flex-direction:column;gap:6px}.token-display label{font-size:12px;color:var(--text-dim);font-weight:500}.token-box{display:flex;align-items:center;gap:8px;background:var(--bg);border:1px solid var(--border);border-radius:6px;padding:8px 12px;overflow:hidden}.token-box code{font-family:JetBrains Mono,Fira Code,monospace;font-size:11px;color:var(--cyan);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.preset-grid{display:flex;flex-wrap:wrap;gap:6px}.preset-btn{display:flex;align-items:center;gap:6px;font-size:12px!important;padding:4px 10px!important}.preset-service{font-size:10px;font-weight:600;color:var(--cyan);background:var(--cyan-bg);padding:1px 5px;border-radius:3px;font-family:JetBrains Mono,Fira Code,monospace}.request-builder{display:flex;flex-direction:column;gap:12px}.request-row{display:flex;gap:8px}.method-select{width:100px;padding:8px;background:var(--bg);color:var(--green);border:1px solid var(--border);border-radius:6px;font-family:JetBrains Mono,Fira Code,monospace;font-size:13px;font-weight:600}.service-select{width:180px;padding:8px;background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:6px;font-family:JetBrains Mono,Fira Code,monospace;font-size:13px}.path-input{flex:1;padding:8px 12px;background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:6px;font-family:JetBrains Mono,Fira Code,monospace;font-size:13px}.path-input::placeholder{color:var(--text-dim)}.body-input{width:100%;padding:12px;background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:6px;font-family:JetBrains Mono,Fira Code,monospace;font-size:13px;resize:vertical}.body-input::placeholder{color:var(--text-dim)}.response-meta{font-size:13px;font-weight:400;display:flex;align-items:center;gap:12px}.response-time{color:var(--text-dim);font-size:12px;font-family:JetBrains Mono,Fira Code,monospace}.response-body{background:var(--bg);border:1px solid var(--border);border-radius:6px;padding:16px;overflow:auto;max-height:500px}.response-body pre{font-family:JetBrains Mono,Fira Code,monospace;font-size:12px;color:var(--text);white-space:pre-wrap;word-break:break-word;margin:0}select option{background:var(--bg-card);color:var(--text)}.header{display:flex;align-items:center;justify-content:space-between;margin-bottom:32px;padding-bottom:16px;border-bottom:1px solid var(--border)}.header h1{font-size:24px;font-weight:600;display:flex;align-items:center;gap:10px}.header-actions{display:flex;gap:8px}.btn-primary{background:var(--blue);color:#fff}.btn-primary:hover:not(:disabled){background:#2563eb}.btn-secondary{background:var(--bg-card);color:var(--text);border:1px solid var(--border)}.btn-secondary:hover:not(:disabled){background:var(--bg-card-hover)}.btn-danger{background:var(--red);color:#fff}.btn-sm{padding:4px 12px;font-size:13px}.health-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px;margin-bottom:32px}.health-card{background:var(--bg-card);border:1px solid var(--border);border-radius:10px;padding:16px;text-align:center;transition:all .15s}.health-card:hover{border-color:var(--text-dim)}.health-card .service-name{font-size:13px;font-weight:600;color:var(--text);margin-bottom:8px}.health-card .status-dot{width:10px;height:10px;border-radius:50%;display:inline-block;margin-right:6px}.health-card .status-text{font-size:12px;color:var(--text-dim)}.status-dot.up{background:var(--green);box-shadow:0 0 8px var(--green)}.status-dot.down{background:var(--red);box-shadow:0 0 8px var(--red)}.status-dot.unknown{background:var(--text-dim)}.run-controls{background:var(--bg-card);border:1px solid var(--border);border-radius:12px;padding:20px;margin-bottom:24px}.run-controls h2{font-size:16px;margin-bottom:12px;display:flex;align-items:center;gap:8px}.suite-buttons{display:flex;flex-wrap:wrap;gap:8px}.results-section{margin-bottom:32px}.results-section h2{font-size:18px;margin-bottom:16px;display:flex;align-items:center;gap:8px}.run-summary{background:var(--bg-card);border:1px solid var(--border);border-radius:12px;padding:20px;margin-bottom:16px}.run-summary-stats{display:flex;gap:24px;margin-bottom:16px}.stat-box{display:flex;flex-direction:column;align-items:center;gap:4px}.stat-box .stat-value{font-size:28px;font-weight:700}.stat-box .stat-label{font-size:12px;color:var(--text-dim);text-transform:uppercase;letter-spacing:.5px}.stat-value.pass{color:var(--green)}.stat-value.fail{color:var(--red)}.stat-value.total{color:var(--blue)}.stat-value.skip{color:var(--yellow)}.progress-bar{height:6px;border-radius:3px;background:var(--border);overflow:hidden;display:flex}.progress-bar .pass-segment{background:var(--green)}.progress-bar .fail-segment{background:var(--red)}.progress-bar .skip-segment{background:var(--yellow)}.suite-group{margin-bottom:16px}.suite-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;background:var(--bg-card);border:1px solid var(--border);border-radius:10px 10px 0 0;cursor:pointer;-webkit-user-select:none;user-select:none}.suite-header:hover{background:var(--bg-card-hover)}.suite-header .suite-title{font-size:14px;font-weight:600;display:flex;align-items:center;gap:8px}.suite-header .suite-counts{font-size:13px;color:var(--text-dim);display:flex;gap:12px}.suite-header .suite-counts .pass-count{color:var(--green)}.suite-header .suite-counts .fail-count{color:var(--red)}.test-list{border:1px solid var(--border);border-top:none;border-radius:0 0 10px 10px}.test-row{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;border-bottom:1px solid var(--border);font-size:13px}.test-row:last-child{border-bottom:none}.test-row .test-name{display:flex;align-items:center;gap:8px;font-family:JetBrains Mono,Fira Code,monospace}.test-row .test-meta{display:flex;align-items:center;gap:16px;color:var(--text-dim);font-size:12px}.badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.3px}.badge.pass,.badge.passed{background:var(--green-bg);color:var(--green)}.badge.fail,.badge.failed{background:var(--red-bg);color:var(--red)}.badge.skip{background:var(--yellow-bg);color:var(--yellow)}.badge.running{background:var(--blue-bg);color:var(--blue)}.error-message{margin-top:4px;padding:8px 12px;background:var(--red-bg);border-radius:6px;font-size:12px;color:var(--red);font-family:JetBrains Mono,Fira Code,monospace;word-break:break-word}.history-table{width:100%;border-collapse:separate;border-spacing:0;background:var(--bg-card);border:1px solid var(--border);border-radius:12px;overflow:hidden}.history-table th{padding:12px 16px;text-align:left;font-size:12px;color:var(--text-dim);text-transform:uppercase;letter-spacing:.5px;border-bottom:1px solid var(--border);font-weight:600}.history-table td{padding:12px 16px;font-size:13px;border-bottom:1px solid var(--border)}.history-table tr:last-child td{border-bottom:none}.history-table tr:hover td{background:var(--bg-card-hover)}.history-table tr{cursor:pointer}.spinner{display:inline-block;width:16px;height:16px;border:2px solid var(--border);border-top-color:var(--blue);border-radius:50%;animation:spin .6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading-overlay{display:flex;align-items:center;justify-content:center;gap:10px;padding:40px;color:var(--text-dim)}.tabs{display:flex;gap:0;margin-bottom:24px;border-bottom:1px solid var(--border)}.tab{padding:10px 20px;font-size:14px;color:var(--text-dim);background:none;border:none;border-bottom:2px solid transparent;border-radius:0;cursor:pointer;transition:all .15s}.tab:hover{color:var(--text)}.tab.active{color:var(--blue);border-bottom-color:var(--blue)}.duration{font-family:JetBrains Mono,Fira Code,monospace;font-size:12px;color:var(--text-dim)}@media(max-width:768px){.health-grid{grid-template-columns:repeat(3,1fr)}.run-summary-stats{flex-wrap:wrap}.header{flex-direction:column;gap:12px;align-items:flex-start}}
