:root{--yellow:#FDD835;--orange:#F57C00;--leaf:#7CB342;--sky:#1E88E5;--brown:#6D4C2A;--red:#C62828;--ink:#1F2421;--ink2:#4B5450;--muted:#7C857F;--line:#E4E7E2;--line2:#F0F2EE;--paper:#FFFFFF;--canvas:#F6F7F4;--rail:#FBFBF9;--r:6px;--r2:10px;font-family:"IBM Plex Sans",system-ui,sans-serif}
*{box-sizing:border-box}
html,body{margin:0;height:100%;background:var(--canvas);color:var(--ink);font-size:14px;line-height:1.45;font-variant-numeric:tabular-nums}
button,input,select{font:inherit;color:inherit}
a{color:var(--sky)}
h1,h2,h3{margin:0;font-weight:600;letter-spacing:-.01em}
h1{font-size:22px}h2{font-size:16px}h3{font-size:13.5px;color:var(--ink2)}
.app{display:grid;grid-template-columns:232px 1fr;min-height:100vh}
.rail{background:var(--rail);border-right:1px solid var(--line);padding:16px 12px;display:flex;flex-direction:column;gap:6px;position:sticky;top:0;height:100vh}
.logo{padding:6px 6px 14px;border-bottom:1px solid var(--line);margin-bottom:8px}.logo img{width:100%;height:auto;display:block}
.nav button{display:flex;align-items:center;gap:10px;width:100%;text-align:left;border:0;background:transparent;padding:8px 10px;border-radius:var(--r);color:var(--ink2);cursor:pointer}
.nav button:hover{background:#F0F2EC}
.nav button.on{background:#fff;color:var(--ink);box-shadow:inset 0 0 0 1px var(--line);font-weight:600}
.nav button svg{width:16px;height:16px;flex:none;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.nav .grp{font-size:11px;color:var(--muted);padding:12px 10px 4px}
.nav .cnt{margin-left:auto;font-size:11px;background:var(--line2);padding:1px 7px;border-radius:99px;color:var(--ink2)}
.railfoot{margin-top:auto;font-size:11px;color:var(--muted);padding:8px 10px;border-top:1px solid var(--line)}
.railfoot b{display:block;color:var(--ink2);font-weight:600}
.main{min-width:0}
.top{display:flex;align-items:center;gap:12px;padding:12px 24px;background:var(--paper);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:5}
.crumb{color:var(--muted);font-size:13px}.crumb b{color:var(--ink);font-weight:600}
.search{margin-left:auto;display:flex;align-items:center;gap:8px;border:1px solid var(--line);border-radius:var(--r);padding:6px 10px;width:280px;background:var(--canvas)}
.search input{border:0;background:transparent;outline:0;width:100%}
.sync{font-size:12px;color:var(--ink2);display:flex;align-items:center;gap:6px}
.sync i{width:8px;height:8px;border-radius:50%;background:var(--leaf);display:inline-block}
.page{padding:20px 24px 40px;display:none}
.page.on{display:block}
.head{display:flex;align-items:flex-end;gap:16px;margin-bottom:16px}
.head p{margin:4px 0 0;color:var(--ink2)}
.head .act{margin-left:auto;display:flex;gap:8px}
.filters{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:16px}
.filters select,.filters input{border:1px solid var(--line);background:#fff;border-radius:var(--r);padding:6px 10px;font-size:13px}
.chip{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:99px;font-size:12px;border:1px solid var(--line);background:#fff;cursor:pointer}
.chip.on{background:var(--ink);color:#fff;border-color:var(--ink)}
.chip.x{color:var(--sky);border-style:dashed}
.btn{border:1px solid var(--line);background:#fff;border-radius:var(--r);padding:7px 12px;cursor:pointer;font-weight:500;font-size:13px}
.btn:hover{background:var(--canvas)}
.btn.p{background:var(--sky);color:#fff;border-color:var(--sky)}
.btn.p:hover{background:#1976D2}
.btn.sm{padding:4px 9px;font-size:12px}
.btn:disabled{opacity:.6;cursor:wait}
.grid{display:grid;gap:14px}
.g4{grid-template-columns:repeat(4,1fr)}.g3{grid-template-columns:repeat(3,1fr)}.g2{grid-template-columns:repeat(2,1fr)}.g32{grid-template-columns:3fr 2fr}.g23{grid-template-columns:2fr 3fr}
.card{background:var(--paper);border:1px solid var(--line);border-radius:var(--r2);padding:16px}
.card.tight{padding:0;overflow-x:auto;-webkit-overflow-scrolling:touch}
.card.tight th{white-space:nowrap}
.card.tight table:has(thead th:nth-child(8)){min-width:1150px}
.card.tight table:has(thead th:nth-child(11)){min-width:1400px}
.pe{overflow-x:auto}
.card.tight::-webkit-scrollbar,.pe::-webkit-scrollbar,.dg::-webkit-scrollbar{height:10px}
.card.tight::-webkit-scrollbar-thumb,.pe::-webkit-scrollbar-thumb,.dg::-webkit-scrollbar-thumb{background:#C9CFC6;border-radius:5px}
.card.tight::-webkit-scrollbar-track,.pe::-webkit-scrollbar-track,.dg::-webkit-scrollbar-track{background:#F0F2EE}
.card .ch{display:flex;align-items:center;gap:10px;margin-bottom:12px}
.card .ch .more{margin-left:auto;font-size:12px;color:var(--sky);cursor:pointer;background:none;border:0}
.kpi .lbl{font-size:12.5px;color:var(--ink2)}
.kpi .val{font-size:26px;font-weight:600;letter-spacing:-.02em;margin:2px 0 4px}
.kpi .sub{font-size:12px;color:var(--muted)}
.kpi .sub.up{color:var(--red)}.kpi .sub.dn{color:#4E8A2A}
.kpi{border-left:3px solid var(--line)}
.kpi.b{border-left-color:var(--sky)}.kpi.o{border-left-color:var(--orange)}.kpi.g{border-left-color:var(--leaf)}.kpi.br{border-left-color:var(--brown)}.kpi.r{border-left-color:var(--red)}.kpi.y{border-left-color:var(--yellow)}
.band{background:var(--paper);border:1px solid var(--line);border-radius:var(--r2);padding:18px 18px 14px;margin-bottom:14px}
.band .bh{display:flex;align-items:baseline;gap:14px;margin-bottom:12px}
.band .bh .tot{font-size:30px;font-weight:600;letter-spacing:-.02em}
.band .bh .tl{color:var(--ink2)}
.band .bh .asof{margin-left:auto;color:var(--muted);font-size:12px}
.strip{display:flex;height:44px;border-radius:5px;overflow:hidden;gap:2px}
.strip div{position:relative;cursor:pointer;transition:filter .15s;min-width:2px}
.strip div:hover{filter:brightness(.92)}
.strip div span{position:absolute;left:8px;top:50%;transform:translateY(-50%);font-size:12px;font-weight:600;color:#fff;white-space:nowrap;text-shadow:0 1px 1px rgba(0,0,0,.25)}
.legend{display:flex;gap:18px;margin-top:10px;font-size:12px;color:var(--ink2);flex-wrap:wrap}
.legend b{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:6px;vertical-align:-1px}
.legend .v{color:var(--ink);font-weight:600;margin-left:4px}
.c-cur{background:var(--leaf)}.c-30{background:var(--yellow)}.c-60{background:var(--orange)}.c-90{background:#B65C2A}.c-180{background:var(--brown)}.c-365{background:#4A3220}.c-leg{background:var(--red)}
table{width:100%;border-collapse:collapse;font-size:13px}
th{text-align:left;font-weight:600;color:var(--ink2);font-size:12px;padding:9px 12px;border-bottom:1px solid var(--line);background:#FAFBF8;white-space:nowrap;cursor:pointer;user-select:none}
th.r,td.r{text-align:right}
td{padding:9px 12px;border-bottom:1px solid var(--line2);vertical-align:middle}
tbody tr:hover{background:#F7F9F5}
tbody tr.click{cursor:pointer}
tbody tr.sel{background:#EEF5FB}
.tag{display:inline-block;padding:2px 8px;border-radius:99px;font-size:11.5px;font-weight:600;line-height:1.5}
.tag.inst{background:#E3F2FD;color:#1565C0}.tag.deal{background:#F1F8E9;color:#4E8A2A}.tag.legal{background:#FFEBEE;color:#B71C1C}.tag.exp{background:#EFEBE9;color:var(--brown)}
.tag.mip{background:#FFF8E1;color:#8D6E00}.tag.gov{background:#FFF3E0;color:#E65100}.tag.proj{background:#EFEBE9;color:#5D4037}.tag.dind{background:#E8F5E9;color:#2E7D32}
.st{display:inline-flex;align-items:center;gap:6px;font-size:12.5px}
.st i{width:8px;height:8px;border-radius:50%;display:inline-block}
.s-open i{background:var(--yellow)}.s-part i{background:var(--sky)}.s-prom i{background:var(--leaf)}.s-disp i{background:var(--orange)}.s-legal i{background:var(--red)}.s-broken i{background:var(--brown)}
.bar{height:6px;background:var(--line2);border-radius:3px;overflow:hidden;display:flex}
.bar i{display:block;height:100%}
.mini{display:flex;gap:1px;height:16px;width:110px;border-radius:2px;overflow:hidden}
.mini i{display:block;height:100%}
.dso{font-weight:600}.dso.bad{color:var(--red)}.dso.warn{color:var(--orange)}.dso.ok{color:#4E8A2A}
.tfoot{display:flex;align-items:center;gap:12px;padding:10px 12px;font-size:12px;color:var(--muted);border-top:1px solid var(--line)}
.tfoot .pg{margin-left:auto;display:flex;gap:4px;align-items:center}
.tfoot .pg button{border:1px solid var(--line);background:#fff;border-radius:4px;padding:2px 8px;cursor:pointer}
.empty{padding:32px;text-align:center;color:var(--muted)}
.drawer{position:fixed;top:0;right:0;width:780px;max-width:100vw;height:100vh;background:#fff;border-left:1px solid var(--line);box-shadow:-12px 0 40px rgba(0,0,0,.08);transform:translateX(100%);transition:transform .25s;z-index:20;display:flex;flex-direction:column}
.drawer.on{transform:none}
.drawer .tp table th,.drawer .tp table td{padding:6px 5px}
.dh{padding:18px 22px;border-bottom:1px solid var(--line);display:flex;gap:12px;align-items:flex-start}
.dh .x{margin-left:auto;border:0;background:none;font-size:20px;cursor:pointer;color:var(--muted)}
.dh .meta{font-size:12.5px;color:var(--ink2);margin-top:3px}
.db{padding:18px 22px;overflow:auto;flex:1}
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:14px}
.tabs button{border:0;background:none;padding:8px 12px;cursor:pointer;color:var(--ink2);border-bottom:2px solid transparent;margin-bottom:-1px}
.tabs button.on{color:var(--ink);border-color:var(--ink);font-weight:600}
.tp{display:none}.tp.on{display:block}
.kv{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;margin-bottom:16px}
.kv div{background:var(--canvas);border-radius:var(--r);padding:10px 12px}
.kv small{display:block;color:var(--muted);font-size:11.5px}.kv b{font-size:16px;font-weight:600}
.tl{list-style:none;margin:0;padding:0}
.tl li{display:grid;grid-template-columns:86px 14px 1fr;gap:10px;padding:8px 0;font-size:13px}
.tl li time{color:var(--muted);font-size:12px}
.tl li i{width:10px;height:10px;border-radius:50%;background:var(--sky);margin-top:4px;position:relative}
.tl li i::after{content:"";position:absolute;left:4px;top:12px;width:2px;height:26px;background:var(--line)}
.tl li:last-child i::after{display:none}
.tl li b{font-weight:600}.tl li span{display:block;color:var(--ink2)}
.actionbox{background:#FFF8E1;border:1px solid #F5E1A0;border-radius:var(--r);padding:12px 14px;margin-bottom:14px}
.actionbox b{display:block;margin-bottom:4px}
.form{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.form label{font-size:12px;color:var(--ink2);display:block}
.form select,.form input,.form textarea{width:100%;border:1px solid var(--line);border-radius:var(--r);padding:7px 9px;margin-top:3px;background:#fff}
.form .full{grid-column:1/-1}
.df{padding:12px 22px;border-top:1px solid var(--line);display:flex;gap:8px;justify-content:flex-end}
.scrim{position:fixed;inset:0;background:rgba(20,30,20,.25);opacity:0;pointer-events:none;transition:opacity .2s;z-index:15}
.scrim.on{opacity:1;pointer-events:auto}
.chartbox{position:relative;height:240px}
.chartbox.tall{height:320px}
.pill{font-size:11px;padding:2px 7px;border-radius:4px;background:var(--line2);color:var(--ink2)}
.note{font-size:12px;color:var(--muted)}
.rowact{display:flex;gap:6px;flex-wrap:wrap}
.q{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:14px}
.q button{flex:1;min-width:150px;text-align:left;background:#fff;border:1px solid var(--line);border-radius:var(--r2);padding:12px 14px;cursor:pointer}
.q button:hover{border-color:var(--sky)}
.q button b{display:block;font-size:20px;font-weight:600}
.q button span{font-size:12.5px;color:var(--ink2)}
.q button.r b{color:var(--red)}.q button.o b{color:var(--orange)}.q button.br b{color:var(--brown)}.q button.b b{color:var(--sky)}.q button.y b{color:#B8860B}
.q button.on{box-shadow:inset 0 0 0 1px var(--ink)}
.toast{position:fixed;bottom:20px;left:50%;transform:translateX(-50%) translateY(20px);background:var(--ink);color:#fff;padding:10px 16px;border-radius:var(--r);opacity:0;transition:.2s;z-index:30;font-size:13px}
.toast.on{opacity:1;transform:translateX(-50%)}
.heat{display:grid;grid-template-columns:130px repeat(7,1fr);gap:4px;font-size:12px}
.heat .h{color:var(--ink2);font-weight:600;padding:4px 0}
.heat .c{border-radius:4px;padding:8px 6px;text-align:right;color:#fff;font-weight:600;cursor:pointer}
.heat .c.z{background:var(--line2);color:var(--muted);font-weight:400}
.heat .rl{padding:8px 0;font-weight:500}
.chip.tick{padding-left:8px}.chip.tick .dot{width:9px;height:9px;border-radius:50%;display:inline-block}
.chip.tick.on{background:#fff;color:var(--ink);border-color:var(--ink2)}
.chip.tick.on::before{content:"✓";font-size:11px;font-weight:700;color:var(--ink2)}
.chip.tick.off{color:var(--muted);text-decoration:line-through;background:var(--canvas)}.chip.tick.off .dot{opacity:.3}
.msel{position:relative;display:inline-block}
.msb{border:1px solid var(--line);background:#fff;border-radius:var(--r);padding:6px 10px;font-size:13px;cursor:pointer;display:inline-flex;gap:6px;align-items:center}
.msb.on{border-color:var(--ink);font-weight:600}.msb i{font-style:normal;color:var(--muted);font-size:11px}
.msp{position:absolute;top:calc(100% + 4px);left:0;z-index:30;background:#fff;border:1px solid var(--line);border-radius:var(--r2);box-shadow:0 10px 30px rgba(0,0,0,.1);width:280px;padding:8px}
.msh{display:flex;gap:6px;margin-bottom:6px}.msh input{flex:1;border:1px solid var(--line);border-radius:var(--r);padding:5px 8px;font-size:12.5px}
.msl{max-height:260px;overflow:auto}.msl label{display:flex;gap:8px;align-items:center;padding:5px 6px;border-radius:4px;font-size:13px;cursor:pointer}.msl label:hover{background:var(--canvas)}
.upf{display:flex;gap:6px;align-items:center}.upf input[type=file]{font-size:11.5px;max-width:190px}
#who{display:flex;gap:8px;align-items:center}
@media (max-width:1100px){.g4{grid-template-columns:repeat(2,1fr)}.g3,.g32,.g23{grid-template-columns:1fr}}
@media (max-width:820px){.app{grid-template-columns:1fr}.rail{display:none}.search{display:none}}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}
