: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;--touch: 44px;--safe-top: env(safe-area-inset-top, 0px);--safe-right: env(safe-area-inset-right, 0px);--safe-bottom: env(safe-area-inset-bottom, 0px);--safe-left: env(safe-area-inset-left, 0px);--topbar-h: 48px;--sidebar-w: 240px;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%;min-height:100dvh}html{-webkit-text-size-adjust:100%;text-size-adjust:100%}html.nav-lock,html.nav-lock body{overflow:hidden}body{margin:0;font-family:var(--font-body);font-size:16px;line-height:1.45;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;min-height:100dvh;display:grid;place-items:center;padding:max(1rem,var(--safe-top)) max(1rem,var(--safe-right)) max(1rem,var(--safe-bottom)) max(1rem,var(--safe-left));animation:fade-in .5s ease both}.login-panel{width:min(420px,100%);padding:1.5rem;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,.router-form select,.select{min-height:var(--touch);padding:.7rem .8rem;border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--ink);font-size:16px}.login-form button,.sidebar .ghost,.theme-toggle,.btn-primary,.seg-btn,.tab,.nav-toggle{cursor:pointer}.login-form button,.btn-primary{margin-top:.4rem;min-height:var(--touch);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,.touch-btn{border:1px solid var(--line);background:transparent;color:var(--ink);border-radius:999px;min-height:var(--touch);padding:.55rem .95rem;display:inline-flex;align-items:center;justify-content:center}.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:var(--sidebar-w) 1fr;grid-template-rows:auto 1fr;min-height:100vh;min-height:100dvh}.topbar,.nav-backdrop{display:none}.mobile-only{display:none!important}.sidebar{grid-column:1;grid-row:1 / -1;display:flex;flex-direction:column;gap:.75rem;padding:max(1rem,var(--safe-top)) .85rem max(1rem,var(--safe-bottom)) max(.85rem,var(--safe-left));border-right:1px solid var(--line);background:color-mix(in srgb,var(--surface) 92%,transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:30}.sidebar-top,.sidebar-drawer-head{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem}.brand-mark{display:block;font-size:1.45rem;font-weight:700;color:var(--brand-ink);line-height:1.1}.brand-sub{display:block;font-size:.72rem;color:var(--muted);margin-top:.1rem}.nav{display:grid;gap:.1rem;flex:1;align-content:start}.nav-link{min-height:var(--touch);display:flex;align-items:center;padding:.5rem .7rem;border-radius:8px;color:var(--muted);font-size:.92rem;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;min-height:var(--touch);align-items:center}.icon-btn{min-width:var(--touch);min-height:var(--touch);padding:.4rem .7rem;border:1px solid var(--line);border-radius:12px;background:color-mix(in srgb,var(--surface) 90%,transparent);color:var(--ink);display:inline-flex;align-items:center;justify-content:center;font-size:.85rem;cursor:pointer}.burger{display:grid;gap:5px;width:18px}.burger span{display:block;height:2px;border-radius:2px;background:var(--ink)}.muted{color:var(--muted)}.small{font-size:.8rem}.block{display:block}.main{grid-column:2;grid-row:1 / -1;padding:1.1rem clamp(.85rem,2.5vw,1.6rem);padding-bottom:max(1.1rem,var(--safe-bottom));min-width:0;overflow-x:hidden}.page-head h1{margin:0;font-size:clamp(1.25rem,2.8vw,1.7rem)}.page-head p{margin:.25rem 0 .85rem;color:var(--muted);font-size:.88rem}.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:.55rem;grid-template-columns:repeat(auto-fit,minmax(min(100%,140px),1fr));margin-bottom:.85rem}.stat-card{padding:.65rem .75rem;border:1px solid var(--line);border-radius:10px;background:color-mix(in srgb,var(--surface) 94%,transparent)}.stat-label{margin:0;color:var(--muted);font-size:.72rem}.stat-value{margin:.2rem 0 0;font-family:var(--font-display);font-size:1.1rem;font-weight:600;letter-spacing:-.02em}.stat-hint{margin:.2rem 0 0;color:var(--muted);font-size:.68rem;line-height:1.3}.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);min-height:var(--touch);padding:.55rem .95rem}.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(min(100%,260px),1fr))}.stack{display:grid;gap:1rem}.panel{padding:.85rem .95rem;border:1px solid var(--line);border-radius:12px;background:color-mix(in srgb,var(--surface) 94%,transparent);margin-bottom:.75rem}.panel h2{margin:0 0 .55rem;font-size:.98rem}.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-x:auto;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain;border:1px solid var(--line);border-radius:var(--radius);max-width:100%}table{width:100%;min-width:36rem;border-collapse:collapse;background:color-mix(in srgb,var(--surface) 94%,transparent)}th,td{text-align:left;padding:.85rem .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;min-height:var(--touch);padding:.55rem .95rem;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{min-height:var(--touch);padding:.45rem .7rem;border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--ink);font-size:16px}.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}.tool-row{display:flex;flex-wrap:wrap;gap:.75rem;align-items:center;margin:.75rem 0}.tool-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(11rem,1fr));gap:.5rem;margin:.75rem 0}.tool-btn{text-align:left;justify-content:flex-start}.tool-out{margin-top:.75rem}.pre-out{margin:.4rem 0 0;padding:.75rem .9rem;max-height:18rem;overflow:auto;border:1px solid var(--line);border-radius:10px;background:color-mix(in srgb,var(--bg-accent) 55%,transparent);font-size:.82rem;white-space:pre-wrap;word-break:break-word}.pre-err{border-color:color-mix(in srgb,var(--danger) 40%,var(--line))}.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}@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}}@keyframes drawer-in{0%{transform:translate(-104%)}to{transform:none}}.nav-backdrop{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;padding:0;margin:0;background:transparent;display:none}.burger.is-open span:nth-child(1){transform:translateY(7px) rotate(45deg)}.burger.is-open span:nth-child(2){opacity:0}.burger.is-open span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}.burger span{transition:transform .18s ease,opacity .18s ease}@media(max-width:960px){.shell{grid-template-columns:1fr;grid-template-rows:auto 1fr}.topbar{display:flex;align-items:center;gap:.45rem;grid-column:1;grid-row:1;position:sticky;top:0;z-index:60;min-height:calc(var(--topbar-h) + var(--safe-top));padding:max(.3rem,var(--safe-top)) max(.55rem,var(--safe-right)) .3rem max(.55rem,var(--safe-left));border-bottom:1px solid var(--line);background:color-mix(in srgb,var(--surface) 96%,transparent);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.topbar-brand{flex:1;min-width:0}.topbar .brand-mark{font-size:1.05rem}.topbar-actions{display:flex;align-items:center;gap:.3rem}.topbar-user{max-width:5.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;color:var(--muted)}.topbar .icon-btn{min-width:var(--touch);min-height:var(--touch);padding:.25rem .5rem;font-size:.78rem;border-radius:10px}.nav-backdrop{display:block;position:fixed;top:0;right:0;bottom:0;left:0;z-index:70;background:#0a100c6b;opacity:0;pointer-events:none;transition:opacity .18s ease;cursor:pointer}.shell.nav-open .nav-backdrop{opacity:1;pointer-events:auto}.sidebar{position:fixed;top:0;left:0;bottom:0;width:min(17.5rem,78vw);max-width:17.5rem;grid-column:unset;grid-row:unset;border-right:1px solid var(--line);border-bottom:0;transform:translate3d(-105%,0,0);transition:transform .2s ease;box-shadow:var(--shadow);overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:80;padding:max(.75rem,var(--safe-top)) .7rem max(.75rem,var(--safe-bottom)) max(.7rem,var(--safe-left));gap:.55rem;visibility:hidden;pointer-events:none}.shell.nav-open .sidebar{transform:translateZ(0);visibility:visible;pointer-events:auto}.desktop-only{display:none!important}.mobile-only{display:flex!important}.sidebar-drawer-head .brand-mark{font-size:1.15rem}.nav-link{font-size:.88rem;padding:.45rem .65rem}.main{grid-column:1;grid-row:2;padding:.7rem max(.65rem,var(--safe-right)) max(.9rem,var(--safe-bottom)) max(.65rem,var(--safe-left))}.page-head h1{font-size:clamp(1.15rem,4.8vw,1.4rem)}.page-head p{margin-bottom:.65rem;font-size:.8rem}.row-head{gap:.5rem}.head-meta{justify-items:start;width:100%}.stats-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:.45rem}.stat-card{padding:.55rem .6rem}.stat-value{font-size:.98rem;word-break:break-word}.panel{padding:.7rem .75rem;margin-bottom:.55rem}.panel h2{font-size:.9rem;margin-bottom:.4rem}.toolbar{align-items:stretch;margin:.25rem 0 .55rem;gap:.45rem}.toolbar .select,.toolbar .seg{width:100%}.seg{display:grid;grid-template-columns:1fr 1fr;width:100%}.seg-btn{min-height:var(--touch);padding:.4rem .6rem;font-size:.85rem}.kv div,.kv.wide div{grid-template-columns:1fr;gap:.15rem}.router-form,.form-row-2{grid-template-columns:1fr;gap:.65rem}.tabs{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:.15rem;gap:.25rem;margin-bottom:.65rem}.tab{flex:0 0 auto;min-height:var(--touch);padding:.4rem .7rem;font-size:.82rem}.chart-legend{flex-wrap:wrap;font-size:.75rem}.traffic-svg{min-height:150px}.table-wrap{margin-inline:0;border-radius:10px}table{min-width:30rem}th,td{padding:.55rem .65rem;font-size:.84rem}.table-cards{border:0;background:transparent;overflow:visible}.table-cards table,.table-cards thead,.table-cards tbody,.table-cards th,.table-cards td,.table-cards tr{display:block;width:100%;min-width:0}.table-cards thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}.table-cards tr{margin-bottom:.5rem;padding:.6rem .7rem;border:1px solid var(--line);border-radius:10px;background:color-mix(in srgb,var(--surface) 94%,transparent)}.table-cards td{display:grid;grid-template-columns:minmax(5.5rem,36%) 1fr;gap:.35rem;padding:.3rem 0;border-bottom:1px solid color-mix(in srgb,var(--line) 70%,transparent);font-size:.82rem}.table-cards td:last-child{border-bottom:0}.table-cards td:before{content:attr(data-label);color:var(--muted);font-weight:500;font-size:.75rem}.actions-cell,.form-actions{flex-wrap:wrap;gap:.35rem}.actions-cell .ghost,.form-actions .ghost,.form-actions .btn-primary{flex:1 1 auto;min-width:6.5rem;min-height:var(--touch)}.btn-primary,.ghost,.touch-btn{min-height:var(--touch);font-size:.88rem}.map-embed{min-height:190px}.cell-clip{max-width:100%;white-space:normal}.tool-grid{grid-template-columns:1fr}.login-scene{padding:max(.75rem,var(--safe-top)) max(.75rem,var(--safe-right)) max(.75rem,var(--safe-bottom)) max(.75rem,var(--safe-left))}.login-panel{padding:1.15rem}.login-brand h1{font-size:2rem}.login-brand p{margin-bottom:1rem;font-size:.88rem}}@media(max-width:520px){.stats-grid{grid-template-columns:1fr 1fr}.topbar-user{display:none}}@media(min-width:961px){.topbar,.nav-backdrop,.mobile-only{display:none!important}.sidebar{visibility:visible;pointer-events:auto;transform:none}}
