:root{--acc:#8ce2d0;--acc-on:#fff;--acc-dark:#35564f;--acc-tint:#f4fcfa;--acc-tint-soft:#f9fefd;--acc-tint-strong:#eafaf7;--acc-border:#dff7f2;--bg:#f5f6f8;--bg-auth:#eef0f3;--surface:#fff;--surface-alt:#fafbfc;--surface-head:#f3f4f6;--surface-seg:#eceef1;--border:#e4e6e9;--border-input:#d5d8dd;--border-soft:#eef0f3;--border-row:#f3f4f6;--text:#1b1d20;--text-2:#3d434b;--text-3:#6b7076;--text-4:#8b9098;--text-5:#a3a8b0;--miss-bg:#fbf2ee;--miss-fg:#b5533f;--miss-bd:#ead6ce;--warn-bg:#f8f4e6;--warn-fg:#8a6a2f;--cell-pad:9px 10px;--cell-h:42px;--table-font:13px;--field-h:46px;--nav-h:36px;--mono:"IBM Plex Mono", ui-monospace, "Consolas", monospace;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-family:Noto Sans KR,system-ui,-apple-system,Malgun Gothic,sans-serif}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body,#root{height:100%}body{background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;margin:0;font-size:14px;line-height:1.5}h1{margin:0;font-size:19px;font-weight:700}a{color:var(--acc-dark);text-decoration:none}a:hover{text-decoration:underline}table{border-collapse:collapse}input,select,button{font-family:inherit}.mono{font-family:var(--mono)}.auth{background:var(--bg-auth);justify-content:center;align-items:center;min-height:100%;padding:24px;display:flex}.auth-inner{width:100%;max-width:380px}.auth-brand{margin-bottom:22px}.auth-brand .mark{color:var(--acc-dark);letter-spacing:.18em;font-size:11px;font-weight:500}.auth-brand .name{margin-top:6px;font-size:20px;font-weight:700}.auth-card{border:1px solid var(--border);background:var(--surface);border-radius:6px;flex-direction:column;gap:14px;padding:22px;display:flex}.auth-note{border-top:1px solid var(--border-soft);color:var(--text-4);padding-top:12px;font-size:12px;line-height:1.6}.field{flex-direction:column;gap:6px;display:flex}.field>span{color:var(--text-3);font-size:12px;font-weight:500}.topbar{z-index:40;border-bottom:1px solid var(--border);background:var(--surface);min-height:44px;color:var(--text-2);align-items:center;gap:12px;padding:6px 14px;display:flex;position:sticky;top:0}.topbar .brand{color:var(--text);letter-spacing:.02em;white-space:nowrap;flex:none;font-size:12.5px;font-weight:700}.topbar .roles{border-left:1px solid var(--border);color:var(--text-5);white-space:nowrap;flex:none;padding-left:12px;font-size:11px}.topbar .right{align-items:center;gap:10px;margin-left:auto;font-size:11.5px;display:flex}.topbar .me{color:var(--text-4);white-space:nowrap}.layout{align-items:flex-start;display:flex}.side{border-right:1px solid var(--border);background:var(--surface);flex:0 0 176px;width:176px;min-height:calc(100vh - 44px);padding:14px 8px;position:sticky;top:44px}.side-label{color:var(--text-5);letter-spacing:.12em;padding:0 8px 8px;font-size:10.5px;font-weight:500}.nav{flex-direction:column;gap:2px;display:flex}.nav a{height:var(--nav-h);color:var(--text-2);white-space:nowrap;border-radius:4px;align-items:center;gap:8px;padding:0 10px;font-size:13px;text-decoration:none;display:flex}.nav a:hover{background:var(--surface-alt);text-decoration:none}.nav a.active{background:var(--acc-tint);color:var(--acc-dark);font-weight:700}.nav .no{width:14px;color:var(--text-5);font-family:var(--mono);font-size:10px}.side-foot{border-top:1px solid var(--border-soft);color:var(--text-4);margin-top:18px;padding-top:12px;padding-left:9px;font-size:11.5px;line-height:1.7}.main-col{flex:auto;width:100%;min-width:0}.weekbar{z-index:30;border-bottom:1px solid var(--border);background:var(--surface);flex-wrap:wrap;align-items:center;gap:10px;padding:10px 14px;display:flex;position:sticky;top:44px}.weekbar .label{color:var(--text-5);font-size:11px;font-weight:500}.weekbar select{min-width:190px;font-weight:500}.weekbar select.year-select{flex:none;min-width:0}.weekbar .status{color:var(--text-3);margin-left:auto;font-size:11.5px}.content{max-width:1400px;padding:20px 18px 40px}.page-head{flex-wrap:wrap;align-items:baseline;gap:10px;margin-bottom:6px;display:flex}.page-head .sub{color:var(--text-4);font-size:12.5px}.lead{color:var(--text-3);margin-bottom:16px;font-size:12.5px}.card{border:1px solid var(--border);background:var(--surface);border-radius:6px;overflow:hidden}.card+.card{margin-top:14px}.card-head{border-bottom:1px solid var(--border-soft);flex-wrap:wrap;align-items:center;gap:10px;padding:10px 14px;display:flex}.card-head .title{white-space:nowrap;flex:none;font-size:13px;font-weight:700}.card-head .right{color:var(--text-3);white-space:nowrap;margin-left:auto;font-size:11.5px}.card-head .hint{color:var(--text-4);flex:100%;order:3;font-size:11.5px}.card-foot{border-top:1px solid var(--border-soft);background:var(--surface-alt);flex-wrap:wrap;align-items:center;gap:8px;padding:12px 14px;display:flex}.card-foot .note{color:var(--text-4);margin-left:auto;font-size:11.5px}.grid-2{grid-template-columns:repeat(auto-fit,minmax(292px,1fr));gap:14px;display:grid}button{cursor:pointer;border:1px solid #0000;border-radius:4px;font-size:13px}button:disabled{cursor:not-allowed}button:focus-visible,input:focus-visible,select:focus-visible,a:focus-visible{outline:2px solid var(--acc-dark);outline-offset:1px}.btn{height:var(--field-h);border-color:var(--border-input);background:var(--surface);color:var(--text-2);padding:0 18px;font-size:13.5px;font-weight:500}.btn:hover:not(:disabled){background:var(--bg)}.btn.acc{background:var(--acc);color:var(--acc-on);border-color:#0000}.btn.acc:hover:not(:disabled){background:var(--acc-border)}.btn:disabled{color:var(--text-5);background:#e9ebee;border-color:#0000}.btn.sm{height:34px;padding:0 11px;font-size:12px}.btn.xs{height:30px;padding:0 10px;font-size:11.5px}.btn.block{width:100%}.btn.danger{color:var(--miss-fg)}.btn.danger:hover:not(:disabled){background:var(--miss-bg)}.linkish{height:auto;color:var(--acc-dark);background:0 0;border:none;padding:0;font-size:11.5px;text-decoration:underline}.icon-btn{border-color:var(--border);background:var(--surface);width:34px;height:36px;color:var(--text-3)}.icon-btn:hover:not(:disabled){background:var(--bg)}.seg{background:var(--surface-seg);border-radius:5px;gap:2px;padding:3px;display:flex}.seg button{height:32px;color:var(--text-3);background:0 0;border:none;padding:0 12px;font-size:12.5px}.seg button.active{background:var(--surface);color:var(--text);font-weight:700}.toolbar{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:12px;display:flex}.toolbar .right{margin-left:auto}input[type=text],input[type=password],select{border:1px solid var(--border-input);background:var(--surface);height:44px;color:var(--text);border-radius:4px;outline:none;padding:0 11px;font-size:14px}.weekbar select,.inline-select{height:36px;padding:0 8px;font-size:13px}select:disabled,input:disabled{color:var(--text-5);background:#f8f9fa}.num-input{height:var(--field-h);border:1px solid var(--border-input);background:var(--surface);min-width:0;color:var(--text);font-family:var(--mono);text-align:right;border-radius:4px;outline:none;padding:0 10px;font-size:16px}.num-input.missing{border-color:var(--miss-bd);background:var(--miss-bg)}.num-input:read-only{border-color:var(--border-soft);background:#f8f9fa}.num-input:focus{border-color:var(--acc)}.field-row{border-bottom:1px solid var(--border-row);flex-wrap:wrap;align-items:center;gap:8px;padding:9px 14px;display:flex}.field-row:last-of-type{border-bottom:none}.field-row .name{flex:40%;min-width:0;font-size:13px}.field-row .group{flex:55%;align-items:center;gap:8px;min-width:0;display:flex}.field-row .state{min-width:52px;color:var(--text-4);text-align:right;font-size:11px;font-weight:500}.field-row .state.missing{color:var(--miss-fg)}.field-row .num-input{flex:auto}.field-row .zero{height:var(--field-h);border-color:var(--border);background:var(--surface);color:var(--text-3);flex:none;padding:0 12px;font-size:12px}.field-row .zero:hover:not(:disabled){background:var(--bg)}.table-wrap{overflow-x:auto}table.grid{min-width:100%;font-size:var(--table-font)}table.grid th{border-right:1px solid #e9ebee;border-bottom:1px solid var(--border);background:var(--surface-head);color:var(--text-3);white-space:nowrap;padding:9px 8px;font-size:11.5px;font-weight:500}table.grid th.row-head{border-right:1px solid var(--border);text-align:left;min-width:74px}table.grid th.total-col,table.grid td.total-col{background:var(--acc-tint);min-width:80px;color:var(--acc-dark);border-right:none;font-weight:700}table.grid td{padding:var(--cell-pad);border-right:1px solid var(--border-row);border-bottom:1px solid var(--border-soft);text-align:right}table.grid td.num,table.grid th.num{font-family:var(--mono);text-align:right}table.grid td.row-head{height:var(--cell-h);border-right:1px solid var(--border);background:var(--surface-alt);font-family:var(--mono);text-align:left;padding:0 12px;font-size:12.5px;font-weight:500}table.grid td.pad0{padding:0}table.grid .sticky-col{z-index:1;position:sticky;left:0}table.grid tr.total-row td{border-top:1px solid var(--acc-border);background:var(--acc-tint);color:var(--acc-dark);border-bottom:none;font-weight:500}table.grid tr.total-row td.row-head{font-family:inherit;font-size:12.5px;font-weight:700}table.grid tr.total-row td.total-col{background:var(--acc-tint-strong);font-weight:700}table.grid td.rowtotal{background:var(--acc-tint-soft);color:var(--acc-dark);font-weight:500}.cell-input{width:100%;min-width:84px;height:var(--cell-h);background:var(--surface);color:var(--text);font-family:var(--mono);font-size:var(--table-font);text-align:right;border:none;outline:none;padding:0 10px}.cell-input.missing{background:var(--miss-bg)}.cell-input:focus{background:var(--acc-tint)}.cell-input:read-only{background:#f8f9fa}td.missing{background:var(--miss-bg);color:var(--miss-fg);font-weight:500}.badge{white-space:nowrap;border-radius:3px;padding:3px 7px;font-size:11px;font-weight:500;display:inline-block}.badge.lock{color:var(--text-3);background:#f1f2f4}.badge.ok{background:var(--acc-tint);color:var(--acc-dark)}.badge.partial{background:var(--warn-bg);color:var(--warn-fg)}.badge.missing{background:var(--miss-bg);color:var(--miss-fg)}.badge.none{background:var(--bg);color:var(--text-5)}.chip{border:1px solid var(--border);background:var(--surface);height:30px;color:var(--text-3);white-space:nowrap;border-radius:15px;align-items:center;gap:6px;padding:0 10px;font-size:11.5px;line-height:1;display:inline-flex}.chip.on{border-color:var(--acc);background:var(--acc-tint);color:var(--acc-dark);font-weight:700}.chip-x{background:var(--acc-border);width:16px;height:16px;color:var(--acc-dark);border:none;border-radius:50%;flex:0 0 16px;justify-content:center;align-items:center;margin-right:-3px;padding:0;font-size:11px;font-weight:700;line-height:1;display:inline-flex}.chip-x:hover{background:var(--miss-bd);color:var(--miss-fg)}.kpis{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:18px;display:grid}.kpi{border:1px solid var(--border);background:var(--surface);border-radius:6px;padding:13px 14px}.kpi .label{color:var(--text-4);font-size:11.5px;font-weight:500}.kpi .value{font-family:var(--mono);margin:5px 0 2px;font-size:22px;font-weight:500}.kpi .sub{color:var(--text-5);font-size:11px}.todo{border:none;border-bottom:1px solid var(--border-row);text-align:left;background:0 0;align-items:center;gap:10px;width:100%;padding:13px 14px;display:flex}.todo:last-child{border-bottom:none}.todo:hover{background:var(--surface-alt)}.todo .dot{border-radius:50%;flex:0 0 6px;width:6px;height:6px}.todo .text{flex:auto;font-size:12.5px}.todo .action{color:var(--acc-dark);white-space:nowrap;font-size:11.5px;font-weight:500}.empty{border:1px dashed var(--border-input);background:var(--surface);color:var(--text-4);text-align:center;border-radius:6px;padding:44px 20px;font-size:12.5px;line-height:1.7}.empty strong{color:var(--text);margin-bottom:6px;font-size:13.5px;font-weight:500;display:block}.legend{border-top:1px solid var(--border-soft);background:var(--surface-alt);color:var(--text-3);flex-wrap:wrap;align-items:center;gap:14px;padding:10px 14px;font-size:11.5px;display:flex}.legend .swatch{border:1px solid var(--miss-bd);background:var(--miss-bg);vertical-align:-2px;border-radius:2px;width:12px;height:12px;margin-right:6px;display:inline-block}.alert{border:1px solid var(--miss-bd);background:var(--miss-bg);color:var(--miss-fg);white-space:pre-line;border-radius:4px;margin-bottom:12px;padding:10px 12px;font-size:12.5px}.alert.warn{background:var(--warn-bg);color:var(--warn-fg);border-color:#e6d6a8}.alert.info{border-color:var(--acc-border);background:var(--acc-tint);color:var(--acc-dark)}.loading{color:var(--text-4);text-align:center;padding:36px 12px;font-size:12.5px}.toast{z-index:60;color:#fff;background:#16302c;border-radius:5px;align-items:center;gap:9px;max-width:90vw;padding:11px 16px;font-size:12.5px;display:flex;position:fixed;bottom:26px;left:50%;transform:translate(-50%);box-shadow:0 8px 24px #0f2f2a38}.toast .dot{background:var(--acc);border-radius:50%;flex:0 0 5px;width:5px;height:5px}.rowset{flex-wrap:wrap;align-items:center;gap:6px;display:flex}@media (width<=767px){.layout{flex-wrap:wrap}.side{border-right:none;border-bottom:1px solid var(--border);flex:100%;width:100%;min-height:0;padding:8px 10px;position:static;overflow-x:auto}.nav{flex-direction:row}.nav a{flex:none}.weekbar{position:static}.weekbar select{flex:160px;min-width:0}.weekbar .status{flex:100%;margin-left:0}.content{padding:14px 12px 40px}.field-row .name,.field-row .group{flex:100%}}
