:root{--navy:#13294b;--navy2:#1d3a6b;--gold:#c8a02b;--bg:#f3f5f9;--card:#fff;--ink:#17233a;--mut:#64708a;--line:#e1e6ef;--ok:#1f9d63;--warn:#d98a0b;--bad:#cf3b3b;--info:#2b6cd4;--r:12px}
@media(prefers-color-scheme:dark){:root{--bg:#0e1626;--card:#16213a;--ink:#e8edf7;--mut:#93a0ba;--line:#26334f}}
*{box-sizing:border-box}html,body{margin:0}
body{font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--ink);font-size:14px;line-height:1.45}
a{color:inherit;text-decoration:none}
.app{display:grid;grid-template-columns:240px 1fr;min-height:100vh}
.side{background:var(--navy);color:#cfd9ee;padding:18px 12px;position:sticky;top:0;height:100vh;display:flex;flex-direction:column;gap:4px;overflow:auto}
.brand{display:flex;gap:10px;align-items:center;padding:4px 8px 16px;color:#fff}
.logo{width:38px;height:38px;border-radius:9px;background:var(--gold);color:var(--navy);display:grid;place-items:center;font-weight:800;font-size:18px}
.brand b{display:block;letter-spacing:.14em;font-size:15px}.brand small{font-size:10px;color:#9fb0d3;letter-spacing:.06em}
.nav a{display:flex;gap:10px;align-items:center;padding:9px 10px;border-radius:8px;color:#cfd9ee;font-weight:500}
.nav a:hover{background:rgba(255,255,255,.07)}.nav a.on{background:var(--gold);color:var(--navy);font-weight:700}
.nav h6{margin:14px 10px 4px;font-size:10.5px;letter-spacing:.12em;color:#7f93bd;text-transform:uppercase}
.nav .tag{margin-left:auto;font-size:10px;background:rgba(255,255,255,.14);padding:1px 7px;border-radius:99px}
.nav a.on .tag{background:rgba(19,41,75,.18)}
.side .foot{margin-top:auto;font-size:11px;color:#7f93bd;padding:10px}
main{padding:0 28px 40px;min-width:0}
.top{display:flex;align-items:center;gap:14px;padding:18px 0;position:sticky;top:0;background:var(--bg);z-index:5;flex-wrap:wrap}
.top h1{font-size:22px;margin:0}.top p{margin:0;color:var(--mut)}
.top .sp{flex:1}
.user{display:flex;gap:9px;align-items:center;background:var(--card);border:1px solid var(--line);padding:5px 12px 5px 6px;border-radius:99px}
.av{width:28px;height:28px;border-radius:50%;background:var(--navy2);color:#fff;display:grid;place-items:center;font-size:12px;font-weight:700}
.demo{background:#fff4d6;color:#7a5a00;border:1px solid #f0d58a;border-radius:8px;padding:6px 10px;font-size:12px}
.grid{display:grid;gap:16px}.g4{grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}.g2{grid-template-columns:repeat(auto-fit,minmax(340px,1fr))}.g32{grid-template-columns:2fr 1fr}
@media(max-width:980px){.g32{grid-template-columns:1fr}}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:16px}
.card h3{margin:0 0 12px;font-size:15px;display:flex;align-items:center;gap:8px}.card h3 .r{margin-left:auto;font-weight:400;font-size:12px;color:var(--mut)}
.kpi .l{color:var(--mut);font-size:12px;text-transform:uppercase;letter-spacing:.06em}.kpi .v{font-size:32px;font-weight:800;margin:4px 0}.kpi .d{font-size:12px}
.up{color:var(--ok)}.dn{color:var(--bad)}
.kpi{border-top:4px solid var(--gold)}
.btn{border:1px solid var(--line);background:var(--card);color:var(--ink);padding:8px 14px;border-radius:8px;font:inherit;font-weight:600;cursor:pointer}
.btn:hover{border-color:var(--navy2)}.btn.p{background:var(--navy);color:#fff;border-color:var(--navy)}.btn.g{background:var(--gold);color:var(--navy);border-color:var(--gold)}
.btn.ok{background:var(--ok);color:#fff;border-color:var(--ok)}.btn.bad{background:var(--bad);color:#fff;border-color:var(--bad)}.btn.sm{padding:4px 10px;font-size:12px}
.btn:disabled{opacity:.45;cursor:not-allowed}
table{width:100%;border-collapse:collapse}th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.07em;color:var(--mut);padding:8px 10px;border-bottom:1px solid var(--line);white-space:nowrap}
td{padding:10px;border-bottom:1px solid var(--line);vertical-align:middle}tr.click{cursor:pointer}tr.click:hover td{background:rgba(43,108,212,.06)}
.tw{overflow-x:auto}
.chip{display:inline-block;padding:2px 9px;border-radius:99px;font-size:11.5px;font-weight:700;white-space:nowrap}
.c-ok{background:#dcf5e8;color:#11663f}.c-warn{background:#fdecc8;color:#8a5a00}.c-bad{background:#fbdcdc;color:#9a2222}.c-info{background:#dbe8fc;color:#1a4aa0}.c-mut{background:#e8ebf2;color:#4a5670}
@media(prefers-color-scheme:dark){.c-ok{background:#12402c;color:#8ee6b8}.c-warn{background:#4a3507;color:#ffd47a}.c-bad{background:#4a1b1b;color:#ff9c9c}.c-info{background:#16336a;color:#a9c8ff}.c-mut{background:#26334f;color:#b8c3dc}}
input,select,textarea{font:inherit;color:var(--ink);background:var(--card);border:1px solid var(--line);border-radius:8px;padding:8px 10px;width:100%}
label{font-size:12px;color:var(--mut);font-weight:600;display:block;margin-bottom:4px}.f{margin-bottom:12px}.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.bar{height:8px;background:var(--line);border-radius:9px;overflow:hidden}.bar i{display:block;height:100%;background:var(--navy2);border-radius:9px}
.bar.w i{background:var(--warn)}.bar.b i{background:var(--bad)}.bar.o i{background:var(--ok)}
/* stepper */
.steps{display:flex;gap:0;overflow-x:auto;margin-bottom:16px}
.st{flex:1;min-width:112px;text-align:center;font-size:11.5px;color:var(--mut);position:relative;padding-top:34px}
.st:before{content:attr(data-n);position:absolute;top:0;left:50%;transform:translateX(-50%);width:28px;height:28px;border-radius:50%;background:var(--line);color:var(--mut);display:grid;place-items:center;font-weight:800;z-index:1}
.st:after{content:"";position:absolute;top:13px;left:-50%;width:100%;height:2px;background:var(--line)}.st:first-child:after{display:none}
.st.done:before{background:var(--ok);color:#fff;content:"✓"}.st.done:after,.st.cur:after{background:var(--ok)}
.st.cur:before{background:var(--gold);color:var(--navy)}.st.cur{color:var(--ink);font-weight:700}
.chk{display:flex;gap:10px;align-items:flex-start;padding:8px 0;border-bottom:1px dashed var(--line)}.chk input{width:auto;margin-top:3px}
.log{max-height:300px;overflow:auto}.log div{padding:8px 0 8px 14px;border-left:2px solid var(--line);margin-left:6px;position:relative;font-size:13px}
.log div:before{content:"";position:absolute;left:-6px;top:13px;width:10px;height:10px;border-radius:50%;background:var(--navy2)}.log div.auto:before{background:var(--gold)}.log small{color:var(--mut);display:block}
.callout{border-left:4px solid var(--gold);background:rgba(200,160,43,.1);padding:10px 12px;border-radius:6px;margin:10px 0}
.toasts{position:fixed;right:18px;bottom:18px;display:grid;gap:8px;z-index:50}
.toast{background:var(--navy);color:#fff;padding:11px 14px;border-radius:10px;box-shadow:0 8px 24px rgba(0,0,0,.25);max-width:340px;border-left:4px solid var(--gold);animation:in .25s}
.toast small{display:block;color:#b5c3e2}@keyframes in{from{transform:translateY(10px);opacity:0}}
.modal{position:fixed;inset:0;background:rgba(10,18,36,.55);display:none;place-items:center;z-index:40;padding:16px}.modal.on{display:grid}
.modal .box{background:var(--card);border-radius:14px;padding:22px;width:min(640px,100%);max-height:90vh;overflow:auto}
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:14px;overflow-x:auto}.tabs button{background:none;border:0;padding:9px 14px;font:inherit;font-weight:600;color:var(--mut);cursor:pointer;border-bottom:3px solid transparent;white-space:nowrap}.tabs button.on{color:var(--ink);border-color:var(--gold)}
.kan{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(210px,1fr);gap:12px;overflow-x:auto;padding-bottom:6px}
.col{background:rgba(100,112,138,.08);border-radius:10px;padding:10px;min-height:120px}.col h4{margin:0 0 8px;font-size:12px;text-transform:uppercase;letter-spacing:.07em;color:var(--mut);display:flex;justify-content:space-between}
.kc{background:var(--card);border:1px solid var(--line);border-radius:9px;padding:10px;margin-bottom:8px;cursor:pointer}.kc:hover{border-color:var(--gold)}.kc b{display:block}.kc small{color:var(--mut)}
.gantt{display:grid;grid-template-columns:150px repeat(14,minmax(34px,1fr));font-size:11px;gap:2px;align-items:center}
.gantt .h{color:var(--mut);text-align:center}.gantt .n{font-weight:600;font-size:12px}.gantt .cell{height:26px;border-radius:4px;background:var(--line)}
.gantt .bk{background:var(--navy2);color:#fff;display:grid;place-items:center;font-size:10.5px;border-radius:4px;height:26px}.gantt .bk.w{background:var(--warn)}.gantt .bk.b{background:var(--bad)}
.hamb{display:none}
@media(max-width:820px){.app{grid-template-columns:1fr}.side{position:fixed;left:-260px;width:240px;z-index:30;transition:left .2s}.side.open{left:0}.hamb{display:inline-block}main{padding:0 14px 40px}}
@media print{.side,.top .btn,.toasts,.no-print{display:none!important}.app{display:block}}
.login{min-height:100vh;display:grid;grid-template-columns:1.1fr 1fr}
.login .hero{background:linear-gradient(150deg,var(--navy),#0b1a33);color:#fff;padding:48px;display:flex;flex-direction:column;justify-content:center;gap:18px}
.login .hero h1{font-size:34px;margin:0;line-height:1.15}.login .hero li{margin:6px 0;color:#c4d1ee}
.login .form{display:grid;place-items:center;padding:30px}.login .form .card{width:min(380px,100%)}
@media(max-width:820px){.login{grid-template-columns:1fr}.login .hero{padding:28px}}
