
  :root{
    --bg:#f6f8fb; --surface:#ffffff; --soft:#f7f9fc; --line:#e5e7eb; --line2:#eef1f6;
    --ink:#111827; --ink2:#344054; --mut:#5f6b7c; --faint:#667085;
    --accent:#3457f5; --green:#15803d; --amber:#a64b00; --danger:#c81e1e;
    --grad:#3457f5;
    --sans:'Pretendard','Apple SD Gothic Neo','Segoe UI','Malgun Gothic',sans-serif;
  }
  *{box-sizing:border-box;margin:0;padding:0}
  body{font-family:var(--sans);background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;letter-spacing:0;display:flex;min-height:100vh}
  a{color:inherit;text-decoration:none}
  .side{width:236px;flex:0 0 236px;background:#0b1026;color:#cbd4ee;display:flex;flex-direction:column;position:sticky;top:0;height:100vh}
  .side .brand{display:flex;align-items:center;gap:10px;font-weight:800;font-size:20px;padding:22px;color:#fff}
  .side .brand .mk{width:26px;height:26px;border-radius:8px;background:var(--grad)}
  .side .tag{font-size:11px;letter-spacing:0;color:#7c88b3;padding:0 22px 12px;text-transform:uppercase;font-weight:700}
  .nav{padding:6px 12px;display:flex;flex-direction:column;gap:2px}
  .nav a,.nav button{display:flex;align-items:center;gap:11px;width:100%;min-height:44px;padding:10px 14px;border:0;border-radius:9px;background:transparent;font:inherit;font-size:14.5px;color:#b9c4e3;font-weight:600;text-align:left;cursor:pointer}
  .nav a .i,.nav button .i{width:20px;text-align:center}
  .nav a:hover,.nav button:hover{background:rgba(255,255,255,.06);color:#fff}
  .nav a.on,.nav button.on{background:rgba(255,255,255,.07);color:#fff;box-shadow:inset 3px 0 0 var(--accent)}
  .navgrp{font-size:10px;letter-spacing:0;color:#6b76a3;padding:13px 14px 4px;text-transform:uppercase;font-weight:800}
  .subtabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:18px;overflow-x:auto;-webkit-overflow-scrolling:touch}
  .subtabs button{flex:0 0 auto;border:none;background:none;padding:10px 14px;font-size:14px;font-weight:700;color:var(--mut);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;font-family:var(--sans)}
  .subtabs button.on{color:var(--accent);border-bottom-color:var(--accent)}
  .navbottom{margin-top:10px;border-top:1px solid rgba(255,255,255,.08);padding-top:13px}
  .ophome-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:14px;margin-bottom:22px}
  .ophome-card{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:15px 17px}
  .ophome-card .v{font-size:26px;font-weight:800;color:var(--ink);line-height:1.1}
  .ophome-card .k{font-size:12.5px;color:var(--mut);font-weight:600;margin-top:4px}
  .ophome-card.warn{border-color:#fed7aa;background:#fffaf3}.ophome-card.warn .v{color:#c2410c}
  .ophome-card.bad{border-color:#fecaca;background:#fff7f7}.ophome-card.bad .v{color:#b42318}
  .ophome-card.ok{border-color:#bbf7d0;background:#f8fffb}.ophome-card.ok .v{color:#15803d}
  .ophome-card.rev{background:#0b1437;border-color:#0b1437}.ophome-card.rev .v{color:#fff}.ophome-card.rev .k{color:#aeb9dd}
  .side .foot{margin-top:auto;padding:16px 18px;border-top:1px solid rgba(255,255,255,.08);font-size:12.5px;color:#8b96bd}
  .side .foot a{color:#aeb9dd;text-decoration:underline;cursor:pointer}

  .app{flex:1;min-width:0;display:flex;flex-direction:column}
  .topbar{height:64px;flex:0 0 64px;background:var(--surface);border-bottom:1px solid var(--line);display:flex;align-items:center;padding:0 32px;gap:14px;position:sticky;top:0;z-index:10}
  .topbar h2{font-size:17px;font-weight:800}
  .topbar .pill{font-size:11px;font-weight:700;color:var(--accent);background:#eef2ff;padding:4px 10px;border-radius:999px}
  .topbar .right{margin-left:auto;display:flex;align-items:center;gap:12px}
  .mobile-sec{display:none;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--ink2);height:40px;padding:0 10px;font-size:13px;font-weight:800;font-family:var(--sans)}
  .gbtn{display:inline-flex;align-items:center;justify-content:center;min-height:40px;gap:9px;border:1px solid var(--line);background:var(--surface);color:var(--ink2);border-radius:10px;padding:8px 16px;font-size:14px;font-weight:600;cursor:pointer}
  .gbtn .g{width:18px;height:18px;border-radius:50%;background:conic-gradient(#ea4335 0 25%,#fbbc05 0 50%,#34a853 0 75%,#4285f4 0)}
  .content{padding:26px 34px 60px;max-width:1520px;width:100%;margin:0 auto}
  @media(max-width:760px){.side{display:none}.content{padding:18px}.topbar{padding:0 14px}.topbar h2{display:none}.topbar .pill{display:none}.topbar .right{min-width:0}.mobile-sec{display:inline-flex;max-width:150px}#userEmail{max-width:130px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}

  .gate{display:block;margin:40px auto;max-width:460px;text-align:center;background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:40px 30px}
  .gate h3{font-size:18px;margin-bottom:8px}
  .gate p{color:var(--mut);font-size:14px;margin-bottom:20px}
  .gate-reload{display:block;width:max-content;max-width:100%;margin:16px auto 0;color:var(--accent);font-size:12.5px;font-weight:700;text-decoration:underline;text-underline-offset:3px}

  .kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:24px}
  @media(max-width:760px){.kpis{grid-template-columns:1fr 1fr}}
  .kpi{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:18px}
  .kpi .n{font-size:26px;font-weight:800}
  .kpi .l{font-size:12.5px;color:var(--mut);font-weight:600;margin-top:3px}

  .panel{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:20px;margin-bottom:18px}
  .panel h3{font-size:16px;font-weight:800;margin-bottom:4px}
  .panel .desc{font-size:13px;color:var(--mut);margin-bottom:18px}

  table{width:100%;border-collapse:collapse;font-size:13.5px}
  th{text-align:left;color:var(--faint);font-weight:700;font-size:11.5px;text-transform:uppercase;letter-spacing:0;padding:0 12px 10px}
  td{padding:13px 12px;border-top:1px solid var(--line2);vertical-align:middle}
  tr:hover td{background:var(--soft)}
  .job-title{font-weight:800;color:var(--ink);white-space:nowrap}
  .job-title:hover{color:var(--accent);text-decoration:underline}
  td .pkg{font-size:11.5px;color:var(--faint);font-family:ui-monospace,Menlo,monospace}
  .badge{font-size:11px;font-weight:700;padding:4px 9px;border-radius:999px;white-space:nowrap}
  .b-active{background:#eef2ff;color:var(--accent)} .b-pass{background:#eafaf0;color:var(--green)}
  .b-wait{background:var(--soft);color:var(--mut)} .b-amber{background:#fef3e2;color:var(--amber)}
  .pay-stack{display:flex;flex-direction:column;gap:5px;align-items:flex-start}
  .b-pause{background:#fff7ed;color:#c2410c}.b-request{background:#fef3e2;color:#b45309}
  td a.open{color:var(--accent);font-weight:700}

  .form{display:grid;grid-template-columns:1fr 1fr;gap:16px 22px;max-width:720px}
  @media(max-width:640px){.form{grid-template-columns:1fr}}
  .fld{display:flex;flex-direction:column;gap:6px}
  .fld label{font-size:12.5px;font-weight:700;color:var(--ink2)}
  .fld .hint{font-size:11.5px;color:var(--faint)}
  .fld input,.fld select,.fld textarea{border:1px solid var(--line);border-radius:10px;padding:11px 13px;font-size:14px;color:var(--ink);font-family:var(--sans);background:var(--surface)}
  .fld textarea{min-height:180px;resize:vertical;line-height:1.55}
  .fld input:focus,.fld select:focus,.fld textarea:focus{outline:none;border-color:var(--accent)}
  .fld.wide{grid-column:1/-1}
  .saverow{display:flex;align-items:center;gap:14px;margin-top:20px}
  .btn{min-height:40px;background:var(--accent);color:#fff;border:none;border-radius:8px;padding:9px 18px;font-weight:700;font-size:13.5px;cursor:pointer;font-family:var(--sans)}
  .badge.warn{background:#fef3e2;color:var(--amber)} .badge.bad{background:#fef2f2;color:var(--danger)} .badge.ok{background:#eafaf0;color:var(--green)}
  .btn.dark{background:#0b1437}
  .btn:disabled{opacity:.5;cursor:default}
  .savemsg{font-size:13px;color:var(--green);font-weight:600}
  .stub{color:var(--mut);font-size:14px;padding:30px 0;text-align:center}
  .econ{font-size:13px;color:var(--ink2);background:var(--soft);border:1px solid var(--line);border-radius:10px;padding:12px 14px;margin-top:18px;line-height:1.6}
  .econ b{color:var(--accent)}
  .sec-h{font-size:13px;font-weight:800;color:var(--ink2);letter-spacing:0;margin:24px 0 12px;padding-bottom:8px;border-bottom:1px solid var(--line2)}
  .sec-h:first-of-type{margin-top:6px}
  .sw{position:relative;display:inline-block;width:42px;height:24px;vertical-align:middle}
  .sw input{opacity:0;width:0;height:0}
  .sw span{position:absolute;inset:0;background:#cbd5e1;border-radius:999px;transition:.2s;cursor:pointer}
  .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(--green)}
  .sw input:checked + span:before{transform:translateX(18px)}
  .sw input:focus-visible + span{outline:3px solid rgba(52,87,245,.28);outline-offset:2px}
  .state-toggle{display:inline-flex;align-items:center;gap:9px;min-width:92px}
  .state-toggle .state-text{font-size:12.5px;font-weight:800;color:var(--mut)}
  .state-toggle.on .state-text{color:var(--green)}
  .state-toggle.off .state-text{color:var(--danger)}
  .memo-input{width:220px;max-width:100%;border:1px solid var(--line);border-radius:8px;background:var(--surface);padding:8px 10px;font-size:13px;font-family:var(--sans);color:var(--ink)}
  .memo-input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgba(52,87,245,.08)}
  .memo-input.saved{border-color:#bbf7d0;background:#f8fffb}

  /* Commercial admin refresh */
  body{letter-spacing:0;background:var(--bg)}
  .side{width:228px;flex-basis:228px;background:#0b1020;border-right:1px solid rgba(255,255,255,.06)}
  .side .brand{padding:20px 20px 16px;font-size:18px}
  .side .brand .mk{width:24px;height:24px;border-radius:7px;background:#3457f5}
  .side .tag{letter-spacing:0;padding:0 20px 14px;font-size:10.5px;color:#8792b7}
  .nav{padding:4px 10px}
  .navgrp{letter-spacing:0;padding:14px 12px 5px;color:#7783aa}
  .sec-h{letter-spacing:0}
  .nav a,.nav button{border-radius:8px;padding:10px 12px;font-size:14px;color:#b7c1df}
  .nav a .i,.nav button .i{width:17px;height:17px;border:1px solid rgba(183,193,223,.42);border-radius:5px;position:relative;flex:0 0 17px;color:currentColor}
  .nav a .i:after,.nav button .i:after{content:"";position:absolute;left:5px;top:5px;width:5px;height:5px;border-radius:2px;background:currentColor}
  .nav a:hover,.nav button:hover{background:rgba(255,255,255,.055)}
  .nav a.on,.nav button.on{background:rgba(52,87,245,.18);box-shadow:none;color:#fff}
  .nav a.on .i,.nav button.on .i{border-color:#7f95ff;background:rgba(52,87,245,.2)}
  .navbottom{margin-top:12px}
  .side .foot{padding:14px 18px;font-size:12px}
  .topbar{height:62px;flex-basis:62px;padding:0 30px}
  .topbar h2{font-size:18px}
  .topbar .pill{border-radius:6px;background:#edf2ff}
  .gbtn{border-radius:8px;padding:8px 13px}
  /* 울트라와이드에서 카드 한 줄이 3000px가 되면 눈이 가로로 훑어야 한다 — 읽는 폭을 고정한다. */
  .content{max-width:1520px;margin:0 auto;padding:24px 30px 56px}
  .gate,.panel,.kpi,.ophome-card,.econ{border-radius:8px}
  .panel{overflow:hidden}
  .ops-panel{padding:0}
  .panel-head{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;padding:18px 20px 16px;border-bottom:1px solid var(--line2)}
  .panel-title h3{font-size:16px;margin:0 0 5px}
  .panel-title .desc{margin:0;color:var(--mut);font-size:12.8px}
  .panel-body{padding:18px 20px 20px}
  .mini-tag{display:inline-flex;align-items:center;min-height:28px;border:1px solid var(--line);border-radius:999px;padding:0 10px;font-size:12px;font-weight:800;color:var(--ink2);background:var(--surface)}
  .searchbar{display:flex;align-items:center;gap:10px;margin-bottom:14px}
  .searchbox{position:relative;flex:1;min-width:220px}
  /* 고객 구분 퀵 필터 — 목록을 나누지 않고 한 표에서 걸러 본다. */
  .cust-filters{display:flex;gap:6px;flex:none;flex-wrap:wrap}
  .chipbtn{border:1px solid var(--line);background:var(--surface);color:var(--mut);
    border-radius:99px;padding:6px 12px;font-size:12.5px;font-weight:800;cursor:pointer;line-height:1.2}
  .chipbtn:hover{color:var(--ink)}
  .chipbtn.on{background:var(--accent);border-color:var(--accent);color:#fff}
  .chipbtn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
  .cust-watch .cw-none{color:var(--mut)}
  .searchbox:before{content:"";position:absolute;left:13px;top:50%;width:12px;height:12px;border:2px solid var(--faint);border-radius:50%;transform:translateY(-55%)}
  .searchbox:after{content:"";position:absolute;left:25px;top:28px;width:7px;height:2px;background:var(--faint);transform:rotate(45deg);border-radius:999px}
  .searchbox input{width:100%;border:1px solid var(--line);border-radius:8px;background:var(--surface);padding:10px 12px 10px 38px;font-size:13.5px;font-family:var(--sans);color:var(--ink)}
  .searchbox input:focus{outline:none;border-color:#3457f5;box-shadow:0 0 0 3px rgba(52,87,245,.09)}
  .searchmeta{font-size:12.5px;color:var(--mut);font-weight:800;white-space:nowrap}
  .clearbtn{border:1px solid var(--line);background:var(--surface);color:var(--ink2);border-radius:7px;min-height:40px;padding:0 12px;font-size:12.5px;font-weight:800;font-family:var(--sans);cursor:pointer}
  .clearbtn:hover{background:var(--soft);border-color:#c8d0df}
  .table-wrap{overflow-x:auto}
  th{letter-spacing:0;padding:0 10px 9px}
  td{padding:12px 10px}
  tr:hover td{background:var(--soft)}
  .completion{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:12px;color:var(--mut);min-width:96px}
  .completion b{color:var(--ink);font-size:13px}
  .progress{height:6px;border-radius:999px;background:#edf1f7;overflow:hidden;margin-top:6px;min-width:96px}
  .progress i{display:block;height:100%;border-radius:999px;background:#3457f5}
  .match{display:flex;flex-direction:column;gap:2px;min-width:80px}
  .match b{font-size:13.5px}
  .match span{font-size:11.5px;color:var(--mut);font-weight:700}
  .match.ok b{color:#15803d}.match.bad b{color:#c2410c}
  .row-actions{display:flex;align-items:center;gap:7px;white-space:nowrap}
  .ghostbtn{display:inline-flex;align-items:center;justify-content:center;border-radius:7px;font-family:var(--sans);font-weight:800;font-size:12.5px;min-height:40px;padding:0 12px;cursor:pointer}
  .ghostbtn{border:1px solid var(--line);background:var(--surface);color:var(--ink2)}
  .ghostbtn:hover{border-color:#c8d0df;background:var(--soft)}
  .prod-state{display:flex;flex-direction:column;gap:3px;align-items:flex-start;min-width:72px}
  .prod-badge{display:inline-flex;align-items:center;border-radius:999px;padding:4px 9px;font-size:11px;font-weight:800;white-space:nowrap}
  .prod-public{background:#eafaf0;color:#15803d}
  .prod-not_found{background:#fef3e2;color:#c2410c}
  .prod-error{background:#fef2f2;color:#b42318}
  .prod-unknown{background:var(--soft);color:var(--mut)}
  .prod-state small{font-size:11px;color:var(--faint);font-weight:700}
  .device-cell{display:flex;flex-direction:column;gap:3px;min-width:86px}
  .device-cell b{font-size:13.5px}
  .device-cell span{display:block;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--mut);font-size:11.5px;font-weight:700}
  .device-cell .device-mini-chip{display:inline-flex;align-items:center;width:max-content;max-width:158px;border:1px solid #dbe4ff;background:#eef2ff;color:#3457f5;border-radius:999px;padding:3px 8px;font-size:11.5px;font-weight:900}
  .detail-cell{background:var(--soft)!important;padding:0!important}
  .ops-drawer{padding:15px 18px 18px;border-top:1px solid var(--line2)}
  .job-context{position:sticky;top:62px;z-index:8;display:flex;align-items:center;gap:12px;margin:-15px -18px 14px;padding:11px 18px;border-bottom:1px solid #dbe3f0;background:rgba(255,255,255,.97);box-shadow:0 8px 18px -18px rgba(15,23,42,.6);backdrop-filter:blur(8px)}
  .job-context-main{min-width:0;flex:1}
  .job-context-main b{display:block;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .job-context-main span{display:block;margin-top:2px;color:var(--mut);font-size:11.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .job-context-state{display:flex;align-items:center;justify-content:flex-end;gap:6px;flex-wrap:wrap}
  .detail-group{margin:0 0 12px;border:1px solid var(--line);border-radius:9px;background:var(--surface);overflow:clip}
  .detail-group>summary{display:flex;align-items:center;gap:9px;min-height:46px;padding:11px 14px;cursor:pointer;list-style:none;color:var(--ink);font-size:13.5px;font-weight:900;background:var(--soft)}
  .detail-group>summary::-webkit-details-marker{display:none}
  .detail-group>summary:before{content:"›";display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:5px;background:#eef2ff;color:var(--accent);font-size:18px;line-height:1;transition:transform .18s ease}
  .detail-group[open]>summary:before{transform:rotate(90deg)}
  .detail-group>summary span{color:var(--mut);font-size:11.8px;font-weight:700}
  .detail-group>summary:focus-visible{outline:3px solid rgba(52,87,245,.28);outline-offset:-3px}
  .detail-group-body{padding:14px;background:var(--soft)}
  .drawer-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,520px),1fr));gap:14px}
  .drawer-card{min-width:0;border:1px solid var(--line);border-radius:8px;background:var(--surface);padding:14px}
  .drawer-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}
  .drawer-head b{font-size:13.5px;display:block}
  .drawer-head .meta,.drawer-head > span{font-size:12px;color:var(--mut);font-weight:700;margin-top:3px}
  .head-switch{display:inline-flex;align-items:center;gap:9px;border:1px solid var(--line2);border-radius:999px;padding:7px 10px 7px 12px;font-size:12.5px;font-weight:800;color:var(--ink2);white-space:nowrap}
  .ops-controls{display:grid;grid-template-columns:minmax(120px,.75fr) minmax(190px,1.2fr) minmax(140px,.9fr);gap:12px}
  .mini-field{display:flex;flex-direction:column;gap:6px;font-size:12px;color:var(--mut);font-weight:800}
  .mini-field input{width:100%;min-width:0;min-height:38px;border:1px solid var(--line);border-radius:7px;background:var(--surface);padding:8px 9px;font:inherit;font-size:13px;line-height:1.2;color:var(--ink);letter-spacing:0}
  .mini-field input[type="time"],.mini-field input[type="date"]{font-variant-numeric:tabular-nums;padding-right:34px}
  .mini-field input[type="time"]{min-width:172px}
  .mini-field input[type="date"]{min-width:188px}
  .mini-field input::-webkit-calendar-picker-indicator{width:18px;height:18px;margin-left:4px;padding:0;cursor:pointer}
  .mini-field input[aria-invalid="true"]{border-color:var(--danger);box-shadow:0 0 0 2px rgba(180,35,24,.1)}
  .field-error{color:var(--danger);font-size:11.5px;font-weight:800;line-height:1.25}
  .field-error[hidden]{display:none}
  .date-result{grid-column:1/-1;border:1px solid var(--line2);border-radius:8px;background:var(--soft);padding:10px 12px;font-size:12.5px;color:var(--ink2);font-weight:800}
  .date-result span{color:var(--mut);font-weight:700}
  .drawer-actions{display:flex;align-items:center;gap:10px;margin-top:12px;flex-wrap:wrap}
  .ops-head-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}
  .section-state{display:flex;align-items:center;gap:8px;min-height:36px;margin:0 0 12px;padding:7px 10px;border:1px solid var(--line2);border-radius:7px;background:var(--soft);color:var(--mut);font-size:12px;font-weight:700}
  .section-state[data-kind="loading"]:before{content:"";width:12px;height:12px;border:2px solid #c7d2fe;border-top-color:var(--accent);border-radius:50%;animation:adminSpin .8s linear infinite}
  .section-state[data-kind="error"]{border-color:#fecaca;background:#fff7f7;color:#b42318}
  .section-state[data-kind="ready"]{background:transparent;border-color:transparent;padding-left:0}
  .section-state button{margin-left:auto}
  @keyframes adminSpin{to{transform:rotate(360deg)}}
  .riskbar{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:0 0 14px}
  .riskbar-label{font-size:12px;color:var(--mut);font-weight:800;margin-right:2px}
  .riskchip{min-height:38px;border:1px solid var(--line);background:var(--surface);color:var(--ink2);border-radius:999px;padding:6px 12px;font:inherit;font-size:12px;font-weight:800;cursor:pointer}
  .riskchip[aria-pressed="true"]{border-color:var(--accent);background:#eef2ff;color:var(--accent)}
  .draft-summary{display:flex;align-items:center;gap:7px;flex:1 1 260px;min-height:40px;border:1px solid var(--line2);border-radius:7px;background:var(--soft);padding:8px 10px;color:var(--mut);font-size:12px;font-weight:800}
  .draft-summary.dirty{border-color:#fed7aa;background:#fffaf3;color:#9a3412}
  .notify-mode{min-height:40px;border:1px solid var(--line);border-radius:7px;background:var(--surface);padding:7px 9px;color:var(--ink2);font:inherit;font-size:12.5px;font-weight:700}
  .worker-scroll{width:100%;overflow-x:auto}
  .sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
  :where(button,a[href],input,select,textarea):focus-visible{outline:3px solid rgba(52,87,245,.28);outline-offset:2px}
  .pause-alert{border:1px solid #fed7aa;background:#fffaf3;border-radius:8px;padding:10px 12px;margin:0 0 12px;color:#9a3412}
  .pause-alert b{display:block;font-size:12.8px;margin-bottom:3px}.pause-alert span{display:block;font-size:12px;color:#9a3412;line-height:1.45}
  .customer-tabs-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px}
  .customer-tab-toggle{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:44px;border:1px solid var(--line2);border-radius:8px;background:var(--soft);padding:10px 11px;font-size:12.5px;font-weight:800;color:var(--ink2)}
  .customer-tab-toggle small{display:block;color:var(--mut);font-size:11px;font-weight:700;margin-top:2px}
  .worker-table th,.worker-table td{padding-left:8px;padding-right:8px}
  .usage-card{grid-column:1/-1}
  .usage-grid{display:grid;grid-template-columns:minmax(0,1.45fr) minmax(240px,.55fr);gap:14px}
  .usage-title{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px;font-size:12px;color:var(--mut);font-weight:800}
  .device-chipline{display:flex;align-items:center;gap:8px;flex-wrap:wrap;border:1px solid #dbe4ff;background:#f6f8ff;border-radius:8px;padding:10px 12px;margin:0 0 14px}
  .device-chipline b{font-size:12.5px;color:#3457f5;margin-right:2px}
  .device-chipline.empty{border-color:var(--line2);background:var(--soft);color:var(--mut);font-size:12.5px;font-weight:800}
  .device-chip{display:inline-flex;align-items:center;min-height:30px;border-radius:999px;background:var(--surface);color:var(--ink);border:1px solid #cfd9ff;padding:0 10px;font-size:12.5px;font-weight:900;box-shadow:0 1px 0 rgba(52,87,245,.04)}
  .day-bars{display:grid;grid-template-columns:repeat(14,minmax(28px,1fr));gap:6px;align-items:end}
  .day-bar{display:grid;grid-template-rows:76px 16px 16px;gap:3px;text-align:center;min-width:0}
  .day-bar .meter{display:flex;align-items:flex-end;height:76px;border:1px solid var(--line2);border-radius:7px;background:#f1f4f9;overflow:hidden}
  .day-bar .meter i{display:block;width:100%;min-height:0;background:#cbd5e1;border-radius:6px 6px 0 0}
  .day-bar.met .meter i{background:#16a34a}
  .day-bar.low .meter i{background:#f59e0b}
  .day-bar.empty .meter i{background:transparent}
  .day-bar b{font-size:10.5px;color:var(--mut);font-weight:800;line-height:16px}
  .day-bar em{font-style:normal;font-size:11px;color:var(--ink2);font-weight:800;line-height:16px}
  .device-list{display:flex;flex-direction:column;border:1px solid var(--line2);border-radius:8px;overflow:hidden}
  .device-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px;border-top:1px solid var(--line2)}
  .device-row:first-child{border-top:none}
  .device-row b{font-size:12.8px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .device-row span{font-size:12px;color:var(--mut);font-weight:700;white-space:nowrap}
  .empty-line{border:1px solid var(--line2);border-radius:8px;background:var(--soft);padding:16px;text-align:center;color:var(--mut);font-size:12.5px}
  .rep-shot-panel{margin-top:14px;border-top:1px solid var(--line2);padding-top:14px}
  .rep-shot-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:10px}
  .rep-shot-head b{font-size:13.5px}
  .rep-shot-head span{font-size:12px;color:var(--mut);font-weight:800}
  .rep-shot-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(178px,1fr));gap:10px}
  .rep-shot-card{border:1px solid var(--line);border-radius:8px;background:var(--surface);overflow:hidden;text-align:left;font-family:var(--sans);cursor:pointer;color:var(--ink);padding:0}
  .rep-shot-card:hover{border-color:#c7d2fe;box-shadow:0 10px 24px -20px rgba(15,23,42,.45)}
  .rep-shot-thumb{display:block;height:112px;background:#eef2f7;border-bottom:1px solid var(--line2);overflow:hidden}
  .rep-shot-thumb img{width:100%;height:100%;object-fit:cover;display:block}
  .rep-shot-meta{padding:10px 11px}
  .rep-shot-meta b{display:block;font-size:12.8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .rep-shot-meta span{display:block;margin-top:3px;font-size:11.5px;color:var(--mut);font-weight:800;line-height:1.35}
  .rep-shot-empty{border:1px dashed #cfd8e6;border-radius:8px;background:var(--soft);padding:14px;color:var(--mut);font-size:12.5px;font-weight:800;line-height:1.45}
  .rep-shot-missing{margin-top:8px;color:var(--mut);font-size:11.8px;font-weight:700;line-height:1.45}
  .rep-shot-all{margin-left:auto;flex:none;padding:6px 11px;font-size:12px;white-space:nowrap}
  /* 전체 모아 보기 — 운영자가 화면째로 캡처해 고객 증빙으로 쓰는 화면 */
  .rep-all-modal{align-items:flex-start;overflow:auto;padding:18px}
  .rep-all-box{width:min(1180px,100%);background:var(--surface);border-radius:14px;box-shadow:0 24px 60px -30px rgba(15,23,42,.6);padding:16px 18px 20px}
  .rep-all-hint{margin:2px 0 12px;color:var(--mut);font-size:12px;font-weight:800}
  .rep-all-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:14px}
  .rep-all-item{margin:0;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:#eef2f7}
  .rep-all-item img{width:100%;display:block;background:#0b1220;object-fit:contain;max-height:520px}
  .rep-all-item figcaption{padding:8px 10px;background:var(--surface);border-top:1px solid var(--line2)}
  .rep-all-item figcaption b{display:block;font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .rep-all-item figcaption span{display:block;margin-top:2px;font-size:11.5px;color:var(--mut);font-weight:800}
  .shot-modal{position:fixed;inset:0;z-index:9999;background:rgba(15,23,42,.64);display:flex;align-items:center;justify-content:center;padding:24px}
  .shot-modal[hidden]{display:none}
  .shot-modal-box{width:min(1040px,96vw);max-height:92vh;background:var(--surface);border-radius:10px;overflow:hidden;box-shadow:0 28px 80px -28px rgba(0,0,0,.65);display:grid;grid-template-rows:auto minmax(0,1fr)}
  .shot-modal-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:13px 16px;border-bottom:1px solid var(--line2)}
  .shot-modal-title b{font-size:14px;display:block}
  .shot-modal-title span{font-size:12px;color:var(--mut);font-weight:700}
  .shot-modal-close{border:1px solid var(--line);background:var(--surface);color:var(--ink);border-radius:7px;width:40px;height:40px;font-size:20px;line-height:1;cursor:pointer}
  .shot-modal-body{display:grid;grid-template-columns:minmax(0,1fr) 260px;min-height:0}
  .shot-modal-imgwrap{background:#0b1020;display:flex;align-items:center;justify-content:center;min-height:360px;overflow:auto}
  .shot-modal-imgwrap img{max-width:100%;max-height:calc(92vh - 70px);display:block}
  .shot-modal-info{border-left:1px solid var(--line2);padding:16px;background:var(--soft);overflow:auto}
  .shot-modal-info dl{display:grid;grid-template-columns:76px 1fr;gap:9px 10px;font-size:12.5px}
  .shot-modal-info dt{color:var(--mut);font-weight:800}
  .shot-modal-info dd{font-weight:800;min-width:0;word-break:break-word}
  .summary-board{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:10px}
  .summary-item{border:1px solid var(--line);border-radius:8px;background:var(--surface);padding:13px 14px}
  .summary-item b{display:block;font-size:13px;margin-bottom:4px}
  .summary-item span{display:block;color:var(--mut);font-size:12.5px;line-height:1.5}
  .summary-item.warn{border-color:#fed7aa;background:#fffaf3}.summary-item.warn b{color:#c2410c}
  .summary-item.good{border-color:#bbf7d0;background:#f8fffb}.summary-item.good b{color:#15803d}
  .btn{border-radius:7px;padding:9px 15px}
  .btn.dark{background:#111827}
  @media(max-width:980px){.drawer-grid,.usage-grid,.ops-controls,.shot-modal-body{grid-template-columns:1fr}.day-bars{grid-template-columns:repeat(7,minmax(28px,1fr))}.searchbar{align-items:stretch;flex-direction:column}.searchmeta{white-space:normal}.shot-modal-info{border-left:none;border-top:1px solid var(--line2)}}
  @media(max-width:760px){
    .side{display:none}.content{padding:14px}.topbar{height:auto;min-height:62px;flex-basis:auto;padding:8px 14px;gap:8px;flex-wrap:wrap}.topbar h2{font-size:16px}.topbar .pill{display:none}.topbar .right{min-width:0;width:100%;gap:6px}.mobile-sec{display:inline-flex;max-width:min(240px,100%);flex:1 1 220px}.gbtn{padding:8px 10px}#userEmail{max-width:130px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
    .panel-head{padding:15px 14px}.panel-body{padding:14px}.ops-head-actions{width:100%;justify-content:flex-start}.mini-tag{white-space:nowrap}
    #testsTable,#testsTable tbody,#testsTable tr.tjob,#testsTable tr.tjob td{display:block;width:100%}
    #testsTable thead{display:none}
    #testsTable tr.tjob{margin:0 0 12px;border:1px solid var(--line);border-radius:9px;background:var(--surface);overflow:hidden}
    #testsTable tr.tjob td{display:grid;grid-template-columns:88px minmax(0,1fr);gap:10px;align-items:center;padding:9px 11px;border-top:1px solid var(--line2);background:var(--surface)!important}
    #testsTable tr.tjob td:first-child{border-top:0}
    #testsTable tr.tjob td:before{content:attr(data-label);font-size:11px;color:var(--mut);font-weight:900;text-transform:none}
    #testsTable tr.tdetail{display:block;width:100%;margin:-12px 0 14px}
    #testsTable tr.tdetail[style*="display: none"]{display:none!important}
    #testsTable tr.tdetail>td{display:block;width:100%}
    .table-wrap{overflow:visible}.row-actions,.row-actions .ghostbtn{width:100%}.drawer-grid{display:block}.drawer-card{min-width:0;margin-bottom:10px;padding:12px}.worker-table{min-width:620px}
    .job-context{top:96px;align-items:flex-start;margin:-15px -18px 12px;padding:10px 14px;flex-wrap:wrap}.job-context-main{flex:1 1 calc(100% - 92px)}.job-context-state{order:3;width:100%;justify-content:flex-start}.detail-group>summary{align-items:flex-start;flex-wrap:wrap}.detail-group>summary span{width:calc(100% - 30px);margin-left:29px}.detail-group-body{padding:10px}
    .drawer-actions{align-items:stretch;flex-direction:column}.drawer-actions>*{width:100%!important;margin-left:0!important;margin-right:0!important}.draft-summary{flex-basis:auto}.notify-mode{width:100%}
    .day-bars{overflow-x:auto}.rep-shot-grid{grid-template-columns:1fr 1fr}.shot-modal{padding:10px}.shot-modal-imgwrap{min-height:240px}
  }
  @media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}


          .dash-head{display:flex;align-items:center;gap:10px;margin-bottom:6px}
          .dash-title{font-size:13px;font-weight:900;color:var(--ink2);margin:18px 0 8px}
          .dgrid{display:grid;gap:12px}
          .dgrid.k5{grid-template-columns:repeat(5,1fr)} .dgrid.k4{grid-template-columns:repeat(4,1fr)}
          @media(max-width:1050px){.dgrid.k5,.dgrid.k4{grid-template-columns:repeat(2,1fr)}}
          .dkpi{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:13px 15px}
          .dkpi .k{font-size:12px;color:var(--mut);font-weight:800}
          .dkpi .v{font-size:23px;font-weight:900;margin-top:4px;line-height:1.15}
          .dkpi .s{font-size:12px;color:var(--mut);margin-top:4px}
          .dkpi.warn{border-color:#fcd9b6;background:#fff8f0}.dkpi.bad{border-color:#f3c0c0;background:#fff5f5}
          .dkpi.ok{border-color:#bbe7c9;background:#f3fbf6}.dkpi.rev{border-color:#cfe0ff;background:#f5f8ff}
          .d2col{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:6px}
          @media(max-width:1050px){.d2col{grid-template-columns:1fr}}
          .feed-row{display:flex;gap:8px;align-items:baseline;padding:7px 0;border-bottom:1px solid #f0f1f4;font-size:13px}
          .feed-t{color:var(--mut);font-size:12px;min-width:52px;flex:none}
          .feed-app{color:var(--accent);font-weight:800}
          .todo-panel{border-color:#cfd9ff;box-shadow:inset 3px 0 0 var(--accent)}
          .todo-row{display:flex;gap:8px;align-items:center;min-height:40px;padding:8px 0;border-bottom:1px solid var(--line2);font-size:13px}
          .todo-row:hover{background:var(--soft)!important}
          .todo-tag{font-size:12px;font-weight:900;padding:3px 8px;border-radius:20px;flex:none}
          .todo-tag.miss{background:#fff4e5;color:#b45309}.todo-tag.behind{background:#fdecec;color:#c0392b}.todo-tag.plan{background:#eef2ff;color:#3a36a6}


          .wk-cards{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:14px}
          @media(max-width:900px){.wk-cards{grid-template-columns:repeat(2,1fr)}}
          .wk-kpi{background:var(--surface);border:1px solid var(--line,#e5e7eb);border-radius:14px;padding:14px 16px}
          .wk-kpi .k{font-size:12px;color:var(--mut,#667085);font-weight:800}
          .wk-kpi .v{font-size:26px;font-weight:900;margin-top:4px;line-height:1.1}
          .wk-kpi .s{font-size:12px;color:var(--mut,#667085);margin-top:4px}
          /* 손대야 할 것이 있으면 숫자가 먼저 눈에 들어와야 한다. */
          .wk-kpi.alert{border-color:rgba(200,30,30,.38);background:rgba(200,30,30,.06)}
          .wk-kpi.alert .v{color:var(--danger,#c81e1e)}
          .wk-filters{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 12px}
          .wk-filter{border:1px solid var(--line,#e5e7eb);background:var(--surface);color:var(--ink2,#344054);border-radius:999px;padding:6px 13px;font-size:12.5px;font-weight:800;cursor:pointer;font-family:var(--sans)}
          .wk-filter:hover{border-color:#c7d0e0}
          .wk-filter[aria-pressed="true"]{background:#0b1026;border-color:#0b1026;color:#fff}
          .wk-filter .n{margin-left:6px;opacity:.65;font-weight:900}
          /* 넓은 화면은 열을 늘려 쓰고, 카드 한 장의 가로 길이는 읽히는 폭으로 묶는다. */
          .wk-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(430px,1fr));gap:12px;align-items:start}
          @media(max-width:920px){.wk-list{grid-template-columns:1fr}}
          .wk-card{background:var(--surface);border:1px solid var(--line,#e5e7eb);border-radius:14px;padding:15px 16px}
          .wk-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
          .wk-dot{width:10px;height:10px;border-radius:50%;flex:none}
          .wk-name{font-weight:900;font-size:15px}
          .wk-meta{color:var(--mut,#667085);font-size:12.5px;flex:1 1 100%;min-width:0}
          .wk-pill{margin-left:auto;font-size:12px;font-weight:900;padding:4px 10px;border-radius:20px;flex:none}
          .wk-metrics{display:flex;gap:22px;flex-wrap:wrap;margin-top:10px}
          .wk-metrics .m span{display:block;font-size:12px;color:var(--mut,#667085);font-weight:700}
          .wk-metrics .m b{font-size:15px;font-weight:900}
          .wk-bar{height:6px;border-radius:99px;background:#eef1f6;overflow:hidden;margin-top:11px}
          .wk-bar i{display:block;height:100%;border-radius:99px;background:var(--accent,#3457f5);transition:width .2s}
          .wk-bar.full i{background:#16a34a}
          /* 미션 20여 개를 늘어놓으면 전부 0/60분이라 신호가 없다 — 요약을 먼저, 상세는 펼쳐서. */
          .wk-missbox{margin-top:10px}
          .wk-missbox>summary{cursor:pointer;list-style:none;font-size:12.5px;font-weight:800;color:var(--mut,#667085);padding:2px 0}
          .wk-missbox>summary::-webkit-details-marker{display:none}
          .wk-missbox>summary::before{content:'▸ ';font-weight:900}
          .wk-missbox[open]>summary::before{content:'▾ '}
          .wk-missbox>summary:hover{color:var(--ink2,#344054)}
          .wk-none{margin-top:10px;font-size:12.5px;font-weight:700;color:var(--mut,#667085)}
          .wk-miss{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
          .wk-chip{font-size:12px;font-weight:700;padding:4px 9px;border-radius:8px;background:#f1f3f8;border:1px solid #e5e7eb}
          .wk-chip.done{background:#e8f7ee;border-color:#bbe7c9;color:#15803d}
          /* 워커 ID는 디버깅용 식별자다 — 컬럼 하나를 통째로 쓰지 않고 닉네임 아래로. */
          .wk-uid{display:block;margin-top:3px;max-width:210px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--mono,ui-monospace,monospace);font-size:11px;color:var(--mut,#667085);font-weight:600}
          tr.demo-row{display:none}
          tr.demo-row.show{display:table-row}
          .st-done{background:#e8f7ee;color:#15803d}.dot-done{background:#16a34a}
          .st-prog{background:#eef2ff;color:#3a36a6}.dot-prog{background:#5b5bd6}
          .st-miss{background:#fff4e5;color:#b45309}.dot-miss{background:#f59e0b}
          .st-none{background:#f1f3f8;color:#667085}.dot-none{background:#cbd5e1}
          .st-off{background:#f3f4f6;color:var(--mut)}.dot-off{background:#9ca3af}
.econ-warning{color:#b42318;font-weight:800}
.bounded-notice{margin:10px 0;padding:9px 12px;border:1px solid #f7d9a8;border-radius:10px;background:#fff8eb;color:#92400e;font-size:12.5px;font-weight:700}

/* Role clarity and compact information architecture */
.nav{flex:1;min-height:0;overflow-y:auto;scrollbar-width:thin;scrollbar-color:#334064 transparent}
.nav a,.nav button{line-height:1.25}
.role-mode-link,.role-new-test{display:inline-flex;align-items:center;justify-content:center;min-height:40px;border-radius:8px;padding:0 12px;font-size:12.5px;font-weight:800;white-space:nowrap}
.role-mode-link{border:1px solid var(--line);background:var(--surface);color:var(--ink2)}
.role-mode-link:hover{border-color:#aebbd0;background:var(--soft)}
.role-new-test{border:1px solid #3457f5;background:#3457f5;color:#fff}
.role-new-test:hover{background:#2748df}
.settings-dirty{font-size:12.5px;font-weight:800;color:#667085}
.settings-dirty.dirty{color:#b45309}

.account-id{margin-top:5px;color:var(--mut);font-size:12px}
.account-id summary{width:max-content;cursor:pointer;font-weight:700}
.account-id code{display:inline-block;max-width:250px;margin-top:6px;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}
.copy-id{margin-left:6px;border:0;background:transparent;color:#3457f5;font:inherit;font-weight:800;cursor:pointer}
.customer-actions{display:flex;gap:6px;flex-wrap:wrap}
.customer-actions .ghostbtn{white-space:nowrap}
.auto-toggle.off .state-text{color:var(--mut)}
:where(a,button,select,input,textarea,summary):focus-visible{outline:3px solid rgba(52,87,245,.28);outline-offset:2px}

#newTestsPanel,#newTestsList .nt-item{background:var(--surface)!important;color:var(--ink)!important}
#testQuick .tq,#testSort .tsort,#testStartFrom,#testStartTo{background:var(--surface)!important;color:var(--ink2)!important}
#testQuick .tq[aria-pressed="true"],#testSort .tsort[aria-pressed="true"]{border-color:var(--accent)!important;background:var(--accent)!important;color:#fff!important}

/* Switch to the compact shell before role controls and titles can be squeezed. */
@media(max-width:1100px){
  .side{display:none}
  .app{width:100%}
  .topbar{height:auto;min-height:64px;flex-basis:auto;padding:10px 18px;gap:8px 12px;flex-wrap:wrap}
  .topbar h2,.topbar .pill{display:none}
  .mobile-sec{display:inline-flex;flex:1 1 260px;max-width:360px;min-width:200px;min-height:42px}
  .topbar .right{min-width:0;flex:1 1 460px;justify-content:flex-end;gap:8px;flex-wrap:wrap}
  .content{padding:20px 22px 48px}
  .job-context{position:static;top:auto}
}

@media(max-width:760px){
  .content{padding:14px}
  .topbar{padding:8px 14px}
  .mobile-sec{max-width:none;flex-basis:100%}
  .topbar .right{width:100%;flex-basis:100%;justify-content:flex-start;flex-wrap:wrap}
  .role-mode-link{flex:0 0 auto;padding:0 10px;font-size:12px}
  .role-new-test{flex:1 1 230px;padding:0 10px;font-size:12px}
  #newTestsWrap{margin-left:0}
  .customer-searchbar{align-items:stretch}
  .customer-searchbar .searchbox{min-width:0}
  .customer-actions{min-width:150px}
}

@media(prefers-color-scheme:dark){html:not([data-theme="light"]){--faint:#8b96ad}}
html[data-theme="dark"]{--faint:#8b96ad}

/* Official QA workbench — private review source with an explicit public projection. */
.qa-workbench-host{margin-top:14px}.qa-workbench{display:grid;gap:16px;color:var(--ink)}
.qa-header{display:flex;align-items:flex-start;gap:18px;justify-content:space-between}.qa-title-group{min-width:0;max-width:760px}.qa-title{margin:0;font-size:19px;line-height:1.3}.qa-boundary-note{margin:6px 0 0;color:var(--mut);font-size:12.5px;line-height:1.6}
.qa-gate{flex:0 0 210px;border:1px solid var(--line);border-radius:12px;padding:11px 13px;background:var(--soft)}.qa-gate-label,.qa-gate-meta{display:block;font-size:10.5px;font-weight:800;color:var(--mut)}.qa-gate-value{display:block;margin:3px 0;font-size:14px}.qa-gate-go{border-color:#abefc6;background:#ecfdf3;color:#067647}.qa-gate-conditional{border-color:#fedf89;background:#fffaeb;color:#b54708}.qa-gate-hold{border-color:#fecdca;background:#fef3f2;color:#b42318}
.qa-metrics{display:grid;grid-template-columns:repeat(5,minmax(90px,1fr));gap:8px;margin:0}.qa-metric{margin:0;padding:10px 12px;border:1px solid var(--line2);border-radius:10px;background:var(--soft)}.qa-metric-label{font-size:11px;color:var(--mut);font-weight:800}.qa-metric-value{margin:3px 0 0;font-size:19px;font-weight:900;color:var(--ink)}
.qa-summaries{display:grid;grid-template-columns:1fr 1fr;gap:10px}.qa-field{display:grid;align-content:start;gap:5px;min-width:0}.qa-field-label{font-size:12px;font-weight:850;color:var(--ink2)}.qa-field-hint{font-size:10.5px;color:var(--mut)}.qa-control{box-sizing:border-box;width:100%;min-height:40px;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--ink);padding:9px 10px;font:inherit;font-size:13px}.qa-control:disabled{background:var(--soft);color:var(--mut);cursor:not-allowed}.qa-textarea{resize:vertical;line-height:1.5}.qa-summary-input{min-height:84px}
.qa-publish-decision,.qa-public-toggle{display:flex;align-items:flex-start;gap:10px;border:1px solid #cfd9ff;border-radius:11px;background:color-mix(in srgb,var(--surface) 94%,#3457f5);padding:11px 13px;cursor:pointer}.qa-checkbox{width:18px;height:18px;margin:1px 0 0;accent-color:var(--accent);flex:none}.qa-publish-copy,.qa-public-toggle-copy{display:grid;gap:3px}.qa-publish-title,.qa-public-toggle-title{font-size:12.5px}.qa-publish-state,.qa-public-toggle-hint{color:var(--mut);font-size:11.5px;line-height:1.45}
.qa-filterbar{position:sticky;top:0;z-index:3;display:flex;align-items:end;gap:9px;flex-wrap:wrap;padding:10px;border:1px solid var(--line);border-radius:11px;background:color-mix(in srgb,var(--surface) 94%,transparent);box-shadow:0 4px 14px rgba(16,24,40,.05)}.qa-filter-group{display:flex;gap:5px;flex-wrap:wrap}.qa-filter-button,.qa-focus-button,.qa-reset-button,.qa-save-button{min-height:40px;border-radius:8px;padding:8px 12px;font:inherit;font-size:12.5px;font-weight:850;cursor:pointer}.qa-filter-button{border:1px solid var(--line);background:var(--surface);color:var(--ink2)}.qa-filter-button[aria-pressed="true"]{border-color:var(--accent);background:var(--accent);color:#fff}.qa-filter-field{display:grid;gap:4px;min-width:150px}.qa-filter-label{font-size:10.5px;color:var(--mut);font-weight:850}.qa-search-field{flex:1 1 210px}.qa-search{min-width:160px}
.qa-workspace{display:grid;grid-template-columns:minmax(240px,310px) minmax(0,1fr);gap:12px;align-items:start}.qa-list-panel,.qa-inspector{min-width:0;border:1px solid var(--line);border-radius:12px;background:var(--surface)}.qa-panel-head{padding:12px 13px;border-bottom:1px solid var(--line2)}.qa-panel-title,.qa-inspector-title{margin:0;font-size:14px}.qa-screen-list{display:grid;gap:6px;max-height:720px;margin:0;padding:8px;overflow:auto;list-style:none}.qa-screen-row{margin:0}.qa-screen-item{display:grid;width:100%;gap:4px;min-height:68px;padding:10px 11px;text-align:left;border:1px solid transparent;border-radius:9px;background:transparent;color:var(--ink);font:inherit;cursor:pointer}.qa-screen-item:hover{background:var(--soft)}.qa-screen-item[aria-current="true"]{border-color:#aebeff;background:color-mix(in srgb,var(--surface) 92%,#3457f5);box-shadow:inset 3px 0 0 var(--accent)}.qa-screen-name{font-size:12.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.qa-screen-stage{font-size:10.5px;color:var(--mut)}.qa-screen-badges{display:flex;gap:5px;flex-wrap:wrap;margin-top:2px}.qa-status,.qa-severity,.qa-public-badge{display:inline-flex;align-items:center;border-radius:999px;padding:2px 7px;font-size:10px;font-weight:900;border:1px solid}.qa-status-untested{color:#667085;background:#f2f4f7;border-color:#d0d5dd}.qa-status-pass{color:#067647;background:#ecfdf3;border-color:#abefc6}.qa-status-warn{color:#b54708;background:#fffaeb;border-color:#fedf89}.qa-status-fail,.qa-status-blocked{color:#b42318;background:#fef3f2;border-color:#fecdca}.qa-severity{color:#b42318;background:var(--surface);border-color:#fda29b}.qa-public-badge{color:#3538cd;background:#eef4ff;border-color:#c7d7fe}
.qa-inspector{padding:14px}.qa-inspector-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding-bottom:12px;border-bottom:1px solid var(--line2)}.qa-inspector-heading-copy{min-width:0}.qa-inspector-stage{display:block;margin-bottom:3px;color:var(--mut);font-size:10.5px;font-weight:800}.qa-focus-button{border:1px solid var(--line);background:var(--surface);color:var(--accent);white-space:nowrap}.qa-inspector-form{display:grid;gap:11px;margin-top:13px}.qa-verdict-row,.qa-environment-grid{display:grid;grid-template-columns:1fr 1fr;gap:9px}.qa-environment-grid{grid-template-columns:repeat(3,1fr)}.qa-public-box{display:grid;gap:10px;margin-top:3px;padding:12px;border:1px solid #dbe3ff;border-radius:11px;background:color-mix(in srgb,var(--surface) 96%,#3457f5)}.qa-public-toggle{padding:0;border:0;background:transparent}.qa-empty{margin:0;padding:28px 16px;color:var(--mut);font-size:12.5px;text-align:center}
.qa-actions{position:sticky;bottom:0;z-index:3;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 12px;border:1px solid var(--line);border-radius:11px;background:color-mix(in srgb,var(--surface) 95%,transparent);box-shadow:0 -5px 18px rgba(16,24,40,.06)}.qa-save-state{min-width:0;margin:0;color:var(--mut);font-size:12px}.qa-save-state[data-tone="dirty"],.qa-save-state[data-tone="saving"]{color:#b54708}.qa-save-state[data-tone="error"]{color:#b42318}.qa-save-state[data-tone="saved"]{color:#067647}.qa-action-buttons{display:flex;gap:7px}.qa-reset-button{border:1px solid var(--line);background:var(--surface);color:var(--ink2)}.qa-save-button{border:1px solid var(--accent);background:var(--accent);color:#fff}.qa-reset-button:disabled,.qa-save-button:disabled{opacity:.48;cursor:not-allowed}
@media(max-width:980px){.qa-header{display:grid}.qa-gate{width:auto;max-width:360px}.qa-summaries,.qa-workspace{grid-template-columns:1fr}.qa-screen-list{grid-template-columns:repeat(2,minmax(0,1fr));max-height:310px}.qa-environment-grid{grid-template-columns:1fr 1fr}.qa-filterbar{position:static}}
@media(max-width:620px){.qa-workbench,.qa-header,.qa-title-group,.qa-gate,.qa-metric,.qa-filterbar,.qa-workspace,.qa-list-panel,.qa-inspector{min-width:0;max-width:100%}.qa-boundary-note,.qa-publish-state,.qa-public-toggle-hint{overflow-wrap:anywhere}.qa-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.qa-summaries,.qa-verdict-row,.qa-environment-grid{grid-template-columns:1fr}.qa-screen-list{grid-template-columns:1fr}.qa-actions{position:static;align-items:stretch;flex-direction:column}.qa-action-buttons,.qa-action-buttons button{width:100%}.qa-filter-field{flex:1 1 100%;min-width:0}.qa-filter-group{display:grid;grid-template-columns:1fr 1fr;width:100%}.qa-filter-button{min-width:0;width:100%;padding-inline:6px}.qa-inspector-head{align-items:flex-start;flex-direction:column}.qa-focus-button{width:100%}}

/* 고객 계정 — 가입·마지막 로그인(Auth 기록) 열 */
/* 고객 계정 — 상용 수준 표: 머리글이 정렬 버튼, 숫자는 자릿수 정렬, 스크롤 시 머리글 고정 */
.cust-panel{padding-bottom:8px}
.cust-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:16px}
.cust-head-text h3{margin:0 0 4px}
.cust-head-text .desc{margin:0}
/* 퀵 필터가 붙으면서 이 줄에 칩·검색창·집계 셋이 들어간다. 420px에 묶어두면
   검색창과 집계가 패널 밖으로 밀려 잘린다(.panel이 overflow:hidden). 내용만큼
   차지하되 좁아지면 줄바꿈으로 흘려보낸다. */
.cust-head-tools{display:flex;align-items:center;justify-content:flex-end;gap:12px 14px;flex:0 1 auto;min-width:260px;flex-wrap:wrap}
.cust-head-tools .searchbox{flex:1 1 220px;min-width:180px}
.tablewrap{overflow-x:auto;border:1px solid var(--line2);border-radius:10px}
.cust-table{width:100%;border-collapse:separate;border-spacing:0;min-width:820px}
.cust-table thead th{position:sticky;top:0;z-index:1;background:var(--soft);border-bottom:1px solid var(--line);padding:0;white-space:nowrap}
.cust-table thead th:first-child{border-top-left-radius:10px}
.cust-table thead th:last-child{border-top-right-radius:10px;padding:0 14px;font-size:11.5px;color:var(--faint);font-weight:800;height:40px;line-height:40px}
.cust-table td{border-top:1px solid var(--line2);padding:12px 14px;vertical-align:middle;font-size:13px}
.cust-table tbody tr:first-child td{border-top:0}
.cust-table tbody tr:hover td{background:var(--soft)}
.cust-table td.num,.cust-table th.num{text-align:right}
.cust-table td.num b{font-variant-numeric:tabular-nums;font-size:14px;font-weight:800}
.cust-table td.num b.zero{color:var(--faint);font-weight:700}
.cust-table td.num .unit{margin-left:2px;font-size:11px;color:var(--faint);font-weight:700}
.cust-table td.num .cw-ago{margin-top:1px}
.cust-table .cust-who b{font-size:13.5px;font-weight:800;letter-spacing:-.1px}
.thsort{display:inline-flex;align-items:center;gap:5px;width:100%;height:40px;padding:0 14px;border:0;background:transparent;color:var(--faint);font:inherit;font-size:11.5px;font-weight:800;letter-spacing:0;cursor:pointer;white-space:nowrap}
.num .thsort{justify-content:flex-end}
.thsort:hover{color:var(--ink2);background:rgba(52,87,245,.05)}
.thsort-i{width:8px;height:8px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg) translate(-1px,-1px);opacity:0}
.cust-table th.sorted .thsort{color:var(--accent)}
.cust-table th.sorted .thsort-i{opacity:1}
.cust-table th.sorted.asc .thsort-i{transform:rotate(-135deg) translate(-1px,-1px)}
.cust-when{white-space:nowrap;line-height:1.35}
.cust-when .cw-day{font-size:12.5px;font-weight:700;font-variant-numeric:tabular-nums}
.cust-when .cw-ago{font-size:11px;color:var(--mut);font-weight:600;margin-top:1px}
.cust-when .cw-none{color:var(--faint)}
/* 정렬 중에는 표를 비우지 않고 살짝 흐리게 + 상단 진행 막대만 — 깜빡임 없이 제자리 갱신 */
.tablewrap{position:relative}
.tablewrap.loading tbody{opacity:.45;transition:opacity .12s ease}
.tablewrap.loading:after{content:"";position:absolute;left:0;right:0;top:0;height:2px;background:linear-gradient(90deg,transparent,var(--accent),transparent);background-size:40% 100%;background-repeat:no-repeat;animation:tblload 900ms linear infinite}
@keyframes tblload{0%{background-position:-40% 0}100%{background-position:140% 0}}
.cust-table td:last-child{white-space:nowrap}
.cust-table .customer-actions{justify-content:flex-end;flex-wrap:nowrap;gap:6px}
.cust-table .customer-actions .ghostbtn{min-height:32px;padding:0 10px;font-size:12px;border-radius:6px}
.cust-table .cust-who{min-width:240px}
.cust-table .account-id{margin-top:3px;font-size:11.5px}
.cust-table .account-id summary{color:var(--faint);font-weight:600}
.cust-table .account-id code{font-size:11px;max-width:220px}
@media(max-width:900px){.cust-head-tools{flex:1 1 100%}}
