@keyframes rise{0%{opacity:0;transform:translateY(10px)scale(.99)}to{opacity:1;transform:none}}@keyframes pop{0%{opacity:0;transform:translateY(8px)scale(.96)}65%{opacity:1;transform:translateY(-1px)scale(1.004)}to{opacity:1;transform:none}}@keyframes shimmer{to{background-position:-200% 0}}@keyframes twinkle{0%,to{opacity:.08;transform:scale(.8)rotate(-10deg)}50%{opacity:.3;transform:scale(1.05)rotate(8deg)}}.deco{pointer-events:none;z-index:0;position:fixed;inset:0}.deco svg{width:100%;height:100%;display:block}.deco svg path{fill:currentColor;stroke:none}.twp{color:var(--ped-emerald);position:absolute}.tw{width:100%;height:100%;animation:6s ease-in-out infinite twinkle;display:block}.tw1{width:18px;height:18px;top:16%;right:2.2%}.tw2{width:11px;height:11px;top:44%;right:1.2%}.tw2 .tw{animation-delay:1.6s}.tw3{width:14px;height:14px;top:72%;right:3%}.tw3 .tw{animation-delay:3.1s}.tw4{width:9px;height:9px;top:9%;right:5.5%}.tw4 .tw{animation-delay:4.4s}@media (width<=1100px){.deco{display:none}}.app{z-index:1;min-height:100vh;display:flex;position:relative}.rail{background:var(--surface);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border-right:1px solid var(--border);flex-direction:column;flex-shrink:0;gap:2px;width:210px;padding:10px;transition:width .18s;display:flex}.rail.collapsed{width:56px}.rail.collapsed .nav-label,.rail.collapsed .rail-logo,.rail.collapsed .rail-search,.rail.collapsed .rail-foot{display:none}.rail-head{justify-content:space-between;align-items:center;padding:4px 6px 10px;display:flex}.rail-logo{font-family:var(--font-display);color:var(--acc-ink);letter-spacing:.06em;font-weight:700}.rail-toggle{color:var(--text);cursor:pointer;background:0 0;border:none;border-radius:6px;padding:4px;display:inline-flex}.rail-toggle svg{width:16px;height:16px}.rail-toggle:hover{background:#0e9f6e1a}.rail-search{border:1px solid var(--border);border-radius:var(--r);background:var(--surface);color:var(--muted);align-items:center;gap:7px;margin:0 0 8px;padding:6px 9px;display:flex}.rail-search svg{flex-shrink:0;width:14px;height:14px}.rail-search:focus-within{border-color:var(--ped-emerald)}.rail-search input{color:var(--text);width:100%;font-family:var(--font-body);font-size:calc(var(--fs) - 2px);background:0 0;border:none;outline:none}.rail-search input::placeholder{color:var(--muted)}.nav-item{color:var(--text);border-radius:var(--r);cursor:pointer;font-family:var(--font-body);font-size:var(--fs);text-align:left;background:0 0;border:none;align-items:center;gap:10px;width:100%;padding:9px 10px;transition:background .15s,color .15s,transform .1s;display:flex}.nav-item:hover{background:#0e9f6e1a}.nav-item:active{transform:scale(.98)}.nav-item.active{color:var(--acc-ink);box-shadow:inset 3px 0 0 var(--ped-emerald);background:#0e9f6e1f;font-weight:600}.nav-icon{width:20px;color:var(--muted);flex-shrink:0;justify-content:center;align-items:center;transition:color .15s;display:inline-flex}.nav-icon svg{width:17px;height:17px}.nav-item:hover .nav-icon{color:var(--text)}.nav-item.active .nav-icon{color:var(--acc-ink)}.nav-item.active .nav-icon svg{fill:#0e9f6e21}.rail-foot{color:var(--muted);font-size:var(--fs-xs);letter-spacing:.02em;margin-top:auto;padding:12px 8px 4px;line-height:1.5}.main-col{flex-direction:column;flex:1;min-width:0;display:flex}.app-head{padding:14px var(--sp);border-bottom:1px solid var(--border);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;display:flex}.app-head h1{font-family:var(--font-display);font-size:calc(var(--fs) + 4px);text-wrap:balance;margin:0}.app-head .sub{color:var(--muted);font-size:var(--fs-sm)}.head-controls{align-items:center;gap:8px;display:flex}.ctl{background:var(--surface);border:1px solid var(--border);color:var(--text);border-radius:var(--r);font-size:calc(var(--fs) - 2px);cursor:pointer;font-family:var(--font-body);padding:6px 10px;text-decoration:none;transition:border-color .15s,background .15s,box-shadow .15s,transform .1s}.ctl:hover{border-color:var(--ped-emerald)}.ctl:active{transform:scale(.96)}.ctl:disabled{opacity:.55;cursor:not-allowed;transform:none}.ctl-ic{justify-content:center;align-items:center;padding:6px 8px;display:inline-flex}.ctl-ic svg{width:15px;height:15px}.user-chip{flex-direction:column;align-items:flex-end;margin-right:2px;line-height:1.3;display:flex}.user-chip b{font-size:calc(var(--fs) - 2px);font-weight:600}.user-chip span{color:var(--muted);font-size:var(--fs-xs);font-family:var(--font-mono)}.content{padding:var(--sp);gap:var(--sp);flex-direction:column;width:100%;max-width:1300px;margin:0 auto;display:flex}.content>*{animation:.35s cubic-bezier(.16,1,.3,1) both rise}.content>:nth-child(2){animation-delay:30ms}.content>:nth-child(3){animation-delay:60ms}.content>:nth-child(4){animation-delay:90ms}.content>:nth-child(n+5){animation-delay:.12s}.loading{color:var(--muted);text-align:center;justify-content:center;align-items:center;gap:10px;padding:40px;display:flex}.loading .spinner{border-width:2px;flex-shrink:0;width:16px;height:16px;margin:0}.skel-wrap{gap:var(--sp);flex-direction:column;display:flex}.skel{border-radius:var(--r);background:linear-gradient(100deg, var(--skel-a) 40%, var(--skel-b) 50%, var(--skel-a) 60%);background-size:200% 100%;animation:1.3s linear infinite shimmer}.card-grid{gap:calc(var(--sp) * .7);grid-template-columns:repeat(auto-fill,minmax(230px,1fr));display:grid}.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:var(--card-pad);box-shadow:var(--shadow);transition:box-shadow .2s,transform .2s}.panel h2{font-family:var(--font-display);font-size:calc(var(--fs) - 1px);text-wrap:balance;margin:0 0 8px;font-weight:650}.card-grid>.panel{animation:.35s cubic-bezier(.3,1.3,.4,1) both pop}.card-grid>.panel:nth-child(2){animation-delay:30ms}.card-grid>.panel:nth-child(3){animation-delay:60ms}.card-grid>.panel:nth-child(4){animation-delay:90ms}.card-grid>.panel:nth-child(5){animation-delay:.12s}.card-grid>.panel:nth-child(n+6){animation-delay:.15s}.lab-card{border-left:3px solid var(--border)}.lab-card.state-green{border-left-color:var(--ped-emerald)}.lab-card.state-amber{border-left-color:#c98a1d}.lab-card.state-red{border-left-color:var(--budget-red)}.lab-stats{font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--muted);flex-wrap:wrap;gap:10px;display:flex}.lab-stats b{color:var(--text)}.spark{width:100%;height:56px;margin-top:6px}.chart{width:100%;height:280px}.ch-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;margin:0 0 8px;display:flex}.ch-head h2{margin:0}.ch-range{flex-wrap:wrap;gap:4px;display:flex}.ch-range:empty{display:none}.rpill{border:1px solid var(--border);color:var(--muted);border-radius:calc(var(--r) - 4px);font-size:var(--fs-xs);cursor:pointer;font-family:var(--font-body);background:0 0;padding:3px 9px;font-weight:600;transition:color .12s,border-color .12s,background .12s,transform .1s}.rpill:hover{border-color:var(--ped-emerald);color:var(--text)}.rpill:active{transform:scale(.93)}.rpill.active{color:var(--acc-ink);border-color:var(--ped-emerald);background:#0e9f6e21}.narrative{white-space:pre-wrap;font-size:calc(var(--fs) - 1px);line-height:1.55}.placeholder{color:var(--muted);text-align:center;padding:40px}.sec{margin:calc(var(--sp) * .4) 2px calc(var(--sp) * -.45);align-items:baseline;gap:10px;display:flex}.sec h3{font-family:var(--font-display);font-size:calc(var(--fs) - 1px);text-transform:uppercase;letter-spacing:.08em;color:var(--acc-ink);margin:0;font-weight:700}.sec h3:after{content:"";background:var(--scrib) no-repeat;background-size:100% 6px;height:6px;margin-top:1px;display:block}.sec-sub,.muted{color:var(--muted);font-size:var(--fs-sm)}.kpi-grid{gap:calc(var(--sp) * .6);grid-template-columns:repeat(auto-fill,minmax(200px,1fr));display:grid}.kpi-grid>.panel{animation:.35s cubic-bezier(.3,1.3,.4,1) both pop}.kpi-grid>.panel:nth-child(2){animation-delay:30ms}.kpi-grid>.panel:nth-child(3){animation-delay:60ms}.kpi-grid>.panel:nth-child(4){animation-delay:90ms}.kpi-grid>.panel:nth-child(5){animation-delay:.12s}.kpi-grid>.panel:nth-child(n+6){animation-delay:.15s}.kpi-hero{background:linear-gradient(135deg, #0e9f6e1a, #0e9f6e00 60%), var(--surface);grid-column:span 2}@media (width<=520px){.kpi-hero{grid-column:span 1}}.kpi-hero .kpi-v{font-size:calc(var(--fs) + 22px)}.kpi-l{color:var(--muted);font-size:var(--fs-sm);letter-spacing:.02em;font-weight:600}.kpi-sub{opacity:.8;font-weight:400}.kpi-v{font-family:var(--font-display);font-size:calc(var(--fs) + 12px);margin:4px 0 2px;font-weight:700;line-height:1.15}.kpi-u{font-size:var(--fs-sm);color:var(--muted);font-weight:500}.kpi-ctx{flex-wrap:wrap;align-items:baseline;gap:8px;min-height:18px;display:flex}.kpi-delta{font-size:var(--fs-sm);font-weight:700}.kpi-delta.good{color:#0a7d43}[data-theme=dark] .kpi-delta.good{color:#2dd495}.kpi-delta.bad{color:var(--budget-red)}.kpi-dl{color:var(--muted);font-size:var(--fs-xs)}.two-col{gap:var(--sp);grid-template-columns:1fr 1fr;display:grid}@media (width<=1000px){.two-col{grid-template-columns:1fr}}.tblwrap{overflow-x:auto}.tbl{border-collapse:collapse;width:100%;font-size:calc(var(--fs) - 2px);font-variant-numeric:tabular-nums}.tbl th,.tbl td{border-bottom:1px solid var(--border);text-align:left;padding:7px 10px}.tbl th{color:var(--muted);font-weight:700;font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.05em}.tbl tbody tr:nth-child(2n){background:#0e9f6e0b}.tbl tbody tr:hover{background:#0e9f6e17}.num{text-align:right;font-family:var(--font-mono)}.chips{flex-wrap:wrap;gap:6px;display:flex}.chip{background:var(--surface);border:1px solid var(--border);color:var(--text);border-radius:var(--r);font-size:var(--fs-sm);cursor:pointer;font-family:var(--font-body);padding:5px 12px;transition:background .12s,border-color .12s,transform .1s}.chip:hover{border-color:var(--ped-emerald)}.chip:active{transform:scale(.95)}.chip.active{background:var(--ped-deep);color:#fff;border-color:var(--ped-deep)}[data-theme=dark] .chip.active{background:var(--ped-emerald);color:#08130e;border-color:var(--ped-emerald)}.lab-layout{gap:var(--sp);grid-template-columns:300px 1fr;align-items:start;display:grid}@media (width<=900px){.lab-layout{grid-template-columns:1fr}}.lab-list{flex-direction:column;gap:2px;max-height:320px;margin-top:8px;display:flex;overflow:auto}.lab-item{font-size:var(--fs-sm);cursor:pointer;color:var(--text);text-align:left;font-family:var(--font-body);background:0 0;border:none;border-radius:6px;padding:4px 6px;display:block}.lab-item:hover{background:#0e9f6e1a}.lab-item.on{background:#0e9f6e26}.range-ctl{align-items:center;gap:6px;display:flex}.range-ctl input{background:var(--surface);border:1px solid var(--border);color:var(--text);border-radius:var(--r);font-size:calc(var(--fs) - 3px);font-family:var(--font-body);padding:5px 8px}@media (width<=800px){.rail{z-index:50;height:100vh;position:fixed;transform:translate(-100%)}.rail.open{transform:none}}@media (prefers-reduced-motion:reduce){.deco{display:none}}:root{--ped-emerald:#0e9f6e;--ped-deep:#065f46;--acc-ink:#065f46;--bg:#e7f6ef;--surface:#ffffffb8;--border:#065f4629;--text:#1f2a2e;--muted:#5c6b66;--budget-red:#c81e1e;--r:10px;--sp:20px;--fs:15px;--card-pad:18px;--fs-sm:max(11px, calc(var(--fs) - 3px));--fs-xs:max(10px, calc(var(--fs) - 4px));--shadow:0 1px 2px #60736c0d, 0 14px 34px -10px #60736c2e;--shadow-lift:0 2px 4px #60736c0f, 0 20px 44px -12px #60736c42;--skel-a:#065f460f;--skel-b:#065f4621;--scrib:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%2280%22 height=%226%22 viewBox=%220 0 80 6%22%3E%3Cpath d=%22M1 4C10 1.5 20 5.5 32 3S56 1.5 79 3.5%22 fill=%22none%22 stroke=%22%230E9F6E%22 stroke-width=%221.6%22 stroke-linecap=%22round%22 opacity=%22.5%22/%3E%3C/svg%3E");--font-display:"Sora", -apple-system, "Segoe UI", sans-serif;--font-body:"Inter", -apple-system, "Segoe UI", sans-serif;--font-mono:"IBM Plex Mono", ui-monospace, Consolas, monospace}[data-theme=dark]{--ped-emerald:#2dd495;--acc-ink:#2dd495;--bg:#0c1512;--surface:#14201b99;--border:#40916c40;--text:#e6f2ec;--muted:#8fa79d;--budget-red:#ff5a5a;--shadow:0 1px 2px #00000059, 0 14px 34px -10px #00000059;--shadow-lift:0 2px 4px #0006, 0 20px 44px -12px #00000080;--skel-a:#e6f2ec0d;--skel-b:#e6f2ec1a;--scrib:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%2280%22 height=%226%22 viewBox=%220 0 80 6%22%3E%3Cpath d=%22M1 4C10 1.5 20 5.5 32 3S56 1.5 79 3.5%22 fill=%22none%22 stroke=%22%232DD495%22 stroke-width=%221.6%22 stroke-linecap=%22round%22 opacity=%22.5%22/%3E%3C/svg%3E")}body[data-density=Dense]{--sp:14px;--fs:14px;--card-pad:14px}body[data-density=Compact]{--sp:10px;--fs:13px;--card-pad:10px}*{box-sizing:border-box}body{background:var(--bg);color:var(--text);font-family:var(--font-body);font-size:var(--fs);min-height:100vh;margin:0}body:after{content:"";z-index:1;pointer-events:none;opacity:.035;background-image:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%22160%22 height=%22160%22%3E%3Cfilter id=%22n%22%3E%3CfeTurbulence type=%22fractalNoise%22 baseFrequency=%22.85%22 numOctaves=%222%22 stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect width=%22160%22 height=%22160%22 filter=%22url(%23n)%22/%3E%3C/svg%3E");position:fixed;inset:0}[data-theme=dark] body:after{opacity:.055}h1,h2,h3{font-family:var(--font-display);letter-spacing:-.01em;font-weight:650}:focus-visible{outline:2px solid var(--ped-emerald);outline-offset:2px}@keyframes spin{to{transform:rotate(360deg)}}.auth-wrap{justify-content:center;align-items:center;min-height:100vh;padding:24px;display:flex}.auth-card{background:var(--surface);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border:1px solid var(--border);text-align:center;border-radius:16px;width:100%;max-width:440px;padding:40px 32px}.auth-brand{color:var(--ped-emerald);letter-spacing:.06em;font-size:13px;font-weight:700}.auth-full{opacity:.75;margin:6px 0 24px;font-size:13px}.auth-tagline{color:var(--ped-deep);margin-top:20px;font-size:14px;font-weight:650}.tag{font-family:var(--font-mono)}.btn-primary{cursor:pointer;background:var(--ped-emerald);color:#fff;font-family:var(--font-body);border:none;border-radius:10px;padding:12px 28px;font-size:15px;font-weight:600;display:inline-block}.btn-secondary{border:1px solid var(--border);color:var(--text);cursor:pointer;font-family:var(--font-body);background:0 0;border-radius:10px;padding:10px 20px;font-weight:600}.spinner{border:3px solid var(--border);border-top-color:var(--ped-emerald);border-radius:50%;width:28px;height:28px;margin:0 auto;animation:.8s linear infinite spin}@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}
