:root{
    --bg:#F4EFE4;--panel:#FFFFFF;--panel2:#FAF6EC;--ink:#241F18;--ink-soft:#7A6E58;
    --line:#E4DAC7;--line-strong:#CDBFA3;--indigo:#4C3A26;--indigo-soft:#F0E9DA;
    --gold:#B98A2E;--gold-soft:#F6EEDC;
    --red:#B5382C;--green:#3C7A54;--amber:#B4791B;--teal:#3C8C7E;/* 2026-07-23 gold 오염 복원 */--radius:12px;--side:232px;
    --font:"Pretendard","Malgun Gothic","Apple SD Gothic Neo","Segoe UI",system-ui,sans-serif;
  }
  /* --teal: 2026-07-23 gold 오염 복원 (라이트 #3C8C7E · 다크 #5FB3A3) */
  @media (prefers-color-scheme:dark){:root{--bg:#17130E;--panel:#211B13;--panel2:#2A2318;--ink:#EFE7D8;--ink-soft:#A99878;--line:#3A3222;--line-strong:#4A4030;--indigo:#C9A96A;--indigo-soft:#332A1B;--gold:#D4A94C;--gold-soft:#33291A;--red:#D96A4F;--green:#6FBF8E;--amber:#D9A84E;--teal:#5FB3A3;}}
  :root[data-theme="dark"]{--bg:#17130E;--panel:#211B13;--panel2:#2A2318;--ink:#EFE7D8;--ink-soft:#A99878;--line:#3A3222;--line-strong:#4A4030;--indigo:#C9A96A;--indigo-soft:#332A1B;--gold:#D4A94C;--gold-soft:#33291A;--red:#D96A4F;--green:#6FBF8E;--amber:#D9A84E;--teal:#5FB3A3;}
  :root[data-theme="light"]{--bg:#F4EFE4;--panel:#FFFFFF;--panel2:#FAF6EC;--ink:#241F18;--ink-soft:#7A6E58;--line:#E4DAC7;--line-strong:#CDBFA3;--indigo:#4C3A26;--indigo-soft:#F0E9DA;--gold:#B98A2E;--gold-soft:#F6EEDC;--red:#B5382C;--green:#3C7A54;--amber:#B4791B;--teal:#3C8C7E;}
  *{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--font);font-size:15px;-webkit-font-smoothing:antialiased}.hidden{display:none!important}
  #login{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}
  .loginbox{background:var(--panel);border:1px solid var(--line);border-radius:18px;padding:34px 30px;width:100%;max-width:380px;text-align:center;box-shadow:0 12px 40px rgba(0,0,0,.08)}
  .loginbox img{width:64px;height:64px;object-fit:contain}.loginbox h1{font-size:21px;margin:14px 0 3px;font-weight:800}.loginbox .sub{color:var(--ink-soft);font-size:13px;margin:0 0 22px}.loginbox .who{font-size:12px;color:var(--ink-soft);font-weight:700;text-align:left;margin:0 0 8px}
  .ubtn{width:100%;display:flex;align-items:center;gap:12px;padding:13px 15px;border:1px solid var(--line-strong);border-radius:11px;background:var(--panel2);cursor:pointer;font-family:inherit;margin-bottom:9px;transition:.12s;text-align:left}.ubtn:hover{border-color:var(--indigo);background:var(--indigo-soft)}
  .ubtn .av{width:38px;height:38px;border-radius:50%;background:var(--indigo);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:15px;flex:none}.ubtn.admin .av{background:var(--gold)}.ubtn .nm{font-weight:800;font-size:15px}.ubtn .rl{font-size:12px;color:var(--ink-soft)}
  .loginnote{font-size:11.5px;color:var(--amber);background:color-mix(in srgb,var(--amber) 12%,transparent);border:1px solid var(--amber);border-radius:8px;padding:8px 10px;margin-top:14px;line-height:1.5}
  #app{display:grid;grid-template-columns:var(--side) 1fr;grid-template-rows:auto 1fr;grid-template-areas:"side top" "side main";min-height:100vh}
  .topbar{grid-area:top;background:var(--panel);border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:11px 22px;position:sticky;top:0;z-index:10}
  .topbar .pt{font-size:16px;font-weight:800}.topbar .rt{display:flex;align-items:center;gap:12px}
  .userchip{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:700}.userchip .av{width:28px;height:28px;border-radius:50%;background:var(--indigo);color:#fff;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:800}.userchip.admin .av{background:var(--gold)}
  .rolebadge{font-size:10.5px;font-weight:800;padding:2px 8px;border-radius:6px;background:var(--indigo-soft);color:var(--indigo)}.rolebadge.admin{background:var(--gold-soft);color:var(--gold)}
  .lo{font-size:12px;color:var(--ink-soft);background:none;border:1px solid var(--line);border-radius:7px;padding:5px 10px;cursor:pointer;font-family:inherit}.lo:hover{border-color:var(--red);color:var(--red)}
  .side{grid-area:side;background:var(--panel);border-right:1px solid var(--line);padding:16px 12px;position:sticky;top:0;height:100vh;overflow-y:auto}
  .side .brand{display:flex;align-items:center;gap:9px;padding:4px 8px 14px}.side .brand img{width:32px;height:32px;object-fit:contain}.side .brand b{font-size:14.5px;font-weight:800;line-height:1.2}
  .navgroup{font-size:10.5px;font-weight:800;color:var(--ink-soft);letter-spacing:.05em;text-transform:uppercase;padding:12px 10px 5px}
  .nav{display:flex;align-items:center;gap:10px;padding:8px 11px;border-radius:9px;cursor:pointer;font-size:13px;font-weight:600;color:var(--ink);margin-bottom:1px}.nav:hover{background:var(--panel2)}.nav.on{background:var(--indigo);color:#fff}.nav .ic{font-size:15px;width:19px;text-align:center}.nav.adminitem{color:var(--gold)}.nav.adminitem.on{background:var(--gold);color:#fff}
  .main{grid-area:main;padding:22px 26px 60px;max-width:none}  /* 검수요청: 창 크기에 맞춰 자동 확장 */
  .pageh{font-size:21px;font-weight:800;margin:0 0 3px}.pagesub{color:var(--ink-soft);font-size:13px;margin:0 0 18px}
  .mock{display:inline-block;font-size:11px;font-weight:700;color:var(--amber);background:color-mix(in srgb,var(--amber) 12%,transparent);border:1px solid var(--amber);border-radius:6px;padding:2px 8px;margin-left:8px}
  .kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:11px;margin-bottom:16px}
  .kpi{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:14px 16px}.kpi .l{font-size:12px;color:var(--ink-soft);font-weight:700}.kpi .v{font-size:24px;font-weight:800;margin-top:3px;font-variant-numeric:tabular-nums}.kpi .d{font-size:11.5px;margin-top:3px;font-weight:700}.kpi .d.up{color:var(--green)}.kpi .d.down{color:var(--red)}.kpi .d.mut{color:var(--ink-soft)}
  .card{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:16px 18px;margin-bottom:14px}.card h3{margin:0 0 12px;font-size:14.5px;font-weight:800;display:flex;justify-content:space-between;align-items:center}
  .grid2{display:grid;grid-template-columns:1fr 1fr;gap:14px}@media(max-width:820px){.grid2{grid-template-columns:1fr}}
  table{width:100%;border-collapse:collapse;font-size:12.5px}th,td{padding:7px 10px;border-bottom:1px solid var(--line);text-align:left;white-space:nowrap}th{font-size:10.5px;color:var(--ink-soft);font-weight:800;text-transform:uppercase;background:var(--panel2);position:sticky;top:0}td.num{text-align:right;font-variant-numeric:tabular-nums}th.num{text-align:right}.tablewrap{overflow:auto;border:1px solid var(--line);border-radius:12px;max-height:calc(100vh - 310px);min-height:220px}table.fit{width:auto}
  .pc-g{padding:5px 10px;font-size:10.5px;font-weight:800;color:var(--ink-soft);background:var(--panel2);position:sticky;top:0}.pc-i{padding:6px 11px;cursor:pointer;font-size:12.5px}.pc-i:hover{background:var(--indigo);color:#fff}
  .memocell{min-width:190px;max-width:300px;white-space:normal;line-height:1.45;font-size:12.3px;cursor:pointer;border:1px dashed transparent;border-radius:7px;padding:4px 7px}.memocell:hover{border-color:var(--indigo);background:var(--panel2)}.memocell.empty{color:var(--ink-soft)}
  #memoOverlay{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:200;display:flex;align-items:center;justify-content:center}#memoOverlay .box{background:var(--panel);border:1px solid var(--line-strong);border-radius:14px;padding:18px;width:min(560px,92vw)}#memoOverlay textarea{width:100%;min-height:150px;font:inherit;font-size:13px;background:var(--panel2);color:var(--ink);border:1px solid var(--line-strong);border-radius:9px;padding:10px;margin-top:10px;resize:vertical}
  .logline{display:flex;gap:8px;align-items:center;padding:6px 9px;border-bottom:1px solid var(--line);font-size:12.3px;white-space:normal}.logline:last-child{border-bottom:0}.logline .lt{font-weight:800;color:var(--ink-soft);font-variant-numeric:tabular-nums;white-space:nowrap}.logline .lm{line-height:1.45}
  .gsearch{flex:1;display:flex;justify-content:center;padding:0 12px}.gsearch input{width:min(320px,100%);font:inherit;font-size:12.8px;padding:7px 12px;border:1px solid var(--line-strong);border-radius:99px;background:var(--panel2);color:var(--ink)}.gsearch input:focus{outline:none;border-color:var(--indigo)}
  #gsList .gs-i{display:flex;gap:7px;align-items:center;padding:8px 11px;cursor:pointer;font-size:12.8px;border-bottom:1px solid var(--line)}#gsList .gs-i:last-child{border-bottom:0}#gsList .gs-i:hover{background:var(--indigo);color:#fff}#gsList .gs-b{font-size:10px;font-weight:800;padding:1px 6px;border-radius:5px}#gsList .gs-b.a{background:var(--indigo-soft);color:var(--indigo)}#gsList .gs-b.b{background:color-mix(in srgb,var(--green) 15%,transparent);color:var(--green)}#gsList .gs-i:hover .gs-b{background:rgba(255,255,255,.25);color:#fff}#gsList .gs-m{color:var(--ink-soft);font-size:11.5px}#gsList .gs-i:hover .gs-m{color:rgba(255,255,255,.8)}#gsList .gs-b.m{background:var(--gold-soft);color:var(--gold)}#gsList .gs-i.act{background:var(--indigo);color:#fff}#gsList .gs-i.act .gs-m{color:rgba(255,255,255,.8)}#gsList .gs-i.act .gs-b{background:rgba(255,255,255,.25);color:#fff}
  @media(max-width:760px){.gsearch{padding:0 6px}.gsearch input{width:100%}}
  .st{font-size:10.5px;font-weight:800;padding:2px 7px;border-radius:6px}.st.a{background:var(--indigo-soft);color:var(--indigo)}.st.b{background:color-mix(in srgb,var(--green) 15%,transparent);color:var(--green)}.st.c{background:color-mix(in srgb,var(--amber) 15%,transparent);color:var(--amber)}.st.d{background:color-mix(in srgb,var(--red) 12%,transparent);color:var(--red)}
  .st.live{background:color-mix(in srgb,var(--green) 15%,transparent);color:var(--green)}.st.est{background:color-mix(in srgb,var(--amber) 15%,transparent);color:var(--amber)}.st.fut{background:var(--panel2);color:var(--ink-soft);border:1px dashed var(--line-strong)}
  .banner{display:grid;grid-template-columns:repeat(auto-fit,minmax(225px,1fr));gap:9px;margin-bottom:12px}.banner .bn{border:1px solid var(--line);border-left:4px solid var(--gold);background:var(--panel);border-radius:10px;padding:10px 12px;font-size:12.5px;line-height:1.5}.banner .bn b{display:block;font-size:11px;color:var(--ink-soft);letter-spacing:.03em;margin-bottom:2px}
  .vsrow{display:grid;grid-template-columns:1fr 92px 1fr;align-items:center;gap:7px;margin-bottom:7px;font-size:12px}.vsrow .lbl{text-align:center;font-weight:700;color:var(--ink-soft);font-size:11.5px}.vsrow .side{display:flex;align-items:center;gap:6px;min-width:0}.vsrow .side.a{justify-content:flex-end}.vsrow .bar{display:block;height:14px;border-radius:4px}.vsrow .side.a .bar{background:var(--indigo)}.vsrow .side.b .bar{background:var(--gold)}.vsrow .v{font-weight:800;font-variant-numeric:tabular-nums;flex:none}
  select,input.f{font-family:inherit;font-size:12px;border:1px solid var(--line-strong);border-radius:6px;padding:5px 8px;background:var(--panel);color:var(--ink)}
  .btn{font-family:inherit;font-size:13px;font-weight:700;cursor:pointer;border:1px solid var(--indigo);background:var(--indigo);color:#fff;padding:9px 15px;border-radius:9px}.btn.ghost{background:transparent;color:var(--indigo)}.btn.sm{padding:6px 11px;font-size:12px}
  .toolpanel{text-align:center;padding:30px 20px;border:2px dashed var(--line-strong);border-radius:14px;background:var(--panel)}.toolpanel .big{font-size:38px}.toolpanel h3{margin:8px 0 4px;font-size:16px}.toolpanel p{color:var(--ink-soft);font-size:13px;margin:0 auto 12px;max-width:44ch}
  .infoline{font-size:12px;color:var(--ink-soft);background:var(--panel2);border:1px solid var(--line);border-radius:9px;padding:9px 12px;margin-top:10px;line-height:1.55}
  .filters{display:flex;gap:7px;flex-wrap:wrap;align-items:center;margin-bottom:11px}
  .tabs,.chtabs,.bktabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}.tab{font-family:inherit;font-size:12.5px;font-weight:700;cursor:pointer;border:1px solid var(--line-strong);background:var(--panel);color:var(--ink-soft);padding:7px 13px;border-radius:8px}.tab.on{background:var(--indigo);border-color:var(--indigo);color:#fff}
  .addtab{border-style:dashed;color:var(--gold);border-color:var(--gold)}.addtab:hover{background:var(--gold-soft)}
  .distrow{display:flex;align-items:center;gap:9px;margin-bottom:6px;font-size:12.5px}.distrow .lb{width:80px;flex:none;font-weight:600}.distrow .bar{flex:1;height:16px;background:var(--panel2);border-radius:5px;overflow:hidden}.distrow .bar i{display:block;height:100%;border-radius:5px}.distrow .vl{width:36px;text-align:right;font-weight:800;font-variant-numeric:tabular-nums}
  .cal{display:grid;grid-template-columns:repeat(7,1fr);gap:3px}.cal .wd{text-align:center;font-size:10px;color:var(--ink-soft);font-weight:700}.cal .c{min-height:30px;border-radius:6px;display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:11px;color:var(--ink-soft);background:var(--panel2)}.cal .c.on{color:#fff}.cal .c .n{font-size:8px;font-weight:800}
  .folder{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}.fold{background:var(--panel);border:1px solid var(--line);border-radius:11px;padding:14px;cursor:pointer;text-align:center}.fold:hover{border-color:var(--indigo)}.fold .fi{font-size:30px}.fold .fn{font-weight:700;font-size:13px;margin-top:5px}.fold .fc{font-size:11px;color:var(--ink-soft)}
  .filerow{display:flex;align-items:center;gap:10px;padding:8px 11px;border:1px solid var(--line);border-radius:9px;margin-bottom:6px;font-size:13px}.filerow .fn{flex:1}
  .form{display:grid;grid-template-columns:1fr 1fr;gap:11px}@media(max-width:640px){.form{grid-template-columns:1fr}}.field label{display:block;font-size:11.5px;font-weight:700;color:var(--ink-soft);margin-bottom:3px}.field input,.field select{width:100%;font-family:inherit;font-size:13px;border:1px solid var(--line-strong);border-radius:7px;padding:8px 10px;background:var(--panel);color:var(--ink)}
  .toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%);background:#22262f;color:#fff;padding:11px 18px;border-radius:10px;font-size:13px;font-weight:600;opacity:0;transition:.2s;z-index:60;box-shadow:0 6px 24px rgba(0,0,0,.3)}.toast.show{opacity:1}
  .theme{position:fixed;bottom:14px;right:14px;background:var(--panel);border:1px solid var(--line);color:var(--ink-soft);border-radius:8px;padding:5px 9px;font-size:11.5px;cursor:pointer;font-family:inherit;z-index:20}
  /* ── 모바일 (관제: 배포 준비 — 햄버거 서랍 메뉴) ── */
  .menu-btn{display:none;font-size:19px;background:none;border:1px solid var(--line-strong);border-radius:9px;color:var(--ink);padding:5px 11px;cursor:pointer;margin-right:10px}
  .side-backdrop{display:none}
  @media(max-width:760px){
    #app{grid-template-columns:1fr;grid-template-areas:"top" "main"}
    .menu-btn{display:inline-flex;align-items:center}
    .side{position:fixed;left:0;top:0;bottom:0;width:236px;z-index:320;transform:translateX(-105%);transition:transform .18s ease;box-shadow:6px 0 30px rgba(0,0,0,.25);overflow-y:auto}
    #app.side-open .side{transform:none}
    .side-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:310;opacity:0;pointer-events:none;transition:opacity .18s}
    #app.side-open .side-backdrop{display:block;opacity:1;pointer-events:auto}
    .main{padding:14px 12px 46px}
    .topbar{padding-left:12px;padding-right:12px}
    .pt{font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
    .userchip{max-width:130px;overflow:hidden}
    .kpis{grid-template-columns:repeat(auto-fit,minmax(130px,1fr))}
    .grid2{grid-template-columns:1fr}
    .tablewrap{max-height:calc(100vh - 250px)}
    .filters{gap:6px}
    .theme{bottom:12px;right:12px}
  }
  svg text{font-family:var(--font)}
  /* ── 공용 상태 부품 (세션 H2 2026-07-23 — uiLoading/uiEmpty/uiError, lib/ui.js 계약 주석 참조) ── */
  /* 로딩: 로고 실루엣에 금색이 아래→위로 차오름 (.uildg 계열) */
  .uildg{text-align:center;padding:26px 12px}
  .uildg-logo{display:inline-block;position:relative;width:44px;height:44px;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center}
  .uildg-logo i{position:absolute;inset:0;display:block}
  .uildg-base{background:var(--line-strong)}
  .uildg-fill{background:var(--gold);clip-path:inset(100% 0 0 0);animation:uildgFill 1.6s ease-in-out infinite}
  @keyframes uildgFill{0%{clip-path:inset(100% 0 0 0)}100%{clip-path:inset(0 0 0 0)}}
  .uildg-sp{display:inline-block;width:28px;height:28px;border:3px solid var(--line);border-top-color:var(--gold);border-radius:50%;animation:uildgSpin .8s linear infinite}
  @keyframes uildgSpin{to{transform:rotate(360deg)}}
  .uildg-t{font-size:12.5px;font-weight:700;color:var(--ink-soft);margin-top:9px}
  /* 빈상태: 이모지 + 메시지 + 선택 버튼 */
  .uiempty{text-align:center;padding:30px 14px}
  .uiempty-e{font-size:28px;line-height:1}
  .uiempty-m{font-size:13px;color:var(--ink-soft);margin-top:8px;line-height:1.55}
  .uiempty-a{margin-top:13px}
  /* 에러: 빨간 테두리 인라인 카드 + 선택 [다시 시도] */
  .uierr{display:flex;align-items:center;gap:9px;border:1px solid var(--red);background:color-mix(in srgb,var(--red) 8%,transparent);border-radius:10px;padding:11px 14px;margin-top:10px;font-size:12.8px;line-height:1.5}
  .uierr-ic{flex:none;font-size:15px}
  .uierr-m{color:var(--ink);font-weight:600}
  .uierr-retry{flex:none;margin-left:auto;font-family:inherit;font-size:12px;font-weight:800;color:var(--red);background:transparent;border:1px solid var(--red);border-radius:7px;padding:5px 11px;cursor:pointer}
  .uierr-retry:hover{background:color-mix(in srgb,var(--red) 14%,transparent)}
  @media (prefers-reduced-motion:reduce){.uildg-fill{animation:none;clip-path:inset(35% 0 0 0)}.uildg-sp{animation:none}}
