:root{--color-primary: #1e40af;--color-on-primary: #ffffff;--color-secondary: #3b82f6;--color-accent: #d97706;--color-background: #f8fafc;--color-foreground: #1e3a8a;--color-card: #ffffff;--color-muted: #e9eef6;--color-muted-fg: #475569;--color-border: #dbeafe;--color-destructive: #dc2626;--color-success: #15803d;--font-sans: "Fira Sans", system-ui, sans-serif;--font-mono: "Fira Code", ui-monospace, monospace;--radius: 10px;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 24px;--space-6: 32px}*{box-sizing:border-box}body{margin:0;font-family:var(--font-sans);font-size:16px;line-height:1.5;background:var(--color-background);color:var(--color-foreground)}.num{font-family:var(--font-mono);font-variant-numeric:tabular-nums}.topbar{position:sticky;top:0;z-index:20;background:var(--color-primary);color:var(--color-on-primary);padding:var(--space-3) var(--space-5);display:flex;align-items:center;gap:var(--space-4);flex-wrap:wrap}.topbar h1{font-size:18px;margin:0;font-weight:600}.topbar .sub{font-size:13px;opacity:.85}.topbar .spacer{flex:1}.btn{font:inherit;font-size:14px;font-weight:600;cursor:pointer;border:1px solid transparent;border-radius:var(--radius);padding:10px 16px;min-height:44px;transition:transform .15s ease,opacity .15s ease}.btn:focus-visible,button:focus-visible,a:focus-visible{outline:3px solid var(--color-accent);outline-offset:2px}.btn-primary{background:var(--color-accent);color:#000}.btn-primary:hover{opacity:.9}.btn-primary:disabled{opacity:.55;cursor:wait}.btn-ghost{background:transparent;color:inherit;border-color:currentColor}.wrap{max-width:1200px;margin:0 auto;padding:var(--space-5) var(--space-4)}.grid-kpi{display:grid;grid-template-columns:repeat(6,1fr);gap:var(--space-3)}@media (max-width: 1024px){.grid-kpi{grid-template-columns:repeat(3,1fr)}}@media (max-width: 600px){.grid-kpi{grid-template-columns:repeat(2,1fr)}}.card{background:var(--color-card);border:1px solid var(--color-border);border-radius:var(--radius);padding:var(--space-4)}.card h3{margin:0 0 var(--space-1);font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--color-muted-fg)}.card .big{font-size:22px;font-weight:600}.card .hint{font-size:12px;color:var(--color-muted-fg)}.grid-2{display:grid;grid-template-columns:2fr 1fr;gap:var(--space-3);margin-top:var(--space-4)}@media (max-width: 900px){.grid-2{grid-template-columns:1fr}}.insights{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--space-3);margin-top:var(--space-4)}@media (max-width: 1024px){.insights{grid-template-columns:repeat(2,1fr)}}@media (max-width: 600px){.insights{grid-template-columns:1fr}}.insight{display:flex;gap:var(--space-3);align-items:flex-start}.insight svg{flex:none}.alert{border-radius:var(--radius);padding:var(--space-3);margin-top:var(--space-3)}.alert-error{background:#fee2e2;border:1px solid var(--color-destructive);color:#7f1d1d}.alert-warn{background:#fef3c7;border:1px solid var(--color-accent);color:#78350f}.table-tools{display:flex;gap:var(--space-3);margin:var(--space-5) 0 var(--space-2);flex-wrap:wrap;align-items:center}.input{font:inherit;font-size:14px;padding:10px 12px;min-height:44px;border:1px solid var(--color-border);border-radius:var(--radius);background:#fff;color:inherit}table.data{width:100%;border-collapse:collapse;background:var(--color-card);border:1px solid var(--color-border);border-radius:var(--radius);overflow:hidden}table.data th,table.data td{padding:10px 12px;text-align:left;border-bottom:1px solid var(--color-border);font-size:14px}table.data th{background:var(--color-muted);font-size:12px;text-transform:uppercase;letter-spacing:.04em}table.data tbody tr:hover{background:#eff6ff}.icon-btn{border:1px solid var(--color-border);background:#fff;border-radius:8px;width:44px;height:44px;cursor:pointer;font-size:18px;line-height:1}.legend{display:flex;gap:var(--space-4);font-size:13px;color:var(--color-muted-fg);flex-wrap:wrap}.legend .sw{display:inline-block;width:24px;height:4px;border-radius:2px;margin-right:6px;vertical-align:middle}.empty{padding:var(--space-6);text-align:center;color:var(--color-muted-fg)}@media (prefers-reduced-motion: reduce){*{transition:none!important;animation:none!important}}
