:root{--bg:#f4f7f6;--surface:#fff;--surface2:#edf2f0;--line:#d9e2df;--text:#14201c;--muted:#55655f;--accent:#0a5c4a;--accent-ink:#fff;--accent-soft:#dcefe8;--ok:#17703f;--ok-bg:#daf0e3;--warn:#85500a;--warn-bg:#fbeac6;--bad:#a12b3a;--bad-bg:#f9dadf;--info:#1d5fa8;--info-bg:#dbe8f7;--shadow:0 1px 2px #14201c0f,0 8px 24px #14201c0d}:root[data-theme=dark]{--bg:#0d1412;--surface:#141d1a;--surface2:#1b2723;--line:#27352f;--text:#e7efec;--muted:#9aaba4;--accent:#56d0ab;--accent-ink:#06231b;--accent-soft:#17352c;--ok:#6fdda3;--ok-bg:#163a2a;--warn:#f2c26b;--warn-bg:#3a2e12;--bad:#ff9aa6;--bad-bg:#40191f;--info:#8dbdf5;--info-bg:#162b45;--shadow:none}html,body,#app{min-height:100%}body{background:var(--bg);color:var(--text);font-variant-numeric:tabular-nums;margin:0;font-family:Figtree,system-ui,sans-serif;font-size:14px;line-height:1.45}*{box-sizing:border-box}a{color:inherit}.top{background:var(--surface);border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:8px 28px;padding:12px 32px;display:flex}.brand{align-items:center;gap:10px;font-size:16px;font-weight:800;display:flex}.mark{background:var(--accent);width:32px;height:32px;color:var(--accent-ink);border-radius:10px;place-items:center;font-size:13px;font-weight:800;display:grid}.nav{flex-wrap:wrap;flex:1;gap:2px;display:flex}.nav a{color:var(--muted);border-radius:9px;align-items:center;min-height:44px;padding:10px 12px;font-weight:600;text-decoration:none;display:inline-flex}.nav a:hover{background:var(--surface2);color:var(--text)}.nav a.on{background:var(--accent-soft);color:var(--accent)}.top .right{align-items:center;gap:10px;margin-left:auto;display:flex}.user{align-items:center;gap:8px;font-weight:600;display:inline-flex}.ua{background:var(--accent-soft);width:32px;height:32px;color:var(--accent);border-radius:50%;place-items:center;font-size:12px;font-weight:800;display:grid}.page{flex-direction:column;gap:20px;max-width:1360px;margin:0 auto;padding:26px 32px 56px;display:flex}.crumbs{color:var(--muted);font-size:13px}.crumbs a{color:var(--accent);font-weight:600;text-decoration:none}.title-row{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:14px;display:flex}.title-row h1{letter-spacing:-.01em;margin:0;font-size:28px;font-weight:800}.sub{color:var(--muted);font-size:13px}.foot{color:var(--muted);margin:8px 0 0;font-size:12px}.card{background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:14px;overflow:hidden}.card-h{border-bottom:1px solid var(--line);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;padding:14px 20px;display:flex}.card-h h2{margin:0;font-size:16px;font-weight:700}.head{flex-wrap:wrap;align-items:center;gap:20px;padding:22px 24px;display:flex}.head .who{flex:320px;min-width:0}.head h1{letter-spacing:-.01em;margin:0;font-size:26px;font-weight:800}.avatar{background:var(--accent-soft);width:68px;height:68px;color:var(--accent);border-radius:20px;place-items:center;font-size:23px;font-weight:800;display:grid}.chips{flex-wrap:wrap;gap:8px;margin-top:10px;display:flex}.actions{flex-wrap:wrap;gap:10px;display:flex}.btn{border:1px solid var(--line);background:var(--surface);color:var(--text);font:inherit;cursor:pointer;border-radius:10px;justify-content:center;align-items:center;gap:8px;min-height:44px;padding:9px 16px;font-weight:600;text-decoration:none;display:inline-flex}.btn:hover{background:var(--surface2)}.btn.primary{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}.btn.primary:hover{filter:brightness(1.08)}.btn.danger{background:var(--bad);color:var(--surface);border-color:var(--bad)}.iconbtn{width:44px;height:44px;color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:10px;place-items:center;display:inline-grid}.iconbtn:hover{background:var(--surface2);color:var(--text)}.input{border:1px solid var(--line);background:var(--surface);color:var(--text);font:inherit;border-radius:10px;width:100%;min-height:44px;padding:10px 12px}.input:focus,.btn:focus-visible,.tab:focus-visible,.iconbtn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.toolbar{border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:12px;padding:14px 20px;display:flex}.toolbar .grow{flex:260px;min-width:0}.toolbar .sel{flex:0 200px}.check{cursor:pointer;align-items:center;gap:10px;min-height:44px;display:flex}.check input{width:18px;height:18px;accent-color:var(--accent)}.checks{grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:0 14px;padding:12px 20px;display:grid}.chip{background:var(--surface2);color:var(--muted);white-space:normal;border-radius:999px;align-items:center;padding:3px 10px;font-size:12.5px;font-weight:700;display:inline-flex}.chip.ok{background:var(--ok-bg);color:var(--ok)}.chip.warn{background:var(--warn-bg);color:var(--warn)}.chip.bad{background:var(--bad-bg);color:var(--bad)}.chip.info{background:var(--info-bg);color:var(--info)}.file{color:var(--accent);text-underline-offset:3px;font-weight:600;text-decoration:underline}.name-link{color:var(--text);font-weight:700;text-decoration:none}.name-link:hover{color:var(--accent);text-decoration:underline}.tabs{border-bottom:1px solid var(--line);gap:2px;display:flex;overflow-x:auto}.tab{font:inherit;color:var(--muted);cursor:pointer;white-space:nowrap;background:0 0;border:0;border-bottom:3px solid #0000;align-items:center;gap:8px;min-height:48px;padding:10px 16px;font-weight:600;display:inline-flex}.tab:hover{color:var(--text)}.tab.on{color:var(--accent);border-bottom-color:var(--accent)}.tab .n{background:var(--surface2);color:var(--muted);border-radius:999px;padding:1px 8px;font-size:12px;font-weight:700}.tab.on .n{background:var(--accent-soft);color:var(--accent)}.kv{grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:18px 28px;padding:20px;display:grid}.kv .l{color:var(--muted);margin-bottom:2px;font-size:12px;font-weight:600}.kv .v{overflow-wrap:anywhere;font-weight:600}.prose{margin:0;padding:18px 20px;line-height:1.6}.empty{text-align:center;padding:34px 20px}.empty .t{margin-bottom:6px;font-size:16px;font-weight:700}.empty .sub{max-width:520px;margin:0 auto}.det{border-top:1px solid var(--line)}.det summary{cursor:pointer;min-height:44px;padding:14px 20px;font-weight:700}.det .kv{padding-top:6px}.scroll{overflow-x:auto}.tbl{min-width:calc(var(--n) * 140px + 96px)}.tr{grid-template-columns:repeat(var(--n),minmax(130px,1fr)) 96px;border-bottom:1px solid var(--line);align-items:center;display:grid}.tr>div{overflow-wrap:anywhere;min-width:0;padding:11px 14px}.tr.th{background:var(--surface2);color:var(--muted);font-size:12px;font-weight:700}.tr:last-child{border-bottom:0}.tr:not(.th):hover{background:var(--surface2)}.tr.sel{background:var(--accent-soft)}.acts{justify-content:flex-end;gap:0;display:flex;padding:4px 8px!important}.n3{--n:3}.n4{--n:4}.n5{--n:5}.n6{--n:6}.n7{--n:7}.n8{--n:8}.n9{--n:9}.n10{--n:10}.n11{--n:11}.n12{--n:12}.stats{grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:14px;display:grid}.stat{padding:16px 18px}.stat .num{letter-spacing:-.01em;font-size:30px;font-weight:800;line-height:1.1}.stat .lab{color:var(--muted);margin-top:4px;font-size:13px;font-weight:600}.split{flex-wrap:wrap;align-items:flex-start;gap:20px;display:flex}.split>.a{flex:2 560px;min-width:0}.split>.b{flex:300px;min-width:0}.split>.e{flex:420px;min-width:0}.cal{padding:14px 18px 18px}.cal-h{justify-content:space-between;align-items:center;margin-bottom:10px;font-weight:700;display:flex}.cal-g{text-align:center;grid-template-columns:repeat(7,1fr);gap:4px;display:grid}.cal-w{color:var(--muted);padding:4px 0;font-size:12px;font-weight:700}.day{aspect-ratio:1/.8;border-radius:9px;place-items:center;font-weight:600;display:grid;position:relative}.day.blank{visibility:hidden}.day.today{outline:2px solid var(--accent);outline-offset:-2px}.day.ev{background:var(--info-bg);color:var(--info)}.day.ev.warn{background:var(--warn-bg);color:var(--warn)}.bars{gap:10px;height:210px;padding:18px 20px 16px;display:flex}.bcol{flex-direction:column;flex:1;align-items:center;gap:6px;min-width:0;display:flex}.bv{font-size:12px;font-weight:700}.bl{color:var(--muted);font-size:12px;font-weight:600}.bwrap{flex:1;align-items:flex-end;width:100%;display:flex}.bar{background:var(--accent);border-radius:6px 6px 0 0;width:100%}.bar.cur{background:var(--accent-soft);border:2px dashed var(--accent);border-bottom:0}.pr{grid-template-columns:minmax(120px,170px) 1fr 44px;align-items:center;gap:12px;padding:8px 20px;display:grid}.track{background:var(--surface2);border-radius:99px;height:10px;overflow:hidden}.fill{background:var(--accent);border-radius:99px;height:100%}.pr .pct{text-align:right;font-weight:700}.hb1{height:5%}.hb2{height:10%}.hb3{height:15%}.hb4{height:20%}.hb5{height:25%}.hb6{height:30%}.hb7{height:35%}.hb8{height:40%}.hb9{height:45%}.hb10{height:50%}.hb11{height:55%}.hb12{height:60%}.hb13{height:65%}.hb14{height:70%}.hb15{height:75%}.hb16{height:80%}.hb17{height:85%}.hb18{height:90%}.hb19{height:95%}.hb20{height:100%}.w1{width:5%}.w2{width:10%}.w3{width:15%}.w4{width:20%}.w5{width:25%}.w6{width:30%}.w7{width:35%}.w8{width:40%}.w9{width:45%}.w10{width:50%}.w11{width:55%}.w12{width:60%}.w13{width:65%}.w14{width:70%}.w15{width:75%}.w16{width:80%}.w17{width:85%}.w18{width:90%}.w19{width:95%}.w20{width:100%}.scrim{z-index:50;background:#08100d99;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.dialog{background:var(--surface);color:var(--text);border:1px solid var(--line);border-radius:16px;width:min(440px,100%);padding:24px;box-shadow:0 24px 64px #00000059}.dialog.wide{width:min(640px,100%)}.dialog h2{margin:0 0 6px;font-size:18px;font-weight:800}.dialog p{color:var(--muted);margin:0}.dlg-icon{background:var(--bad-bg);width:44px;height:44px;color:var(--bad);border-radius:50%;place-items:center;margin-bottom:14px;display:grid}.dlg-actions{flex-wrap:wrap;justify-content:flex-end;gap:10px;margin-top:22px;display:flex}.fields{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;margin-top:18px;display:grid}.fld{flex-direction:column;gap:6px;font-size:13px;font-weight:600;display:flex}.fld .input{font-weight:400}.panel-grid{grid-template-columns:repeat(auto-fit,minmax(560px,1fr));display:grid}.panel{flex-direction:column;gap:22px;padding:32px;display:flex}.panel h3{letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:0;font-size:12px;font-weight:800}.row-wrap{flex-wrap:wrap;gap:10px;display:flex}@media (width<=640px){.top,.page{padding-left:16px;padding-right:16px}.tbl{min-width:calc(var(--n) * 130px + 96px)}}@media (width<=760px){.top{gap:6px 12px;padding:10px 16px}.brand{font-size:15px}.nav{scrollbar-width:none;flex-wrap:nowrap;flex:100%;order:3;margin:0 -16px;padding:0 12px;overflow-x:auto}.nav::-webkit-scrollbar{display:none}.nav a{white-space:nowrap;min-height:40px;padding:8px 12px}.uname{display:none}.top .right{gap:6px}.top .right .btn{min-height:40px;padding:6px 12px}.page{gap:16px;padding:18px 16px 40px}.title-row h1{font-size:24px}.head{gap:14px;padding:18px 16px}.avatar{border-radius:16px;width:56px;height:56px;font-size:19px}.head h1{font-size:22px}.head .actions{width:100%}.head .actions .btn{flex:100%}.card-h{padding:12px 16px}.kv{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:14px 20px;padding:16px}.dialog{padding:18px}.stats{grid-template-columns:1fr 1fr;gap:10px}.stat{padding:12px 14px}.stat .num{font-size:24px}.stat .lab{font-size:12px}.toolbar{gap:10px;padding:12px 16px}.toolbar .sel,.toolbar .grow{flex:100%}.title-row .actions{width:100%}.title-row .actions .btn{flex:auto}.tbl.stack{min-width:0}.tbl.stack .tr.th{display:none}.tbl.stack .tr{padding:12px 16px;display:block}.tbl.stack .tr>div{text-align:right;justify-content:space-between;align-items:center;gap:14px;padding:5px 0;display:flex}.tbl.stack .tr>div:before{content:attr(data-label);text-align:left;color:var(--muted);flex:0 0 38%;font-size:12px;font-weight:700}.tbl.stack .tr>div[data-label=""]{text-align:left;justify-content:flex-start;padding-bottom:8px;font-size:16px}.tbl.stack .tr>div[data-label=""]:before{display:none}.tbl.stack .tr>div.acts{border-top:1px solid var(--line);justify-content:flex-end;margin-top:6px;padding:6px 0 0!important}.tbl.stack .tr>div.acts:before{display:none}.tbl.stack .tr>div .input{text-align:left;flex:1}.tbl.stack .chips{justify-content:flex-end}.tbl.stack .tr>div:has(.sub:only-child){display:none}.tbl.stack .tr>div.chev{display:none}}
