:root{--font-display: "DM Sans", "Segoe UI", sans-serif;--font-body: "IBM Plex Sans", "Segoe UI", sans-serif;--bg: #eef3f0;--bg-accent: #d7e4dc;--surface: #f7faf8;--ink: #142019;--muted: #5a6b61;--line: #c5d4cb;--brand: #1f6b4a;--brand-ink: #0d3b28;--ok: #1f6b4a;--warn: #9a6b12;--danger: #9b2c2c;--shadow: 0 18px 50px rgba(20, 32, 25, .08);--radius: 14px;color-scheme:light}html[data-theme=dark]{--bg: #0f1612;--bg-accent: #1a2820;--surface: #162019;--ink: #e7f0ea;--muted: #9bb0a4;--line: #2a3b32;--brand: #4caf82;--brand-ink: #b7efd0;--ok: #4caf82;--warn: #e0b35a;--danger: #f2a0a0;--shadow: 0 18px 50px rgba(0, 0, 0, .35);color-scheme:dark}*{box-sizing:border-box}html,body,#root{min-height:100%}body{margin:0;font-family:var(--font-body);color:var(--ink);background:radial-gradient(1200px 600px at 10% -10%,var(--bg-accent),transparent 55%),linear-gradient(160deg,var(--bg),var(--bg-accent))}h1,h2,.brand-mark{font-family:var(--font-display);letter-spacing:-.03em}a{color:inherit;text-decoration:none}button,input{font:inherit}.boot{min-height:100vh;display:grid;place-items:center;color:var(--muted)}.login-scene{min-height:100vh;display:grid;place-items:center;padding:2rem;animation:fade-in .5s ease both}.login-panel{width:min(420px,100%);padding:2rem;background:color-mix(in srgb,var(--surface) 92%,transparent);border:1px solid var(--line);border-radius:calc(var(--radius) + 4px);box-shadow:var(--shadow);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.login-brand h1{margin:0;font-size:clamp(2.4rem,6vw,3.2rem);color:var(--brand-ink)}.login-brand p{margin:.25rem 0 1.5rem;color:var(--muted)}.login-form{display:grid;gap:.9rem}.login-form label,.router-form label{display:grid;gap:.35rem;font-size:.92rem}.login-form input,.router-form input{padding:.7rem .8rem;border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--ink)}.login-form button,.sidebar .ghost,.theme-toggle,.btn-primary,.seg-btn,.tab,.nav-toggle{cursor:pointer}.login-form button,.btn-primary{margin-top:.4rem;padding:.7rem 1rem;border:0;border-radius:10px;background:var(--brand);color:#fff;font-weight:600;transition:transform .18s ease,opacity .18s ease}.login-form button:hover,.btn-primary:hover{transform:translateY(-1px)}.login-form button:disabled,.btn-primary:disabled{opacity:.7}.theme-toggle{margin-top:1rem}.ghost{border:1px solid var(--line);background:transparent;color:var(--ink);border-radius:999px;padding:.4rem .8rem}.form-error{color:var(--danger);margin:0;font-size:.9rem}.form-ok{color:var(--ok);margin:0 0 1rem;font-size:.92rem}.shell{display:grid;grid-template-columns:240px 1fr;min-height:100vh}.sidebar{display:flex;flex-direction:column;gap:1rem;padding:1.25rem 1rem;border-right:1px solid var(--line);background:color-mix(in srgb,var(--surface) 88%,transparent);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);animation:slide-in .35s ease both}.sidebar-top{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem}.nav-toggle{display:none}.brand-mark{display:block;font-size:1.7rem;font-weight:700;color:var(--brand-ink)}.brand-sub{display:block;font-size:.78rem;color:var(--muted);margin-top:.15rem}.nav{display:grid;gap:.25rem;flex:1}.nav-link{padding:.55rem .75rem;border-radius:10px;color:var(--muted);transition:background .15s ease,color .15s ease}.nav-link:hover,.nav-link.active{background:color-mix(in srgb,var(--brand) 16%,transparent);color:var(--ink)}.sidebar-foot{display:grid;gap:.55rem}.user-chip{display:flex;justify-content:space-between;gap:.5rem;font-size:.85rem}.muted{color:var(--muted)}.small{font-size:.8rem}.block{display:block}.main{padding:1.5rem clamp(1rem,3vw,2rem);animation:fade-in .45s ease both}.page-head h1{margin:0;font-size:clamp(1.6rem,3vw,2rem)}.page-head p{margin:.35rem 0 1.25rem;color:var(--muted)}.row-head{display:flex;justify-content:space-between;gap:1rem;align-items:flex-start;flex-wrap:wrap}.head-meta{display:grid;gap:.35rem;justify-items:end}.pill{display:inline-flex;align-items:center;padding:.35rem .7rem;border-radius:999px;border:1px solid var(--line);background:color-mix(in srgb,var(--surface) 90%,transparent);font-size:.82rem}.stats-grid{display:grid;gap:.9rem;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));margin-bottom:1.1rem}.stat-card{padding:.95rem 1rem;border:1px solid var(--line);border-radius:var(--radius);background:color-mix(in srgb,var(--surface) 94%,transparent);animation:fade-in .4s ease both}.stat-label{margin:0;color:var(--muted);font-size:.82rem}.stat-value{margin:.35rem 0 0;font-family:var(--font-display);font-size:1.35rem;font-weight:600;letter-spacing:-.02em}.stat-hint{margin:.35rem 0 0;color:var(--muted);font-size:.75rem;line-height:1.35}.tone-ok .stat-value{color:var(--ok)}.tone-warn .stat-value{color:var(--warn)}.tone-bad .stat-value{color:var(--danger)}.toolbar{display:flex;justify-content:space-between;align-items:center;gap:.75rem;margin:.4rem 0 .75rem;flex-wrap:wrap}.seg{display:inline-flex;border:1px solid var(--line);border-radius:999px;overflow:hidden}.seg-btn{border:0;background:transparent;color:var(--muted);padding:.4rem .85rem}.seg-btn.active{background:color-mix(in srgb,var(--brand) 18%,transparent);color:var(--ink)}.grid{display:grid;gap:1rem;grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}.stack{display:grid;gap:1rem}.panel{padding:1.1rem 1.2rem;border:1px solid var(--line);border-radius:var(--radius);background:color-mix(in srgb,var(--surface) 94%,transparent);margin-bottom:1rem}.panel h2{margin:0 0 .75rem;font-size:1.05rem}.panel-head{display:flex;justify-content:space-between;align-items:center;gap:1rem;margin-bottom:.75rem}.panel-head h2{margin:0}.chart-panel{overflow:hidden}.chart-head{display:flex;justify-content:space-between;gap:1rem;align-items:flex-start;flex-wrap:wrap}.chart-sub{margin:.25rem 0 0;font-size:.85rem}.chart-legend{display:flex;gap:.75rem;font-size:.82rem}.leg:before{content:"";display:inline-block;width:.65rem;height:.65rem;border-radius:2px;margin-right:.35rem;vertical-align:middle}.leg-rx:before{background:var(--brand)}.leg-tx:before{background:color-mix(in srgb,var(--warn) 80%,var(--brand))}.traffic-svg{width:100%;height:auto;margin-top:.5rem}.chart-axis{stroke:var(--line);stroke-width:1}.chart-tick{fill:var(--muted);font-size:10px}.chart-line{stroke-width:2;stroke-linejoin:round;stroke-linecap:round}.chart-line.rx{stroke:var(--brand)}.chart-line.tx{stroke:color-mix(in srgb,var(--warn) 80%,var(--brand))}.kv{display:grid;gap:.55rem;margin:0}.kv.wide div,.kv div{display:grid;grid-template-columns:9.5rem 1fr;gap:.5rem}.kv dt{color:var(--muted)}.kv dd{margin:0;word-break:break-word}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.86rem}.empty,.placeholder{color:var(--muted)}.table-wrap{overflow:auto;border:1px solid var(--line);border-radius:var(--radius)}table{width:100%;border-collapse:collapse;background:color-mix(in srgb,var(--surface) 94%,transparent)}th,td{text-align:left;padding:.75rem .9rem;border-bottom:1px solid var(--line);font-size:.92rem;vertical-align:top}th{color:var(--muted);font-weight:500}.text-link{color:var(--brand-ink);text-decoration:underline;text-underline-offset:2px}.badge{display:inline-flex;align-items:center;padding:.2rem .55rem;border-radius:999px;border:1px solid var(--line);font-size:.78rem;white-space:nowrap}.badge-ok{color:var(--ok);border-color:color-mix(in srgb,var(--ok) 40%,var(--line));background:color-mix(in srgb,var(--ok) 12%,transparent)}.badge-warn{color:var(--warn);border-color:color-mix(in srgb,var(--warn) 40%,var(--line));background:color-mix(in srgb,var(--warn) 12%,transparent)}.badge-bad{color:var(--danger);border-color:color-mix(in srgb,var(--danger) 40%,var(--line));background:color-mix(in srgb,var(--danger) 12%,transparent)}.tabs{display:flex;gap:.35rem;flex-wrap:wrap;margin-bottom:1rem}.tab{border:1px solid var(--line);background:transparent;color:var(--muted);border-radius:999px;padding:.4rem .8rem;display:inline-flex;align-items:center;gap:.35rem}.tab.active{color:var(--ink);background:color-mix(in srgb,var(--brand) 16%,transparent)}.tab-stub{font-size:.68rem;opacity:.7;text-transform:uppercase}.crumb{margin:0 0 .25rem;font-size:.85rem}.router-form{display:grid;gap:.85rem;grid-template-columns:repeat(2,minmax(0,1fr))}.router-form .full{grid-column:1 / -1}.form-actions{display:flex;gap:.75rem}.select{padding:.45rem .7rem;border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--ink)}.check-row{display:flex!important;align-items:center;gap:.55rem;grid-template-columns:none!important}.actions-cell{display:flex;flex-wrap:wrap;gap:.35rem}.banner-warn,.sidebar-warn{margin:0 0 1rem;padding:.7rem .9rem;border-radius:10px;border:1px solid color-mix(in srgb,var(--warn) 45%,var(--line));background:color-mix(in srgb,var(--warn) 14%,transparent);color:var(--ink);font-size:.9rem}.sidebar-warn{margin:0;font-size:.78rem}.plain-list{margin:0;padding-left:1.1rem;display:grid;gap:.35rem}.map-embed{width:100%;min-height:280px;border:1px solid var(--line);border-radius:calc(var(--radius) - 4px);margin-top:.75rem;background:color-mix(in srgb,var(--bg-accent) 50%,transparent)}.map-card{animation:fade-in .35s ease both}.inline-label{display:inline-flex;align-items:center;gap:.4rem;font-size:.85rem;color:var(--muted)}.input-sm{width:4.5rem;padding:.25rem .4rem;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--ink)}.cell-clip{max-width:28rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{white-space:nowrap;display:flex;gap:.35rem}.check-row{display:flex!important;flex-direction:row!important;align-items:center;gap:.55rem}.form-row-2{display:grid;grid-template-columns:1fr 1fr;gap:.75rem}@media(max-width:860px){.form-row-2{grid-template-columns:1fr}.cell-clip{max-width:12rem}}@keyframes fade-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}@keyframes slide-in{0%{opacity:0;transform:translate(-8px)}to{opacity:1;transform:none}}@media(max-width:860px){.shell{grid-template-columns:1fr}.sidebar{border-right:0;border-bottom:1px solid var(--line)}.nav-toggle{display:inline-flex}.nav,.sidebar-foot{display:none}.shell.nav-open .nav{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.shell.nav-open .sidebar-foot{display:grid}.kv div,.kv.wide div,.router-form{grid-template-columns:1fr}.head-meta{justify-items:start}}
