:root{color-scheme:light;--void:#111827;--deep:#1f2937;--deck:#ffffff;--deck-2:#f8fafc;--plate:#ffffff;--plate-solid:#ffffff;--line:#d9e1ea;--line-strong:#b9c6d4;--text:#101828;--muted:#667085;--faint:#98a2b3;--cyan:#2563eb;--blue:#1d4ed8;--green:#039855;--amber:#dc6803;--red:#d92d20;--shadow:0 18px 50px rgba(16,24,40,0.08)}*{box-sizing:border-box}html{min-height:100%}body{margin:0;min-height:100vh;overflow-x:hidden;background:linear-gradient(rgba(29,78,216,.04) 1px,transparent 0),linear-gradient(90deg,rgba(29,78,216,.04) 1px,transparent 0),linear-gradient(180deg,#f8fafc,#eef2f6);background-size:44px 44px,44px 44px,auto,auto,auto;color:var(--text);font-size:14px;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}body:before{content:"";position:fixed;inset:0;pointer-events:none;background:linear-gradient(115deg,transparent 0 42%,rgba(37,99,235,.05) 42.3%,transparent 43%),linear-gradient(290deg,transparent 0 66%,rgba(16,24,40,.04) 66.3%,transparent 67%);-webkit-mask-image:linear-gradient(180deg,black,transparent 78%);mask-image:linear-gradient(180deg,black,transparent 78%)}a{color:inherit;text-decoration:none}button,input,select{font:inherit}button{white-space:nowrap}.shell{display:grid;grid-template-columns:284px minmax(0,1fr);min-height:100vh}.sidebar{position:-webkit-sticky;position:sticky;top:0;height:100vh;border-right:1px solid var(--line);background:linear-gradient(180deg,#121826,#1f2937),linear-gradient(90deg,rgba(255,255,255,.08),transparent);padding:24px 18px}.brand{border:1px solid rgba(255,255,255,.12);border-radius:12px;background:rgba(255,255,255,.06);padding:16px;box-shadow:inset 0 1px 0 rgba(255,255,255,.04)}.brand-row{display:flex;align-items:center;gap:12px}.brand-mark{position:relative;width:42px;height:42px;border:1px solid rgba(255,255,255,.28);border-radius:10px;background:linear-gradient(135deg,#60a5fa,#2563eb),#2563eb;box-shadow:0 12px 28px rgba(37,99,235,.28)}.brand-mark:after,.brand-mark:before{content:"";position:absolute;inset:8px;border:1px solid rgba(255,255,255,.42);border-radius:6px}.brand-mark:after{inset:14px;border-color:rgba(255,255,255,.62)}.eyebrow{color:var(--cyan);font-size:11px;font-weight:700;letter-spacing:.11em;text-transform:uppercase}.brand h1,.page-title h2{margin:4px 0 0;letter-spacing:0}.brand h1{color:#ffffff;font-size:16px;line-height:1.1}.brand p{margin:14px 0 0;line-height:1.6}.sidebar .muted{color:#cbd5e1}.sidebar .eyebrow{color:#93c5fd}.nav{display:grid;grid-gap:8px;gap:8px;margin-top:22px}.nav a,.nav button{position:relative;width:100%;border:1px solid transparent;border-radius:12px;background:transparent;color:#cbd5e1;cursor:pointer;padding:12px 12px 12px 38px;text-align:left;transition:border-color .16s ease,background .16s ease,color .16s ease,transform .16s ease}.nav a:before,.nav button:before{content:"";position:absolute;left:14px;top:50%;width:8px;height:8px;border-radius:999px;background:rgba(203,213,225,.52);transform:translateY(-50%)}.nav a:hover,.nav button:hover{border-color:rgba(255,255,255,.16);color:#ffffff;background:rgba(255,255,255,.08);transform:translateX(2px)}.nav a:hover:before,.nav button:hover:before{background:var(--cyan);box-shadow:0 0 18px rgba(61,215,255,.65)}.main{position:relative;min-width:0;padding:24px 28px 48px}.topbar{display:flex;align-items:center;justify-content:space-between;gap:16px;border:1px solid var(--line);border-radius:14px;background:rgba(255,255,255,.82);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);padding:12px 14px;margin-bottom:22px}.topbar-left,.topbar-right{display:flex;align-items:center;gap:10px;min-width:0}.topbar-title{color:var(--muted);font-size:13px}.signal{display:inline-flex;align-items:center;gap:8px;border:1px solid rgba(3,152,85,.2);border-radius:999px;background:rgba(46,229,157,.08);color:#027a48;padding:6px 10px;font-size:12px}.signal:before{content:"";width:7px;height:7px;border-radius:999px;background:var(--green);box-shadow:0 0 15px rgba(46,229,157,.85)}.page-title{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;margin-bottom:22px}.page-title h2{font-size:clamp(26px,3vw,38px);line-height:1}.page-title p{margin:8px 0 0;max-width:760px;line-height:1.55}.muted{color:var(--muted)}.faint{color:var(--faint)}.dashboard-grid{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(320px,.85fr);grid-gap:18px;gap:18px;align-items:stretch}.grid{display:grid;grid-gap:16px;gap:16px}.grid.two{grid-template-columns:1fr 1fr}.panel{position:relative;overflow:hidden;border:1px solid var(--line);border-radius:14px;background:linear-gradient(180deg,rgba(255,255,255,.98),rgba(248,250,252,.98)),#ffffff;box-shadow:var(--shadow);padding:16px}.panel:before{content:"";position:absolute;inset:0;pointer-events:none;border-radius:inherit;background:linear-gradient(135deg,rgba(37,99,235,.04),transparent 34%);opacity:1}.panel>*{position:relative;z-index:1}.panel-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:18px}.panel h3{margin:0;font-size:16px}.route-panel{min-height:330px;display:grid;grid-template-columns:minmax(0,1fr) 220px;grid-gap:18px;gap:18px}.command-panel{display:grid;grid-template-columns:minmax(0,1fr) minmax(360px,.9fr);grid-gap:18px;gap:18px;align-items:stretch}.command-panel h3{margin-top:6px;font-size:22px}.command-panel p{max-width:680px;line-height:1.6}.metric-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));grid-gap:12px;gap:12px}.radar{position:relative;min-height:280px;border:1px solid rgba(125,211,252,.18);border-radius:16px;background:radial-gradient(circle at 50% 50%,rgba(61,215,255,.25),transparent 8%),radial-gradient(circle at 50% 50%,rgba(61,215,255,.13),transparent 33%),linear-gradient(180deg,rgba(2,6,23,.15),rgba(2,6,23,.44))}.radar:after,.radar:before{content:"";position:absolute;inset:44px;border:1px solid rgba(125,211,252,.2);border-radius:50%}.radar:after{inset:86px;border-color:rgba(46,229,157,.18)}.radar-line{width:44%;height:1px;background:linear-gradient(90deg,rgba(61,215,255,.9),transparent);transform-origin:left center;transform:rotate(-24deg);box-shadow:0 0 22px rgba(61,215,255,.58)}.radar-core,.radar-line{position:absolute;left:50%;top:50%}.radar-core{display:grid;width:132px;height:132px;place-items:center;border:1px solid rgba(125,211,252,.34);border-radius:50%;background:rgba(3,7,18,.64);transform:translate(-50%,-50%)}.radar-core strong{display:block;font-size:34px;line-height:1;text-align:center}.radar-core span{display:block;margin-top:6px;color:var(--muted);font-size:11px;text-align:center}.node-dot{position:absolute;width:10px;height:10px;border-radius:999px;background:var(--cyan);box-shadow:0 0 18px rgba(61,215,255,.78)}.node-dot.green{background:var(--green);box-shadow:0 0 18px rgba(46,229,157,.78)}.node-dot.amber{background:var(--amber);box-shadow:0 0 18px rgba(247,195,95,.7)}.metric-stack{display:grid;grid-gap:12px;gap:12px}.metric-card{border:1px solid var(--line);border-radius:10px;background:#f8fafc;padding:12px}.metric-card span{color:var(--muted);font-size:12px}.metric-card strong{display:block;margin-top:5px;color:var(--text);font-size:18px}.status{display:inline-flex;align-items:center;gap:7px;border:1px solid rgba(3,152,85,.24);border-radius:999px;color:#027a48;background:#ecfdf3;padding:6px 10px;font-size:12px;font-weight:700}.status:before{content:"";width:6px;height:6px;border-radius:999px;background:currentColor}.status.off{border-color:#d0d5dd;color:var(--muted);background:#f2f4f7}.status.fail{border-color:#fecdca;color:#b42318;background:#fef3f2}.field{display:grid;grid-gap:8px;gap:8px}.field label{color:#344054;font-size:13px;font-weight:650}.input{width:100%;min-height:40px;border:1px solid #d0d5dd;border-radius:10px;outline:none;background:#ffffff;color:var(--text);padding:9px 11px;transition:border-color .16s ease,box-shadow .16s ease,background .16s ease}.input:focus{border-color:#2563eb;background:#ffffff;box-shadow:0 0 0 4px rgba(37,99,235,.1)}.button{min-height:36px;border:1px solid #1d4ed8;border-radius:10px;color:#effcff;background:#2563eb;box-shadow:0 10px 24px rgba(37,99,235,.16);cursor:pointer;padding:8px 12px}.button:hover{border-color:#1e40af;background:#1d4ed8}.button.secondary{border-color:#d0d5dd;color:#344054;background:#ffffff;box-shadow:none}.button.danger{border-color:#fecdca;color:#b42318;background:#fff}.button.danger:hover{border-color:#f97066;background:#fef3f2}.table{display:grid;grid-gap:10px;gap:10px}.row,.table-head{display:grid;grid-template-columns:minmax(180px,1.2fr) 130px 160px 220px;align-items:center;grid-gap:12px;gap:12px}.table-head{padding:0 14px 4px;color:#667085;font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.row{border:1px solid var(--line);border-radius:10px;background:#ffffff;padding:12px}.row strong{display:block;margin-bottom:4px}.source-url{margin-top:10px}.source-url summary{display:inline-flex;width:-moz-fit-content;width:fit-content;cursor:pointer;color:var(--cyan);font-size:12px;font-weight:700}.source-url .code{margin-top:8px}.source-error,.source-meta{margin-top:8px;font-size:12px}.source-error{overflow-wrap:anywhere;color:#b42318;line-height:1.5}.actions,.upload-action{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}.file-button{position:relative;overflow:hidden}.file-button input{position:absolute;inset:0;cursor:pointer;opacity:0}.code{overflow-wrap:anywhere;border:1px solid #d0d5dd;border-radius:10px;background:#f8fafc;color:#175cd3;padding:10px;font-family:SFMono-Regular,Consolas,monospace;font-size:12px;line-height:1.5}.login{display:grid;min-height:100vh;place-items:center;padding:24px}.login-card{width:min(460px,100%)}.login-card h1{margin:8px 0;font-size:36px}.notice{border:1px solid #fedf89;border-radius:14px;background:#fffaeb;color:#93370d;padding:12px 14px}@media (max-width:1100px){.command-panel,.dashboard-grid,.grid.two,.metric-grid,.route-panel{grid-template-columns:1fr}}@media (max-width:900px){.shell{grid-template-columns:1fr}.sidebar{position:static;height:auto;border-right:0;border-bottom:1px solid var(--line)}.main{padding:18px}.page-title,.topbar{flex-direction:column;align-items:stretch}.table-head{display:none}.row{grid-template-columns:1fr}.actions,.upload-action{justify-content:flex-start}}