:root{--ink: #0e1525;--limestone: #f4f2ee;--verdigris: #0e8c7e;--amber: #f2a93b;--raspberry: #d9468f;--danger: #e5484d;--nuisance: #f59e0b;--info: #3b82f6;--normal: #2ea36b;--pillar-listen: var(--verdigris);--pillar-support: var(--amber);--pillar-attract: var(--raspberry);--bg: var(--limestone);--surface: #ffffff;--surface-glass: rgb(255 255 255 / .72);--text: var(--ink);--text-muted: #5b6475;--border: rgb(14 21 37 / .1);--shadow: 0 .0625rem .125rem rgb(14 21 37 / .04), 0 .5rem 1.5rem rgb(14 21 37 / .06);--accent: var(--verdigris);--radius: .875rem;--font-ui: "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;--font-display: "Instrument Serif", Georgia, serif;--font-mono: "Geist Mono", ui-monospace, "SFMono-Regular", monospace;color-scheme:light}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--bg: var(--ink);--surface: #151e31;--surface-glass: rgb(21 30 49 / .72);--text: #eef0f4;--text-muted: #9aa3b5;--border: rgb(255 255 255 / .08);--shadow: 0 .5rem 1.5rem rgb(0 0 0 / .35);--accent: #2bb3a3;color-scheme:dark}}:root[data-theme=dark]{--bg: var(--ink);--surface: #151e31;--surface-glass: rgb(21 30 49 / .72);--text: #eef0f4;--text-muted: #9aa3b5;--border: rgb(255 255 255 / .08);--shadow: 0 .5rem 1.5rem rgb(0 0 0 / .35);--accent: #2bb3a3;color-scheme:dark}html{font-size:clamp(14px,calc(100vw / 120),32px)}*,*:before,*:after{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--text);font-family:var(--font-ui);font-feature-settings:"tnum" 1,"cv11" 1;-webkit-font-smoothing:antialiased}button,input{font:inherit;color:inherit}a{color:var(--accent)}.muted{color:var(--text-muted)}.small{font-size:.75rem}.eyebrow{margin:0 0 .5rem;font-family:var(--font-mono);font-size:.75rem;letter-spacing:.14em;text-transform:uppercase;color:var(--accent)}.display{margin:0;font-family:var(--font-display);font-weight:400;font-size:2.5rem;line-height:1.05;letter-spacing:-.015em}.badge{display:inline-flex;align-items:center;padding:.125rem .5rem;border-radius:999px;border:1px solid var(--border);font-size:.75rem;color:var(--text-muted);white-space:nowrap}.link{font-size:.8125rem}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.375rem;padding:.5rem .875rem;border-radius:.625rem;border:1px solid var(--border);background:var(--surface);cursor:pointer;font-size:.875rem;transition:background .15s,border-color .15s,opacity .15s}.btn:hover{border-color:var(--accent)}.btn:disabled{opacity:.5;cursor:default}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.ghost{background:transparent}.icon{width:1.125rem;height:1.125rem;fill:none;stroke:currentColor;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round}.icon-fill{fill:currentColor;stroke:none}.btn:focus-visible,.segmented button:focus-visible,input:focus-visible,.contract:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.segmented{display:inline-flex;justify-self:start;padding:.1875rem;border-radius:.75rem;background:var(--surface);border:1px solid var(--border)}.segmented button{border:0;background:transparent;padding:.375rem .875rem;border-radius:.5625rem;cursor:pointer;font-size:.8125rem;color:var(--text-muted)}.segmented button.on{background:var(--accent);color:#fff}.brand{display:flex;align-items:baseline;gap:.5rem}.brand-mark{align-self:center;width:1.375rem;height:1.375rem;border-radius:50%;border:.28rem solid var(--accent);background:radial-gradient(circle,var(--amber) 0 .2rem,transparent .22rem)}.brand-word{font-family:var(--font-display);font-size:1.625rem;letter-spacing:-.01em}.brand-by{font-size:.6875rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.12em}.page{min-height:100%;display:grid;grid-template-rows:auto 1fr}.topbar{position:sticky;top:0;z-index:10;display:flex;align-items:center;gap:1.5rem;padding:.875rem 2rem;background:var(--surface-glass);-webkit-backdrop-filter:blur(.75rem);backdrop-filter:blur(.75rem);border-bottom:1px solid var(--border)}.topbar-center{flex:1;min-width:0}.topbar-actions{display:flex;gap:.5rem}.context{display:flex;align-items:center;gap:.75rem}.context-label{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.center{display:grid;place-items:center;padding:2rem}.panel{width:min(44rem,100%);padding:2rem;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);display:grid;gap:1rem}.panel.narrow{width:min(32rem,100%)}.panel p{margin:0;line-height:1.6}.pulse{animation:pulse 1.4s ease-in-out infinite}@keyframes pulse{50%{opacity:.4}}.login{min-height:100%;display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr)}.login-side{display:flex;flex-direction:column;justify-content:space-between;padding:2.5rem 3rem;background:var(--ink);color:#eef0f4;--accent: #2bb3a3;--text-muted: #9aa3b5}.login-side h1{margin:0;font-family:var(--font-display);font-weight:400;font-size:4rem;line-height:1.02;letter-spacing:-.02em}.login-side h1 em{color:var(--accent)}.pillar-list{display:flex;gap:1.5rem;margin:0;padding:0;list-style:none;font-family:var(--font-mono);font-size:.8125rem;letter-spacing:.08em;text-transform:uppercase}.pillar-list li:before{content:"";display:inline-block;width:.5rem;height:.5rem;margin-right:.5rem;border-radius:50%;background:var(--c)}.p-listen{--c: var(--pillar-listen)}.p-support{--c: var(--pillar-support)}.p-attract{--c: var(--pillar-attract)}.login-main{display:grid;place-items:center;padding:2rem}.login-card{width:min(26rem,100%);display:grid;gap:1.25rem}.login-card h2{margin:0;font-family:var(--font-display);font-weight:400;font-size:2.25rem}.login-card>p{margin:-.75rem 0 0}.form{display:grid;gap:1rem}.field{display:grid;gap:.375rem;font-size:.8125rem;color:var(--text-muted)}.field input{padding:.75rem .875rem;border-radius:.625rem;border:1px solid var(--border);background:var(--surface);font-size:1rem}.form-actions{display:flex;gap:.5rem;flex-wrap:wrap}.notice{margin:0;padding:.875rem 1rem;border-radius:.625rem;background:color-mix(in srgb,var(--accent) 12%,transparent);line-height:1.5}.error{margin:0;padding:.75rem 1rem;border-radius:.625rem;background:color-mix(in srgb,var(--danger) 12%,transparent);color:var(--danger);font-size:.875rem}.scan{position:relative;border-radius:var(--radius);overflow:hidden;background:#000;aspect-ratio:4 / 3}.scan-video{width:100%;height:100%;object-fit:cover}.scan-hint{position:absolute;inset:auto 0 0;margin:0;padding:.5rem;text-align:center;color:#fff;font-size:.8125rem}.contract-list{display:grid;gap:.5rem;margin:0;padding:0;list-style:none}.contract{display:flex;justify-content:space-between;align-items:center;gap:1rem;padding:1rem 1.125rem;border-radius:.75rem;border:1px solid var(--border);color:var(--text);text-decoration:none;transition:border-color .15s}.contract:hover{border-color:var(--accent)}.contract-label{font-weight:600}.dashboard{padding:1.75rem 2rem 2.5rem;display:grid;gap:1.25rem;align-content:start}.dash-head{display:flex;justify-content:space-between;align-items:end;gap:1rem;flex-wrap:wrap}.dash-controls{display:flex;align-items:center;gap:1rem}.live{display:inline-flex;align-items:center;gap:.4rem;font-family:var(--font-mono);font-size:.75rem;color:var(--text-muted)}.live-dot{width:.5rem;height:.5rem;border-radius:50%;background:var(--normal);box-shadow:0 0 color-mix(in srgb,var(--normal) 60%,transparent);animation:ping 2.4s ease-out infinite}.live.busy .live-dot{background:var(--amber)}@keyframes ping{70%{box-shadow:0 0 0 .45rem transparent}to{box-shadow:0 0 0 0 transparent}}.grid{display:grid;gap:1rem}.tiles{grid-template-columns:repeat(4,minmax(0,1fr))}.tiles.skeleton{min-height:9rem;border-radius:var(--radius);background:var(--surface);opacity:.6}.lower{grid-template-columns:minmax(0,1fr) minmax(0,1.25fr)}.tile{position:relative;display:grid;gap:.75rem;align-content:start;padding:1.25rem 1.375rem;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}.tile-head{display:flex;justify-content:space-between;align-items:baseline;gap:.75rem}.tile-head h3{margin:0;font-size:.8125rem;font-weight:600;letter-spacing:.02em;color:var(--text-muted)}.kpi:before{content:"";position:absolute;inset:0 auto 0 0;width:.1875rem;background:var(--tone)}.tone-accent{--tone: var(--accent)}.tone-amber{--tone: var(--amber)}.tone-danger{--tone: var(--danger)}.tone-raspberry{--tone: var(--raspberry)}.kpi-value{margin:0;font-family:var(--font-mono);font-size:2.75rem;font-weight:500;line-height:1;letter-spacing:-.02em}.kpi-sub{margin:0;font-size:.8125rem;color:var(--text-muted)}.kpi-sub b{color:var(--text);font-weight:600}.delta{font-family:var(--font-mono);font-size:.75rem;padding:.0625rem .4375rem;border-radius:999px;background:color-mix(in srgb,var(--text-muted) 14%,transparent);color:var(--text-muted)}.delta-up{background:color-mix(in srgb,var(--tone) 16%,transparent);color:var(--tone)}.spark{width:100%;height:2.25rem;color:var(--tone)}.spark-area{fill:currentColor;opacity:.12}.spark-line{fill:none;stroke:currentColor;stroke-width:1.75;stroke-linejoin:round}.bytype{display:grid;gap:.625rem;margin:0;padding:0;list-style:none}.bytype li{display:grid;grid-template-columns:6.5rem 5.5rem minmax(0,1fr) 3rem;align-items:center;gap:.75rem;font-size:.875rem}.lvl{font-size:.75rem;font-weight:600}.lvl-danger{color:var(--danger)}.lvl-nuisance{color:var(--nuisance)}.lvl-info{color:var(--info)}.bar{height:.5rem;border-radius:999px;background:color-mix(in srgb,var(--text-muted) 14%,transparent);overflow:hidden}.bar-fill{display:block;height:100%;border-radius:inherit}.lvl-bg-danger{background:var(--danger)}.lvl-bg-nuisance{background:var(--nuisance)}.lvl-bg-info{background:var(--info)}.num{text-align:right;font-family:var(--font-mono)}.map-tile{min-height:18rem}.perimeter{width:100%;max-height:24rem}.perimeter-grid{fill:none;stroke:var(--border);stroke-width:1}.perimeter-shape{fill:color-mix(in srgb,var(--accent) 14%,transparent);stroke:var(--accent);stroke-width:2}@media(max-width:1100px){.tiles{grid-template-columns:repeat(2,minmax(0,1fr))}.lower,.login{grid-template-columns:1fr}.login-side h1{font-size:2.75rem}}@media(max-width:640px){html{font-size:15px}.topbar,.dashboard{padding-left:1rem;padding-right:1rem}.tiles{grid-template-columns:1fr}.bytype li{grid-template-columns:5.5rem 4.5rem minmax(0,1fr) 2.5rem}}
