:root{--bg:#f6f2e9;--surface:#fff;--surface2:#efeadd;--border:#e3ddcc;--border-soft:#0f3d2a1a;--text:#17352a;--muted:#6f7d73;--brand:#0f3d2a;--brand-2:#17503a;--accent:#1f7a4b;--good:#2e8b57;--warn:#c98a00;--danger:#c0392b;--vendor:#b8763e;--radius:12px;--shadow:0 1px 2px #0f3d2a0f, 0 2px 10px #0f3d2a0d;font-variant-numeric:tabular-nums;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,system-ui,sans-serif}*{box-sizing:border-box}body{background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;margin:0}h1,h2,h3{margin:0}.app{min-height:100vh}.loading{text-align:center;color:var(--muted);padding:4rem;font-size:1.1rem}.loading.err{color:var(--danger)}.topbar{z-index:20;background:var(--brand);color:#fff;align-items:center;gap:1rem;padding:.8rem 1.5rem;display:flex;position:sticky;top:0;box-shadow:0 1px 8px #0f3d2a2e}.brand{letter-spacing:.02em;color:#fff;font-size:1.1rem;font-weight:800}.brand span{color:#a7d9bf;letter-spacing:0;font-weight:500}.spacer{flex:1}.badge{color:#d8f3e3;background:#ffffff1f;border:1px solid #ffffff38;border-radius:999px;align-items:center;gap:.4rem;padding:.25rem .6rem;font-size:.78rem;display:inline-flex}.live-dot{background:#7ee0a3;border-radius:50%;width:8px;height:8px;animation:1.8s infinite pulse}@keyframes pulse{0%{box-shadow:0 0 #7ee0a399}70%{box-shadow:0 0 0 6px #7ee0a300}to{box-shadow:0 0 #7ee0a300}}.scope-controls{gap:.5rem;display:flex}select{color:var(--text);border:1px solid var(--border);cursor:pointer;background:#fff;border-radius:8px;padding:.4rem .6rem;font-size:.85rem}.topbar select{color:#fff;background:#ffffff1f;border-color:#ffffff40}.topbar select option{color:var(--text)}.seg{border:1px solid var(--border);border-radius:8px;display:inline-flex;overflow:hidden}.seg-btn{color:var(--muted);border:0;border-right:1px solid var(--border);cursor:pointer;background:#fff;padding:.4rem .7rem;font-size:.82rem;font-weight:500}.seg-btn:last-child{border-right:0}.seg-btn:hover{background:var(--panel,#f4f6f4)}.seg-btn.active{background:var(--brand);color:#fff}.tabs{background:var(--surface);border-bottom:1px solid var(--border);gap:.25rem;padding:0 1.5rem;display:flex;overflow-x:auto}.tabs button{color:var(--muted);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-bottom:2px solid #0000;padding:.8rem .9rem;font-size:.9rem;transition:color .15s,border-color .15s}.tabs button:hover{color:var(--brand)}.tabs button.active{color:var(--brand);border-bottom-color:var(--accent);font-weight:700}.scope-bar{color:var(--muted);background:var(--surface2);padding:.6rem 1.5rem;font-size:.82rem}.view{flex-direction:column;gap:1.25rem;max-width:1400px;margin:0 auto;padding:1.5rem;display:flex}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:1.1rem 1.25rem}.card-title{color:var(--brand);margin-bottom:.9rem;font-size:.9rem;font-weight:700}.kpi-grid{grid-template-columns:repeat(auto-fill,minmax(215px,1fr));gap:1rem;display:grid}.kpi{border-top:3px solid var(--accent);transition:transform .15s,box-shadow .15s}.kpi:hover{transform:translateY(-2px);box-shadow:0 4px 16px #0f3d2a1a}.kpi-title{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;font-size:.78rem}.kpi-value{letter-spacing:-.02em;color:var(--brand);margin:.3rem 0 .15rem;font-size:1.85rem;font-weight:800}.kpi-sub{color:var(--muted);font-size:.78rem}.tone-good{border-top-color:var(--good)}.tone-good .kpi-value{color:var(--good)}.tone-warn{border-top-color:var(--warn)}.tone-warn .kpi-value{color:var(--warn)}.tone-danger{border-top-color:var(--danger)}.tone-danger .kpi-value{color:var(--danger)}.tone-vendor{border-top-color:var(--vendor)}.tone-vendor .kpi-value{color:var(--vendor)}.tone-accent{border-top-color:var(--accent)}.tone-accent .kpi-value{color:var(--accent)}.chart-grid{grid-template-columns:1fr 1fr;gap:1.25rem;display:grid}.chart-wrap{height:300px;position:relative}.chart-wide{grid-column:1/-1}@media (width<=900px){.chart-grid{grid-template-columns:1fr}}.table-wrap{overflow-x:auto}table{border-collapse:collapse;width:100%;font-size:.88rem}th,td{text-align:left;border-bottom:1px solid var(--border-soft);padding:.55rem .7rem}th{color:var(--muted);text-transform:uppercase;letter-spacing:.03em;background:var(--surface);font-size:.76rem;font-weight:700;position:sticky;top:0}td.r,th.r{text-align:right}tbody tr:hover{background:#0f3d2a08}th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}th.sortable:hover{color:var(--brand)}.sort-ind{color:var(--muted);font-size:.7rem}.pill{border-radius:999px;padding:.15rem .55rem;font-size:.78rem;font-weight:700;display:inline-block}.pill-good{color:var(--good);background:#2e8b5724}.pill-warn{color:#a06e00;background:#c98a0029}.pill-danger{color:var(--danger);background:#c0392b1f}.pill-vendor{color:var(--vendor);background:#b8763e26}.pill-neutral{color:var(--muted);background:#6f7d7324}.callout{border-radius:var(--radius);border:1px solid var(--border);background:linear-gradient(135deg, #eef5ef, var(--surface));border-left:4px solid var(--accent);box-shadow:var(--shadow);padding:1.1rem 1.25rem}.callout.tone-danger{border-left-color:var(--danger);background:linear-gradient(135deg, #faf0ee, var(--surface))}.callout.tone-good{border-left-color:var(--good)}.callout.tone-vendor{border-left-color:var(--vendor);background:linear-gradient(135deg, #f7f0e8, var(--surface))}.callout-label{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;font-size:.8rem}.callout-value{letter-spacing:-.02em;color:var(--brand);margin:.25rem 0;font-size:1.6rem;font-weight:800}.callout-note{color:var(--muted);font-size:.85rem}.banner{border:1px solid;border-radius:10px;padding:.7rem 1rem;font-size:.88rem}.banner-warn{color:#8a5e00;background:#c98a001a;border-color:#c98a0059}.banner-danger{color:var(--danger);background:#c0392b14;border-color:#c0392b4d}.banner-neutral{color:var(--muted);background:var(--surface);border-color:var(--border)}.flash-head{color:var(--brand);align-items:center;gap:.5rem;font-size:1rem;display:flex}.flash-head .live-dot{background:var(--good)}.foot{max-width:1400px;color:var(--muted);border-top:1px solid var(--border);margin:0 auto;padding:1.5rem;font-size:.78rem}.muted{color:var(--muted)}.txt-danger{color:var(--danger)}.txt-good{color:var(--good)}.txt-vendor{color:var(--vendor)}.user{color:#d8f3e3;font-size:.85rem}.logout{color:#fff;cursor:pointer;background:#ffffff1f;border:1px solid #ffffff40;border-radius:8px;padding:.4rem .7rem;font-size:.82rem}.logout:hover{background:#fff3}.login-wrap{background:var(--bg);place-items:center;min-height:100vh;padding:1rem;display:grid}.login-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);width:100%;max-width:360px;box-shadow:var(--shadow);flex-direction:column;gap:.85rem;padding:1.75rem;display:flex}.login-logo{width:220px;max-width:80%;margin:.25rem auto .35rem;display:block}.login-title{text-align:center;white-space:nowrap;color:var(--brand);letter-spacing:.01em;margin-bottom:.5rem;font-size:1.05rem;font-weight:700}.login-card h2{color:var(--text);margin:.3rem 0 .25rem;font-size:1.05rem}.login-card label{color:var(--muted);flex-direction:column;gap:.3rem;font-size:.82rem;display:flex}.login-card input{border:1px solid var(--border);color:var(--text);background:#fff;border-radius:8px;padding:.55rem .65rem;font-size:.95rem}.login-card input:focus{border-color:var(--accent);outline:2px solid #1f7a4b59}.login-card button{background:var(--brand);color:#fff;cursor:pointer;border:none;border-radius:8px;margin-top:.4rem;padding:.6rem;font-size:.95rem;font-weight:600}.login-card button:hover:not(:disabled){background:var(--brand-2)}.login-card button:disabled{opacity:.5;cursor:not-allowed}.login-err{color:var(--danger);background:#c0392b1a;border:1px solid #c0392b4d;border-radius:8px;padding:.5rem .7rem;font-size:.85rem}
