:root{--ink:#161b26;--ink-2:#222a3a;--slate:#5b6577;--slate-2:#8a93a6;--line:#e6e9ef;--line-2:#eef1f6;--canvas:#f6f7f9;--card:#ffffff;--accent:#0e7c6b;--accent-soft:#e2f1ee;--accent-ink:#0a5c4f;--under:#c0392b;--under-soft:#fbeae8;--ideal:#1f9d57;--ideal-soft:#e6f5ec;--over:#c17a14;--over-soft:#fbf0dd;--info:#2f6bd0;--info-soft:#e8f0fc;--radius:12px;--shadow:0 1px 2px rgba(16,24,40,.04),0 4px 14px rgba(16,24,40,.05)}*{box-sizing:border-box}body{margin:0;font-family:Inter,system-ui,sans-serif;background:var(--canvas);color:var(--ink);font-size:14px;-webkit-font-smoothing:antialiased}.mono{font-family:JetBrains Mono,monospace;font-variant-numeric:tabular-nums}.app{display:flex;min-height:100vh}.side{width:236px;background:var(--ink);color:#cfd5e1;display:flex;flex-direction:column;position:sticky;top:0;height:100vh;flex-shrink:0}.brand{padding:20px 20px 16px;display:flex;align-items:center;gap:11px;border-bottom:1px solid rgba(255,255,255,.07)}.brand .mark{width:34px;height:34px;border-radius:9px;background:linear-gradient(135deg,var(--accent),#13a78f);display:grid;place-items:center;color:#fff;font-weight:700;font-size:15px}.brand b{color:#fff;font-size:15px;letter-spacing:-.01em;display:block;line-height:1.1}.brand span{font-size:11px;color:#7e889c}.nav{padding:14px 12px;display:flex;flex-direction:column;gap:2px}.nav-label{font-size:10.5px;text-transform:uppercase;letter-spacing:.09em;color:#6b758c;padding:12px 12px 6px}.nav a{display:flex;align-items:center;gap:11px;padding:9px 12px;border-radius:9px;color:#c2c9d6;text-decoration:none;font-weight:500;cursor:pointer;transition:.15s}.nav a:hover{background:#ffffff0d;color:#fff}.nav a.active{background:var(--accent);color:#fff}.nav a svg{width:17px;height:17px;flex-shrink:0}.side-foot{margin-top:auto;padding:14px;border-top:1px solid rgba(255,255,255,.07);display:flex;align-items:center;gap:10px}.avatar{width:32px;height:32px;border-radius:50%;background:#33405a;display:grid;place-items:center;font-weight:600;color:#fff;font-size:13px}.side-foot small{display:block;color:#7e889c;font-size:11px}.side-foot b{font-size:12.5px;color:#e7eaf0;font-weight:600}.main{flex:1;min-width:0;display:flex;flex-direction:column}.topbar{height:60px;background:var(--card);border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 28px;position:sticky;top:0;z-index:5}.iconbtn{display:grid;place-items:center;width:34px;height:34px;border:1px solid var(--line);background:#fff;border-radius:9px;cursor:pointer;color:var(--ink)}.iconbtn:hover{background:#fafbfc}.iconbtn svg{width:18px;height:18px}.app.side-collapsed .side{display:none}.topbar h1{font-size:17px;font-weight:600;letter-spacing:-.01em;margin:0}.topbar .crumb{font-size:12px;color:var(--slate-2);margin-top:2px}.pill{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:500;padding:5px 11px;border-radius:20px;background:var(--accent-soft);color:var(--accent-ink)}.content{padding:24px 28px 60px;max-width:1280px;width:100%}.view{display:none}.view.show{display:block;animation:fade .25s ease}@keyframes fade{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:22px;flex-wrap:wrap}.tabs button{border:0;background:none;padding:11px 16px;font:inherit;font-weight:500;color:var(--slate);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px}.tabs button.active{color:var(--accent-ink);border-color:var(--accent)}.subtabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:16px}.subtabs button{border:1px solid var(--line);background:#fff;padding:6px 12px;border-radius:20px;font:inherit;font-size:12.5px;color:var(--slate);cursor:pointer}.subtabs button.active{background:var(--accent-soft);color:var(--accent-ink);border-color:var(--accent-soft);font-weight:600}.grid{display:grid;gap:16px}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.card .hd{padding:15px 18px;border-bottom:1px solid var(--line-2);display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}.card .hd h3{margin:0;font-size:14px;font-weight:600}.card .hd .sub{font-size:11.5px;color:var(--slate-2)}.card .bd{padding:16px 18px}.stat-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px;margin-bottom:20px}.stat{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:15px 16px;box-shadow:var(--shadow)}.stat .lab{font-size:11.5px;color:var(--slate);font-weight:500;display:flex;align-items:center;gap:7px}.stat .dot{width:8px;height:8px;border-radius:50%}.stat .num{font-size:26px;font-weight:700;letter-spacing:-.02em;margin-top:7px}.stat .meta{font-size:11px;color:var(--slate-2);margin-top:2px}.gsec{margin-bottom:18px}.ghdr{background:var(--ink);color:#fff;font-weight:700;font-size:13px;letter-spacing:.02em;padding:10px 16px;border-radius:var(--radius) var(--radius) 0 0;display:flex;align-items:center;gap:10px}.ghdr span{font-weight:400;font-size:11px;color:#9aa3b5}.chartwrap{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:16px}.chart-c{border:1px solid var(--line-2);border-radius:10px;padding:10px 12px 8px;background:#fff}.chart-t{text-align:center;font-size:12.5px;font-weight:600;margin-bottom:2px}.chart-leg{display:flex;justify-content:space-between;gap:4px;font-size:10px;color:var(--slate);margin-top:5px;flex-wrap:wrap}.chart-leg span{display:flex;align-items:center;gap:4px}.chart-leg i{width:14px;height:3px;border-radius:2px;display:inline-block}.chart-leg b{font-family:JetBrains Mono,monospace;font-weight:600;color:var(--slate-2);font-size:9.5px}.hboxes{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;margin-top:8px}.hbox{border-radius:9px;padding:7px 6px;text-align:center}.hbox .hl{font-size:11px;font-weight:700;line-height:1.1}.hbox .hn{font-size:19px;font-weight:800;line-height:1.15;font-family:JetBrains Mono,monospace}.hbox .ht{font-size:9.5px;opacity:.85;margin-top:1px}.hbox.under{background:#fdf3e7;color:#9a6212}.hbox.ok{background:#e9f7ee;color:#16794a}.hbox.over{background:#fdeceb;color:#a5322a}table{width:100%;border-collapse:collapse;font-size:12.5px}thead th{text-align:left;font-weight:600;color:var(--slate);font-size:11px;text-transform:uppercase;letter-spacing:.04em;padding:9px 12px;border-bottom:1px solid var(--line);background:#fafbfc;white-space:nowrap}tbody td{padding:9px 12px;border-bottom:1px solid var(--line-2);white-space:nowrap}tbody tr:hover{background:#fafbfc}.pager{display:flex;align-items:center;gap:8px;margin-top:10px;flex-wrap:wrap}.pager select{padding:5px 8px;border:1px solid var(--line);border-radius:7px;font:inherit;font-size:12px}.apbox{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:12px}.apcell{flex:1;min-width:180px;border:1px solid var(--line);border-radius:10px;padding:10px 12px;background:#fbfcfd}.aphd{font-weight:600;font-size:13px;margin-bottom:3px}.apnote{margin-top:5px;font-size:12px;color:var(--slate);font-style:italic}.apform{border:1px solid var(--line);border-radius:10px;padding:12px;background:var(--accent-soft)}.wos-up{color:var(--ideal);font-weight:600}.wos-down{color:var(--under);font-weight:600}.dash thead th{background:#1f4eb8;color:#fff;border-bottom-color:#1a44a0}.compact thead th{padding:4px 8px}.compact tbody td{padding:3px 8px;font-size:12.5px}.exporting,.exporting *{overflow:visible!important}.prgrid{max-height:64vh;overflow:auto;border:1px solid var(--line);border-radius:8px}.prgrid table{border-collapse:separate;border-spacing:0}.prgrid thead th{position:sticky;top:0;z-index:3}.prgrid tbody td{background:#fff}.prgrid tbody tr:hover td{background:#fafbfc}td.num,th.num{text-align:right;font-family:JetBrains Mono,monospace;font-variant-numeric:tabular-nums}.tag{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:600;padding:3px 9px;border-radius:20px}.t-under{background:var(--under-soft);color:var(--under)}.t-ideal{background:var(--ideal-soft);color:var(--ideal)}.t-over{background:var(--over-soft);color:var(--over)}.t-wait{background:#eef1f6;color:#5b6577}.t-prog{background:var(--info-soft);color:var(--info)}.t-ready{background:var(--accent-soft);color:var(--accent-ink)}.t-deliv{background:var(--ideal-soft);color:var(--ideal)}.wos-neg{color:var(--under);font-weight:600}.up{color:var(--ideal);font-weight:600}.down{color:var(--under);font-weight:600}.btn{display:inline-flex;align-items:center;gap:7px;border:1px solid var(--line);background:#fff;color:var(--ink);font:inherit;font-weight:500;font-size:13px;padding:8px 14px;border-radius:9px;cursor:pointer;transition:.15s}.btn:hover{border-color:#cdd3dd;background:#fafbfc}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.primary:hover{background:var(--accent-ink)}.btn svg{width:15px;height:15px}.btn.sm{padding:5px 10px;font-size:12px}input.adj,input.fo{width:62px;border:1px solid var(--line);border-radius:7px;padding:5px 7px;font-family:JetBrains Mono,monospace;font-size:12px;text-align:right}input.fo{width:72px;background:#fffdf5}input.adj:focus,input.fo:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}input.cell{width:98px;border:1px solid var(--line);border-radius:7px;padding:5px 7px;font:inherit;font-size:12px}input.cell.wide{width:140px}input.cell:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}.adjbar{display:flex;align-items:center;gap:14px;flex-wrap:wrap;background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:13px 16px;margin-bottom:16px;box-shadow:var(--shadow)}.adjbar .f{display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--slate)}.adjbar input[type=number],.adjbar input[type=text]{width:78px;border:1px solid var(--line);border-radius:8px;padding:7px 9px;font-family:JetBrains Mono,monospace;text-align:right}.adjbar input[type=date],.filterbar input[type=date]{border:1px solid var(--line);border-radius:9px;padding:7px 11px;font:inherit;font-size:12.5px;background:#fff;color:var(--ink);cursor:pointer;transition:.15s;box-shadow:0 1px 2px #1018280a}.adjbar input[type=date]:hover,.filterbar input[type=date]:hover{border-color:#cdd3dd;background:#fafbfc}.adjbar input[type=date]:focus,.filterbar input[type=date]:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}.adjbar input[type=date]::-webkit-calendar-picker-indicator,.filterbar input[type=date]::-webkit-calendar-picker-indicator{opacity:.5;cursor:pointer}.adjbar select,.filterbar select{border:1px solid var(--line);border-radius:8px;padding:7px 9px;font:inherit;font-size:12.5px;background:#fff;color:var(--ink)}.hint{font-size:11.5px;color:var(--slate-2)}.appr{display:flex;gap:10px;flex-wrap:wrap}.appr .step{flex:1;min-width:150px;border:1px solid var(--line);border-radius:10px;padding:12px 14px;display:flex;gap:11px;align-items:center}.appr .ic{width:30px;height:30px;border-radius:8px;display:grid;place-items:center;flex-shrink:0;font-weight:700;font-size:13px}.appr .ic.ok{background:var(--ideal-soft);color:var(--ideal)}.appr .ic.wait{background:#eef1f6;color:var(--slate-2)}.appr small{color:var(--slate-2);font-size:11px}.appr b{font-size:13px;display:block}.steps{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:14px}.upl{border:1px dashed #cfd6e2;border-radius:12px;padding:18px;text-align:center;background:#fcfdfe}.upl.done{border-style:solid;border-color:var(--accent-soft);background:var(--accent-soft)}.upl .n{width:26px;height:26px;border-radius:50%;background:var(--ink);color:#fff;display:grid;place-items:center;margin:0 auto 10px;font-size:12px;font-weight:600}.upl.done .n{background:var(--accent)}.upl h4{margin:0 0 4px;font-size:13.5px}.upl p{margin:0 0 12px;font-size:11.5px;color:var(--slate-2)}.upl .ok{color:var(--accent-ink);font-size:12px;font-weight:600;display:flex;align-items:center;justify-content:center;gap:6px}.split{display:grid;grid-template-columns:1.2fr .9fr;gap:16px}.kv{display:grid;grid-template-columns:130px 1fr;gap:8px 12px;font-size:13px}.kv dt{color:var(--slate)}.kv dd{margin:0;font-weight:500}.prog{position:relative;padding-left:24px}.prog .ln{position:absolute;left:9px;top:6px;bottom:6px;width:2px;background:var(--line)}.prog .it{position:relative;padding:0 0 10px}.prog .it:last-child{padding-bottom:0}.prog .it .pdot{position:absolute;left:-19px;top:2px;width:14px;height:14px;border-radius:50%;background:#fff;border:2px solid var(--line)}.prog .it.done .pdot{background:var(--accent);border-color:var(--accent)}.prog .it.cur .pdot{border-color:var(--info);box-shadow:0 0 0 3px var(--info-soft)}.prog .it h5{margin:0;font-size:13px}.prog .it .pic{font-size:11.5px;color:var(--slate);margin-top:2px}.prog .it .sla{font-size:11px;color:var(--info);margin-top:3px;font-family:JetBrains Mono,monospace}.prog .seg{position:relative;padding:0 0 10px 2px;min-height:6px}.prog .seg .slachip{display:inline-block;font-size:10px;color:var(--info);background:var(--info-soft);border:1px solid #d6e3f8;border-radius:20px;padding:1px 9px;font-family:JetBrains Mono,monospace}.prog .cap{margin-top:8px;border:1px solid var(--line);border-radius:9px;padding:9px;background:#fafbfc}.prog .cap .row{display:flex;gap:8px;margin-top:8px}.filterbar{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:16px}.filterbar input,.filterbar select{border:1px solid var(--line);border-radius:9px;padding:8px 11px;font:inherit;font-size:13px;background:#fff;color:var(--ink)}.muted{color:var(--slate-2)}.link{color:var(--info);cursor:pointer;font-weight:500}.note{font-size:11.5px;color:var(--slate-2);margin-top:10px}.note.ok{color:#0e7c6b;font-size:13px}.note.err{color:#a5322a;font-size:13px}.lbl{font-size:11px;color:var(--slate);text-transform:uppercase;letter-spacing:.04em;margin-bottom:5px;font-weight:600}.inp{padding:7px 9px;border:1px solid var(--line);border-radius:8px;font:inherit;font-size:13px;background:#fff;color:var(--ink)}.sw{position:relative;display:inline-block;width:42px;height:24px;cursor:pointer}.sw input{opacity:0;width:0;height:0}.sw>span{position:absolute;top:0;right:0;bottom:0;left:0;background:#cdd3dd;border-radius:20px;transition:.2s}.sw>span:before{content:"";position:absolute;width:18px;height:18px;left:3px;top:3px;background:#fff;border-radius:50%;transition:.2s}.sw input:checked+span{background:var(--accent)}.sw input:checked+span:before{transform:translate(18px)}.formgrid label{display:block;font-size:12.5px;color:var(--slate)}.formgrid input,.formgrid select,.formgrid textarea{width:100%;margin-top:5px;padding:8px;border:1px solid var(--line);border-radius:8px;font:inherit;font-size:13px}.ppanel label{display:block;font-size:12px;color:var(--slate);font-weight:500;margin-bottom:12px}select.soft,.formgrid select,.ppanel select{appearance:none;-webkit-appearance:none;-moz-appearance:none;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%238a93a6' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>");background-repeat:no-repeat;background-position:right 11px center;padding-right:32px;cursor:pointer}.ppanel select{width:100%;margin-top:6px;padding:9px 32px 9px 12px;border:1px solid var(--line);border-radius:9px;font:inherit;font-size:13px;background-color:#fff;color:var(--ink)}.ppanel select:hover{border-color:#cdd3dd}.ppanel select:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}.cellsel{appearance:none;-webkit-appearance:none;-moz-appearance:none;min-width:118px;border:1px solid var(--line);border-radius:7px;padding:5px 24px 5px 8px;font:inherit;font-size:12px;color:var(--ink);background-color:#fff;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%238a93a6' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>");background-repeat:no-repeat;background-position:right 7px center;cursor:pointer}.cellsel:hover{border-color:#cdd3dd}.cellsel:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}.nav-backdrop{display:none}@media (max-width:760px){.chartwrap{grid-template-columns:1fr}}@media (max-width:880px){.side{position:fixed;top:0;left:0;z-index:60;transform:translate(-100%);transition:transform .25s ease;box-shadow:2px 0 18px #00000047}.app.nav-open .side{transform:translate(0)}.app.side-collapsed .side{transform:translate(-100%)}.nav-backdrop{display:block;position:fixed;top:0;right:0;bottom:0;left:0;background:#10182873;z-index:55}.split{grid-template-columns:1fr}.formgrid{grid-template-columns:1fr!important}.topbar{padding:0 14px;height:56px}.topbar h1{font-size:15px}.content{padding:16px 14px 60px}.tabs{margin-bottom:16px}}@media (max-width:560px){.pill,.topbar .crumb{display:none}}.center{min-height:100vh;display:grid;place-items:center;background:var(--canvas)}.login{width:340px;padding:28px}.login-head{text-align:center;margin-bottom:18px}.login-mark{width:42px;height:42px;border-radius:11px;margin:0 auto 12px;background:linear-gradient(135deg,var(--accent),#13a78f);display:grid;place-items:center;color:#fff;font-weight:700;font-size:19px}.login h1{margin:0 0 4px;font-size:20px;text-align:center}.login p{margin:0;color:var(--slate);font-size:13px;text-align:center}.login label{display:block;font-size:12.5px;color:var(--slate);margin-top:12px}.login input{width:100%;margin-top:5px;padding:9px;border:1px solid var(--line);border-radius:8px;font:inherit}.login .pw-wrap{position:relative;display:block}.login .pw-wrap input{padding-right:40px}.login .pw-peek{position:absolute;right:4px;top:5px;width:32px;height:32px;display:grid;place-items:center;margin:0;padding:0;background:transparent;border:0;color:var(--slate);cursor:pointer}.login .pw-peek:hover{color:var(--ink);background:transparent}.login .err{color:var(--under);font-size:12.5px;margin-top:12px;text-align:center}.login button{font:inherit;font-weight:600;border:0;background:var(--accent);color:#fff;padding:10px 14px;border-radius:9px;cursor:pointer;margin-top:18px;width:100%}.login button:hover{background:var(--accent-ink)}.dropzone{border:1.5px dashed var(--line);border-radius:10px;padding:14px 12px;text-align:center;cursor:pointer;background:#fafbfc;transition:.15s;font-size:12px;color:var(--slate)}.dropzone:hover,.dropzone.drag{border-color:var(--accent);background:var(--accent-soft);color:var(--accent-ink)}.dropzone.has{border-style:solid;border-color:var(--accent);background:var(--accent-soft);color:var(--accent-ink)}.dropzone .dz-ic{font-size:18px;display:block;margin-bottom:3px;line-height:1}.empty{padding:22px;text-align:center;color:var(--slate);font-size:13px}.legend{display:flex;gap:14px;align-items:center;font-size:11.5px;color:var(--slate);margin:2px 0 10px}.legend i{width:10px;height:10px;border-radius:2px;display:inline-block;margin-right:5px;vertical-align:-1px}
