/* SKKU 시설요청시스템 v2 — 채팅형 미니멀 UI */
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
/* QA M-3 fix (2026-04-08): 키보드 사용자를 위한 본문 바로가기 링크 */
.skip-link{position:absolute;left:-9999px;top:auto;width:1px;height:1px;overflow:hidden;z-index:9999}
.skip-link:focus{position:fixed;left:1rem;top:1rem;width:auto;height:auto;padding:.6rem 1rem;background:#00843D;color:#fff;border-radius:6px;box-shadow:0 4px 12px rgba(0,0,0,.2);font-weight:600;text-decoration:none}
main.app-shell:focus{outline:none}
:root{
  --bg:#FAFBFC;--surface:#FFFFFF;--surface-alt:#F3F5F7;
  --border:#E8EAED;--text:#1A1D21;--text-secondary:#5F6368;--text-tertiary:#9AA0A6;
  /* v5: z-index layer system */
  --z-table-head:2;--z-detail-head:4;--z-dropdown:20;--z-admin-tabs:60;
  --z-header:70;--z-header-sub:80;--z-header-usage:82;--z-header-admin:90;
  --z-sheet:100;--z-overlay:200;--z-toast:300;
  --green:#00843D;--green-light:#E8F5E9;--green-dark:#006B31;
  --accent:#1B3A5C;--accent-light:#E3EBF3;
  --danger:#DC2626;--warning:#F59E0B;--success:#10B981;--info:#3B82F6;
  --radius:14px;--radius-sm:10px;--radius-lg:20px;--radius-full:9999px;
  --shadow:0 1px 3px rgba(0,0,0,.06);--shadow-md:0 4px 12px rgba(0,0,0,.08);
  --font:'Pretendard Variable','Pretendard',-apple-system,BlinkMacSystemFont,'Noto Sans KR',sans-serif;
  --max-w:520px;--header-h:54px;--header-base-h:54px;--safe-bottom:env(safe-area-inset-bottom,0px);
  --brand:#00843D;--card:#FFFFFF;--bg-soft:#F3F5F7;--text-primary:#1A1D21
}
html{font-size:100%;scroll-behavior:smooth;-webkit-tap-highlight-color:transparent}
body{font-family:var(--font);color:var(--text);background:var(--bg);line-height:1.55;min-height:100dvh;-webkit-font-smoothing:antialiased}
img{max-width:100%;display:block}button,input,select,textarea{font:inherit}a{color:inherit;text-decoration:none}
:root[data-theme="dark"]{--bg:#0D1117;--surface:#161B22;--surface-alt:#1C2333;--border:#30363D;--text:#E6EDF3;--text-secondary:#8B949E;--text-tertiary:#484F58;--green-light:#0D2818;--green-dark:#3FB950;--brand:#3FB950;--card:#161B22;--bg-soft:#1C2333;--text-primary:#E6EDF3}
.app-shell{max-width:var(--max-w);margin:0 auto;min-height:100dvh;display:flex;flex-direction:column;background:var(--surface);box-shadow:0 0 60px rgba(0,0,0,.04)}
.app-shell--wide{max-width:720px}
/* 2026-07-26 · FMS-25 · height→min-height. 기존 height:var(--header-h) 는 순환이었다:
   index-inline.js syncFixedTopLayout 이 헤더의 실측 높이를 다시 --header-h 로 써 넣으므로
   헤더 높이는 CSS 정적값에 고정된 부동점이 되고, 글자가 커져도 자라지 못해 넘쳤다.
   높이 하한은 JS 가 건드리지 않는 별도 변수 --header-base-h 로 분리한다(래칫 방지 —
   --header-h 를 min-height 로 쓰면 한 번 커진 값이 되돌아오지 않는다).
   기본 환경 픽셀 동일: 내용 높이 < 하한 이므로 렌더 높이는 종전과 같은 54/60/56px. */
.header{display:flex;align-items:center;gap:10px;padding:0 16px;min-height:var(--header-base-h);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:var(--z-header);background:var(--surface)}
.header__mark{width:30px;height:30px;border-radius:50%;flex-shrink:0;overflow:hidden}
.header__mark img{width:100%;height:100%;object-fit:cover}
.header__text{font-size:.88rem;font-weight:700;letter-spacing:-.02em}
/* ★작은 글자(2026-07-31): .68rem = 10.9px 였다 */
.header__sub{font-size:.75rem;color:var(--text-tertiary);font-weight:500}
.header__right{margin-left:auto;display:flex;gap:6px;align-items:center}
.mode-pill{font-size:.68rem;padding:4px 10px;border-radius:var(--radius-full);background:var(--surface-alt);color:var(--text-secondary);font-weight:600;border:1px solid var(--border);cursor:pointer;transition:all .15s;font-family:var(--font)}
.mode-pill.active{background:var(--green-light);color:var(--green-dark);border-color:var(--green)}
.theme-toggle{width:32px;height:32px;border-radius:50%;border:1px solid var(--border);background:var(--surface-alt);cursor:pointer;display:grid;place-items:center;font-size:.8rem}
.chat-area{flex:1;overflow-y:auto;padding:16px 16px 10px;display:flex;flex-direction:column;gap:10px}
.msg{max-width:88%;animation:msgIn .25s ease-out}.msg--system{align-self:flex-start}.msg--user{align-self:flex-end}
.msg__bubble{padding:11px 15px;border-radius:var(--radius);font-size:.88rem;line-height:1.55;word-break:break-word}
.msg--system .msg__bubble{background:var(--surface-alt);color:var(--text);border:1px solid var(--border)}
.msg--user .msg__bubble{background:var(--green);color:#fff}
.welcome{flex:1;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;padding:20px;gap:14px}
.welcome__icon{font-size:2.2rem}.welcome__title{font-size:1rem;font-weight:800}.welcome__desc{font-size:.82rem;color:var(--text-secondary);max-width:300px;line-height:1.6}
.suggest-chips{display:flex;flex-wrap:wrap;gap:6px;justify-content:center}
.suggest-chip{padding:6px 12px;border-radius:var(--radius-full);border:1px solid var(--border);background:var(--surface);font-size:.78rem;font-weight:600;color:var(--text-secondary);cursor:pointer;font-family:var(--font);transition:all .15s}
.suggest-chip:hover{border-color:var(--green);background:var(--green-light);color:var(--green-dark)}
/* 2026-07-21 · F-08 접수 진행 경량 힌트 (① 캠퍼스 → ② 내용 → ③ 검토) — 변수 준수·375px 한 줄 */
.step-hint{display:flex;align-items:center;justify-content:center;flex-wrap:nowrap;gap:6px;font-size:.7rem;font-weight:600;line-height:1;color:var(--text-tertiary);padding:2px 0 6px;white-space:nowrap;overflow:hidden}
.step-hint__step{display:inline-flex;align-items:center;gap:3px;color:var(--text-tertiary);transition:color .2s}
.step-hint__step.is-done{color:var(--text-secondary)}
.step-hint__step.is-current{color:var(--green-dark);font-weight:800}
.step-hint__mark{font-size:.74rem;line-height:1}
.step-hint__arrow{color:var(--text-tertiary);opacity:.55;font-size:.66rem}
.review-card{background:var(--surface);border:1.5px solid var(--green);border-radius:var(--radius-lg);padding:16px;margin:4px 0;animation:msgIn .3s ease-out}
.review-card__head{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}
.review-card__title{font-size:.92rem;font-weight:800}.review-card__badge{font-size:.65rem;font-weight:700;padding:3px 8px;border-radius:var(--radius-full);background:var(--green-light);color:var(--green-dark)}
.review-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.review-grid__full{grid-column:1/-1}
.kv{padding:8px 10px;background:var(--surface-alt);border-radius:var(--radius-sm);font-size:.82rem}.kv__key{color:var(--text-tertiary);font-size:.68rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;margin-bottom:2px}.kv__val{font-weight:600}
.review-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.review-actions>*{min-width:0}
.compose{position:sticky;bottom:0;background:var(--surface);border-top:1px solid var(--border);padding:10px 14px calc(10px + var(--safe-bottom))}
.compose__row{display:flex;align-items:flex-end;gap:8px}
.compose__input{flex:1;resize:none;border:1.5px solid var(--border);border-radius:var(--radius);padding:11px 14px;font-size:.88rem;font-family:var(--font);color:var(--text);background:var(--surface-alt);min-height:44px;max-height:140px;transition:border-color .2s,box-shadow .2s;line-height:1.45;overflow-y:auto}
.compose__input:focus{outline:none;border-color:var(--green);box-shadow:0 0 0 3px rgba(0,132,61,.1);background:var(--surface)}
.compose__input::placeholder{color:var(--text-tertiary);transition:opacity .2s}.compose__input:focus::placeholder{opacity:.5}
.compose__input:disabled{opacity:.5;cursor:not-allowed}
.compose__btn{width:40px;height:40px;border-radius:50%;border:none;background:var(--green);color:#fff;cursor:pointer;display:grid;place-items:center;flex-shrink:0;transition:all .15s}
.compose__btn:hover{background:var(--green-dark)}.compose__btn:active{transform:scale(.94)}.compose__btn:disabled{background:var(--border);cursor:not-allowed}
.compose__btn svg{width:18px;height:18px}
.compose__mic{width:40px;height:40px;border-radius:50%;border:2px solid var(--border);background:transparent;color:var(--text-secondary);cursor:pointer;display:grid;place-items:center;flex-shrink:0;transition:all .2s}
.compose__mic:hover{border-color:var(--green);color:var(--green)}
.compose__mic:disabled{opacity:.4;cursor:not-allowed}
.compose__mic--active{background:var(--danger,#DC2626);border-color:var(--danger,#DC2626);color:#fff;animation:mic-pulse 1.5s ease-in-out infinite}
@keyframes mic-pulse{0%,100%{box-shadow:0 0 0 0 rgba(220,38,38,.4)}50%{box-shadow:0 0 0 8px rgba(220,38,38,0)}}
.stt-indicator{display:flex;align-items:center;gap:6px;padding:6px 12px;font-size:13px;color:var(--danger,#DC2626);font-weight:500}
.stt-dot{width:8px;height:8px;border-radius:50%;background:var(--danger,#DC2626);animation:stt-blink 1s ease-in-out infinite}
@keyframes stt-blink{0%,100%{opacity:1}50%{opacity:.3}}
.compose__hint{display:flex;align-items:flex-start;gap:7px;margin-top:8px;padding:0 2px;color:var(--text-secondary);line-height:1.45}
.compose__hint-badge{display:inline-flex;align-items:center;justify-content:center;min-width:36px;height:22px;padding:0 8px;border-radius:999px;background:var(--surface-alt);border:1px solid var(--border);font-size:.68rem;font-weight:800;color:var(--text-secondary);flex-shrink:0}
.compose__hint-badge--accent{background:var(--green-light,#E6F4EA);border-color:var(--green,#00843D);color:var(--green-dark,#00843D)}
.compose__hint--location{margin-top:6px}
.compose__hint-text{font-size:.75rem;letter-spacing:-.01em;word-break:keep-all}
.compose__tools{display:flex;gap:6px;margin-top:8px;align-items:center}
.tool-btn{display:inline-flex;align-items:center;gap:5px;padding:6px 11px;border-radius:var(--radius-full);border:1px solid var(--border);background:var(--surface);font-size:.75rem;font-weight:600;color:var(--text-secondary);cursor:pointer;transition:all .15s;font-family:var(--font)}
.tool-btn:hover{background:var(--surface-alt)}.tool-btn--active{border-color:var(--green);background:var(--green-light);color:var(--green-dark)}
.photo-strip{display:flex;gap:6px;margin-top:8px;overflow-x:auto;padding-bottom:4px}
.photo-thumb{position:relative;width:52px;height:52px;border-radius:8px;overflow:hidden;flex-shrink:0;border:1px solid var(--border)}
.photo-thumb img{width:100%;height:100%;object-fit:cover}
.photo-thumb__x{position:absolute;top:2px;right:2px;width:18px;height:18px;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:.6rem;border:none;cursor:pointer;display:grid;place-items:center}
.contact-toggle{display:flex;align-items:center;gap:8px;padding:8px 12px;background:var(--surface-alt);border-radius:var(--radius-sm);font-size:.82rem;color:var(--text-secondary);cursor:pointer;margin-top:8px;border:1px solid var(--border);transition:all .15s}
.contact-toggle.active{border-color:var(--green);background:var(--green-light);color:var(--green-dark)}
.contact-fields{display:none;gap:8px;margin-top:8px}
.contact-fields.visible{display:grid;grid-template-columns:1fr 1fr}
.contact-fields input{padding:9px 12px;border:1.5px solid var(--border);border-radius:var(--radius-sm);font-size:.84rem;font-family:var(--font);color:var(--text);background:var(--surface);min-width:0;width:100%;box-sizing:border-box}
/* 이메일 입력칸과 안내 박스는 풀폭 (2열 모두 차지) */
.contact-fields>input[type="email"]{grid-column:1 / -1}
.contact-fields>.contact-email-hint{grid-column:1 / -1}
@media (max-width:480px){
  .contact-fields.visible{grid-template-columns:1fr}
  .contact-fields>input{grid-column:1 / -1}
}
.contact-fields input:focus{outline:none;border-color:var(--green)}
.success{text-align:center;padding:40px 20px;animation:msgIn .3s ease-out}
.success__icon{font-size:2.4rem;margin-bottom:8px}.success__title{font-size:1.1rem;font-weight:800}.success__receipt{font-size:1.3rem;font-weight:800;color:var(--green);margin:8px 0;letter-spacing:.02em}.success__desc{font-size:.84rem;color:var(--text-secondary);margin-bottom:20px}
.success__actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:center}
.campus-meta{display:inline-flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:12px;padding:6px 10px;border-radius:999px;border:1px solid rgba(0,132,61,.12);background:linear-gradient(180deg,rgba(0,132,61,.08),rgba(0,132,61,.04));color:var(--green-dark)}
.campus-meta__label{font-size:.72rem;font-weight:700;opacity:.7}.campus-meta__value{font-size:.78rem;font-weight:800;letter-spacing:-.01em}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:10px 18px;border-radius:var(--radius-sm);font-size:.86rem;font-weight:700;border:none;cursor:pointer;font-family:var(--font);transition:all .15s}
.btn:disabled{opacity:.5;cursor:not-allowed}.btn--primary{background:var(--green);color:#fff}.btn--primary:hover:not(:disabled){background:var(--green-dark)}
.btn--outline{background:transparent;border:1.5px solid var(--border);color:var(--text)}.btn--outline:hover:not(:disabled){background:var(--surface-alt)}
.btn--sm{padding:7px 14px;font-size:.78rem}.btn--accent{background:var(--accent);color:#fff}
.admin-tabs{display:flex;gap:2px;padding:0 16px;background:var(--surface);border-bottom:1px solid var(--border)}
.admin-tab{padding:10px 16px;font-size:.82rem;font-weight:700;color:var(--text-tertiary);border:none;background:none;cursor:pointer;border-bottom:2px solid transparent;font-family:var(--font)}.admin-tab.active{color:var(--green);border-bottom-color:var(--green)}
.admin-content{flex:1;overflow-y:auto;padding:16px}
.stat-row{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:16px}
.stat-card{text-align:center;padding:14px 8px;background:var(--surface-alt);border-radius:var(--radius-sm);border:1px solid var(--border)}
.stat-card__num{font-size:1.4rem;font-weight:800}.stat-card__label{font-size:.68rem;color:var(--text-tertiary);font-weight:600;margin-top:2px}
.search-bar{display:flex;gap:8px;margin-bottom:10px}
.search-bar input{flex:1;padding:9px 14px;border:1.5px solid var(--border);border-radius:var(--radius-sm);font-size:.84rem;font-family:var(--font);color:var(--text);background:var(--surface-alt)}
.search-bar input:focus{outline:none;border-color:var(--green)}
.filter-row{display:flex;gap:6px;overflow-x:auto;padding-bottom:8px;margin-bottom:8px}
.filter-pill{padding:5px 12px;border-radius:var(--radius-full);border:1px solid var(--border);font-size:.72rem;font-weight:600;color:var(--text-secondary);white-space:nowrap;cursor:pointer;background:var(--surface);font-family:var(--font)}.filter-pill.active{background:var(--green);color:#fff;border-color:var(--green)}
.ticket-item{display:flex;align-items:center;gap:12px;padding:12px 14px;border:1px solid var(--border);border-radius:var(--radius-sm);margin-bottom:6px;cursor:pointer;transition:all .12s;background:var(--surface)}
.ticket-item:hover{border-color:var(--green);background:var(--green-light)}
.ticket-item__status{width:8px;height:8px;border-radius:50%;flex-shrink:0}
.ticket-item__body{flex:1;min-width:0}.ticket-item__title{font-size:.84rem;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ticket-item__meta{font-size:.7rem;color:var(--text-tertiary);margin-top:2px}
.ticket-item__reason{font-size:.72rem;color:var(--text-secondary);margin-top:6px;line-height:1.45}
.bottom-sheet{position:fixed;inset:0;z-index:var(--z-sheet);display:none}.bottom-sheet.visible{display:block}
.bottom-sheet__backdrop{position:absolute;inset:0;background:rgba(0,0,0,.4)}.bottom-sheet__panel{position:absolute;bottom:0;left:50%;transform:translateX(-50%);width:100%;max-width:var(--max-w);max-height:88dvh;background:var(--surface);border-radius:var(--radius-lg) var(--radius-lg) 0 0;overflow-y:auto;animation:slideUp .3s ease-out;padding:20px}
.sheet-handle{width:36px;height:4px;border-radius:2px;background:var(--border);margin:0 auto 16px}
.typing-indicator{display:flex;gap:4px;padding:4px 0}.typing-dot{width:6px;height:6px;border-radius:50%;background:var(--text-tertiary);animation:blink 1.2s infinite}.typing-dot:nth-child(2){animation-delay:.2s}.typing-dot:nth-child(3){animation-delay:.4s}
.loading-overlay{position:fixed;inset:0;z-index:var(--z-overlay);background:rgba(255,255,255,.8);display:none;place-items:center}.loading-overlay.visible{display:grid}
/* [디자인 3단계 2026-07-28] 로딩 스피너 공통 규격 — 6개 앱이 제각각이었다(실측):
     FMS 28px/3px/.7s · FMS open 24px/3px/1s(#10B981 하드코딩) · ADA 38px/3px/.8s ·
     CMS 40px/4px/.8s · 포털 스켈레톤 · desk 텍스트만 · HAJA/DASH 없음.
   규격 = 28px · 테두리 3px · 궤도는 앱의 --border/--line 토큰 · 머리는 앱의 액션색 · 0.8s linear.
   (인라인 게이지용 소형 변형은 예외로 둔다 — ADA .ug-spin 10px 는 역할이 다르다.)
   ※포털 홈의 스켈레톤(실루엣)은 스피너보다 나은 선택이라 유지한다 — 통일 대상은 '스피너'다. */
.spinner{width:28px;height:28px;border:3px solid var(--border);border-top-color:var(--green);border-radius:50%;animation:spin .8s linear infinite;margin:0 auto 10px}
/* --compose-h 는 syncFixedTopLayout() 이 실측 세팅(compose 없는 표면은 0). max()로 관리 표면 기존 80px 하한 유지 */
.toast-wrap{position:fixed;bottom:calc(max(var(--compose-h,0px),68px) + 12px);left:50%;transform:translateX(-50%);z-index:var(--z-toast);display:flex;flex-direction:column;gap:6px;align-items:center;pointer-events:none}
.toast{padding:10px 18px;border-radius:var(--radius-sm);background:var(--text);color:var(--surface);font-size:.82rem;font-weight:600;animation:toastIn .25s ease-out;box-shadow:var(--shadow-md);pointer-events:auto}
.toast--success{background:var(--success)}.toast--error{background:var(--danger)}.toast--warning{background:var(--warning);color:#1A1D21}
.nav-footer{display:flex;border-top:1px solid var(--border);background:var(--surface);padding-bottom:var(--safe-bottom)}
.nav-footer__item{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px 4px;font-size:.65rem;font-weight:600;color:var(--text-tertiary);cursor:pointer;border:none;background:none;font-family:var(--font)}.nav-footer__item.active{color:var(--green)}
.nav-footer__icon{font-size:1.1rem}

.role-pill,.auth-pill{display:inline-flex;align-items:center;justify-content:center;min-height:32px;padding:0 10px;border-radius:var(--radius-full);border:1px solid var(--border);background:var(--surface-alt);font-size:.7rem;font-weight:700;color:var(--text-secondary);white-space:nowrap}
.auth-pill{cursor:pointer;font-family:var(--font)}
.role-pill{display:none}
.detail-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.detail-title{font-size:1rem;font-weight:800}.detail-sub{font-size:.82rem;color:var(--text-secondary);margin-top:4px}
.detail-badges{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}.detail-badge{padding:5px 10px;border-radius:var(--radius-full);font-size:.74rem;font-weight:800}
.detail-section{margin-top:16px}.detail-section__title{font-size:.84rem;font-weight:800;margin-bottom:8px}.detail-form-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.detail-form-grid select{width:100%;padding:10px 12px;border:1.5px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--text);font-family:var(--font)}
.detail-actions{display:flex;gap:8px;flex-wrap:wrap}.detail-history{display:flex;flex-direction:column;gap:8px}.detail-history__item{padding:10px 12px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-alt)}
.detail-history__meta,.detail-note{font-size:.74rem;color:var(--text-secondary);margin-top:3px}.detail-history__note{font-size:.78rem;color:var(--text);margin-top:6px;white-space:pre-wrap}


.network-banner{display:none;align-items:center;gap:8px;margin:10px 16px 0;padding:10px 12px;border:1px solid rgba(245,158,11,.35);background:#FFF7ED;color:#9A3412;border-radius:var(--radius-sm);font-size:.78rem;font-weight:600}
.network-banner.visible{display:flex}
.network-banner__icon{font-size:1rem;flex-shrink:0}.network-banner__text{line-height:1.45}
.admin-toolbar{display:flex;flex-direction:column;gap:8px;margin-bottom:8px}.admin-toolbar .search-bar{margin-bottom:0}.admin-toolbar__actions{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}
.sync-chip{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:var(--radius-full);background:var(--surface-alt);border:1px solid var(--border);font-size:.72rem;font-weight:700;color:var(--text-secondary)}
.sync-chip--live{color:var(--green-dark);background:var(--green-light);border-color:rgba(0,132,61,.22)}

.hidden{display:none!important}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}
.empty-state{text-align:center;padding:40px 20px;color:var(--text-tertiary);font-size:.86rem}
/* [디자인 3단계 2026-07-28] 빈 상태 마스코트 — 포털 style.css `.empty-art` 와 동일 자산·동일 규칙
   (은행잎 마스코트 v3, 투명 배경 PNG). 6개 앱이 "아무것도 없음"을 같은 얼굴로 말하게 한다.
   ★적용 범위를 '진짜 비어 있음'으로 한정한다 — 오류/권한거부/필터로 걸러진 결과에는 붙이지 않는다.
     웃는 마스코트가 "접근할 수 없습니다" 옆에 서면 안내가 아니라 조롱이 되고, 필터 결과에는
     원인을 가리키는 아이콘(🔍)이 더 많은 정보를 준다. */
.empty-art{width:60px;height:60px;margin:0 auto 10px;opacity:.9;background:url("/assets/brand/character-192.png") center/contain no-repeat}
@keyframes msgIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
@keyframes slideUp{from{transform:translateX(-50%) translateY(100%)}to{transform:translateX(-50%) translateY(0)}}
@keyframes blink{0%,80%,100%{opacity:.3}40%{opacity:1}}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes toastIn{from{opacity:0;transform:translateX(-50%) translateY(10px)}to{opacity:1;transform:translateX(-50%) translateY(0)}}
@media(max-width:520px){.stat-row{grid-template-columns:repeat(2,1fr)}.review-grid{grid-template-columns:1fr}.detail-form-grid{grid-template-columns:1fr}.header__right{gap:4px}.role-pill{display:none}.admin-toolbar__actions{align-items:flex-start}.sync-chip{width:100%;justify-content:center}}


.alert-bell{position:relative;display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:var(--radius-full);border:1px solid var(--border);background:var(--surface);cursor:pointer;font-size:1rem}
.alert-bell--active{background:#FEF3C7;border-color:#F59E0B;color:#92400E}
.alert-bell__count{position:absolute;top:-4px;right:-2px;min-width:18px;height:18px;padding:0 5px;border-radius:999px;background:#DC2626;color:#fff;font-size:.68rem;font-weight:800;display:flex;align-items:center;justify-content:center}
.alert-strip{display:flex;gap:12px;align-items:flex-start;padding:12px 14px;margin-bottom:12px;background:var(--surface-alt);border:1px solid var(--border);border-radius:var(--radius-sm)}
.alert-strip--active{background:#FFF7ED;border-color:#FED7AA}
.alert-strip__icon{font-size:1.4rem;line-height:1}
.alert-strip__body{flex:1;min-width:0}.alert-strip__title{font-weight:800}.alert-strip__desc{font-size:.78rem;color:var(--text-secondary);margin-top:4px}
.alert-strip__chips{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}.alert-strip__tickets{display:flex;flex-direction:column;gap:8px;margin-top:10px}
.alert-strip__side{display:flex;align-items:center}
.alert-chip{padding:6px 10px;border-radius:var(--radius-full);border:1px solid var(--border);background:var(--surface);font-size:.74rem;font-weight:700;color:var(--text-secondary);cursor:pointer}
.alert-chip--danger{background:#FEF2F2;color:#B91C1C;border-color:#FECACA}.alert-chip--warning{background:#FDF2F8;color:#9D174D;border-color:#FBCFE8}
.alert-ticket{text-align:left;padding:8px 10px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--surface);font-size:.76rem;color:var(--text-secondary);cursor:pointer}
.alert-ticket strong{color:var(--text-primary)}
@media(max-width:520px){.alert-strip{flex-direction:column}.alert-strip__side{width:100%}.alert-strip__side .btn{width:100%}.alert-strip__chips{gap:6px}}


/* ===== UI polish pass: typography / responsive alignment / admin width ===== */
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
body{text-rendering:optimizeLegibility}
.app-shell{width:100%}
.app-shell--wide{max-width:980px}
.header{gap:12px;padding:0 14px}
.header>div:nth-child(2){min-width:0;flex:1}
.header__text{font-size:clamp(.84rem,.78rem + .22vw,.94rem);line-height:1.15}
.header__sub{font-size:clamp(.75rem,.72rem + .12vw,.82rem);line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.header__right{min-width:0;display:flex;align-items:center;gap:6px;flex-wrap:nowrap}
.mode-pill,.auth-pill,.role-pill,.tool-btn,.filter-pill,.suggest-chip,.alert-chip,.btn{line-height:1.15}
/* 2026-07-26 · FMS-25 · height→min-height. 이 파일 뒤쪽 "round13 compact header" 블록의
   .mode-pill,.auth-pill,.role-pill{min-height:38px} 규칙이 이미 실효 높이를 정하므로
   기본 환경 렌더 높이는 38px 로 불변이고, 글자 확대 시에만 알약이 따라 자란다. */
.mode-pill,.auth-pill,.role-pill{min-height:32px;padding:0 10px}
.mode-pill{font-size:.72rem}
.auth-pill,.role-pill{font-size:.7rem}
.theme-toggle,.alert-bell{width:32px;height:32px;min-width:32px}
.welcome__title{font-size:1.05rem;line-height:1.25}
.welcome__desc,.detail-note,.detail-history__note,.detail-note,.kv__val,.msg__bubble,.ticket-item__reason,.ticket-item__meta,.detail-sub{overflow-wrap:anywhere;word-break:keep-all}
.suggest-chips,.compose__tools,.filter-row,.admin-tabs,.photo-strip{scrollbar-width:none;-ms-overflow-style:none}
.suggest-chips::-webkit-scrollbar,.compose__tools::-webkit-scrollbar,.filter-row::-webkit-scrollbar,.admin-tabs::-webkit-scrollbar,.photo-strip::-webkit-scrollbar{display:none}
.admin-tabs{display:flex;gap:4px;overflow-x:auto;padding:0 10px}
.admin-tab{flex:0 0 auto;white-space:nowrap;padding:0 14px;min-height:42px}
.stat-row{align-items:stretch}
.stat-card{display:flex;flex-direction:column;justify-content:center;min-height:88px;padding:14px 10px}
.stat-card__num{line-height:1.08}
.stat-card__label{line-height:1.35;min-height:2.7em;display:flex;align-items:flex-start;justify-content:center;text-align:center;overflow-wrap:anywhere}
.ticket-item{align-items:flex-start}
.ticket-item__title{white-space:normal;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;line-height:1.35}
.search-bar>*,.compose__row>*,.admin-toolbar__actions>*,.detail-actions>*{min-width:0}
.btn{min-height:40px;text-align:center}
.btn--sm{min-height:34px}
.alert-ticket,.filter-pill,.tool-btn,.suggest-chip{white-space:nowrap}
.admin-toolbar__actions{row-gap:8px}
@media (min-width: 960px){
  .app-shell--wide{max-width:min(1480px,calc(100vw - 32px))}
}
@media(max-width:640px){
  :root{--radius:13px;--radius-lg:18px}
  .header{gap:8px;padding:0 10px}
  .header__mark{width:28px;height:28px}
  .header__text{font-size:.82rem}
  .header__sub{font-size:.64rem;max-width:112px}
  .header__right{gap:4px}
  .mode-pill,.auth-pill{padding:0 8px}
  .theme-toggle,.alert-bell{width:30px;height:30px;min-width:30px}
  .mode-pill{font-size:.68rem}
  .auth-pill{font-size:.67rem}
  .welcome{padding:20px 16px 14px}
  .welcome__desc{max-width:none}
  .suggest-chips{justify-content:flex-start}
  .chat-area,.admin-content{padding:14px 12px}
  .compose{padding:8px 10px calc(8px + var(--safe-bottom))}
  .compose__btn,.compose__mic{width:38px;height:38px}
  .admin-tabs{padding:0 8px}
  .admin-tab{min-height:40px;padding:0 12px;font-size:.78rem}
  .stat-card{min-height:84px;padding:12px 8px}
  .stat-card__num{font-size:1.2rem}
  .stat-card__label{font-size:.7rem}
  .admin-toolbar__actions{justify-content:flex-start}
  /* 2026-07-21 · F-07 · 공개 화면 모바일 터치타깃 44px 확보 — 시각 크기·레이아웃 유지, 히트영역만 확장 */
  .theme-toggle,.compose__mic,.compose__btn{position:relative}
  .theme-toggle::after,.compose__mic::after,.compose__btn::after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:44px;height:44px}
  .campus-gate__track .btn-link{min-height:44px;display:inline-flex;align-items:center;justify-content:center}
  .contact-fields input{min-height:44px}
  .review-actions .btn{min-height:44px}
}


/* ===== UI polish pass 2: compact header / toolbar rhythm / filter stability ===== */
.header__brand{min-width:0;flex:1}
.header__brand .header__text,.header__brand .header__sub{max-width:100%}
.header__sub{max-width:none}
.header__right > *{flex-shrink:0}
.auth-pill{max-width:96px;overflow:hidden;text-overflow:ellipsis}
.admin-toolbar{padding:10px 12px;background:color-mix(in srgb,var(--surface-alt) 72%, transparent);border:1px solid var(--border);border-radius:var(--radius-sm)}
.admin-toolbar__actions{justify-content:flex-start;row-gap:8px}
.admin-toolbar__actions > *{flex-shrink:0}
.search-bar{align-items:stretch}
.search-bar input{min-height:40px}
.filter-row{padding:2px 0 10px;scroll-snap-type:x proximity;scroll-padding-inline:2px}
.filter-row::after{content:'';flex:0 0 2px}
.filter-pill{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;min-height:34px;padding:0 12px;scroll-snap-align:start}
.ticket-item{padding:13px 14px;border-radius:12px}
.detail-section{scroll-margin-top:72px}
@media (min-width: 721px){
  .admin-content{padding:18px}
  .admin-toolbar{padding:12px 14px}
}
@media (max-width: 640px){
  .admin-toolbar{padding:10px}
  .admin-toolbar__actions > .btn{flex:1 1 calc(50% - 4px);min-width:132px}
  .admin-userbar{align-items:flex-start;flex-wrap:wrap}
  .admin-userbar__actions{width:100%}
  .admin-userbar__actions > *{flex:1 1 calc(50% - 4px);min-width:120px}
  .search-bar{flex-wrap:wrap}
  .search-bar > input{flex:1 1 100%}
}
@media (max-width: 420px){
  .header{gap:6px;padding:0 8px}
  .header__mark{width:26px;height:26px}
  .header__text{font-size:.79rem}
  .header__sub{font-size:.61rem;max-width:92px}
  .header__right{gap:3px}
  .mode-pill,.auth-pill{padding:0 7px}
  .mode-pill{font-size:.66rem}
  .auth-pill{max-width:58px;font-size:.65rem}
  .theme-toggle,.alert-bell{width:28px;height:28px;min-width:28px}
  .alert-bell__count{top:-5px;right:-3px;min-width:16px;height:16px;font-size:.62rem}
  .admin-tabs{padding:0 6px}
  .admin-tab{padding:0 10px;font-size:.76rem}
  .admin-content{padding:12px 10px}
  .filter-row{margin-inline:-2px;padding-inline:2px 0}
  .filter-pill{min-height:32px;padding:0 11px;font-size:.7rem}
  .ticket-item{padding:12px}
  .ticket-item__meta,.ticket-item__reason{font-size:.71rem}
}


/* ===== UI polish pass 3: header fitting / text balance / mobile action rhythm ===== */
body{line-break:strict}
.app-shell{overflow-x:hidden}
.header{backdrop-filter:saturate(1.08) blur(8px)}
.header__brand{overflow:hidden}
.header__text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;letter-spacing:-.025em}
.header__sub{display:block;overflow:hidden;text-overflow:ellipsis}
.admin-tabs{position:sticky;top:var(--header-h);z-index:var(--z-admin-tabs)}
.admin-tab{letter-spacing:-.01em}
.stat-card__num{font-size:clamp(1.1rem,1rem + .55vw,1.45rem)}
.ticket-item__meta{font-size:.73rem;line-height:1.45}
.ticket-item__reason{line-height:1.52}
.detail-section__title,.review-card__title,.detail-title{letter-spacing:-.015em}
.detail-note,.network-banner__text,.admin-userbar__sub,.sync-chip{line-height:1.45}
.search-bar input,.detail-form-grid select,.contact-fields input,.compose__input{letter-spacing:-.01em}
.search-bar input::placeholder,.compose__input::placeholder{letter-spacing:-.01em}
@media (max-width: 520px){
  .header{padding:0 8px}
  .header__mark{width:26px;height:26px}
  .header__text{font-size:.8rem}
  .header__sub{font-size:.6rem;max-width:84px}
  .header__right{gap:3px}
  .mode-pill,.auth-pill{padding:0 7px;font-size:.65rem}
  .theme-toggle,.alert-bell{width:28px;height:28px;min-width:28px}
  .admin-userbar{padding:10px 12px}
  .admin-userbar__actions > *{min-height:36px}
  .admin-toolbar__actions > .btn{min-height:36px}
  .ticket-item{gap:10px}
  .ticket-item__actions{width:100%}
  .ticket-item__actions .btn{flex:1 1 calc(50% - 4px);min-width:120px}
}
@media (max-width: 390px){
  .header{gap:5px;padding:0 7px}
  .header__text{font-size:.77rem}
  .header__sub{font-size:.58rem;max-width:72px}
  .mode-pill,.auth-pill{padding:0 6px;font-size:.63rem}
  .admin-tab{padding:0 9px;font-size:.74rem}
  .stat-card{padding:11px 7px}
  .stat-card__label{font-size:.68rem}
}
@media (max-width: 360px){
  .header__sub{display:none}
  .header__text{font-size:.76rem}
  .mode-pill{padding:0 6px;font-size:.62rem}
  .auth-pill{max-width:52px;font-size:.62rem}
  .ticket-item__actions .btn{flex:1 1 100%}
}

/* ===== UI tone-up pass 4: quieter admin / richer contrast ===== */
:root{
  --bg:#F4F6F8;
  --surface:#FFFFFF;
  --surface-alt:#F7F8FA;
  --border:#E3E8EE;
  --text:#18212B;
  --text-secondary:#57606A;
  /* ★#8A949E 는 흰 배경 위 3.09:1 로 AA(4.5:1) 미달인데 71개 선언이 이 토큰을 소비한다
     (티켓 메타 @134·하단 내비 라벨 @147·빈 상태 @169 등) → #64748B(4.76:1).
     ※@9 의 #9AA0A6 을 고쳐 봐야 소용없다 — 같은 (0,1,0) 이라 뒤에 오는 이 :root 가 이긴다.
       다크(@26 :root[data-theme="dark"], (0,2,0))는 특이도가 높아 순서와 무관하게 그대로 유지된다.
     ※헤더 안 caret 은 @392 .header .master-usage-caret(0,2,0)이 흰 55%로 따로 덮으므로 무영향
     (디자인 마감 2026-07-28) */
  --text-tertiary:#64748B;
  --shadow:0 1px 2px rgba(12,38,22,.04),0 8px 24px rgba(12,38,22,.05);
  --shadow-md:0 12px 30px rgba(12,38,22,.10);
}
body{background:linear-gradient(180deg,#F7F9FB 0%,#F1F4F7 100%)}
.app-shell{background:linear-gradient(180deg,#FFF 0%,#FBFCFD 100%);box-shadow:0 20px 60px rgba(12,38,22,.07)}
/* [디자인통일 4단계] 공통 파인 헤더 크롬 — FMS는 blur 헤더(@307)이므로 그라디언트 대신 파인 반투명 단색 rgba(11,38,22,.92)+blur 유지, 하단 3px 성균그린(#00843D) rail. 실효 지점=이 v213 톤업 오버라이드(base @29 카드배경을 source-order 로 이 규칙이 이긴다). box-sizing:border-box(@2)이므로 3px rail 은 --header-h 내부에 흡수 → 고정스택 오프셋(contact-strip top·app-shell padding-top) 불변. 헤더 밖 불변. */
.header{background:rgba(11,38,22,.92);border-bottom:3px solid #00843D}
/* [디자인통일 4단계] 파인 헤더 내부 반전 — .header 스코프 한정(전역 오염 금지, HAJA/CMS 검증 패턴). 브랜드 텍스트=흰색·보조=흰 72%. 로고 마크(자체 그린 그라디언트)는 파인 위 분리용 흰 링+소프트 섀도. 자체 밝은표면 pill/칩/토글/벨(mode-pill·auth-pill·role-pill·alert-bell·theme-toggle·master-usage-chip)은 그대로 밝은 칩으로 고대비(경계 대비만) — 다크모드는 기존과 동일하게 1px border 로 경계 유지. */
.header .header__home{color:#fff}
.header .header__text{color:#fff}
.header .header__sub{color:rgba(255,255,255,.72)}
.header .header__mark{box-shadow:0 1px 3px rgba(0,0,0,.22);border:1px solid rgba(255,255,255,.18)}
/* [디자인통일 트랙B] 다크 헤더 pill 경계 복원 — 파인 헤더(rgba(11,38,22,.92)≈#0B2616) 위에서 기본 pill 표면(--surface-alt #1C2333 / alert-bell는 --surface #161B22)이 배경과 명도 ≈1:1로 묻혀 1px 경계(--border #30363D)에만 의존. 다크+헤더 스코프 한정으로 테두리를 rgba(255,255,255,.35)로 강화 → 파인 대비 ~3.15:1·pill 대비 ~3.1:1(비텍스트 3:1 충족). active(초록)·alert-bell--active(앰버) 색 테두리는 자체로 파인 대비 ≥3.5:1이라 제외. 라이트 무변경. */
:root[data-theme="dark"] .header .mode-pill:not(.active),
:root[data-theme="dark"] .header .auth-pill,
:root[data-theme="dark"] .header .role-pill,
:root[data-theme="dark"] .header .alert-bell:not(.alert-bell--active),
:root[data-theme="dark"] .header .theme-toggle,
:root[data-theme="dark"] .header .master-usage-chip{border-color:rgba(255,255,255,.35)}
/* [디자인통일 트랙B] master-usage caret — 다크에서 --text-tertiary(#484F58)가 파인 위 ~1.96:1(AA 미달). 헤더 스코프로 흰 55%(파인 위 ~5.7:1) 적용 — 양 테마 헤더 흰 텍스트와 정합(라이트 기존 #8A949E 5.18:1→5.7:1). */
.header .master-usage-caret{color:rgba(255,255,255,.55)}
.admin-tabs{background:rgba(255,255,255,.92);border-bottom-color:#E6EBF0}
.admin-tab{color:#717A84}
.admin-tab.active{color:var(--green-dark);border-bottom-color:var(--green-dark)}
.admin-content{background:linear-gradient(180deg,#FBFCFD 0%,#F6F8FA 100%)}
.review-card,.admin-toolbar,.admin-userbar,.stat-card,.ticket-item,.history-item,.detail-history__item,.bottom-sheet__panel,.kv{box-shadow:var(--shadow)}
.review-card,.admin-toolbar,.admin-userbar,.ticket-item,.history-item,.detail-history__item,.kv,.search-bar input,.detail-form-grid select,.contact-fields input,textarea{border-color:#E5EAF0}
.stat-card{background:linear-gradient(180deg,#FFF 0%,#F8FAFB 100%)}
.stat-card__label{min-height:auto;margin-top:4px;color:#77808A}
.ticket-item{background:linear-gradient(180deg,#FFF 0%,#FBFCFD 100%);margin-bottom:8px}
.ticket-item:hover{border-color:#CAD4DE;background:#FFF;box-shadow:var(--shadow-md);transform:translateY(-1px)}
.ticket-item__title{font-size:.83rem;letter-spacing:-.015em}
.ticket-item__meta{color:#6B7280}
.ticket-item__reason{font-size:.7rem;color:#667085}
.search-bar input,.detail-form-grid select,.contact-fields input,textarea,.kv input,.kv select{background:#FFF;border-color:#DEE5EC;box-shadow:0 1px 0 rgba(15,23,42,.02)}
.search-bar input:focus,.detail-form-grid select:focus,.contact-fields input:focus,textarea:focus,.kv input:focus,.kv select:focus{outline:none;border-color:var(--green);box-shadow:0 0 0 3px rgba(0,132,61,.08)}
.filter-pill{background:#FFF;color:#5F6770;border-color:#DDE4EB}
.filter-pill.active{background:var(--green-dark);color:#FFF;border-color:var(--green-dark)}
.sync-chip{background:#FFF;border-color:#DDE4EB}
.detail-section__title{font-size:.8rem;letter-spacing:-.02em}
.admin-content .detail-note{font-size:.71rem;color:#8A949E;line-height:1.5;max-width:54ch}
.admin-content .detail-note strong{color:#6B7280}
.bottom-sheet__panel{max-width:min(860px,calc(100vw - 16px));background:linear-gradient(180deg,#FFF 0%,#FAFBFC 100%)}
.kv{background:linear-gradient(180deg,#FFF 0%,#F9FAFB 100%)}
.btn--outline{background:rgba(255,255,255,.78)}
@media (max-width: 640px){
  .admin-content .detail-note{max-width:none}
  .ticket-item__priority{min-width:44px}
}


/* ===== layout audit pass 5: overflow / density fixes ===== */
@media (min-width: 901px){
  .filter-row{flex-wrap:wrap;overflow:visible;row-gap:8px;padding-bottom:4px}
  .filter-row::after{display:none}
}
@media (max-width: 520px){
  .compose__input{min-height:52px;padding:12px 14px;font-size:.92rem;line-height:1.35}
  .compose__hint{margin-top:9px;gap:6px}
  .compose__hint--location{margin-top:5px}
  .compose__hint-badge{min-width:34px;height:21px;padding:0 7px;font-size:.66rem}
  .compose__hint-text{font-size:.72rem;line-height:1.5}
  .compose__tools{margin-top:10px}
  .tool-btn{min-height:38px;padding:0 12px}
  .admin-userbar strong{font-size:1rem;line-height:1.2}
  /* 2026-04-27 · Phase 3-8 · 신규 컴포넌트 모바일 최적화 */
  .track-page__loading{padding:24px 12px}
  .track-page__loading-text{font-size:.82rem}
  .track-result__original{padding:12px 13px;border-radius:10px}
  .track-result__original-label{font-size:.76rem}
  .track-result__original-body{font-size:.85rem;line-height:1.55}
}
@media (max-width: 420px){
  .compose__input{font-size:.9rem}
  .header__right .auth-pill{max-width:64px}
}


/* ===== admin simplification pass 6 ===== */
.admin-compact-panel{margin:10px 0 12px;border:1px solid #E5EAF0;border-radius:18px;background:linear-gradient(180deg,#FFF 0%,#FAFBFC 100%);box-shadow:var(--shadow)}
.admin-compact-panel summary{cursor:pointer;list-style:none;padding:14px 16px;font-weight:800;color:#1F2937;display:flex;align-items:center;justify-content:space-between}
.admin-compact-panel summary::-webkit-details-marker{display:none}
.admin-compact-panel summary::after{content:'열기';font-size:.74rem;font-weight:700;color:#6B7280}
.admin-compact-panel[open] summary::after{content:'닫기'}
.admin-compact-panel__body{padding:0 14px 14px}
.ticket-item--compact .ticket-item__title{margin-bottom:2px}
.ticket-item--compact .ticket-item__reason{line-height:1.45}
.ticket-item--compact .ticket-item__priority{align-self:flex-start;margin-top:2px}
@media (max-width: 640px){
  .admin-compact-panel summary{padding:13px 14px;font-size:.86rem}
  .admin-compact-panel__body{padding:0 12px 12px}
}


/* ===== admin simplification pass 7 ===== */
.admin-fold{margin:12px 0;border:1px solid #E5EAF0;border-radius:18px;background:linear-gradient(180deg,#FFF 0%,#FAFBFC 100%);box-shadow:var(--shadow)}
.admin-fold summary{cursor:pointer;list-style:none;padding:14px 16px;display:flex;align-items:center;justify-content:space-between;gap:12px}
.admin-fold summary::-webkit-details-marker{display:none}
.admin-fold summary::after{content:'펼치기';font-size:.74rem;font-weight:700;color:#6B7280;flex:0 0 auto}
.admin-fold[open] summary::after{content:'접기'}
.admin-fold__head{min-width:0}
.admin-fold__title{font-weight:800;color:#0F172A;letter-spacing:-.02em}
.admin-fold__sub{margin-top:3px;font-size:.74rem;color:#7B8794;line-height:1.45}
.admin-fold__count{font-size:.74rem;font-weight:700;color:#7B8794;white-space:nowrap}
.admin-fold__body{padding:0 14px 14px}
.admin-fold .detail-history{margin-top:0}
.admin-fold .review-grid{margin-top:0}
.admin-fold .detail-actions{margin-top:10px}
@media (max-width: 640px){
  .admin-fold summary{padding:13px 14px}
  .admin-fold__body{padding:0 12px 12px}
}

/* ===== admin minimal pass 8 ===== */
.ticket-item--compact .ticket-item__title .detail-badge:nth-of-type(n+3){display:none}
.ticket-item--compact .ticket-item__reason{line-height:1.45}
.admin-content .admin-compact-panel + .admin-compact-panel{margin-top:10px}
.admin-content .detail-section .stat-row{gap:10px}


.ticket-meta-chips{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.ticket-item--compact .ticket-meta-chips .detail-badge{padding:4px 9px;font-size:.72rem}
.stat-row + .admin-toolbar{margin-top:0}


.filter-pill__count{display:inline-flex;align-items:center;justify-content:center;min-width:22px;height:22px;padding:0 6px;border-radius:999px;background:rgba(15,23,42,.08);font-size:.69rem;font-weight:800}
.filter-pill.active .filter-pill__count{background:rgba(255,255,255,.18);color:#fff}


.stat-row--focus{gap:10px}
.stat-card--focus{border-color:#D7DFE8;background:linear-gradient(180deg,#FFFFFF 0%,#F4F7F9 100%)}
.filter-row--clean{margin-top:2px}
.ticket-item--clean{border-radius:18px;padding:14px 14px 14px 0}
.ticket-item__title--spread{display:flex;gap:8px;align-items:flex-start;justify-content:space-between;flex-wrap:nowrap}
.ticket-item__title--spread .detail-badge{flex:0 0 auto}
.detail-badges--compact{margin-top:8px;gap:6px}
.detail-badges--compact .detail-badge{padding:4px 9px;font-size:.72rem}
.bottom-sheet__panel--clean{padding-top:18px}
.admin-content .stat-row + .admin-toolbar{margin-top:10px}

.ticket-item--clean .ticket-item__title{line-height:1.4}
.ticket-item--clean .ticket-item__meta{margin-top:6px}
.ticket-item--clean .ticket-item__actions{margin-top:10px}

.ticket-item__reason{margin-top:6px;font-size:.78rem;line-height:1.45}


.stat-row--staff-minimal{grid-template-columns:repeat(3,minmax(0,1fr))}
.ticket-item--staff .ticket-item__meta{margin-bottom:2px}
.ticket-item--staff .ticket-meta-chips{margin-top:8px}
.ticket-item--staff .ticket-item__reason{margin-top:8px;font-size:.78rem;line-height:1.45}
@media(max-width:520px){
  .stat-row--staff-minimal{grid-template-columns:1fr}
}


/* ===== usability visual pass 7: bigger, clearer, less cramped ===== */
.stat-row{gap:12px}
.stat-card{min-height:112px;padding:18px 14px;border-radius:18px}
.stat-card__num{font-size:clamp(1.45rem,1.2rem + .7vw,1.9rem);line-height:1.02}
.stat-card__label{font-size:.82rem;line-height:1.4;font-weight:800;color:#5E6A75;margin-top:8px}
.stat-row--staff-minimal .stat-card,.stat-row--focus .stat-card{min-height:118px}
.filter-row{gap:10px;padding:4px 0 12px}
.filter-pill{min-height:42px;padding:0 16px;font-size:.84rem;font-weight:800;border-radius:999px}
.filter-pill__count{display:inline-flex;align-items:center;justify-content:center;min-width:24px;height:24px;margin-left:8px;padding:0 7px;border-radius:999px;background:rgba(15,23,42,.07);font-size:.76rem;font-weight:800}
.filter-pill.active .filter-pill__count{background:rgba(255,255,255,.28)}
.admin-toolbar{padding:14px 14px 12px;border-radius:18px}
.admin-toolbar .search-bar input{min-height:46px;font-size:.95rem;border-radius:14px;padding:0 14px}
.admin-toolbar__actions .btn{min-height:44px}
.ticket-item{padding:18px 16px;border-radius:20px;margin-bottom:10px;gap:14px}
.ticket-item--clean{padding:18px 16px 18px 14px}
.ticket-item__status{width:10px;height:10px;margin-top:5px}
.ticket-item__title{font-size:.96rem;line-height:1.42;font-weight:800}
.ticket-item__meta{font-size:.8rem;line-height:1.5;margin-top:6px}
.ticket-item__reason{font-size:.82rem;line-height:1.55;margin-top:8px}
.ticket-meta-chips{margin-top:10px}
.detail-head{gap:14px}
.detail-title{font-size:1.15rem;font-weight:900}
.detail-sub{font-size:.92rem;line-height:1.55;margin-top:6px}
.detail-badges{margin-top:12px;gap:10px}
.detail-badge{padding:7px 12px;border-radius:999px;font-size:.8rem;font-weight:900}
.admin-fold{border-radius:18px;overflow:hidden}
.admin-fold summary{padding:18px 18px;min-height:64px}
.admin-fold__title{font-size:.98rem;font-weight:900}
.admin-fold__sub{font-size:.8rem;margin-top:3px}
.admin-fold__count{font-size:.8rem;font-weight:800}
.admin-fold__body{padding:0 18px 18px}
.bottom-sheet__panel--clean{padding:22px 18px 18px}
.detail-form-grid input,.detail-form-grid select,textarea{min-height:48px;font-size:.94rem;border-radius:14px;padding:12px 14px}
textarea#closeSummaryInput{min-height:112px;font-size:.95rem}
.detail-actions{gap:10px}
.detail-actions .btn{min-height:46px;padding:0 16px;font-weight:800}
.detail-actions--grid .btn,.status-action-btn{flex:1 1 calc(50% - 5px);justify-content:center}
.kv{padding:12px 14px;border-radius:14px}
.kv__key{font-size:.72rem;margin-bottom:4px}
.kv__val{font-size:.92rem;line-height:1.55}
@media(max-width:720px){
  .stat-card{min-height:108px;padding:16px 12px}
  .ticket-item{padding:16px 14px}
  .ticket-item--clean{padding:16px 14px 16px 12px}
  .ticket-item__actions--single .btn{max-width:none}
}
@media(max-width:520px){
  .filter-pill{min-height:40px;padding:0 14px;font-size:.82rem}
  .stat-card{min-height:102px}
  .detail-actions--grid .btn,.status-action-btn{flex:1 1 100%}
  .admin-fold summary{padding:16px}
  .admin-fold__body{padding:0 16px 16px}
}


/* pass8: bigger, clearer, easier to scan */
.ticket-item{padding:18px 16px;border-radius:20px}
.ticket-item__status{width:5px;border-radius:999px}
.ticket-item__title{font-size:1.04rem;line-height:1.45;font-weight:900}
.ticket-item__meta{font-size:.9rem;line-height:1.5;color:#66707B;margin-top:6px}
.ticket-meta-chips{margin-top:12px;gap:8px}
.ticket-item--compact .ticket-meta-chips .detail-badge{padding:6px 12px;font-size:.8rem;font-weight:800}

.stat-card{min-height:124px;padding:20px 16px;border-radius:20px}
.stat-card__num{font-size:clamp(1.7rem,1.35rem + .9vw,2.15rem);line-height:1.02}
.stat-card__label{font-size:.92rem;line-height:1.42;font-weight:900;margin-top:10px}
.stat-row--staff-minimal .stat-card,.stat-row--focus .stat-card{min-height:130px}

.filter-pill{min-height:46px;padding:0 18px;font-size:.9rem;font-weight:900}
.filter-pill__count{min-width:26px;height:26px;font-size:.8rem}

.detail-head{gap:16px;align-items:flex-start}
.detail-title{font-size:1.28rem;font-weight:900;line-height:1.25}
.detail-sub{font-size:.96rem;line-height:1.55;color:#5F6B76;margin-top:8px}
.detail-badges{margin-top:14px;gap:10px}
.detail-badge{padding:7px 12px;border-radius:999px;font-size:.82rem;font-weight:900}


.admin-fold{margin:14px 0;border-radius:20px}
.admin-fold summary{padding:20px 20px;min-height:72px}
.admin-fold summary::after{content:'열기';font-size:.84rem;font-weight:900;color:#475467}
.admin-fold[open] summary::after{content:'닫기'}
.admin-fold__title{font-size:1.04rem;font-weight:900;line-height:1.3}
.admin-fold__sub{font-size:.86rem;line-height:1.5;margin-top:4px;color:#66707B}
.admin-fold__count{font-size:.84rem;font-weight:800}
.admin-fold__body{padding:0 20px 20px}

.detail-section__title{font-size:.98rem;font-weight:900;margin-bottom:10px}
.detail-note{font-size:.84rem;line-height:1.6;color:#66707B}
.kv{padding:14px 14px}
.kv__key{font-size:.8rem;font-weight:800;color:#66707B}
.kv__val{font-size:.95rem;line-height:1.55}

.bottom-sheet__panel--clean{padding:24px 20px 20px}
#detailCloseBtn{min-height:46px;padding:0 16px;font-weight:900;border-radius:14px}

.detail-actions{gap:10px}
.detail-actions .btn{min-height:52px;padding:0 18px;font-size:.95rem;font-weight:900;border-radius:14px}
.detail-actions--grid .btn,.status-action-btn{flex:1 1 calc(50% - 5px);min-height:54px;font-size:.95rem;font-weight:900;border-width:2px}
.status-action-btn{background:#FFF;border-color:#CBD5E1;color:#0F172A}
.status-action-btn:hover{background:#F8FAFC;border-color:#94A3B8}
/* ★UI점검(2026-07-23): 종결성 전이(처리완료·반려·이관·병합 등) 시각 구분 — 전 버튼 동일 스타일이라
   오조작을 유발하던 결함. 위험색 테두리·글씨로 '누르면 종결'임을 드러낸다.
   #detailStatusSection 스코프 필수(적대적 리뷰): 아래 697행대 ID 규칙(특이도 1,1,0)이 단일 클래스
   규칙을 이겨 위험색이 무효화되므로 동등 이상 특이도로 재선언. */
.status-action-btn--terminal,
#detailStatusSection .status-action-btn.status-action-btn--terminal{border-color:#FCA5A5;color:#B91C1C;background:#FFF7F7}
.status-action-btn--terminal:hover,
#detailStatusSection .status-action-btn.status-action-btn--terminal:hover{background:#FEF2F2;border-color:#F87171}
textarea#closeSummaryInput{min-height:112px;font-size:.96rem;line-height:1.55}

@media (max-width: 640px){
  .ticket-item{padding:16px 14px}
  .ticket-item__title{font-size:1rem}
  .ticket-item__meta{font-size:.88rem}
  .ticket-item__actions .btn{max-width:none;min-height:50px}
  .stat-card{min-height:118px;padding:18px 14px}
  .stat-card__label{font-size:.88rem}
  .filter-pill{min-height:44px;padding:0 16px;font-size:.88rem}
  .detail-title{font-size:1.18rem}
  .detail-sub{font-size:.92rem}
  .admin-fold summary{padding:18px 16px;min-height:68px}
  .admin-fold__body{padding:0 16px 16px}
  .detail-actions--grid .btn,.status-action-btn{flex:1 1 100%}
}


/* pass9: 큰 요소 + 우선순위 강화 */
.admin-tabs{gap:8px;padding:10px 14px 0;background:linear-gradient(180deg,#F8FBFA 0%,rgba(248,251,250,.92) 100%)}
.admin-tab{min-height:50px;padding:0 18px;border-radius:16px 16px 0 0;font-size:.92rem;font-weight:900;color:#66707B;border-bottom-width:3px}
.admin-tab.active{background:var(--surface);color:var(--green-dark);border-bottom-color:var(--green-dark);box-shadow:0 -1px 0 rgba(15,23,42,.04),0 8px 20px rgba(15,23,42,.06)}
.stat-row--focus,.stat-row--staff-minimal{gap:14px}
.stat-card{min-height:138px;padding:22px 18px;border-radius:22px;border:1.5px solid #DCE4EB;box-shadow:0 10px 24px rgba(15,23,42,.06)}
.stat-card__num{font-size:clamp(1.85rem,1.45rem + 1vw,2.35rem);font-weight:900}
.stat-card__label{font-size:.98rem;line-height:1.45;margin-top:12px;color:#55606C}
.stat-card--focus{border-color:#CFE0D6;background:linear-gradient(180deg,#FFFFFF 0%,#F3FBF6 100%)}
.filter-row{gap:10px}
.filter-pill{min-height:50px;padding:0 20px;font-size:.94rem;border-width:1.5px;box-shadow:0 2px 10px rgba(15,23,42,.04)}
.filter-pill__count{min-width:28px;height:28px;font-size:.84rem;margin-left:10px}
.ticket-item{padding:20px 18px;border-radius:22px;border:1.5px solid #DCE4EB;box-shadow:0 12px 26px rgba(15,23,42,.05);gap:16px}
.ticket-item:hover{transform:translateY(-2px);box-shadow:0 16px 30px rgba(15,23,42,.08)}
.ticket-item__status{width:8px;height:100%;min-height:72px;border-radius:999px;margin-top:0}
.ticket-item__title{font-size:1.1rem;line-height:1.45;font-weight:900;color:#0F172A}
.ticket-item__meta{font-size:.94rem;line-height:1.6;color:#66707B;margin-top:8px}
.ticket-item__reason{font-size:.9rem;line-height:1.6;margin-top:10px}
.ticket-meta-chips{margin-top:14px;gap:10px}
.ticket-item--compact .ticket-meta-chips .detail-badge{padding:7px 13px;font-size:.84rem}
.bottom-sheet__panel{max-height:92dvh}
.bottom-sheet__panel--clean{padding:0 22px 24px}
.sheet-handle{margin:14px auto 14px}
.detail-head{position:sticky;top:0;z-index:4;padding:18px 0 14px;background:linear-gradient(180deg,var(--surface) 0%,var(--surface) 85%,rgba(255,255,255,.9) 100%);border-bottom:1px solid var(--border);margin:0 -2px 6px}
.detail-title{font-size:1.4rem;line-height:1.24;font-weight:900}
.detail-sub{font-size:1rem;line-height:1.65;color:#5B6672;margin-top:10px;max-width:62ch}
/* 2026-07-26 · background:#fff 제거 — ID 특이도가 다크 오버라이드(.btn--outline)를 이겨 흰배경+흰글자였음 */
#detailCloseBtn{min-height:52px;padding:0 18px;font-size:.94rem;border-radius:16px;border-width:1.5px}
.detail-badges{margin-top:16px;gap:12px}
.detail-badge{padding:8px 14px;font-size:.86rem;border-radius:999px}
#detailStatusSection, #detailAssignmentSection{border-color:#CFE0D6;box-shadow:0 12px 26px rgba(0,132,61,.07)}
#detailStatusSection summary, #detailAssignmentSection summary{background:linear-gradient(180deg,#FFFFFF 0%,#F4FBF7 100%)}
.admin-fold{margin:16px 0;border-radius:22px;border:1.5px solid #DCE4EB;box-shadow:0 12px 26px rgba(15,23,42,.05)}
.admin-fold summary{padding:22px 20px;min-height:78px}
.admin-fold__title{font-size:1.08rem;font-weight:900}
.admin-fold__sub{font-size:.9rem;line-height:1.55;color:#66707B;margin-top:5px}
.admin-fold__count{font-size:.86rem;font-weight:900;color:#52606D}
.admin-fold summary::after{font-size:.9rem;color:#344054}
.admin-fold__body{padding:0 20px 20px}
.detail-section__title{font-size:1.04rem}
.detail-note{font-size:.9rem;line-height:1.65;color:#66707B}
.detail-form-grid input,.detail-form-grid select,textarea{min-height:54px;font-size:.98rem;border-radius:16px;padding:14px 16px}
.detail-actions{gap:12px}
.detail-actions .btn,.status-action-btn{min-height:56px;font-size:1rem;border-radius:16px}
.status-action-btn{border-width:2px}
@media (max-width:760px){
  .admin-tabs{padding:8px 10px 0}
  .admin-tab{min-height:46px;padding:0 14px;font-size:.88rem}
  .stat-card{min-height:126px;padding:20px 16px}
  .stat-card__label{font-size:.92rem}
  .filter-pill{min-height:46px;padding:0 16px;font-size:.9rem}
  .ticket-item{padding:18px 16px}
  .ticket-item__title{font-size:1.02rem}
  .ticket-item__meta{font-size:.9rem}
  .ticket-item__actions .btn{max-width:none;min-height:54px}
  .detail-head{padding:16px 0 12px}
  .detail-title{font-size:1.22rem}
  .detail-sub{font-size:.94rem}
  .admin-fold summary{padding:18px 16px;min-height:72px}
  .admin-fold__body{padding:0 16px 16px}
}


/* pass11: 설명 축소 + 강조 우선순위 */
.btn--primary{background:linear-gradient(180deg,var(--green) 0%,var(--green-dark) 100%);box-shadow:0 10px 22px rgba(0,132,61,.18)}
.btn--primary:hover:not(:disabled){filter:brightness(.98);transform:translateY(-1px)}
.btn--outline{border-color:#CBD5E1;background:#fff}
.btn--outline:hover:not(:disabled){border-color:#94A3B8;background:#F8FAFC}
.ticket-meta-chips .detail-badge{font-weight:900}
.detail-badges--compact .detail-badge{padding:8px 14px;font-size:.84rem;font-weight:900}
.detail-note{color:#7B8794}
.admin-fold__sub:empty{display:none}
#detailStatusSection .detail-actions .btn,#detailAssignmentSection .detail-actions .btn{flex:1 1 180px}
#detailStatusSection .status-action-btn{background:#fff;border-color:#B7C7BA;color:#154E34;font-weight:900}
#detailStatusSection .status-action-btn:hover{background:#F2FBF5;border-color:#7DB795}
#detailStatusSection textarea{min-height:132px}
#detailAssignmentSection select{font-weight:700}
.filter-pill.active{box-shadow:0 10px 22px rgba(0,132,61,.18)}
.sync-chip{font-weight:800}

/* pass12: campus first screen + flowing transition */
.welcome__top{display:flex;justify-content:center;width:100%}
.campus-inline{padding:7px 12px;border-radius:var(--radius-full);border:1px solid rgba(0,132,61,.14);background:var(--green-light);color:var(--green-dark);font-size:.76rem;font-weight:700;cursor:pointer;transition:all .18s}
.campus-inline:hover{transform:translateY(-1px);border-color:rgba(0,132,61,.28)}
.submit-entry-shell{flex:1;position:relative;display:flex;align-items:center;justify-content:center;padding:18px 16px calc(18px + var(--safe-bottom));overflow:hidden}
.campus-gate{width:min(100%,430px);display:flex;flex-direction:column;align-items:center;gap:18px;padding:28px 22px;border-radius:28px;border:1px solid var(--border);background:linear-gradient(180deg,rgba(255,255,255,.97),rgba(248,250,252,.96));box-shadow:0 24px 60px rgba(15,23,42,.08),0 8px 20px rgba(15,23,42,.04);animation:campusGateIn .4s cubic-bezier(.22,1,.36,1) both}
:root[data-theme="dark"] .campus-gate{background:linear-gradient(180deg,rgba(22,27,34,.98),rgba(18,24,33,.98));box-shadow:0 24px 60px rgba(0,0,0,.34),0 8px 18px rgba(0,0,0,.22)}
.campus-gate__mark{width:56px;height:56px;border-radius:18px;background:var(--green-light);display:grid;place-items:center;border:1px solid rgba(0,132,61,.12);box-shadow:inset 0 1px 0 rgba(255,255,255,.6)}
.campus-gate__mark img{width:28px;height:28px;object-fit:contain}
.campus-gate__mark--character{width:84px;height:84px;border-radius:50%;background:var(--green-light);overflow:hidden}
.campus-gate__mark--character img{width:100%;height:100%;object-fit:contain;padding:4px}
.welcome__icon--character{display:inline-flex;align-items:center;justify-content:center;font-size:0}
.welcome__icon--character img{width:96px;height:96px;object-fit:contain}
.campus-gate__title{font-size:1.22rem;font-weight:800;letter-spacing:-.03em;text-align:center}
.campus-gate__actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;width:100%}
.campus-gate__track{margin-top:4px;text-align:center}
.campus-choice{min-height:56px;padding:0 18px;border:none;border-radius:18px;background:var(--surface-alt);color:var(--text);font-weight:800;font-size:1rem;letter-spacing:-.02em;cursor:pointer;transition:transform .18s ease,box-shadow .18s ease,background .18s ease,color .18s ease}
.campus-choice:hover{transform:translateY(-1px);background:var(--green);color:#fff;box-shadow:0 10px 24px rgba(0,132,61,.18)}
.entry-stage{width:min(100%,520px);display:flex;flex-direction:column;justify-content:center;min-height:100%;transform:translateY(-2.8vh);animation:entryStageSettle .44s cubic-bezier(.22,1,.36,1) both}
.entry-stage .welcome{flex:0;padding:8px 8px 16px;gap:12px}
.compose--entry{position:relative;bottom:auto;border-top:none;border:1px solid var(--border);border-radius:24px;background:rgba(255,255,255,.88);box-shadow:0 18px 42px rgba(15,23,42,.08),0 4px 12px rgba(15,23,42,.06);padding:12px 14px calc(12px + var(--safe-bottom));backdrop-filter:saturate(1.15) blur(10px)}
:root[data-theme="dark"] .compose--entry{background:rgba(22,27,34,.9);box-shadow:0 18px 42px rgba(0,0,0,.3),0 4px 12px rgba(0,0,0,.18)}
.submit-entry-shell--transition .campus-gate{position:absolute;inset:auto 16px auto 16px;margin:auto;animation:campusGateOut .42s cubic-bezier(.55,0,.45,1) both;pointer-events:none}
.entry-stage--entering{opacity:0;transform:translateY(30px) scale(.985);animation:entryStageIn .5s .04s cubic-bezier(.22,1,.36,1) both}
@keyframes campusGateIn{from{opacity:0;transform:translateY(20px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}
@keyframes campusGateOut{from{opacity:1;transform:translateY(0) scale(1)}to{opacity:0;transform:translateY(-22px) scale(.98)}}
@keyframes entryStageIn{from{opacity:0;transform:translateY(30px) scale(.985)}to{opacity:1;transform:translateY(-2.8vh) scale(1)}}
@keyframes entryStageSettle{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:translateY(-2.8vh)}}
@media (max-width:520px){
  .submit-entry-shell{padding:14px 12px calc(14px + var(--safe-bottom))}
  .campus-gate{padding:24px 16px;border-radius:24px;gap:16px}
  .campus-gate__title{font-size:1.08rem}
  .campus-choice{min-height:52px;font-size:.96rem;border-radius:16px}
  .entry-stage{transform:translateY(-1.2vh)}
  .entry-stage .welcome{padding:4px 2px 14px}
  .compose--entry{border-radius:22px;padding:11px 12px calc(11px + var(--safe-bottom))}
}
@media (max-width:380px){
  .campus-gate__actions{grid-template-columns:1fr}
  .entry-stage{transform:translateY(0)}
}


.header__home{display:flex;align-items:center;gap:10px;min-width:0;flex:0 1 auto;padding:0;border:0;background:transparent;color:inherit;text-align:left;cursor:pointer;overflow:hidden}
.header__home:focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:10px}
.contact-strip{padding:9px 16px;border-bottom:1px solid var(--border);background:var(--surface-alt);font-size:.78rem;color:var(--text-secondary);line-height:1.45;word-break:keep-all}
@media(max-width:520px){.header__home{gap:8px}.contact-strip{padding:8px 12px;font-size:.78rem}}

/* 2026-04-29 · 시범운영(테스트 기간) 안내 배너 — 6/1 자동 비표시 */
.test-period-banner{display:flex;align-items:flex-start;gap:10px;margin:12px 16px 0;padding:12px 14px;border-radius:14px;border:1px solid rgba(245,158,11,.32);background:linear-gradient(180deg,#FFFBEB 0%,#FEF3C7 100%);box-shadow:0 4px 14px rgba(180,120,12,.08);color:#7C2D12;animation:testPeriodBannerIn .42s cubic-bezier(.22,1,.36,1) both}
.test-period-banner__icon{flex-shrink:0;width:30px;height:30px;display:grid;place-items:center;border-radius:10px;background:rgba(245,158,11,.18);font-size:1rem;line-height:1}
.test-period-banner__body{flex:1;min-width:0}
.test-period-banner__title{display:flex;flex-wrap:wrap;align-items:center;gap:8px;font-size:.86rem;font-weight:800;letter-spacing:-.01em;color:#92400E;margin-bottom:3px}
.test-period-banner__date{display:inline-flex;align-items:center;padding:1px 8px;border-radius:999px;background:#F59E0B;color:#fff;font-size:.7rem;font-weight:700;letter-spacing:0}
.test-period-banner__msg{font-size:.78rem;line-height:1.55;color:#78350F;word-break:keep-all}
.test-period-banner__msg strong{color:#92400E;font-weight:800}
@keyframes testPeriodBannerIn{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}
@media(max-width:520px){
  .test-period-banner{margin:10px 12px 0;padding:11px 12px;gap:9px;border-radius:12px}
  .test-period-banner__icon{width:26px;height:26px;font-size:.92rem}
  .test-period-banner__title{font-size:.82rem}
  .test-period-banner__msg{font-size:.74rem}
}
:root[data-theme="dark"] .test-period-banner{background:linear-gradient(180deg,rgba(120,53,15,.32) 0%,rgba(146,64,14,.32) 100%);border-color:rgba(251,191,36,.32);color:#FDE68A;box-shadow:0 4px 14px rgba(0,0,0,.28)}
:root[data-theme="dark"] .test-period-banner__icon{background:rgba(251,191,36,.18)}
:root[data-theme="dark"] .test-period-banner__title{color:#FDE68A}
:root[data-theme="dark"] .test-period-banner__date{background:#D97706;color:#FFFBEB}
:root[data-theme="dark"] .test-period-banner__msg{color:#FCD34D}
:root[data-theme="dark"] .test-period-banner__msg strong{color:#FDE68A}


/* ===== Fixed top stack (mobile + desktop) ===== */
:root{
  --app-shell-w:100vw;
  --contact-strip-h:0px;
  --admin-tabs-h:0px;
  --admin-top-tabs-h:0px;
  --admin-sub-tabs-h:0px;
  --header-stack-h:54px;
  --master-usage-h:0px;
  --top-stack-h:54px;
}
.app-shell{position:relative;padding-top:var(--header-stack-h)}
.header,
.contact-strip,
.admin-tabs{
  position:fixed;
  left:50%;
  transform:translateX(-50%);
  width:min(var(--app-shell-w),100vw);
  max-width:100vw;
}
.header{top:0;z-index:var(--z-header-admin)}
.contact-strip{
  top:var(--header-h);
  z-index:85;
  min-height:var(--contact-strip-h);
}
.admin-tabs{
  top:calc(var(--header-stack-h) + var(--master-usage-h));
  z-index:80;
}
.submit-entry-shell,
.chat-area,
.success,
.track-page{min-height:calc(100dvh - var(--header-stack-h) - 56px)}
.admin-content{
  min-height:calc(100dvh - var(--top-stack-h));
  padding-top:calc(16px + var(--admin-tabs-h));
}
@media (max-width:520px){
  .submit-entry-shell,
  .chat-area,
  .success,
  .track-page{min-height:calc(100dvh - var(--header-stack-h) - 54px - var(--safe-bottom))}
  .admin-content{min-height:calc(100dvh - var(--top-stack-h) - var(--safe-bottom))}
}

@media(max-width:720px){.role-pill{display:none}.header__right{gap:4px}.mode-pill,.auth-pill{padding:0 12px;font-size:.8rem}.contact-strip{font-size:.72rem;line-height:1.35}}


/* ===== admin pc board workspace ===== */
.admin-workspace{display:block}
.admin-workspace__list{min-width:0}
.admin-board-table-wrap{border:1px solid #E5EAF0;border-radius:22px;background:linear-gradient(180deg,#FFF 0%,#FAFBFC 100%);box-shadow:var(--shadow);overflow:auto}
.admin-board-table{width:100%;border-collapse:separate;border-spacing:0;min-width:820px}
.admin-board-table thead th{position:sticky;top:0;z-index:2;background:var(--surface-alt);padding:14px 12px;border-bottom:1px solid var(--border);font-size:.76rem;font-weight:800;color:var(--text-secondary);text-align:left;white-space:nowrap}
.admin-board-table tbody td{padding:14px 12px;border-bottom:1px solid #EEF2F6;vertical-align:top;background:transparent}
.admin-board-table tbody tr:last-child td{border-bottom:none}
.admin-board-table__checkbox{width:46px;text-align:center}
.admin-board-table__summary{min-width:300px}
.admin-board-table__status{width:150px}
.admin-board-table__sector{width:120px}
.admin-board-table__owner{width:160px}
.admin-board-table__time{width:150px}
.admin-board-table__action{width:88px}
.admin-board-row{transition:background-color .15s ease, box-shadow .15s ease;position:relative}
.admin-board-row:hover td{background:#F8FAFC}
.admin-board-row.is-selected td{background:#F0F9F4}
.admin-board-row.is-active td{background:#EFF6FF}
/* Phase 1: priority color strip — 4px 좌측 border로 한 눈에 긴급도 스캔 */
.admin-board-row td:first-child{position:relative}
.admin-board-row td:first-child::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:transparent;border-radius:2px 0 0 2px;pointer-events:none}
.admin-board-row--priority-critical td:first-child::before{background:#DC2626}
.admin-board-row--priority-high td:first-child::before{background:#F59E0B}
.admin-board-row--priority-medium td:first-child::before{background:#3B82F6}
.admin-board-row--priority-low td:first-child::before{background:#CBD5E1}
/* Phase 1: 배지 오버플로 칩 */
.admin-board-badge--more{background:#F1F5F9;color:#475569;font-weight:700;cursor:default}
.admin-board-badge--more:hover{background:#E2E8F0}
/* Phase 1: 장기대기 배지 강조 */
.admin-board-row--overdue td:first-child::after{content:"";position:absolute;left:4px;top:0;bottom:0;width:2px;background:repeating-linear-gradient(45deg,#DC2626,#DC2626 4px,transparent 4px,transparent 8px);opacity:.7}
.admin-board-summary__title{border:none;background:none;padding:0;margin:0;font:inherit;color:#0F172A;cursor:pointer;text-align:left}
.admin-board-row__open{font-weight:800;color:#0F766E}
/* Phase 2 Step 2-1: 한 줄 컴팩트 행 — 원문 truncate + 📷N 칩 + 접이식 확장 */
.admin-board-summary{display:flex;align-items:center;gap:8px;min-width:0;flex-wrap:nowrap}
.admin-board-summary__title{flex:1 1 auto;min-width:0;font-weight:700;line-height:1.35;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}
.admin-board-summary__title:hover{color:#0F766E;text-decoration:underline;text-decoration-color:#0F766E;text-underline-offset:3px}
.admin-board-summary__title:focus-visible{outline:2px solid #0F766E;outline-offset:2px;border-radius:4px}
.admin-board-summary__sub{display:flex;gap:8px;flex-wrap:wrap;font-size:.76rem;color:#64748B}
.admin-board-summary__sub .is-danger{color:#B91C1C;font-weight:700}
/* 📷 칩 — 사진 개수 뱃지, 클릭 시 확장 + 사진 영역 포커스 */
.admin-board-photo-chip{flex:0 0 auto;display:inline-flex;align-items:center;gap:4px;border:1px solid #CBD5E1;background:#F8FAFC;color:#334155;border-radius:10px;padding:2px 8px;font-size:.72rem;font-weight:700;cursor:pointer;line-height:1.4;transition:background-color .15s ease, border-color .15s ease, color .15s ease}
.admin-board-photo-chip:hover{background:#E0F2FE;border-color:#0EA5E9;color:#0369A1}
.admin-board-photo-chip:focus-visible{outline:2px solid #0EA5E9;outline-offset:2px}
.admin-board-photo-chip__icon{font-size:.85rem;line-height:1}
.admin-board-photo-chip__count{font-variant-numeric:tabular-nums}
/* 확장 행 — colspan으로 전체 너비 차지 */
.admin-board-row.is-expanded td{background:#F8FAFC}
.admin-board-row.is-expanded .admin-board-summary__title{color:#0F766E}
.admin-board-row-expanded td{padding:0 !important;border-top:none !important}
.admin-board-expanded-cell{background:#FAFBFC;border-bottom:2px solid #E2E8F0}
.admin-board-expanded{padding:14px 18px 16px 24px;display:grid;gap:10px;animation:adminBoardExpandIn .2s ease-out}
@keyframes adminBoardExpandIn{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}
.admin-board-expanded__label{display:inline-block;font-size:.7rem;font-weight:700;color:#64748B;text-transform:uppercase;letter-spacing:.04em;margin-bottom:4px;margin-right:8px}
.admin-board-expanded__loc{font-size:.82rem;color:#0F172A}
.admin-board-expanded__loc .admin-board-expanded__value{font-weight:600}
.admin-board-expanded__desc .admin-board-expanded__text{white-space:pre-wrap;word-break:break-word;font-size:.88rem;line-height:1.55;color:#0F172A;background:#FFFFFF;border:1px solid #E2E8F0;border-radius:8px;padding:10px 12px;max-height:260px;overflow:auto}
.admin-board-expanded__photos{display:block}
/* 2026-04-22 · Step 6-8 · 행 확장 처리 이력 타임라인 —
 *   접수/배정/처리/공사처리/용역사 이관/결과제출/검수/완료 + 처리예정일(ghost) */
.admin-board-expanded__timeline{background:#FFF;border:1px solid #E2E8F0;border-radius:10px;padding:12px 16px 8px}
.admin-board-expanded__timeline .admin-board-expanded__label{margin-bottom:6px}
.bt-timeline{list-style:none;margin:4px 0 0;padding:0}
.bt-timeline__item{position:relative;padding:0 0 14px 22px;display:flex;gap:10px;min-height:24px}
.bt-timeline__item.is-last{padding-bottom:2px}
.bt-timeline__item:not(.is-last)::before{content:'';position:absolute;left:5px;top:16px;bottom:-4px;width:2px;background:#CBD5E1;border-radius:2px}
.bt-timeline__dot{position:absolute;left:0;top:5px;width:12px;height:12px;border-radius:50%;background:#1D4ED8;box-shadow:0 0 0 2px #FFF, 0 0 0 3px rgba(29,78,216,.18)}
.bt-timeline__item--created .bt-timeline__dot{background:#3B82F6;box-shadow:0 0 0 2px #FFF, 0 0 0 3px rgba(59,130,246,.18)}
.bt-timeline__item--assigned .bt-timeline__dot{background:#8B5CF6;box-shadow:0 0 0 2px #FFF, 0 0 0 3px rgba(139,92,246,.2)}
.bt-timeline__item--in_progress .bt-timeline__dot{background:#F59E0B;box-shadow:0 0 0 2px #FFF, 0 0 0 3px rgba(245,158,11,.22)}
.bt-timeline__item--construction .bt-timeline__dot{background:#7C3AED;box-shadow:0 0 0 2px #FFF, 0 0 0 3px rgba(124,58,237,.22)}
.bt-timeline__item--vendor_dispatch .bt-timeline__dot{background:#0EA5E9;box-shadow:0 0 0 2px #FFF, 0 0 0 3px rgba(14,165,233,.2)}
.bt-timeline__item--vendor_submit .bt-timeline__dot{background:#0D9488;box-shadow:0 0 0 2px #FFF, 0 0 0 3px rgba(13,148,136,.2)}
.bt-timeline__item--review_request .bt-timeline__dot{background:#2563EB;box-shadow:0 0 0 2px #FFF, 0 0 0 3px rgba(37,99,235,.2)}
.bt-timeline__item--reviewed .bt-timeline__dot{background:#2563EB;box-shadow:0 0 0 2px #FFF, 0 0 0 3px rgba(37,99,235,.2)}
.bt-timeline__item--resolved .bt-timeline__dot{background:#10B981;box-shadow:0 0 0 2px #FFF, 0 0 0 3px rgba(16,185,129,.22)}
.bt-timeline__item--due .bt-timeline__dot--ghost{background:#FFF;border:2px dashed #94A3B8;box-shadow:0 0 0 2px #FFF;width:12px;height:12px;top:5px;box-sizing:border-box}
.bt-timeline__item--due{background:#FFFBEB;border:1px dashed #FCD34D;border-radius:8px;padding:6px 8px 6px 22px;margin-top:2px}
.bt-timeline__item--due::before{display:none}
.bt-timeline__item--due .bt-timeline__dot--ghost{left:6px;top:11px}
.bt-timeline__item--due .bt-timeline__title{color:#B45309;font-weight:700}
.bt-timeline__body{flex:1 1 auto;min-width:0}
.bt-timeline__title{font-size:.84rem;font-weight:700;color:#0F172A;line-height:1.35}
.bt-timeline__detail{font-size:.78rem;color:#475569;font-weight:500;margin-left:2px}
.bt-timeline__meta{font-size:.72rem;color:#64748B;margin-top:2px}
.admin-board-expanded__photos .photo-strip{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px}
.admin-board-expanded__photos .photo-thumb{display:block;width:96px;height:96px;border-radius:8px;overflow:hidden;border:1px solid #E2E8F0;background:#F1F5F9;position:relative}
.admin-board-expanded__photos .photo-thumb img{width:100%;height:100%;object-fit:cover;display:block}
/* ★하드코딩 #94A3B8 은 흰/#F8FAFC 위 2.57:1(AA 대폭 미달)이고 토큰을 고쳐도 따라오지 않는다
   → var(--text-tertiary)(라이트 #64748B, 4.76:1). 이 요소만은 배경(@2428 var(--surface-alt))이
   테마 토큰이라 다크에서 --text-tertiary(#484F58)면 1.9:1 로 되레 나빠진다 → 다크는 아래에서
   기존 값으로 고정(디자인 마감 2026-07-28) */
.admin-board-expanded__photos .photo-thumb--placeholder{display:grid;place-items:center;font-size:.7rem;color:var(--text-tertiary)}
:root[data-theme="dark"] .admin-board-expanded__photos .photo-thumb--placeholder{color:#94A3B8}
/* Phase 2 Step 2-3: 전체화면 라이트박스 */
body.admin-photo-lightbox--open{overflow:hidden}
.admin-photo-lightbox{position:fixed;inset:0;z-index:9999;background:rgba(15,23,42,0.92);display:flex;align-items:center;justify-content:center;animation:adminPhotoLightboxIn .18s ease-out}
.admin-photo-lightbox[hidden]{display:none}
@keyframes adminPhotoLightboxIn{from{opacity:0}to{opacity:1}}
.admin-photo-lightbox__stage{max-width:min(96vw,1400px);max-height:90vh;display:flex;align-items:center;justify-content:center;pointer-events:none}
.admin-photo-lightbox__img{max-width:100%;max-height:90vh;object-fit:contain;box-shadow:0 24px 64px rgba(0,0,0,.5);border-radius:4px;pointer-events:auto}
.admin-photo-lightbox__close{position:absolute;top:16px;right:20px;width:44px;height:44px;border-radius:50%;border:none;background:rgba(255,255,255,.12);color:#FFF;font-size:1.75rem;line-height:1;cursor:pointer;display:grid;place-items:center;transition:background-color .15s ease}
.admin-photo-lightbox__close:hover{background:rgba(255,255,255,.24)}
.admin-photo-lightbox__close:focus-visible{outline:2px solid #FFF;outline-offset:3px}
.admin-photo-lightbox__nav{position:absolute;top:50%;transform:translateY(-50%);width:56px;height:56px;border-radius:50%;border:none;background:rgba(255,255,255,.12);color:#FFF;font-size:2.5rem;line-height:1;cursor:pointer;display:grid;place-items:center;transition:background-color .15s ease}
.admin-photo-lightbox__nav:hover{background:rgba(255,255,255,.24)}
.admin-photo-lightbox__nav:focus-visible{outline:2px solid #FFF;outline-offset:3px}
.admin-photo-lightbox__nav--prev{left:20px}
.admin-photo-lightbox__nav--next{right:20px}
.admin-photo-lightbox__nav[hidden]{display:none}
.admin-photo-lightbox__counter{position:absolute;bottom:22px;left:50%;transform:translateX(-50%);padding:6px 14px;border-radius:18px;background:rgba(255,255,255,.14);color:#FFF;font-size:.82rem;font-weight:600;letter-spacing:.04em}
@media (max-width: 640px){
  .admin-photo-lightbox__close{top:10px;right:12px;width:40px;height:40px;font-size:1.5rem}
  .admin-photo-lightbox__nav{width:44px;height:44px;font-size:2rem}
  .admin-photo-lightbox__nav--prev{left:8px}
  .admin-photo-lightbox__nav--next{right:8px}
}
/* ── Phase 2 Step 2-4: 처리대기 탭 · 마스터 Triage 대기열 ── */
.master-processing{display:block;padding:0 2px 6px}
.master-processing__header{padding:10px 4px 4px;display:flex;align-items:flex-end;justify-content:space-between;gap:12px;flex-wrap:wrap}
.master-processing__title{font-size:1.1rem;font-weight:800;color:#0F172A;letter-spacing:-.01em}
.master-processing__hint{font-size:.78rem;color:#64748B}
.master-triage__grid{display:grid;grid-template-columns:repeat(4, minmax(0,1fr));gap:10px;margin:10px 0 12px}
@media (max-width: 1080px){.master-triage__grid{grid-template-columns:repeat(2, minmax(0,1fr))}}
@media (max-width: 560px){.master-triage__grid{grid-template-columns:1fr}}
.master-triage__card{text-align:left;background:#FFF;border:1px solid #E2E8F0;border-radius:14px;padding:12px 14px;cursor:pointer;transition:box-shadow .15s, transform .05s, border-color .15s;display:flex;flex-direction:column;gap:8px;box-shadow:0 1px 2px rgba(15,23,42,.04);min-height:150px}
.master-triage__card:hover{box-shadow:0 6px 20px rgba(15,23,42,.08);transform:translateY(-1px)}
.master-triage__card:active{transform:translateY(0)}
.master-triage__card.is-active{border-color:transparent;box-shadow:0 8px 24px rgba(15,23,42,.12);outline:2px solid currentColor;outline-offset:-2px}
.master-triage__card--amber{--tcol:#B45309;color:var(--tcol);background:linear-gradient(180deg,#FFFBEB 0%,#FFF 38%)}
.master-triage__card--blue{--tcol:#1D4ED8;color:var(--tcol);background:linear-gradient(180deg,#EFF6FF 0%,#FFF 38%)}
.master-triage__card--orange{--tcol:#C2410C;color:var(--tcol);background:linear-gradient(180deg,#FFF7ED 0%,#FFF 38%)}
.master-triage__card--red{--tcol:#B91C1C;color:var(--tcol);background:linear-gradient(180deg,#FEF2F2 0%,#FFF 38%)}
.master-triage__card-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px}
.master-triage__card-title{font-size:.92rem;font-weight:800;letter-spacing:-.01em}
.master-triage__card-count{font-size:1.7rem;font-weight:900;line-height:1;color:var(--tcol)}
.master-triage__card-sub{font-size:.74rem;color:#64748B;font-weight:500;margin-top:-2px}
.master-triage__previews{display:flex;flex-direction:column;gap:4px;margin-top:4px}
.master-triage__preview{text-align:left;background:rgba(15,23,42,.03);border:1px solid rgba(15,23,42,.06);border-radius:8px;padding:6px 8px;cursor:pointer;display:flex;flex-direction:column;gap:2px;transition:background .1s, border-color .1s}
.master-triage__preview:hover{background:rgba(15,23,42,.06);border-color:rgba(15,23,42,.12)}
.master-triage__preview-title{font-size:.78rem;font-weight:600;color:#0F172A;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.master-triage__preview-meta{font-size:.68rem;color:#64748B}
/* ★#94A3B8(흰 카드 위 2.57:1) → var(--text-tertiary). 단 .master-triage__card 는 다크에서
   @3727~ 가 어두운 틴트 배경으로 뒤집으므로 다크만 기존 값 유지(디자인 마감 2026-07-28) */
.master-triage__empty{font-size:.76rem;color:var(--text-tertiary);padding:4px 2px}
:root[data-theme="dark"] .master-triage__empty{color:#94A3B8}
.master-triage__more{font-size:.72rem;color:var(--tcol);font-weight:700;padding:2px 2px 0;text-align:right}
.master-processing__bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:8px 2px 10px}
.master-processing__chip{display:inline-flex;align-items:center;gap:4px;padding:5px 12px;border-radius:999px;background:#F1F5F9;color:#334155;font-size:.78rem;font-weight:600;border:1px solid #E2E8F0}
.master-processing__chip.is-active{background:#1D4ED8;color:#FFF;border-color:#1D4ED8}
.master-processing__chip--reset{cursor:pointer;background:#FEF2F2;color:#B91C1C;border-color:#FECACA}
.master-processing__chip--reset:hover{background:#FEE2E2}
.master-processing__search{flex:1 1 220px;min-width:180px;display:flex;justify-content:flex-end}
.master-processing__search input{width:100%;max-width:340px;padding:7px 12px;border:1px solid #CBD5E1;border-radius:10px;font-size:.86rem;background:#FFF}
.master-processing__search input:focus{outline:none;border-color:#1D4ED8;box-shadow:0 0 0 2px rgba(29,78,216,.15)}
.master-processing__list{margin-top:4px}
/* ── Phase 2 Step 2-5: 처리대기 탭 행 확장 · 인라인 액션 바 ── */
.admin-board-expanded__actions{display:flex;flex-direction:column;gap:10px;padding:12px 14px;margin-bottom:10px;background:linear-gradient(180deg,#F8FAFC 0%,#FFF 100%);border:1px solid #E2E8F0;border-radius:12px;box-shadow:0 1px 2px rgba(15,23,42,.03)}
.expanded-actions__row{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.expanded-actions__badge{display:inline-flex;align-items:center;padding:4px 10px;border-radius:999px;background:#F1F5F9;color:#334155;font-size:.74rem;font-weight:600;border:1px solid #E2E8F0}
.expanded-actions__badge--status{background:#EFF6FF;color:#1D4ED8;border-color:#BFDBFE}
.expanded-actions__field{display:inline-flex;align-items:center;gap:6px;font-size:.78rem}
.expanded-actions__field-label{color:#64748B;font-weight:600}
.expanded-actions__select{padding:5px 10px;border:1px solid #CBD5E1;border-radius:8px;font-size:.82rem;background:#FFF;color:#0F172A;min-width:120px;max-width:180px}
.expanded-actions__select:focus{outline:none;border-color:#1D4ED8;box-shadow:0 0 0 2px rgba(29,78,216,.15)}
.expanded-actions__btn{display:inline-flex;align-items:center;justify-content:center;padding:6px 14px;border-radius:8px;font-size:.82rem;font-weight:600;border:1px solid #CBD5E1;background:#FFF;color:#0F172A;cursor:pointer;transition:background .15s, border-color .15s, box-shadow .15s}
.expanded-actions__btn:hover{background:#F8FAFC;border-color:#94A3B8}
.expanded-actions__btn--primary{background:#1D4ED8;color:#FFF;border-color:#1D4ED8}
.expanded-actions__btn--primary:hover{background:#1E40AF;border-color:#1E40AF}
.expanded-actions__btn--ghost{background:transparent;color:#475569;border-color:#E2E8F0}
.expanded-actions__btn--ghost:hover{background:#F1F5F9;color:#0F172A}
/* Phase 4 hotfix: 처리대기 행 확장 · 1줄 컴팩트 변형 */
.admin-board-expanded__actions--compact{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;gap:8px;padding:8px 12px;margin-bottom:8px}
.admin-board-expanded__actions--compact .expanded-actions__field{margin-left:4px}
.expanded-actions__badge--loc{max-width:360px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background:#ECFDF5;color:#065F46;border-color:#A7F3D0}
@media(max-width:640px){.expanded-actions__badge--loc{max-width:100%}}
/* ── Phase 2 Step 2-6: 민원대장 탭 ── */
.admin-archive-section .master-processing__chip{cursor:pointer}
.admin-archive-section .master-processing__chip--green{background:#ECFDF5;color:#047857;border-color:#A7F3D0}
.admin-archive-section .master-processing__chip--green.is-active{background:#047857;color:#FFF;border-color:#047857}
.admin-archive-section .master-processing__chip--red{background:#FEF2F2;color:#B91C1C;border-color:#FECACA}
.admin-archive-section .master-processing__chip--red.is-active{background:#B91C1C;color:#FFF;border-color:#B91C1C}
.admin-archive-section .master-processing__chip--purple{background:#EEF2FF;color:#4338CA;border-color:#C7D2FE}
.admin-archive-section .master-processing__chip--purple.is-active{background:#4338CA;color:#FFF;border-color:#4338CA}
.admin-archive-section .master-processing__chip--pink{background:#FDF2F8;color:#BE185D;border-color:#FBCFE8}
.admin-archive-section .master-processing__chip--pink.is-active{background:#BE185D;color:#FFF;border-color:#BE185D}
.archive-chip__count{display:inline-flex;align-items:center;justify-content:center;padding:0 6px;min-width:18px;height:18px;border-radius:10px;background:rgba(15,23,42,.08);font-size:.68rem;font-weight:700;margin-left:4px}
.master-processing__chip.is-active .archive-chip__count{background:rgba(255,255,255,.22);color:#FFF}
/* ★빈 상태 안내문 — #94A3B8 은 #F8FAFC 위 2.57:1(AA 대폭 미달). 배경이 하드코딩 라이트라
   다크에서도 밝은 판이 유지되므로 다크 예외 없이 토큰만 쓰면 된다(디자인 마감 2026-07-28) */
.admin-archive-empty{padding:36px 16px;text-align:center;color:var(--text-tertiary);font-size:.88rem;background:#F8FAFC;border:1px dashed #CBD5E1;border-radius:14px}
/* ── Phase 3 Step 3-1: 팀장 모니터링 뷰 ── */
.manager-monitor{background:#FFF;border:1px solid #E2E8F0;border-radius:18px;padding:18px;display:flex;flex-direction:column;gap:14px}
.manager-monitor__header{display:flex;flex-direction:column;gap:4px}
.manager-monitor__title{font-size:1.05rem;font-weight:800;color:#0F172A}
.manager-monitor__hint{font-size:.82rem;color:#64748B}
.manager-monitor__grid{display:grid;grid-template-columns:1fr;gap:14px}
@media(min-width:960px){.manager-monitor__grid{grid-template-columns:1.2fr 1fr}.manager-monitor__section--matrix{grid-column:1/-1}}
.manager-monitor__section{background:#F8FAFC;border:1px solid #E2E8F0;border-radius:14px;padding:14px;display:flex;flex-direction:column;gap:10px}
.manager-monitor__section-head{display:flex;justify-content:space-between;align-items:center;gap:8px}
.manager-monitor__section-title{font-size:.94rem;font-weight:700;color:#1E293B}
.manager-monitor__section-meta{font-size:.76rem;color:#64748B}
/* ★위 .admin-archive-empty 와 동일 — 빈 상태 안내문 2.57:1 → 토큰(디자인 마감 2026-07-28) */
.manager-monitor__placeholder{background:#F8FAFC;border:1px dashed #CBD5E1;border-radius:12px;padding:32px 16px;text-align:center;color:var(--text-tertiary);font-size:.88rem}
.manager-monitor__footer{font-size:.76rem;color:#64748B;text-align:right}
/* Phase 3 Step 3-2: SLA 매트릭스 테이블 */
.manager-monitor__matrix-scroll{overflow-x:auto}
.manager-monitor__matrix{width:100%;border-collapse:collapse;font-size:.82rem}
.manager-monitor__matrix th,.manager-monitor__matrix td{padding:8px 10px;border-bottom:1px solid #E2E8F0;text-align:left}
.manager-monitor__matrix th{background:#F1F5F9;color:#475569;font-weight:700;font-size:.76rem;text-transform:uppercase;letter-spacing:.02em}
.manager-monitor__matrix td.num,.manager-monitor__matrix th.num{text-align:right;font-variant-numeric:tabular-nums}
.manager-monitor__matrix td.is-alert{color:#B91C1C;font-weight:700}
.manager-monitor__matrix-row:hover{background:#F8FAFC}
.manager-monitor__name{font-weight:600;color:#0F172A}
.manager-monitor__rate{font-weight:700}
.manager-monitor__rate--ok{color:#047857}
.manager-monitor__rate--warn{color:#B45309}
.manager-monitor__rate--bad{color:#B91C1C}
.manager-monitor__rate--na{color:#94A3B8}
/* Phase 3 Step 3-3/3-4: 공통 아이템 리스트 */
.manager-monitor__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.manager-monitor__item{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;background:#FFF;border:1px solid #E2E8F0;border-radius:10px;cursor:pointer;transition:background .15s,border-color .15s}
.manager-monitor__item:hover,.manager-monitor__item:focus-visible{background:#F8FAFC;border-color:#94A3B8;outline:none}
.manager-monitor__item-main{flex:1;min-width:0}
.manager-monitor__item-head{display:flex;gap:8px;align-items:center;font-size:.76rem;color:#64748B;margin-bottom:6px;flex-wrap:wrap}
.manager-monitor__item-no{font-weight:700;color:#0F172A;font-family:ui-monospace,monospace}
.manager-monitor__item-owner{padding:1px 8px;background:#F1F5F9;color:#334155;border-radius:8px;font-weight:600}
.manager-monitor__item-loc{color:#94A3B8;font-weight:500}
.manager-monitor__audit-type{padding:1px 8px;background:#FEF3C7;color:#92400E;border-radius:8px;font-weight:700}
.manager-monitor__item-body{font-size:.86rem;color:#0F172A;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.manager-monitor__item-body--raw{font-size:.9rem;color:#0F172A;line-height:1.5;white-space:normal;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;font-weight:500}
.manager-monitor__item-meta{font-size:.74rem;color:#94A3B8;margin-top:2px}
.manager-monitor__item-due{padding:6px 10px;border-radius:8px;font-weight:800;font-size:.82rem;white-space:nowrap}
.manager-monitor__item-due--over{background:#FEE2E2;color:#B91C1C}
.manager-monitor__item-due--soon{background:#FED7AA;color:#9A3412}
.manager-monitor__item-due--warn{background:#FEF3C7;color:#92400E}
.manager-monitor__item--correction{border-left:3px solid #F59E0B}
.manager-monitor__item--status{border-left:3px solid #EC4899}
/* ── Phase 4 Step 4-1/4-2: 리스트/보드 뷰 토글 + 6컬럼 kanban ── */
.admin-list-view-toggle{display:inline-flex;gap:6px;margin:4px 0 10px;align-items:center}
.admin-list-view-toggle .filter-pill--view{font-weight:600}
.admin-kanban{display:flex;flex-direction:column;gap:10px;margin-top:6px;width:100%}
.admin-kanban__head{display:flex;justify-content:space-between;align-items:center;font-size:.82rem;color:#64748B;padding:0 2px}
.admin-kanban__placeholder{display:flex;align-items:center;justify-content:center;text-align:center;padding:32px 16px;border:2px dashed #CBD5E1;border-radius:14px;background:#F8FAFC;color:#475569;font-size:.92rem;line-height:1.6}
.admin-kanban__placeholder strong{color:#0F172A;margin-left:4px}
.admin-kanban__columns{display:flex;gap:12px;overflow-x:auto;padding:2px 2px 10px;scroll-snap-type:x proximity;scrollbar-width:thin}
.admin-kanban__column{flex:0 0 280px;display:flex;flex-direction:column;gap:8px;background:#F8FAFC;border:1px solid #E2E8F0;border-radius:14px;padding:10px;scroll-snap-align:start;max-height:74vh;min-width:240px}
.admin-kanban__column-head{display:flex;justify-content:space-between;align-items:center;padding:2px 4px 6px;border-bottom:1px solid #E2E8F0;gap:8px}
.admin-kanban__column-title{font-weight:700;color:#0F172A;font-size:.92rem}
.admin-kanban__column-count{font-size:.76rem;color:#475569;background:#E2E8F0;border-radius:999px;padding:1px 8px;font-weight:700;min-width:24px;text-align:center}
.admin-kanban__cards{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px;overflow-y:auto;flex:1 1 auto}
.admin-kanban__empty{padding:18px 8px;text-align:center;color:#94A3B8;font-size:.8rem;border:1px dashed #CBD5E1;border-radius:10px;background:#FFF}
.admin-kanban__card{background:#FFF;border:1px solid #E2E8F0;border-radius:10px;padding:10px 12px;cursor:pointer;border-left:4px solid #CBD5E1;display:flex;flex-direction:column;gap:6px;transition:box-shadow .15s,border-color .15s,transform .05s}
.admin-kanban__card:hover,.admin-kanban__card:focus-visible{box-shadow:0 6px 14px rgba(15,23,42,.1);border-color:#94A3B8;outline:none}
.admin-kanban__card:active{transform:translateY(1px)}
.admin-kanban__card--critical{border-left-color:#DC2626}
.admin-kanban__card--high{border-left-color:#D97706}
.admin-kanban__card--medium{border-left-color:#3B82F6}
.admin-kanban__card--low{border-left-color:#6B7280}
.admin-kanban__card-head{display:flex;justify-content:space-between;align-items:center;gap:6px}
.admin-kanban__receipt{font-family:ui-monospace,'SFMono-Regular',monospace;font-size:.72rem;color:#475569;font-weight:700;letter-spacing:.02em}
.admin-kanban__priority{font-size:.68rem;padding:1px 6px;border-radius:6px;font-weight:700;white-space:nowrap}
.admin-kanban__priority--critical{background:#FEF2F2;color:#DC2626}
.admin-kanban__priority--high{background:#FFFBEB;color:#D97706}
.admin-kanban__priority--medium{background:#EFF6FF;color:#3B82F6}
.admin-kanban__priority--low{background:#F3F4F6;color:#6B7280}
.admin-kanban__title-line{font-size:.88rem;font-weight:600;color:#0F172A;line-height:1.4;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.admin-kanban__meta-line{display:flex;gap:6px;flex-wrap:wrap;font-size:.72rem;align-items:center}
.admin-kanban__sector{background:#EFF6FF;color:#2563EB;padding:1px 6px;border-radius:6px;font-weight:600}
.admin-kanban__owner{background:#F1F5F9;color:#0F172A;padding:1px 6px;border-radius:6px;font-weight:600}
.admin-kanban__sla{padding:1px 6px;border-radius:6px;font-weight:700;font-variant-numeric:tabular-nums}
.admin-kanban__sla--over{background:#FEE2E2;color:#B91C1C}
.admin-kanban__sla--soon{background:#FED7AA;color:#9A3412}
.admin-kanban__sla--warn{background:#FEF3C7;color:#92400E}
.admin-kanban__sla--ok{background:#D1FAE5;color:#065F46}
@media(max-width:768px){.admin-kanban__column{flex:0 0 80vw;min-width:260px;max-height:62vh}}
.admin-board-badge{display:inline-flex;align-items:center;justify-content:center;white-space:nowrap}
.admin-board-table__status .detail-badge+.detail-badge{margin-left:6px}
.admin-board-table__time{font-size:.8rem;color:#0F172A}
.admin-board-table__time-sub{margin-top:4px;font-size:.72rem;color:#64748B}
.admin-board-empty{border-radius:22px}
.detail-sheet-body{display:block}
.detail-sheet-body--inline{padding:22px 22px 18px}
.admin-board-detail{display:block}
.admin-board-detail__empty{display:grid;place-items:center;gap:10px;min-height:260px;padding:24px;text-align:center;color:#64748B}
.admin-board-detail__empty strong{font-size:1rem;color:#0F172A}
.admin-board-detail__empty p{max-width:28ch;line-height:1.6}
.admin-board-detail__empty-icon{font-size:2rem}
.admin-board-detail__quick{margin-top:12px;width:100%;max-width:320px}
.admin-board-detail__quick-label{font-size:.72rem;color:#94A3B8;font-weight:700;margin-bottom:6px;text-transform:uppercase;letter-spacing:.04em}
.admin-triage-kpi-wrap{margin:8px 0 10px}
.admin-triage-kpi-wrap .master-kpi{padding:10px;gap:8px;grid-template-columns:repeat(auto-fit,minmax(120px,1fr))}
.admin-triage-kpi-wrap .master-kpi__value{font-size:1.15rem}
.admin-triage-kpi-wrap .master-kpi__label{font-size:.7rem}
@media (min-width:1180px){
  .admin-workspace--board{display:grid;grid-template-columns:minmax(0,1fr) 420px;gap:18px;align-items:start}
  .admin-board-detail{position:sticky;top:16px;align-self:start;border:1px solid #E5EAF0;border-radius:24px;background:linear-gradient(180deg,#FFF 0%,#FAFBFC 100%);box-shadow:var(--shadow-md);max-height:calc(100dvh - var(--header-stack-h) - 40px);overflow:auto}
  .admin-board-detail .detail-head{position:sticky;top:0;z-index:3;padding:18px 0 14px;background:linear-gradient(180deg,var(--surface) 0%,var(--surface) 85%,rgba(255,255,255,.92) 100%);border-bottom:1px solid var(--border)}
  .admin-board-detail .detail-title{font-size:1.18rem}
  .admin-board-detail .detail-form-grid{grid-template-columns:1fr}
  .admin-board-detail .detail-actions--grid{grid-template-columns:repeat(2,minmax(0,1fr));display:grid}
  .admin-board-detail .sheet-handle{display:none}
}

.backend-banner{display:none;align-items:center;gap:10px;margin:10px 16px 0;padding:11px 13px;border-radius:var(--radius-sm);font-size:.8rem;font-weight:600;line-height:1.45;border:1px solid rgba(245,158,11,.3);background:#FFF7ED;color:#9A3412}.backend-banner.visible{display:flex}.backend-banner__icon{font-size:1rem;flex-shrink:0}.backend-banner__text{line-height:1.45}.backend-banner__title{font-weight:800}.backend-banner--info{background:#EFF6FF;border-color:rgba(59,130,246,.24);color:#1D4ED8}.backend-banner--warning{background:#FFF7ED;border-color:rgba(245,158,11,.34);color:#9A3412}.backend-banner--error{background:#FEF2F2;border-color:rgba(239,68,68,.28);color:#B91C1C}

/* ===== admin simplification pass 9 ===== */
.admin-summary-line{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 12px}
.admin-summary-line__item{display:inline-flex;align-items:center;gap:8px;padding:10px 12px;border:1px solid #E5EAF0;border-radius:999px;background:linear-gradient(180deg,#FFF 0%,#FAFBFC 100%);box-shadow:var(--shadow);font-size:.78rem;color:var(--text-secondary)}
.admin-summary-line__item strong{font-size:.86rem;color:#0F172A}
.admin-compact-panel__meta{font-size:.74rem;font-weight:700;color:#7B8794}
.admin-compact-panel--subfilter{margin-top:10px}
.admin-compact-panel--subfilter .filter-row{margin-top:0}
@media (max-width:640px){
  .admin-summary-line{gap:6px}
  .admin-summary-line__item{width:calc(50% - 3px);justify-content:center}
}
@media (max-width:420px){
  .admin-summary-line__item{width:100%}
}


.admin-simple-list{display:grid;gap:10px}
.admin-simple-item{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:12px 14px;border:1px solid #E5EAF0;border-radius:16px;background:linear-gradient(180deg,#FFF 0%,#FAFBFC 100%)}
.admin-simple-item--stack{align-items:flex-start}
.admin-simple-item__main{display:grid;gap:4px;min-width:0}
.admin-simple-item__main strong{font-size:.9rem;color:#0F172A;line-height:1.4}
.admin-simple-item__main span{font-size:.77rem;color:#64748B;line-height:1.6}
.admin-simple-item__side{display:flex;align-items:center;justify-content:flex-end;flex-shrink:0}
.admin-choice-chip{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border:1px solid var(--border);border-radius:999px;font-size:.76rem}
.admin-person-card{padding:14px}
.admin-person-card__head{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;align-items:flex-start}
.admin-person-card__actions{display:flex;gap:8px;flex-wrap:wrap}
.admin-person-card__chips{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
.admin-person-card__email{margin-top:10px;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
@media (max-width: 720px){
  .admin-simple-item{flex-direction:column;align-items:flex-start}
  .admin-simple-item__side{width:100%;justify-content:flex-start}
  .admin-person-card__actions{width:100%}
  .admin-person-card__actions>.btn{flex:1 1 calc(50% - 4px)}
  .admin-person-card__email>.btn{width:100%}
}


/* ===== admin usability trim pass 3 ===== */
.admin-content .admin-toolbar,.admin-content .admin-userbar,.admin-content .admin-compact-panel,.admin-content .admin-simple-item,.admin-content .history-item,.admin-content .admin-summary-line__item{box-shadow:none}
.admin-content .admin-toolbar,.admin-content .admin-compact-panel,.admin-content .admin-simple-item,.admin-content .history-item,.admin-content .admin-summary-line__item,.admin-content .admin-board-detail{background:#fff}
.admin-content .admin-toolbar,.admin-content .admin-compact-panel,.admin-content .admin-simple-item,.admin-content .history-item,.admin-content .admin-summary-line__item{border-color:#E7ECF1}
.admin-content .admin-summary-line{margin-bottom:10px}
.admin-content .admin-summary-line__item{padding:8px 11px;background:#FFF;border-radius:999px;font-size:.76rem}
.admin-content .admin-summary-line__item strong{font-size:.84rem}
.admin-content .admin-compact-panel summary{padding:13px 15px}
.admin-content .admin-compact-panel__body{padding:0 14px 14px}
.admin-content .admin-simple-item{padding:11px 13px;border-radius:14px}
.admin-content .admin-simple-item__main span{line-height:1.5}
.admin-content .admin-person-card{padding:13px}
.admin-content .detail-head{padding:14px 0 12px;border-bottom:1px solid var(--border)}
.admin-content .detail-head .btn{min-height:38px}
@media (max-width:720px){
  .admin-content .admin-summary-line__item{width:calc(50% - 3px)}
  .admin-approval-card__actions>.btn{flex:1 1 calc(50% - 4px)}
}
@media (max-width:520px){
  .admin-content .admin-toolbar{padding:12px}
  .admin-content .admin-compact-panel summary{padding:12px 13px;font-size:.85rem}
  .admin-content .admin-compact-panel__body{padding:0 12px 12px}
  .admin-content .admin-summary-line__item{width:100%;justify-content:center}
  .admin-approval-card__actions>.btn{flex:1 1 100%}
}


/* ===== admin usability trim pass 4 ===== */
.admin-content .detail-note{padding:9px 11px;border-radius:12px;background:#F8FAFC;border:1px solid #E8EEF4;color:#5B6675;font-size:.78rem;line-height:1.58}
.admin-content .admin-toolbar--sub{padding:9px 12px;background:#FAFBFC;border-style:dashed}
.admin-content .admin-toolbar--sub .admin-toolbar__actions{justify-content:flex-end}
.admin-content .filter-row--clean{gap:8px}
.admin-content .filter-row--clean .filter-pill{min-height:38px;padding:8px 12px}
.admin-content .ticket-item__actions .btn{min-height:40px}
.admin-content .admin-board-table-wrap{border-radius:20px}
.admin-content .admin-board-table thead th{padding:12px 11px;font-size:.74rem}
.admin-content .admin-board-table tbody td{padding:12px 11px}
.admin-content .admin-board-summary__title{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;line-height:1.5}
.admin-content .admin-board-summary__sub{line-height:1.45}
.admin-content .admin-board-table__owner{font-size:.8rem;color:#334155}
.admin-content .admin-board-detail{border-radius:22px}
.admin-content .detail-sheet-body--inline{padding:20px 20px 16px}
.admin-content .admin-simple-list{gap:8px}
.admin-content .admin-person-card{padding:14px;border-radius:16px;background:#FFF;border:1px solid #E7ECF1}
.admin-person-card__head{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px;align-items:start}
.admin-person-card__actions{justify-content:flex-end}
.admin-person-card__email{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:8px;align-items:center}
.admin-choice-chip{min-height:34px;line-height:1.35;background:#FFF}
.admin-content .admin-choice-chip{border-color:#E5EAF0}
.admin-content .admin-summary-line{gap:7px}
.admin-content .admin-summary-line__item{min-height:38px}
.admin-content .admin-compact-panel summary::after{font-size:.72rem}
@media (min-width:1080px){
  .admin-workspace--board{grid-template-columns:minmax(0,1fr) 400px;gap:16px}
}
@media (max-width:720px){
  .admin-person-card__head{grid-template-columns:1fr}
  .admin-person-card__actions{width:100%;justify-content:flex-start}
  .admin-person-card__email{grid-template-columns:1fr}
  .admin-person-card__email label{white-space:normal !important}
  .admin-content .admin-toolbar--sub .admin-toolbar__actions{width:100%;justify-content:flex-start}
}
@media (max-width:520px){
  .admin-content .admin-summary-line__item{width:calc(50% - 4px);justify-content:center}
  .admin-approval-card__actions{grid-template-columns:1fr}
  .admin-content .filter-row--clean .filter-pill{flex:1 1 calc(50% - 4px);justify-content:center}
  .admin-content .admin-toolbar--sub{padding:10px 11px}
}
@media (max-width:360px){
  .admin-content .admin-summary-line__item{width:100%}
  .admin-content .filter-row--clean .filter-pill{flex:1 1 100%}
}


/* ===== admin usability trim pass 5 ===== */
.admin-detail-summary{margin-top:12px}
.admin-detail-summary .admin-summary-line{margin-bottom:0}
.admin-content .detail-sheet-body--inline .admin-detail-summary .admin-summary-line__item,
.admin-content .bottom-sheet__panel .admin-detail-summary .admin-summary-line__item{
  background:#F8FAFC;
  border-color:#E8EEF4;
}
.admin-content .admin-summary-line__item{
  min-height:36px;
}
.admin-content .admin-fold__body .stat-row{
  margin-top:0;
}
.admin-content .admin-fold__body .stat-card{
  box-shadow:none;
  border-color:#E7ECF1;
  background:#FFF;
}
@media (max-width:520px){
  .admin-detail-summary{margin-top:10px}
}

/* ===== admin compact layout hotfix 2026-03-11 ===== */
.admin-content{
  padding-top:calc(18px + var(--admin-tabs-h));
}
.admin-content .admin-compact-panel,
.admin-content .admin-toolbar,
.admin-content .admin-toolbar--sub,
.admin-content .filter-row--clean{
  margin-top:8px;
  margin-bottom:8px;
}
.admin-content .admin-compact-panel--subfilter{
  margin-top:0;
}
.admin-content .admin-compact-panel--subfilter summary,
.admin-content .admin-compact-panel--advanced summary{
  padding:11px 14px;
}
.admin-content .admin-compact-panel--subfilter .admin-compact-panel__body,
.admin-content .admin-compact-panel--advanced .admin-compact-panel__body{
  padding:0 12px 12px;
}
.admin-content .admin-toolbar--search{
  display:block;
  padding:10px 12px;
}
.admin-content .admin-toolbar--search .search-bar{
  display:flex;
  align-items:center;
  gap:10px;
  flex-wrap:nowrap;
  margin:0;
}
.admin-content .admin-toolbar--search .search-bar__label{
  flex:0 0 auto;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-height:40px;
  padding:0 14px;
  border-radius:999px;
  background:#F0FDF4;
  border:1px solid #CFE7D8;
  color:var(--green);
  font-size:.82rem;
  font-weight:800;
  white-space:nowrap;
}
.admin-content .admin-toolbar--search .search-bar input{
  flex:1 1 auto;
  min-height:40px;
  font-size:.9rem;
}
.admin-content .admin-toolbar--search .btn{
  min-height:40px;
  white-space:nowrap;
  flex:0 0 auto;
}
.admin-content .filter-row--clean{
  display:flex;
  flex-wrap:wrap;
  gap:8px;
}
.admin-content .filter-row--clean .filter-pill{
  min-height:34px;
  padding:0 12px;
  font-size:.8rem;
  font-weight:800;
}
.admin-content .filter-row--clean .filter-pill__count{
  min-width:22px;
  height:22px;
  margin-left:6px;
  font-size:.72rem;
}
.admin-content .filter-row--nowrap{
  flex-wrap:nowrap;
  overflow-x:auto;
  overflow-y:hidden;
  padding-bottom:2px;
  -webkit-overflow-scrolling:touch;
  scrollbar-width:thin;
}
.admin-content .filter-row--nowrap::-webkit-scrollbar{
  height:8px;
}
.admin-content .filter-row--nowrap::-webkit-scrollbar-thumb{
  background:#D6DEE7;
  border-radius:999px;
}
.admin-content .filter-row--nowrap .filter-pill,
.admin-content .filter-row--nowrap .admin-sector-action{
  flex:0 0 auto;
}
.admin-content .admin-sector-action{
  min-height:34px;
  padding:0 10px;
  border-radius:999px;
  white-space:nowrap;
}
@media (max-width:720px){
  .admin-content .admin-toolbar--search .search-bar{
    flex-wrap:wrap;
  }
  .admin-content .admin-toolbar--search .search-bar__label,
  .admin-content .admin-toolbar--search .search-bar input,
  .admin-content .admin-toolbar--search .btn{
    width:100%;
  }
}

/* ===== admin compact refinement hotfix 2026-03-11 ===== */
.admin-content{
  padding-top:calc(10px + var(--admin-tabs-h));
}
.admin-tabs{
  padding:6px 10px 0;
  gap:6px;
}
.admin-tab{
  min-height:42px;
  padding:0 14px;
  font-size:.84rem;
  border-radius:14px 14px 0 0;
}
.admin-content .admin-toolbar,
.admin-content .admin-compact-panel,
.admin-content .admin-toolbar--search{
  margin-top:6px;
  margin-bottom:6px;
}
.admin-content .admin-toolbar--search{
  padding:8px 10px;
}
.admin-content .admin-toolbar--search .search-bar{
  gap:8px;
}
.admin-content .admin-toolbar--search .search-bar__label,
.admin-content .admin-toolbar--search .search-bar input,
.admin-content .admin-toolbar--search .btn{
  min-height:36px;
}
.admin-content .filter-row--clean{
  gap:6px;
  padding:0 0 6px;
  margin-top:4px;
  margin-bottom:4px;
}
.admin-filter-line{
  align-items:center;
}
.admin-filter-line__label{
  flex:0 0 auto;
  font-size:.75rem;
  font-weight:800;
  color:#64748B;
  padding-right:2px;
}
.admin-filter-line__divider{
  flex:0 0 1px;
  align-self:stretch;
  background:#E5EAF0;
  margin:0 2px;
}
.admin-content .filter-row--clean .filter-pill{
  min-height:32px;
  padding:0 10px;
  font-size:.78rem;
  border-radius:999px;
}
.admin-content .filter-row--clean .filter-pill__count{
  min-width:20px;
  height:20px;
  font-size:.7rem;
}
.ticket-item{
  position:relative;
  align-items:flex-start;
  gap:10px;
  padding:12px 12px 10px;
  border-radius:16px;
  margin-bottom:8px;
}
.ticket-item--clean{
  padding:12px 12px 10px;
}
.ticket-item.is-selected{
  border-color:#86EFAC;
  background:#F0FDF4;
}
.ticket-item__select{
  flex:0 0 auto;
  display:flex;
  align-items:flex-start;
  justify-content:center;
  padding-top:2px;
}
.ticket-item__select input{
  width:16px;
  height:16px;
  accent-color:var(--green);
  cursor:pointer;
}
.ticket-item__status{
  width:5px;
  min-height:54px;
  height:auto;
  margin-top:0;
}
.ticket-item__body{
  min-width:0;
}
.ticket-item__row{
  display:flex;
  align-items:flex-start;
  gap:10px;
}
.ticket-item__main{
  flex:1 1 auto;
  min-width:0;
}
.ticket-item__title{
  font-size:.95rem;
  line-height:1.35;
  font-weight:800;
}
.ticket-item__title--spread{
  gap:6px;
}
.ticket-item__meta{
  font-size:.78rem;
  line-height:1.4;
  margin-top:4px;
}
.ticket-item__reason{
  font-size:.76rem;
  line-height:1.4;
  margin-top:6px;
}
.ticket-meta-chips{
  margin-top:6px;
}
.ticket-item--compact .ticket-meta-chips .detail-badge,
.ticket-item .detail-badge{
  padding:4px 8px;
  font-size:.72rem;
  font-weight:800;
}
.ticket-item__open-btn{
  flex:0 0 auto;
  min-height:44px !important;
  min-width:72px !important;
  padding:0 12px !important;
  border-radius:12px !important;
  font-size:.78rem !important;
  font-weight:800 !important;
}
.ticket-item__actions{
  display:none !important;
}
.admin-compact-panel--batch{
  margin-top:6px;
}
.admin-compact-panel--batch summary{
  padding:10px 12px;
}
.admin-compact-panel--batch .admin-compact-panel__body{
  padding:0 12px 12px;
}
.admin-batch-inline{
  display:flex;
  align-items:center;
  gap:8px;
  flex-wrap:wrap;
}
.admin-batch-inline > *{
  flex:0 0 auto;
}
.admin-batch-inline__check{
  display:inline-flex;
  align-items:center;
  gap:8px;
}
.admin-batch-inline select,
.admin-batch-inline input{
  min-height:36px;
  border:1px solid var(--border);
  border-radius:12px;
  padding:0 10px;
  background:var(--surface);
  color:var(--text);
  font-size:.8rem;
}
.admin-batch-inline #adminBatchMemoInput{
  flex:1 1 200px;
  min-width:180px;
}
.admin-batch-inline .btn{
  min-height:36px;
}
.admin-board-table-wrap{
  border-radius:18px;
}
.admin-board-table thead th{
  padding:11px 10px;
  font-size:.73rem;
}
.admin-board-table tbody td{
  padding:10px 10px;
}
.admin-board-summary{
  gap:4px;
}
.admin-board-summary__title{
  line-height:1.35;
}
.admin-board-summary__sub{
  gap:6px;
  font-size:.72rem;
}
.admin-board-table__time{
  font-size:.76rem;
}
.admin-board-table__time-sub{
  margin-top:2px;
}
.admin-content .detail-sheet-body--inline{
  padding:14px 16px 12px;
}
.admin-content .detail-head{
  padding:10px 0 8px;
  margin-bottom:2px;
}
.admin-content .detail-head .btn{
  min-height:34px;
}
.admin-content .detail-title{
  font-size:1.02rem;
}
.admin-content .detail-sub{
  font-size:.8rem;
  margin-top:2px;
}
.admin-content .detail-badges{
  margin-top:8px;
  gap:6px;
}
.admin-content .detail-badges--compact .detail-badge{
  padding:5px 9px;
  font-size:.72rem;
}
@media (max-width:960px){
  .admin-tabs{
    padding:4px 8px 0;
  }
  .admin-tab{
    min-height:38px;
    padding:0 12px;
    font-size:.8rem;
  }
  .admin-content{
    padding-top:calc(8px + var(--admin-tabs-h));
  }
}
@media (max-width:720px){
  .admin-content .admin-toolbar--search .search-bar{
    flex-wrap:nowrap;
  }
  .admin-content .admin-toolbar--search .search-bar__label{
    width:auto;
  }
  .admin-content .admin-toolbar--search .search-bar input{
    width:auto;
  }
  .admin-content .admin-toolbar--search .btn{
    width:auto;
  }
  .admin-batch-inline{
    gap:6px;
  }
  .admin-batch-inline select,
  .admin-batch-inline input,
  .admin-batch-inline .btn{
    flex:1 1 calc(50% - 6px);
    min-width:140px;
  }
  .admin-batch-inline__check{
    flex:1 1 100%;
  }
}
@media (max-width:520px){
  .ticket-item{
    padding:10px 10px 9px;
    gap:8px;
    border-radius:14px;
  }
  .ticket-item--clean{
    padding:10px 10px 9px;
  }
  .ticket-item__status{
    min-height:48px;
  }
  .ticket-item__title{
    font-size:.9rem;
  }
  .ticket-item__meta{
    font-size:.74rem;
  }
  .ticket-item__open-btn{
    min-width:64px !important;
    padding:0 10px !important;
  }
  .admin-content .filter-row--clean{
    padding-bottom:4px;
  }
}


/* round11 compact admin overrides */
.admin-content{padding-top:calc(8px + var(--admin-tabs-h)) !important;padding-left:10px !important;padding-right:10px !important}
.admin-tabs{gap:6px !important;padding:6px 10px 0 !important}
.admin-tab{padding:10px 12px !important;min-height:44px !important;font-size:.86rem !important}
.admin-content .admin-toolbar,.admin-content .admin-compact-panel,.admin-content .admin-toolbar--search{margin:6px 0 8px !important;border-radius:14px !important}
.admin-content .admin-toolbar--search{padding:8px 10px !important}
.admin-content .admin-toolbar--search .search-bar{min-height:38px !important}
.admin-content .filter-row--clean{gap:6px !important;margin:6px 0 10px !important}
.admin-content .filter-row--clean .filter-pill{min-height:34px !important;padding:0 10px !important;font-size:.77rem !important;box-shadow:none !important}
.admin-content .filter-row--clean .filter-pill__count{min-width:20px !important;height:20px !important;margin-left:6px !important;font-size:.68rem !important}
.admin-filter-line__label{font-size:.72rem !important}
.admin-content .admin-board-table thead th{padding:10px 8px !important;font-size:.72rem !important}
.admin-content .admin-board-table tbody td{padding:10px 8px !important;font-size:.82rem !important}
.admin-board-summary__title{line-height:1.35 !important}
.admin-board-summary__sub{font-size:.74rem !important;line-height:1.3 !important}
.admin-content .detail-sheet-body--inline{padding:14px 14px 10px !important}
.admin-content .detail-head{padding:8px 0 8px !important}
.admin-content .detail-badges{margin-top:8px !important;gap:6px !important}
.admin-content .detail-badges--compact .detail-badge,.detail-badge{padding:5px 9px !important;font-size:.73rem !important}
.admin-content .admin-summary-line__item{min-height:32px !important;padding:6px 10px !important;font-size:.72rem !important}
.admin-content .admin-person-card{padding:10px !important;border-radius:14px !important}
.admin-content .admin-simple-item{padding:9px 11px !important}
.admin-content .detail-note{padding:7px 9px !important;font-size:.74rem !important;line-height:1.45 !important}
/* Phase 1b · 우측 detail 패널 slide-in — 평소엔 목록 full-width, 티켓 선택 시에만 2-column */
.admin-workspace--board{gap:12px !important;grid-template-columns:minmax(0,1fr) !important}
.admin-workspace--board:has(.admin-board-detail:not(.admin-board-detail--empty)){grid-template-columns:minmax(0,1fr) 360px !important}
.admin-board-detail--empty{display:none !important}
.admin-board-detail:not(.admin-board-detail--empty){animation:adminDetailSlideIn .22s ease-out}
@keyframes adminDetailSlideIn{from{opacity:0;transform:translateX(18px)}to{opacity:1;transform:translateX(0)}}
@media (max-width: 1024px){.admin-content{padding-left:8px !important;padding-right:8px !important}.admin-workspace--board:has(.admin-board-detail:not(.admin-board-detail--empty)){grid-template-columns:minmax(0,1fr) 320px !important}}
@media (max-width: 768px){.admin-content .filter-row--clean .filter-pill{flex:0 0 auto !important}.admin-content .admin-toolbar--search,.admin-content .admin-compact-panel,.admin-content .admin-toolbar{border-radius:12px !important}.admin-content .admin-board-table thead th,.admin-content .admin-board-table tbody td{padding:9px 7px !important}}


/* round12 compact stats / org settings */
.admin-toolbar--stats .admin-toolbar__actions select,.admin-toolbar--stats .admin-toolbar__actions .btn{min-height:36px}
.stat-card--compact .stat-card__num{font-size:1.4rem;line-height:1.05}
.stat-card--compact .stat-card__label{font-size:.78rem;line-height:1.28;margin-top:6px}
.admin-org-layout{display:grid;grid-template-columns:minmax(280px,360px) minmax(0,1fr);gap:12px;align-items:start}
.admin-org-layout__teams{display:grid;gap:10px}
.admin-org-layout__panel{min-width:0}
.admin-org-team-card{border:1px solid var(--border);border-radius:16px;background:var(--surface-alt);padding:10px}
.admin-org-team-card__head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px;font-size:.82rem;font-weight:800;color:var(--text)}
.admin-org-team-card__body{display:grid;gap:6px}
.admin-org-person{display:flex;flex-direction:column;align-items:flex-start;gap:2px;padding:8px 10px;border:1px solid var(--border);border-radius:12px;background:var(--surface);text-align:left;cursor:pointer;transition:.12s}
.admin-org-person:hover{border-color:#A8B5C2;background:#fff}
.admin-org-person.is-active{border-color:#16A34A;background:#F0FDF4;box-shadow:0 0 0 1px rgba(22,163,74,.08) inset}
.admin-org-person__name{font-size:.82rem;font-weight:800;color:var(--text)}
.admin-org-person__meta{font-size:.72rem;color:var(--text-secondary);line-height:1.35}
.admin-person-card--panel{margin:0;border-radius:16px;padding:10px 12px}
.admin-person-card--panel .admin-person-card__head{margin-bottom:10px}
.admin-person-card--panel .admin-choice-chip{padding:6px 8px}
@media (max-width:920px){.admin-org-layout{grid-template-columns:1fr}.stat-row--compact{grid-template-columns:repeat(4,minmax(0,1fr))}}
@media (max-width:560px){.master-usage-strip{padding:6px 10px 0}.master-usage-strip__item{font-size:.7rem;padding:6px 8px}.stat-row--compact{grid-template-columns:repeat(2,minmax(0,1fr))}.stat-card--compact{min-height:76px;padding:8px 7px}.stat-card--compact .stat-card__label{font-size:.72rem}.admin-org-team-card{padding:8px}}


/* round13 compact header + suggestion/attendance tweaks */
:root{--header-h:60px;--header-base-h:60px}
.header{padding:0 16px;min-height:var(--header-base-h)}
.header__mark{width:38px;height:38px}
.header__text{font-size:1.03rem !important;font-weight:800}
.header__sub{font-size:.74rem}
.header__right{gap:8px;min-width:0}
.mode-pill,.auth-pill,.role-pill{min-height:38px;padding:0 12px;font-size:.76rem}
.theme-toggle,.alert-bell{width:38px;height:38px}
.master-usage-inline{display:flex;gap:6px;align-items:center;min-width:0}
.master-usage-mobile{position:fixed;left:50%;transform:translateX(-50%);top:var(--header-stack-h);z-index:var(--z-header-usage);width:min(var(--app-shell-w),100vw);display:flex;gap:6px;flex-wrap:wrap;padding:6px 12px 0;background:var(--surface)}
.master-usage-chip{display:inline-flex;align-items:center;gap:5px;padding:6px 9px;border:1px solid var(--border);border-radius:999px;background:var(--surface-alt);font-size:.72rem;color:var(--text-secondary);white-space:nowrap}
.master-usage-chip strong{font-size:.8rem;color:var(--text);font-weight:800}
.admin-tabs{padding:4px 10px 0 !important;gap:6px !important}
/* master-usage-mobile 은 position:fixed(흐름 밖) — 상단 패딩에 반드시 포함해야 콘텐츠가 칩바 뒤로 숨지 않는다 */
.admin-content{padding-top:calc(4px + var(--master-usage-h,0px) + var(--admin-tabs-h)) !important;padding-left:10px !important;padding-right:10px !important}
.admin-content>.detail-section:first-child,.admin-content>.admin-toolbar:first-child,.admin-content>.admin-compact-panel:first-child{margin-top:2px !important}
.admin-content .admin-toolbar,.admin-content .admin-toolbar--search,.admin-content .admin-compact-panel{margin:4px 0 8px !important}
.detail-section{margin-top:4px}
.stat-card--compact .stat-card__num{font-size:1.6rem}
.stat-card--compact .stat-card__label{font-size:.74rem;line-height:1.35}
.admin-approval-panel-head .admin-summary-line{margin-bottom:0}
.admin-suggest-form textarea{width:100%;min-height:84px;resize:vertical;border:1px solid var(--border);border-radius:12px;padding:10px 12px;background:var(--surface)}
.admin-suggest-form select{width:100%;min-height:42px;border:1px solid var(--border);border-radius:12px;padding:0 12px;background:var(--surface)}
.attendance-mobile-list{display:grid;gap:10px}
.attendance-mobile-card{border:1px solid var(--border);border-radius:16px;background:var(--card);padding:12px}
.attendance-mobile-card__head{display:flex;justify-content:space-between;gap:10px;align-items:flex-start;margin-bottom:8px}
.attendance-mobile-card__meta{font-size:.74rem;color:var(--text-secondary)}
.attendance-mobile-card__count{font-weight:800;color:#2563EB;white-space:nowrap}
.attendance-mobile-days{display:flex;gap:6px;overflow-x:auto;padding-bottom:4px}
.attendance-mobile-day{min-width:38px;border:1px solid var(--border);border-radius:12px;padding:6px 4px;text-align:center;background:var(--surface-alt);display:grid;gap:3px;place-items:center}
.attendance-mobile-day__num{font-size:.76rem;font-weight:800;color:var(--text)}
.attendance-mobile-day__dot{width:8px;height:8px;border-radius:999px;background:#CBD5E1}
.attendance-mobile-day.is-present .attendance-mobile-day__dot{background:#2563EB}
.attendance-mobile-day.is-today{border-color:#93C5FD;background:#EFF6FF}
.attendance-mobile-day__week{font-size:.64rem;color:var(--text-secondary)}
@media (max-width:920px){.stat-row--compact{grid-template-columns:repeat(4,minmax(0,1fr))}.admin-suggest-form{grid-template-columns:1fr}.admin-suggest-form__full{grid-column:auto}.admin-suggest-form__actions{justify-content:flex-start}}
@media (max-width:720px){
  :root{--header-h:56px;--header-base-h:56px}
  .header{padding:0 12px}
  .header__mark{width:34px;height:34px}
  .header__text{font-size:.97rem !important}
  .header__sub{font-size:.72rem}
  .admin-tabs{padding:2px 8px 0 !important}
  .admin-content{padding-top:calc(2px + var(--master-usage-h,0px) + var(--admin-tabs-h)) !important;padding-left:8px !important;padding-right:8px !important}
  .mode-pill,.auth-pill{padding:0 10px;font-size:.74rem}
}
@media (max-width:520px){
  .header__right .role-pill{display:none}
  .header__mark{width:32px;height:32px}
  .header__text{font-size:.94rem !important}
  .master-usage-mobile{padding:6px 10px 0}
  .master-usage-chip{font-size:.68rem;padding:5px 8px}
  .stat-row--compact{grid-template-columns:repeat(2,minmax(0,1fr))}
  .stat-card--compact{min-height:62px;padding:7px 6px}
}


/* 관리자 전용: 직영처리 가치산출 */
.admin-inhouse-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:10px;margin-bottom:12px}
.admin-inhouse-summary__card{border:1px solid var(--border);background:var(--surface);border-radius:14px;padding:12px;display:flex;flex-direction:column;gap:6px}
.admin-inhouse-summary__card span{font-size:.78rem;color:var(--text-secondary)}
.admin-inhouse-summary__card strong{font-size:.95rem;color:var(--text)}
.admin-inhouse-note{margin:10px 0;padding:10px 12px;border-radius:14px;border:1px solid var(--border);background:rgba(59,130,246,.06)}
.admin-inhouse-note--blocked{border-color:#eab308;background:rgba(234,179,8,.10);color:#92400e}
.admin-inhouse-note--warn{border-color:#f59e0b;background:rgba(245,158,11,.10);color:#92400e}

.admin-inhouse-toolbar,.admin-inhouse-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin:10px 0}
.admin-inhouse-chip{padding:8px 12px;border-radius:999px;background:#eff6ff;color:#1d4ed8;font-size:.8rem;font-weight:700}
.admin-inhouse-table{display:grid;gap:8px;margin-top:10px}
.admin-inhouse-row{display:grid;grid-template-columns:110px minmax(120px,1.2fr) minmax(120px,1fr) 80px 90px 110px 100px minmax(120px,1fr) 64px;gap:8px;align-items:center}
.admin-inhouse-row input,.admin-inhouse-row select,.admin-inhouse-toolbar select,.admin-inhouse-note-input{width:100%;padding:10px 12px;border-radius:12px;border:1px solid var(--border);background:var(--surface);color:var(--text)}
.admin-inhouse-row__amount{padding:10px 12px;border-radius:12px;border:1px solid var(--border);background:var(--bg-soft);font-weight:700;text-align:right}
.admin-inhouse-note-input{margin-top:10px;resize:vertical}
.admin-inhouse-totals{display:flex;gap:12px;flex-wrap:wrap;margin-top:10px;padding:10px 12px;border-radius:14px;background:var(--bg-soft);border:1px solid var(--border)}
.admin-inhouse-totals span{font-size:.85rem;color:var(--text-secondary)}
.admin-inhouse-totals strong{color:var(--text);margin-left:4px}
@media (max-width: 980px){
  .admin-inhouse-row{grid-template-columns:1fr 1fr;align-items:stretch}
  .admin-inhouse-versions__item{grid-template-columns:1fr 1fr}
}


/* ══════════════════════════════════════════════════
   Processing Tab — Mail-style Redesign (demo 포팅)
   ══════════════════════════════════════════════════ */

/* ── Proc variables ── */
:root{
  --proc-bg:#F7F8FA;
  --proc-surface:#FFFFFF;
  --proc-surface-alt:#F3F4F6;
  --proc-border:#E5E7EB;
  --proc-border-soft:#EEF0F3;
  --proc-text:#111827;
  --proc-text-2:#4B5563;
  --proc-text-3:#9CA3AF;
  --proc-accent:#0F766E;
  --proc-accent-soft:#ECFDF5;
  --proc-warm:#B45309;
  --proc-warm-soft:#FEF3C7;
  --proc-shadow:0 1px 2px rgba(17,24,39,.04), 0 1px 1px rgba(17,24,39,.03);
  --proc-radius:14px;
  --proc-radius-sm:10px;
}

/* 2026-04-28 · BUG-002 · 처리 대기 카드 다크모드 시인성 — proc-* 토큰 다크 오버라이드 */
:root[data-theme="dark"]{
  --proc-bg:#0D1117;
  --proc-surface:#161B22;
  --proc-surface-alt:#1C2333;
  --proc-border:#30363D;
  --proc-border-soft:#2A2F36;
  --proc-text:#E6EDF3;
  --proc-text-2:#B8C0CC;
  --proc-text-3:#8B949E;
  --proc-accent:#3FB950;
  --proc-accent-soft:#0D2818;
  --proc-warm:#F5B252;
  --proc-warm-soft:#3A2412;
  --proc-shadow:0 1px 2px rgba(0,0,0,.32), 0 1px 1px rgba(0,0,0,.20);
}
:root[data-theme="dark"] .proc-row:hover{background:#1C2333}
:root[data-theme="dark"] .proc-row.unread{background:linear-gradient(90deg,rgba(63,185,80,.10),transparent 30%)}
:root[data-theme="dark"] .proc-list__head{background:#12161D;color:var(--proc-text-3)}
:root[data-theme="dark"] .proc-chip[aria-pressed="true"]{background:#3FB950;color:#0D1117;border-color:#3FB950}
:root[data-theme="dark"] .proc-chip[aria-pressed="true"] .dot{background:#0D1117}
:root[data-theme="dark"] .proc-chip[aria-pressed="true"] .n{color:#0D1117;opacity:.7}
:root[data-theme="dark"] .proc-badge--photo{background:#1E1B4B;color:#A5B4FC}
:root[data-theme="dark"] .proc-badge--vendor{background:#2E1065;color:#C4B5FD}
:root[data-theme="dark"] .proc-badge--review{background:#172554;color:#93C5FD}
:root[data-theme="dark"] .proc-btn-ghost{background:#1C2333;border-color:#30363D;color:#C9D1D9}
:root[data-theme="dark"] .proc-btn-ghost:hover{background:#262D38}
:root[data-theme="dark"] .ticket-item{background:var(--surface);color:var(--text);border-color:var(--border)}
:root[data-theme="dark"] .ticket-item__title{color:var(--text)}
:root[data-theme="dark"] .ticket-item__meta{color:var(--text-tertiary)}
:root[data-theme="dark"] .ticket-item__reason{color:var(--text-secondary)}

/* ── Hero status line ── */
.proc-hero{background:var(--proc-surface);border:1px solid var(--proc-border-soft);border-radius:var(--proc-radius);padding:18px 20px;margin:10px 0 14px;box-shadow:var(--proc-shadow);display:flex;align-items:center;gap:22px}
.proc-hero__left{flex:1}
.proc-hero__greet{font-size:.8125rem;color:var(--proc-text-2)}
.proc-hero__summary{font-size:1.0625rem;font-weight:600;margin-top:2px}
.proc-hero__summary em{color:var(--proc-accent);font-style:normal}
.proc-hero__right{display:flex;gap:10px;align-items:center}
.proc-hero__chip{background:var(--proc-surface-alt);border:1px solid var(--proc-border-soft);border-radius:999px;padding:6px 12px;font-size:.75rem;color:var(--proc-text-2)}
.proc-hero__progress{width:140px;height:6px;background:var(--proc-surface-alt);border-radius:999px;overflow:hidden}
.proc-hero__progress > span{display:block;height:100%;background:var(--proc-accent)}

/* ── Tab/Filter row ── */
.proc-filters{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:10px}
.proc-seg{display:inline-flex;background:var(--proc-surface);border:1px solid var(--proc-border-soft);border-radius:999px;padding:3px;box-shadow:var(--proc-shadow)}
.proc-seg button{background:transparent;border:0;padding:7px 14px;font-size:.8125rem;color:var(--proc-text-2);border-radius:999px;cursor:pointer;font-weight:500;font-family:inherit}
.proc-seg button[aria-selected="true"]{background:var(--proc-accent);color:#fff}
.proc-seg button .cnt{margin-left:6px;font-size:.6875rem;color:inherit;opacity:.75}
.proc-seg button[aria-selected="true"] .cnt{opacity:.85}

.proc-chips{display:inline-flex;flex-wrap:wrap;gap:6px;margin-left:4px}
.proc-chip{background:var(--proc-surface);border:1px solid var(--proc-border-soft);border-radius:999px;padding:6px 11px;font-size:.75rem;color:var(--proc-text-2);cursor:pointer;display:inline-flex;align-items:center;gap:5px;transition:all .12s ease;font-family:inherit}
.proc-chip:hover{background:var(--proc-surface-alt)}
.proc-chip[aria-pressed="true"]{background:#111827;color:#fff;border-color:#111827}
.proc-chip .dot{width:6px;height:6px;border-radius:50%;background:var(--proc-text-3)}
.proc-chip[aria-pressed="true"] .dot{background:#A7F3D0}
.proc-chip .n{color:var(--proc-text-3);font-variant-numeric:tabular-nums;margin-left:2px}
.proc-chip[aria-pressed="true"] .n{color:#D1D5DB}

.proc-search{flex:1;min-width:220px;position:relative;margin-left:auto}
.proc-search input{width:100%;background:var(--proc-surface);border:1px solid var(--proc-border-soft);border-radius:10px;padding:9px 12px 9px 34px;font-size:.8125rem;outline:none;font-family:inherit}
.proc-search input:focus{border-color:var(--proc-accent)}
.proc-search::before{content:"🔍";position:absolute;left:11px;top:50%;transform:translateY(-50%);font-size:.8125rem;opacity:.6}

/* ── List ── */
.proc-list{background:var(--proc-surface);border:1px solid var(--proc-border-soft);border-radius:var(--proc-radius);overflow:hidden;box-shadow:var(--proc-shadow)}
.proc-list__head{display:flex;align-items:center;gap:10px;padding:10px 16px;border-bottom:1px solid var(--proc-border-soft);color:var(--proc-text-3);font-size:.75rem;background:#FBFCFD}
.proc-list__head .spacer{flex:1}

.proc-row{display:flex;align-items:flex-start;gap:14px;padding:14px 16px;border-bottom:1px solid var(--proc-border-soft);cursor:pointer;position:relative;transition:background .12s ease}
/* 2026-04-28 · ENH-009 · 우선순위/SLA 좌측 컬러 보더 일관 — 긴급=빨강 / 임박=노랑 / 정상=회색 */
.proc-row[data-priority="urgent"]{box-shadow:inset 4px 0 0 0 #DC2626}
.proc-row[data-priority="soon"]{box-shadow:inset 4px 0 0 0 #F59E0B}
.proc-row[data-priority="normal"]{box-shadow:inset 4px 0 0 0 transparent}
:root[data-theme="dark"] .proc-row[data-priority="urgent"]{box-shadow:inset 4px 0 0 0 #F87171}
:root[data-theme="dark"] .proc-row[data-priority="soon"]{box-shadow:inset 4px 0 0 0 #FBBF24}
.proc-row:last-child{border-bottom:0}
.proc-row:hover{background:#FAFBFC}
.proc-row:hover .proc-row__actions{opacity:1;transform:none}
.proc-row.unread{background:linear-gradient(90deg,rgba(15,118,110,.04),transparent 30%)}
.proc-row.unread::before{content:"";position:absolute;left:6px;top:22px;width:6px;height:6px;border-radius:50%;background:var(--proc-accent)}

.proc-row__body{flex:1;min-width:0}
.proc-row__title{font-size:.9375rem;font-weight:600;line-height:1.45;color:var(--proc-text);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.proc-row__meta{display:flex;align-items:center;gap:8px;margin-top:6px;font-size:.75rem;color:var(--proc-text-2);flex-wrap:wrap}
.proc-row__meta .sep{color:var(--proc-text-3)}
.proc-row__meta .sector{color:var(--proc-accent);font-weight:600}
.proc-row__badges{display:inline-flex;gap:6px;margin-left:4px}
.proc-badge{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:999px;font-size:.6875rem;font-weight:500;background:var(--proc-surface-alt);color:var(--proc-text-2);border:1px solid var(--proc-border-soft)}
.proc-badge--warm{background:var(--proc-warm-soft);color:var(--proc-warm);border-color:transparent}
.proc-badge--photo{background:#EEF2FF;color:#4338CA;border-color:transparent}
/* 2026-04-20 · 용역사 처리 배지 */
.proc-badge--vendor{background:#EDE9FE;color:#6D28D9;border-color:transparent;font-weight:600}
.proc-badge--review{background:#DBEAFE;color:#1D4ED8;border-color:transparent;font-weight:600}

.proc-row__right{display:flex;align-items:center;gap:10px;flex-shrink:0;padding-top:2px}
.proc-row__time{font-size:.75rem;color:var(--proc-text-3);white-space:nowrap;min-width:48px;text-align:right}
.proc-row__actions{opacity:1;transform:none;display:inline-flex;gap:6px}
.proc-btn-ghost{background:var(--proc-surface-alt);border:1px solid var(--proc-border-soft);color:var(--proc-text-2);font-size:.75rem;padding:6px 10px;border-radius:8px;cursor:pointer;font-family:inherit}
.proc-btn-ghost:hover{background:#E5E7EB}
.proc-btn-primary{background:var(--proc-accent);border:1px solid var(--proc-accent);color:#fff;font-size:.75rem;padding:6px 12px;border-radius:8px;cursor:pointer;font-weight:500;font-family:inherit}
.proc-btn-primary:hover{filter:brightness(1.05)}

/* ── Empty ── */
.proc-empty{padding:40px 20px;text-align:center;color:var(--proc-text-3);font-size:.8125rem}

/* ── Snackbar ── */
.proc-snackbar{position:fixed;left:50%;bottom:26px;transform:translateX(-50%) translateY(10px);background:#111827;color:#fff;padding:10px 16px;border-radius:999px;font-size:.8125rem;opacity:0;pointer-events:none;transition:all .2s ease;box-shadow:0 8px 20px rgba(0,0,0,.18);z-index:999}
.proc-snackbar.show{opacity:1;transform:translateX(-50%) translateY(0)}
.proc-snackbar em{font-style:normal;color:#A7F3D0;font-weight:600}

/* ── Detail dialog (overlay) ── */
.proc-overlay{position:fixed;inset:0;background:rgba(17,24,39,.35);display:none;align-items:center;justify-content:center;padding:24px 20px;z-index:var(--z-overlay);overflow:auto}
.proc-overlay.show{display:flex}
/* 2026-05-15 · 데스크톱에서도 다이얼로그가 화면을 넘치지 않도록 max-height + 내부 스크롤. 헤더(닫기 버튼 등)가 위로 잘리는 문제 해결. */
.proc-dialog{background:var(--proc-surface);width:100%;max-width:560px;border-radius:16px;padding:22px 22px 24px;box-shadow:0 20px 40px rgba(0,0,0,.18);max-height:90vh;overflow-y:auto;overscroll-behavior:contain}
/* 2026-05-15 · 다이얼로그가 떠있는 동안 배경 페이지 스크롤 잠금 (scroll chaining 방지). */
html:has(.proc-overlay.show),html:has(.mbd-overlay.show),body:has(.proc-overlay.show),body:has(.mbd-overlay.show){overflow:hidden}
.proc-overlay,.mbd-overlay{overscroll-behavior:contain}
.proc-dialog__head{display:flex;align-items:center;gap:10px;margin:0 -22px 8px;padding:14px 22px 10px;position:sticky;top:-22px;z-index:5;background:var(--proc-surface);border-bottom:1px solid var(--proc-border-soft)}
.proc-dialog__back{background:none;border:0;color:var(--proc-accent);font-size:.8125rem;cursor:pointer;padding:4px 6px;font-family:inherit}
.proc-dialog__id{margin-left:auto;color:var(--proc-text-1);font-size:.875rem;font-weight:700;letter-spacing:.02em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:240px;cursor:pointer;padding:2px 6px;border-radius:6px;transition:background .12s,color .12s}
.proc-dialog__id:hover{background:rgba(0,132,61,0.08);color:#00843D}
.proc-dialog__id:active{background:rgba(0,132,61,0.16)}
.proc-dialog__id::before{content:"#";opacity:.55;margin-right:2px}
.proc-dialog__loc{font-size:.75rem;color:var(--proc-text-2);margin-top:6px}
.proc-dialog__title{font-size:1.0625rem;font-weight:700;margin-top:4px;line-height:1.45}
.proc-dialog__body{font-size:.875rem;color:var(--proc-text);margin-top:14px;line-height:1.6;background:var(--proc-surface-alt);border-radius:10px;padding:12px 14px;white-space:pre-wrap;word-break:keep-all}
.proc-dialog__meta{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px;font-size:.75rem;color:var(--proc-text-2)}
.proc-dialog__actions{margin-top:18px;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.proc-dialog__primary{flex:1;min-width:120px;background:var(--proc-accent);color:#fff;border:0;padding:12px;border-radius:12px;font-size:.9375rem;font-weight:600;cursor:pointer;font-family:inherit}
.proc-dialog__secondary{background:var(--proc-surface-alt);color:var(--proc-text-2);border:1px solid var(--proc-border-soft);padding:11px 14px;border-radius:12px;font-size:.8125rem;cursor:pointer;font-family:inherit}

/* ── Dialog photos & contact ── */
.proc-dialog__photos{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}
.proc-dialog__photos .ph{width:96px;height:96px;border-radius:10px;overflow:hidden;border:1px solid var(--proc-border-soft);cursor:zoom-in;position:relative;background:#F3F4F6}
.proc-dialog__photos .ph img{width:100%;height:100%;object-fit:cover;display:block}
.proc-dialog__contact{margin-top:12px;padding:10px 12px;border:1px dashed var(--proc-border);border-radius:10px;font-size:.8125rem;color:var(--proc-text-2);display:flex;align-items:center;gap:8px}
.proc-dialog__contact b{color:var(--proc-text);font-weight:600}
.proc-dialog__contact.none{color:var(--proc-text-3);font-style:italic;border-style:solid;background:var(--proc-surface-alt)}

/* ── Lightbox ── */
.proc-lightbox{position:fixed;inset:0;background:rgba(0,0,0,.85);display:none;align-items:center;justify-content:center;z-index:250;padding:20px;cursor:zoom-out}
.proc-lightbox.show{display:flex}
.proc-lightbox img{max-width:100%;max-height:92vh;border-radius:8px;box-shadow:0 10px 30px rgba(0,0,0,.4);transform-origin:center center;will-change:transform;cursor:zoom-in;touch-action:none;user-select:none;-webkit-user-drag:none}
.proc-lightbox img.is-zoomed{cursor:grab}
.proc-lightbox img.is-dragging{cursor:grabbing}
.proc-lightbox__nav{position:absolute;top:50%;transform:translateY(-50%);width:48px;height:48px;border-radius:50%;background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.28);color:#fff;font-size:1.875rem;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;transition:background .15s,transform .1s;user-select:none}
.proc-lightbox__nav:hover{background:rgba(255,255,255,.22)}
.proc-lightbox__nav:active{transform:translateY(-50%) scale(.94)}
.proc-lightbox__nav--prev{left:24px}
.proc-lightbox__nav--next{right:24px}
.proc-lightbox__nav[hidden]{display:none}
.proc-lightbox__counter{position:absolute;bottom:24px;left:50%;transform:translateX(-50%);color:rgba(255,255,255,.85);font-size:.75rem;background:rgba(0,0,0,.45);padding:4px 10px;border-radius:999px;pointer-events:none}
.proc-lightbox__counter[hidden]{display:none}

/* ── Print sheet ── */
#procPrintSheet{display:none}
@media print{
  body *{visibility:hidden !important}
  #procPrintSheet, #procPrintSheet *{visibility:visible !important}
  #procPrintSheet{display:block !important;position:absolute;inset:0;background:#fff;padding:0;color:#111}
}
/* 2026-07-23 · [이미지 복사] 레이아웃 셀렉터를 .ps-capture 로도 병기 —
 *   copy-image.js 가 화면 밖 .ps-capture 컨테이너에 동일 보고서 HTML 을 렌더해 html2canvas 로 PNG 캡처.
 *   단, 위 #procPrintSheet{display:none} 및 @media print 규칙은 ID 전용 유지 — .ps-capture 는 캡처를 위해 보여야 함. */
/* 2026-07-26 · FMS-25 · 이 인쇄/캡처 시트의 px font-size 는 의도적으로 rem 환산 대상에서 제외한다.
 *   출력물(A4 인쇄·html2canvas PNG)은 열람자의 브라우저 글꼴 확대 설정과 무관하게 고정 치수여야 한다.
 *   위 @page{size:A4;margin:14mm} · padding:20mm · max-width:210mm 가 같은 문서 기준(물리 단위)이다.
 *   화면 가독성 확대는 .proc-* 본문 규칙이 담당하므로 여기서 rem 을 쓰면 산출물만 흔들린다. */
#procPrintSheet, .ps-capture{font-family:-apple-system,BlinkMacSystemFont,"Pretendard",Segoe UI,Roboto,"Noto Sans KR",sans-serif;color:#111;padding:20mm;max-width:210mm}
#procPrintSheet h1, .ps-capture h1{font-size:20px;margin:0 0 4px;border-bottom:2px solid #111;padding-bottom:8px;display:flex;align-items:baseline;gap:10px}
#procPrintSheet h1 small, .ps-capture h1 small{font-size:12px;color:#555;font-weight:400;margin-left:auto}
#procPrintSheet .ps-sub, .ps-capture .ps-sub{font-size:12px;color:#555;margin-bottom:16px}
#procPrintSheet .ps-grid, .ps-capture .ps-grid{display:grid;grid-template-columns:110px 1fr;gap:6px 14px;font-size:13px;margin-bottom:14px}
#procPrintSheet .ps-grid dt, .ps-capture .ps-grid dt{color:#666;font-weight:600}
#procPrintSheet .ps-grid dd, .ps-capture .ps-grid dd{margin:0}
#procPrintSheet .ps-box, .ps-capture .ps-box{border:1px solid #333;border-radius:4px;padding:12px 14px;font-size:13px;line-height:1.6;margin-bottom:14px;white-space:pre-wrap}
#procPrintSheet .ps-box h3, .ps-capture .ps-box h3{margin:0 0 6px;font-size:12px;color:#555;font-weight:600;letter-spacing:.02em}
#procPrintSheet .ps-photos, .ps-capture .ps-photos{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin-bottom:14px}
#procPrintSheet .ps-photos img, .ps-capture .ps-photos img{width:100%;max-height:75mm;object-fit:contain;border:1px solid #ccc;background:#fafafa}
#procPrintSheet .ps-sign, .ps-capture .ps-sign{display:flex;gap:40px;margin-top:22px;font-size:12px;color:#555}
#procPrintSheet .ps-sign div, .ps-capture .ps-sign div{flex:1;border-top:1px solid #333;padding-top:6px}
#procPrintSheet .ps-footer, .ps-capture .ps-footer{margin-top:18px;padding-top:10px;border-top:1px dashed #999;font-size:11px;color:#777;display:flex;justify-content:space-between}

/* ── Mobile responsive ── */
@media (max-width: 720px){
  .proc-hero{padding:14px 16px;gap:12px;flex-direction:column;align-items:flex-start}
  .proc-hero__summary{font-size:1rem}
  .proc-hero__right{width:100%;justify-content:space-between}
  .proc-hero__progress{flex:1;max-width:none;margin-left:10px}
  .proc-filters{gap:8px;flex-direction:column;align-items:stretch;min-width:0}
  /* 2026-05-28 · 모바일 가로 스크롤 깨짐 fix — inline-flex 의 intrinsic min-content 가 부모를 밀어내던 문제.
     min-width:0 + width:100% 로 자신을 강제 축소시키고, overflow-x:auto 가 내부 스크롤로만 동작하도록. */
  .proc-seg{align-self:stretch;overflow-x:auto;max-width:100%;min-width:0;width:100%;box-sizing:border-box;-webkit-overflow-scrolling:touch;scrollbar-width:none}
  .proc-seg::-webkit-scrollbar{display:none}
  .proc-seg button{padding:7px 12px;font-size:.8125rem;white-space:nowrap;flex-shrink:0}
  .proc-chips{margin-left:0;flex-wrap:nowrap;overflow-x:auto;padding-bottom:2px;-webkit-overflow-scrolling:touch;scrollbar-width:none;max-width:100%;min-width:0;width:100%;box-sizing:border-box}
  .proc-chips::-webkit-scrollbar{display:none}
  .proc-chip{white-space:nowrap;flex-shrink:0}
  .proc-search{margin-left:0;min-width:0;width:100%}
  .proc-list__head{padding:10px 14px;font-size:.6875rem}
  .proc-row{padding:12px 14px;gap:10px;flex-direction:column;align-items:stretch}
  .proc-row.unread::before{top:16px;left:4px}
  .proc-row__title{font-size:.90625rem;-webkit-line-clamp:3}
  .proc-row__meta{font-size:.71875rem;gap:6px}
  .proc-row__right{justify-content:space-between;padding-top:0;gap:8px}
  .proc-row__time{min-width:0;text-align:left;font-size:.71875rem}
  .proc-row__actions{opacity:1;transform:none;flex:1;justify-content:flex-end;gap:10px;flex-wrap:wrap;row-gap:8px}
  /* 인쇄·복사(비가역)가 '열기' 옆이라 오탭 비용이 큼 — 44px 확보 */
  .proc-btn-ghost,.proc-btn-primary{min-height:44px;min-width:44px;padding:8px 14px;font-size:.8125rem}
  .proc-overlay{padding:0;align-items:flex-end}
  /* 2026-05-28 · iOS 노치/홈 인디케이터 안전 영역만큼 하단 패딩 확장 — 마지막 버튼이 가려지는 문제 방지 */
  .proc-dialog{max-width:100%;border-radius:18px 18px 0 0;padding:18px 18px calc(28px + var(--safe-bottom));max-height:92vh;overflow:auto}
  /* 스티키 헤더의 음수 마진/ top 은 데스크톱 padding 22px 기준값 — 모바일 18px 에 맞춰 재정렬(좌우 넘침·top 어긋남 제거) */
  .proc-dialog__head{margin:0 -18px 8px;padding:14px 18px 10px;top:-18px}
  .proc-dialog__title{font-size:1rem}
  .proc-dialog__body{font-size:.875rem;padding:12px}
  .proc-dialog__primary{padding:13px;font-size:.9375rem}
  .proc-snackbar{left:12px;right:12px;bottom:16px;transform:translateY(10px);max-width:none;text-align:center;font-size:.78125rem;padding:11px 14px}
  .proc-snackbar.show{transform:translateY(0)}
}
@media (max-width: 480px){
  /* 2026-06-26 · U6 — 모바일 터치타깃 ≥40px (다이얼로그 back/close) */
  .proc-dialog__back{padding:9px 10px;min-height:40px}
  .proc-dialog__close{width:40px;height:40px}
}
@media (max-width: 380px){
  .proc-hero__summary{font-size:.9375rem}
  .proc-row__title{font-size:.875rem}
  /* 2026-07-26 · 38px 축소 규칙 삭제 — 후행이라 375px 에서 위 44px 규칙을 되돌리고 있었음 */
}


/* ══════════════════════════════════════════════════
   Staff UI Redesign — One-Tap Processing
   ══════════════════════════════════════════════════ */

/* ── Status Tabs ── */
.staff-tabs{display:flex;border-bottom:2px solid var(--border);margin-bottom:12px}
.staff-tabs__item{flex:1;padding:10px 0 8px;border:none;border-bottom:2.5px solid transparent;background:none;cursor:pointer;text-align:center;font-family:var(--font);transition:border-color .15s,color .15s}
.staff-tabs__item.active{border-bottom-color:var(--tab-color,var(--green))}
.staff-tabs__count{display:block;font-size:1.25rem;font-weight:800;color:var(--text-tertiary);line-height:1.1;transition:color .15s}
.staff-tabs__item.active .staff-tabs__count{color:var(--tab-color,var(--green))}
.staff-tabs__label{display:block;font-size:.72rem;font-weight:700;color:var(--text-tertiary);margin-top:2px;transition:color .15s}
.staff-tabs__item.active .staff-tabs__label{color:var(--text)}

/* ── Search ── */
/* ── Search + Scope Toggle ── */
.staff-search-row{display:flex;gap:8px;margin-bottom:10px;align-items:center}
.staff-search-row .staff-search__input{flex:1}
.staff-search__input{width:100%;padding:10px 14px;border:1.5px solid var(--border);border-radius:var(--radius);background:var(--surface-alt);font-size:.86rem;font-family:var(--font);color:var(--text);transition:border-color .2s,box-shadow .2s}
.staff-search__input:focus{outline:none;border-color:var(--green);box-shadow:0 0 0 3px rgba(0,132,61,.1);background:var(--surface)}
.staff-search__input::placeholder{color:var(--text-tertiary)}

/* ── Card List ── */
.staff-card-list{display:flex;flex-direction:column;gap:6px}
.staff-scope-toggle:hover{border-color:var(--green);color:var(--green-dark)}
.staff-empty{text-align:center;padding:48px 20px;color:var(--text-tertiary);font-size:.88rem;line-height:1.6}

/* ── Card ── */
.staff-card{display:flex;align-items:center;gap:12px;padding:14px 14px;border:1.5px solid var(--border);border-radius:14px;background:var(--surface);transition:border-color .12s,box-shadow .12s}
.staff-card:hover{border-color:color-mix(in srgb,var(--green) 40%,var(--border))}
.staff-card.is-active{border-color:var(--green);box-shadow:0 0 0 2px color-mix(in srgb,var(--green) 15%,transparent)}
.staff-card__body{flex:1;min-width:0;cursor:pointer}
.staff-card__location{font-size:.84rem;font-weight:700;color:var(--text);line-height:1.3}
.staff-card__desc{font-size:.84rem;color:var(--text-secondary);margin-top:3px;line-height:1.45;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}
.staff-card__meta{display:flex;align-items:center;gap:8px;font-size:.72rem;color:var(--text-tertiary);margin-top:5px;flex-wrap:wrap}
.staff-card__alert{color:#DC2626;font-weight:700}
.staff-card__photo{color:var(--text-tertiary)}
.staff-card__action{padding:10px 18px;border-radius:12px;border:none;background:var(--action-color,#3B82F6);color:#fff;font-size:.82rem;font-weight:700;cursor:pointer;white-space:nowrap;flex-shrink:0;font-family:var(--font);box-shadow:0 1px 4px color-mix(in srgb,var(--action-color,#3B82F6) 30%,transparent);transition:transform .1s,box-shadow .15s}
.staff-card__action:hover{box-shadow:0 2px 8px color-mix(in srgb,var(--action-color,#3B82F6) 40%,transparent)}
.staff-card__action:active{transform:scale(.96)}

/* ── Detail (Full-page) ── */
.staff-detail{display:flex;flex-direction:column;min-height:100%}
.staff-detail--inline{min-height:auto}
.staff-detail__header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid var(--border);flex-shrink:0}
.staff-detail__back{border:none;background:none;font-size:.88rem;font-weight:600;cursor:pointer;color:var(--green);font-family:var(--font);padding:0}
.staff-detail__receipt{font-size:.95rem;font-weight:700;letter-spacing:.02em;color:var(--text-primary);cursor:pointer;padding:2px 8px;border-radius:6px;transition:background .12s,color .12s}
.staff-detail__receipt:hover{background:rgba(0,132,61,0.08);color:#00843D}
.staff-detail__receipt:active{background:rgba(0,132,61,0.16)}
.staff-detail__receipt::before{content:"#";opacity:.55;margin-right:2px}
.staff-detail__content{padding:20px 18px;overflow:auto;flex:1}
.staff-detail__loc-label{font-size:.72rem;color:var(--text-secondary);font-weight:600;margin-bottom:4px;letter-spacing:.02em}
.staff-detail__loc{font-size:1.1rem;font-weight:800;color:var(--text);margin-bottom:14px;line-height:1.3}
.staff-detail__desc{font-size:.92rem;color:var(--text-secondary);line-height:1.7;margin-bottom:16px;white-space:pre-wrap;word-break:keep-all}
.staff-detail__photos{margin-bottom:16px}
.staff-detail__meta-line{font-size:.78rem;color:var(--text-tertiary);margin-bottom:20px}
.staff-detail__divider{height:1px;background:var(--border);margin:16px 0}

/* ── Primary Action Button ── */
.staff-detail__primary{width:100%;padding:16px 0;border-radius:14px;border:none;background:var(--primary-color,#3B82F6);color:#fff;font-size:1rem;font-weight:800;cursor:pointer;font-family:var(--font);box-shadow:0 2px 12px color-mix(in srgb,var(--primary-color,#3B82F6) 30%,transparent);transition:transform .1s,box-shadow .15s;margin-bottom:12px}
.staff-detail__primary:hover{box-shadow:0 4px 16px color-mix(in srgb,var(--primary-color,#3B82F6) 40%,transparent)}
.staff-detail__primary:active{transform:scale(.98)}

/* ── Toggle/Collapsible ── */
.staff-detail__toggle{width:100%;display:flex;justify-content:space-between;align-items:center;padding:10px 0;border:none;background:none;font-size:.86rem;color:var(--text-secondary);cursor:pointer;font-family:var(--font);text-align:left}
.staff-detail__toggle:hover{color:var(--text)}
.staff-detail__arrow{font-size:.68rem;transition:transform .2s;color:var(--text-tertiary)}
.staff-detail__collapsible{margin-bottom:4px}
.staff-detail__textarea{width:100%;border:1.5px solid var(--border);border-radius:12px;padding:12px;font-size:.86rem;font-family:var(--font);color:var(--text);background:var(--surface-alt);resize:vertical;margin-top:4px}
.staff-detail__textarea:focus{outline:none;border-color:var(--green);background:var(--surface)}

/* ── Secondary Actions ── */
.staff-detail__others{display:flex;gap:6px;flex-wrap:wrap;padding:6px 0 10px}
.staff-detail__other-btn{padding:7px 14px;border-radius:10px;border:1.5px solid var(--border);background:var(--surface-alt);font-size:.8rem;font-weight:600;color:var(--text-secondary);cursor:pointer;font-family:var(--font);transition:all .12s}
.staff-detail__other-btn:hover{border-color:var(--green);background:var(--green-light);color:var(--green-dark)}

/* ── Sub-page Links ── */
.staff-detail__link{width:100%;display:flex;justify-content:space-between;align-items:center;padding:13px 0;border:none;background:none;font-size:.86rem;color:var(--text-secondary);cursor:pointer;font-family:var(--font);text-align:left;border-bottom:1px solid color-mix(in srgb,var(--border) 50%,transparent)}
.staff-detail__link:hover{color:var(--text)}
.staff-detail__link-arrow{font-size:.78rem;color:var(--text-tertiary)}

/* ── Expand Sections (inline sub-pages) ── */
.staff-detail__expand{padding:12px 0}
.staff-detail__expand-back{border:none;background:none;color:var(--green);font-size:.84rem;font-weight:600;cursor:pointer;font-family:var(--font);padding:0;margin-bottom:12px}
.staff-detail__expand-back:hover{text-decoration:underline}

/* ── Bottom Sheet Override for Staff Detail ── */
.bottom-sheet__panel--clean .staff-detail{min-height:auto}
.bottom-sheet__panel--clean .staff-detail__content{overflow:visible;padding-bottom:8px}

/* ── Responsive ── */
@media (max-width: 640px){
  .staff-card{padding:12px 12px;gap:10px}
  .staff-card__action{padding:9px 14px;font-size:.78rem}
  .staff-detail__content{padding:16px 14px}
  .staff-detail__loc{font-size:1rem}
  .staff-detail__primary{padding:14px 0;font-size:.94rem}
}
@media (max-width: 420px){
  .staff-tabs__count{font-size:1.1rem}
  .staff-card__action{padding:8px 12px;font-size:.75rem}
  .staff-detail__loc{font-size:.94rem}
}

/* ══════════════════════════════════════════════════
   Admin UI Redesign — Filter Dropdown & Triage Detail
   ══════════════════════════════════════════════════ */

/* ── Filter Dropdown (배정점검 그룹) ── */
.admin-filter-dropdown{position:relative;display:inline-flex;flex-shrink:0}
.filter-pill--dropdown{display:inline-flex;align-items:center;gap:4px}
.filter-pill__caret{font-size:.6rem;opacity:.6;transition:transform .2s}
.filter-pill.active .filter-pill__caret{opacity:1}
.admin-filter-dropdown__menu{display:none;position:absolute;top:100%;left:0;margin-top:6px;background:var(--surface);border:1.5px solid var(--border);border-radius:12px;padding:4px;z-index:var(--z-dropdown);box-shadow:0 6px 20px rgba(0,0,0,.12);min-width:160px;flex-direction:column;gap:4px}
.admin-filter-dropdown__menu.visible{display:flex}
.admin-filter-dropdown__item{display:flex;justify-content:space-between;align-items:center;padding:8px 12px;border-radius:8px;border:none;background:none;font-size:.78rem;font-weight:500;color:var(--text-secondary);cursor:pointer;font-family:var(--font);text-align:left;transition:all .1s;white-space:nowrap}
.admin-filter-dropdown__item:hover{background:var(--surface-alt)}
.admin-filter-dropdown__item.active{background:var(--green-light);color:var(--green-dark);font-weight:700}
.admin-filter-dropdown__item span{font-size:.72rem;color:var(--text-tertiary);min-width:20px;text-align:right}
.admin-filter-dropdown__item.active span{color:var(--green-dark)}

/* ── Triage Detail (Flat Layout) ── */
.triage-detail{display:flex;flex-direction:column;min-height:100%}
.triage-detail--inline{min-height:auto}
.triage-detail__header{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;padding:0 0 12px;border-bottom:1px solid var(--border);margin-bottom:12px}
.triage-detail__badges{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:14px}
.triage-detail__content{flex:1;overflow:auto}

.triage-detail__section{margin-bottom:16px}
.triage-detail__loc-label{font-size:.72rem;color:var(--text-secondary);font-weight:600;margin-bottom:4px;letter-spacing:.02em}
.triage-detail__loc{font-size:1.05rem;font-weight:800;color:var(--text);margin-bottom:10px;line-height:1.3}
.triage-detail__desc{font-size:.88rem;color:var(--text-secondary);line-height:1.65;white-space:pre-wrap;word-break:keep-all}

.triage-detail__reasoning{margin-bottom:14px;padding:8px 12px;background:transparent;border:none;border-radius:0}
.triage-detail__reasoning--alert{background:transparent;border-left:3px solid #F59E0B;padding-left:12px;margin-bottom:14px;border-radius:0}

/* ── Assignment Area (always visible) ── */
.triage-detail__assign{padding:14px;background:color-mix(in srgb,var(--green-light) 50%,var(--surface));border:1.5px solid color-mix(in srgb,var(--green) 20%,var(--border));border-radius:14px;margin-bottom:14px}
.triage-detail__assign-title{font-size:.84rem;font-weight:800;color:var(--text);margin-bottom:8px}
.triage-detail__assign-current{font-size:.84rem;color:var(--text-secondary);margin-bottom:8px;line-height:1.5}
.triage-detail__assign .detail-form-grid{margin-bottom:0}

/* ── Toggle/Collapsible (same pattern as staff) ── */
.triage-detail__toggle{width:100%;display:flex;justify-content:space-between;align-items:center;padding:11px 0;border:none;border-top:1px solid color-mix(in srgb,var(--border) 50%,transparent);background:none;font-size:.86rem;color:var(--text-secondary);cursor:pointer;font-family:var(--font);text-align:left}
.triage-detail__toggle:first-of-type{border-top:1px solid var(--border);margin-top:4px}
.triage-detail__toggle:hover{color:var(--text)}
.triage-detail__arrow{font-size:.68rem;transition:transform .2s;color:var(--text-tertiary)}
.triage-detail__collapsible{padding:0 0 8px}

/* ── Responsive ── */
@media (max-width: 640px){
  .triage-detail__loc{font-size:.96rem}
  .triage-detail__assign{padding:12px}
  .admin-filter-dropdown__menu{min-width:148px}
}
@media (max-width: 420px){
  /* 2026-07-26 · 420px 이하에서 오히려 더 축소되던 역방향 반응형 교정 */
  .admin-filter-dropdown__item{padding:0 12px;min-height:44px;font-size:.8rem}
}

/* ══════════════════════════════════════════════════
   Stats Tab Redesign — Flat, Hero-First Layout
   ══════════════════════════════════════════════════ */

.stats-flat{padding:0}
.stats-flat__header{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}
.stats-flat__title{font-size:1.05rem;font-weight:800;color:var(--text)}
.stats-flat__toolbar{display:flex;gap:6px;align-items:center}
.stats-flat__range{padding:7px 12px;border-radius:10px;border:1.5px solid var(--border);font-size:.82rem;font-weight:600;background:var(--surface);color:var(--text);font-family:var(--font)}
.stats-flat__range-label{font-size:.78rem;color:var(--text-tertiary);margin-bottom:14px}

/* ── Hero Cards ── */
.stats-hero{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:18px}
.stats-hero__card{padding:16px 14px;border-radius:14px;background:var(--surface);border:1.5px solid var(--border);position:relative;overflow:hidden}
.stats-hero__bar{position:absolute;top:0;left:0;width:4px;height:100%;background:var(--hero-color,var(--green));border-radius:4px 0 0 4px}
.stats-hero__num{font-size:1.5rem;font-weight:800;color:var(--hero-color,var(--green));line-height:1.1}
.stats-hero__label{font-size:.78rem;color:var(--text-secondary);margin-top:4px;font-weight:600}

/* ── Section Label ── */
.stats-section-label{font-size:.74rem;font-weight:700;color:var(--text-tertiary);margin-bottom:8px;letter-spacing:.02em;text-transform:uppercase}

/* ── Performance Cards ── */
.stats-perf{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-bottom:18px}
.stats-perf__card{text-align:center;padding:12px 8px;border-radius:12px;background:var(--surface-alt);border:1px solid var(--border)}
.stats-perf__num{font-size:.92rem;font-weight:800}
.stats-perf__label{font-size:.68rem;color:var(--text-tertiary);margin-top:3px}

/* ── Building List ── */
.stats-building-list{margin-bottom:18px}
.stats-building-item{display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:1px solid color-mix(in srgb,var(--border) 50%,transparent)}
.stats-building-item:last-child{border-bottom:none}
.stats-building__name{flex:1;font-size:.84rem;font-weight:600;color:var(--text)}
.stats-building__count{font-size:.78rem;color:var(--text-secondary)}
.stats-building__badge{padding:3px 9px;border-radius:99px;font-size:.7rem;font-weight:700}
.stats-building__badge--open{background:#FEF2F2;color:#DC2626}
.stats-building__badge--done{background:#ECFDF5;color:#059669}

/* ── Backlog Chips ── */
.stats-backlog{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:8px}
.stats-backlog__chip{padding:8px 14px;border-radius:10px;background:var(--surface-alt);border:1px solid var(--border);display:flex;gap:6px;align-items:center;font-size:.82rem}
.stats-backlog__chip strong{font-size:.92rem}
.stats-backlog__chip span{color:var(--text-secondary);font-size:.78rem}

/* ── Toggle (same pattern) ── */
.stats-flat__toggle{width:100%;display:flex;justify-content:space-between;align-items:center;padding:12px 0;border:none;border-top:1px solid var(--border);background:none;font-size:.86rem;color:var(--text-tertiary);cursor:pointer;font-family:var(--font);text-align:left;margin-top:8px}
.stats-flat__toggle:hover{color:var(--text-secondary)}
.stats-flat__arrow{font-size:.68rem;transition:transform .2s;color:var(--text-tertiary)}
.stats-flat__collapsible{padding:4px 0 8px}

/* ── Monthly Mini Grid ── */
.stats-monthly-grid{display:flex;gap:4px;margin-bottom:14px}
.stats-monthly-cell{flex:1;text-align:center;padding:8px 2px;border-radius:8px;background:var(--surface-alt);border:1px solid var(--border);min-width:0}
.stats-monthly-cell__received{font-size:.78rem;font-weight:700;color:#1D4ED8}
.stats-monthly-cell__resolved{font-size:.72rem;font-weight:600;color:#10B981}
.stats-monthly-cell__label{font-size:.6rem;color:var(--text-tertiary);margin-top:2px}

/* ── Table (compact) ── */
.stats-table{width:100%;border-collapse:collapse;font-size:.78rem}
.stats-table th{text-align:left;padding:8px 6px;border-bottom:1px solid var(--border);color:var(--text-tertiary);font-weight:600;font-size:.72rem}
.stats-table th:not(:first-child){text-align:right}
.stats-table td{padding:8px 6px;border-bottom:1px solid color-mix(in srgb,var(--border) 50%,transparent)}
.stats-table td:not(:first-child){text-align:right}
.stats-table tbody tr:hover{background:var(--surface-alt)}

/* ── Responsive ── */
@media (max-width: 520px){
  .stats-hero{gap:6px}
  .stats-hero__card{padding:14px 12px}
  .stats-hero__num{font-size:1.3rem}
  .stats-perf{grid-template-columns:1fr 1fr 1fr;gap:4px}
  .stats-perf__card{padding:10px 4px}
  .stats-perf__num{font-size:.82rem}
  .stats-monthly-grid{overflow-x:auto}
  .stats-monthly-cell{min-width:48px;flex:0 0 auto}
}
@media (max-width: 420px){
  .stats-hero__num{font-size:1.15rem}
  .stats-backlog__chip{padding:6px 10px}
}

/* ══════════════════════════════════════════════════
   Suggest Tab Redesign — Clean Form & Flat Cards
   ══════════════════════════════════════════════════ */

.suggest-flat{padding:0}

/* ── Form ── */
.suggest-flat__form-title{font-size:.92rem;font-weight:700;color:var(--text);margin-bottom:10px}
.suggest-flat__form{margin-bottom:24px}
.suggest-flat__type{padding:9px 12px;border-radius:10px;border:1.5px solid var(--border);font-size:.84rem;font-weight:600;background:var(--surface);color:var(--text);font-family:var(--font);margin-bottom:8px}
.suggest-flat__textarea{width:100%;padding:12px 14px;border-radius:12px;border:1.5px solid var(--border);font-size:.86rem;font-family:var(--font);color:var(--text);background:var(--surface-alt);resize:vertical;line-height:1.6;transition:border-color .2s}
.suggest-flat__textarea:focus{outline:none;border-color:var(--green);background:var(--surface)}
.suggest-flat__form-footer{display:flex;justify-content:space-between;align-items:center;margin-top:8px}
.suggest-flat__hint{font-size:.78rem;color:var(--text-tertiary)}

/* ── History Header ── */
.suggest-flat__history-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}
.suggest-flat__history-title{font-size:.92rem;font-weight:700;color:var(--text)}
.suggest-flat__history-count{color:var(--text-tertiary);font-weight:500;margin-left:4px}

/* ── Cards (shared between submit & inbox) ── */
.suggest-card-list{display:flex;flex-direction:column;gap:6px}
.suggest-card{padding:13px 14px;border:1.5px solid var(--border);border-radius:12px;background:var(--surface);transition:border-color .12s}
.suggest-card:hover{border-color:color-mix(in srgb,var(--green) 30%,var(--border))}
.suggest-card__head{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px;gap:8px}
.suggest-card__type-row{display:flex;gap:6px;align-items:center}
.suggest-card__type{font-size:.84rem;font-weight:700;color:var(--text)}
.suggest-card__date{font-size:.72rem;color:var(--text-tertiary);flex-shrink:0}
.suggest-card__text{font-size:.86rem;color:var(--text-secondary);line-height:1.55;white-space:pre-wrap;word-break:keep-all}
.suggest-card__author{font-size:.74rem;color:var(--text-tertiary);margin-top:6px}
.suggest-card__comment{margin-top:8px;padding:7px 10px;border-radius:8px;background:var(--surface-alt);font-size:.82rem;color:var(--text-secondary);line-height:1.5}

/* ── Inbox Card Actions ── */
.suggest-inbox-card__actions{display:flex;gap:6px;align-items:center;margin-top:10px;flex-wrap:wrap}
.suggest-inbox-card__status{padding:7px 10px;border-radius:8px;border:1.5px solid var(--border);font-size:.82rem;background:var(--surface);color:var(--text);font-family:var(--font)}
.suggest-inbox-card__memo{width:100%;margin-top:8px;padding:8px 10px;border-radius:10px;border:1.5px solid var(--border);font-size:.82rem;font-family:var(--font);color:var(--text);background:var(--surface-alt);resize:vertical}
.suggest-inbox-card__memo:focus{outline:none;border-color:var(--green);background:var(--surface)}

/* ── Responsive ── */
@media (max-width: 520px){
  .suggest-card{padding:11px 12px}
  .suggest-flat__textarea{font-size:.82rem}
}

/* ══════════════════════════════════════════════════
   Master Tabs (Attendance/Approvals/Settings) — Unified Header
   ══════════════════════════════════════════════════ */

.master-flat{padding:0}
.master-flat__header{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}
.master-flat__title{font-size:1.05rem;font-weight:800;color:var(--text);display:inline-flex;align-items:center;gap:8px}
.master-flat__scope-chip{display:inline-flex;align-items:center;padding:2px 8px;border-radius:999px;background:#E0E7FF;color:#1D4ED8;font-size:.7rem;font-weight:700;border:1px solid #C7D2FE}


.admin-inhouse-row__metric{display:flex;flex-direction:column;gap:4px;min-width:72px}
.admin-inhouse-row__caption{font-size:.72rem;color:#64748B;font-weight:700;line-height:1}
.admin-inhouse-row__metric input{min-width:0}

/* ══════════════════════════════════════════════════
   Phase2 Patch — 디자인 통일 + 미정의 클래스 보완
   ══════════════════════════════════════════════════ */

/* ── 공통 메모 textarea ── */
.memo-textarea{width:100%;padding:12px;border:1.5px solid var(--border);border-radius:12px;background:var(--surface-alt);color:var(--text);resize:vertical;font-size:.86rem;font-family:var(--font);line-height:1.5;transition:border-color .2s,box-shadow .2s}
.memo-textarea:focus{outline:none;border-color:var(--green);box-shadow:0 0 0 3px rgba(0,132,61,.08);background:var(--surface)}
.memo-textarea:disabled{opacity:.5;cursor:not-allowed}

/* ── btn--ghost (강제삭제, 반려, 회수 버튼) ── */
.btn--ghost{background:transparent;border:1.5px solid transparent;color:var(--text-secondary)}
.btn--ghost:hover:not(:disabled){background:var(--surface-alt);border-color:var(--border)}

/* ── photo-thumb--placeholder (첨부사진 로딩 상태) ── */
.photo-thumb--placeholder{background:var(--surface-alt);display:grid;place-items:center;border:1.5px dashed var(--border)}
.photo-thumb--placeholder img{display:none}

/* ── campus-gate--leaving (캠퍼스 전환 나가기 애니메이션) ── */
.campus-gate--leaving{animation:campusLeave .32s ease-in forwards}
@keyframes campusLeave{to{opacity:0;transform:translateY(-12px) scale(.97)}}

/* ── ticket-item--preview (Shadow 미리보기 잠금 스타일) ── */
.ticket-item--preview{opacity:.82;cursor:progress;pointer-events:none}
.ticket-item--preview .ticket-item__open-btn{pointer-events:auto}

/* ── admin-board-detail--empty (빈 상세 패널 스타일) ── */
.admin-board-detail--empty{border:2px dashed var(--border);background:var(--surface-alt)}

/* ── staff-sector-summary (섹터 현황 가로 스크롤) ── */
.staff-sector-summary{display:flex;gap:8px;overflow-x:auto;padding:4px 0 10px;-webkit-overflow-scrolling:touch}

/* ── bottom-sheet wide 보정 ── */
.app-shell--wide .bottom-sheet__panel{max-width:720px}

/* ══════════════════════════════════════════════════════
   ticket-item--v2  접수·조정 목록 행 시인성 개선
   ══════════════════════════════════════════════════════ */
.ticket-item--v2{display:flex;align-items:stretch;gap:0;padding:0;border-radius:14px;overflow:hidden;cursor:pointer;transition:all .12s;background:var(--surface);border:1px solid var(--border);margin-bottom:6px}
.ticket-item--v2:hover{border-color:var(--green);background:var(--green-light);box-shadow:var(--shadow-md);transform:translateY(-1px)}
.ticket-item--v2.is-selected{border-color:var(--green);background:color-mix(in srgb,var(--green-light) 60%,var(--surface))}
.ticket-item--v2 .ticket-item__body{flex:1;min-width:0;padding:11px 14px}
.ticket-item--v2 .ticket-item__select{display:flex;align-items:center;padding:0 0 0 12px}

/* SLA 좌측 경고 바 */
.ti-row--overdue{border-left:4px solid #DC2626}
.ti-row--unassigned{border-left:4px solid #F59E0B}

/* 1순위: 긴급도 + 제목 + 상태 (한 줄) */
.ti-primary{display:flex;justify-content:space-between;align-items:center;gap:8px}
.ti-primary__l{display:flex;align-items:center;gap:7px;min-width:0;flex:1}
.ti-primary__r{display:flex;gap:5px;flex-shrink:0}
.ti-title{font-size:.83rem;font-weight:700;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.35}
.ti-urg{font-size:.63rem;padding:2px 7px;border-radius:4px;font-weight:700;flex-shrink:0;white-space:nowrap;letter-spacing:.01em}
.ti-st{font-size:.63rem;padding:2px 7px;border-radius:4px;flex-shrink:0;white-space:nowrap}

/* 2순위: 행동 힌트 칩 */
.ti-hint{font-size:.63rem;padding:3px 9px;border-radius:6px;font-weight:600;color:#fff;white-space:nowrap;line-height:1.2}
.ti-hint--danger{background:#DC2626}
.ti-hint--warn{background:#EA580C}
.ti-hint--info{background:#2563EB}

/* 3순위: 메타라인 */
.ti-meta{font-size:.7rem;color:var(--text-tertiary);margin-top:5px;line-height:1.45;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* 반응형: 모바일에서 힌트 칩 축소 */
@media(max-width:640px){
  .ti-primary{flex-wrap:wrap}
  .ti-primary__r{width:100%;margin-top:4px}
  .ti-hint{font-size:.6rem;padding:2px 7px}
  .ti-urg,.ti-st{font-size:.6rem;padding:1px 5px}
  .ti-title{font-size:.8rem}
  .ticket-item--v2 .ticket-item__body{padding:10px 12px}
}

/* ══════════════════════════════════════════════════════
   상세 패널 간소화 + SLA 경고 시각화
   ══════════════════════════════════════════════════════ */
/* SLA 경고 바 (상세 패널 상단) */
.triage-detail__sla-alert{font-size:.74rem;font-weight:600;color:#B91C1C;background:#FEF2F2;border:1px solid #FECACA;border-radius:8px;padding:6px 12px;margin-bottom:12px;line-height:1.4}

/* 검토 경고 reasoning - 좌측 바 강조 */
.triage-detail__reasoning--alert .detail-note{color:#92400E;font-weight:600}
.triage-detail__reasoning--alert .detail-history__item{border-left:none;margin-left:0}

/* 접이식 내부 reasoning (비경고) - 컴팩트 */
.triage-detail__collapsible .triage-detail__reasoning{padding:6px 0;margin-bottom:8px}
.triage-detail__collapsible .triage-detail__reasoning .detail-note{font-size:.76rem;color:var(--text-tertiary)}

/* ── 보드뷰 상세 패널 내 triage-detail 패딩/줄바꿈 보정 ── */
.admin-board-detail .triage-detail{padding:20px 20px 16px}
.admin-board-detail .triage-detail__header{gap:8px}
.admin-board-detail .triage-detail__header .detail-title{font-size:1.05rem;word-break:keep-all;overflow-wrap:anywhere}
.admin-board-detail .triage-detail__header .detail-sub{font-size:.82rem;word-break:keep-all;overflow-wrap:anywhere;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden}
.admin-board-detail .triage-detail__loc{font-size:.95rem;word-break:keep-all;overflow-wrap:anywhere}
.admin-board-detail .triage-detail__desc{font-size:.82rem;overflow-wrap:anywhere}
.admin-board-detail .triage-detail__badges{flex-wrap:wrap;gap:5px}
.admin-board-detail .triage-detail__badges .detail-badge{font-size:.68rem;padding:2px 7px}
.admin-board-detail .triage-detail__sla-alert{font-size:.72rem;padding:5px 10px}
.admin-board-detail .triage-detail__assign{padding:12px}
.admin-board-detail .triage-detail__assign-title{font-size:.8rem}
.admin-board-detail .triage-detail__toggle{font-size:.8rem;padding:9px 0}
.admin-board-detail .detail-form-grid select,.admin-board-detail .detail-form-grid input{font-size:.78rem}
.admin-board-detail .triage-detail__reasoning--alert{margin-bottom:10px}
.admin-board-detail .triage-detail__reasoning--alert .detail-note{font-size:.76rem}
@media(max-width:1024px){
  .admin-board-detail .triage-detail{padding:14px 14px 10px}
  .admin-board-detail .triage-detail__loc{font-size:.88rem}
}

/* ══════════════════════════════════════════════════════
   행정보조(monitor) 전용 스타일
   ══════════════════════════════════════════════════════ */
.monitor-alert{font-size:.78rem;font-weight:600;padding:8px 12px;border-radius:10px;margin-bottom:10px;line-height:1.4}
.monitor-alert--urgent{color:#991B1B;background:#FEE2E2;border:1px solid #FECACA}
.monitor-alert--sla{color:#B91C1C;background:#FEF2F2;border:1px solid #FECACA}
.filter-pill--danger{background:#FEE2E2 !important;color:#991B1B !important;border-color:#FECACA !important}
.filter-pill--danger.active{background:#DC2626 !important;color:#fff !important;border-color:#DC2626 !important}


/* ── v5 patch: badge design tokens (dark-mode safe) ── */
.badge--sector{background:#EEF2FF;color:#3730A3}
.badge--sector-review{background:#FFF7ED;color:#9A3412}
.badge--reroute-ops{background:#FCE7F3;color:#9D174D}
.badge--reroute-warn{background:#FEF3C7;color:#92400E}
.badge--my-sector{background:#E0E7FF;color:#3730A3}
.badge--ops-triage{background:#F3E8FF;color:#7E22CE}
.badge--sector-new{background:#ECFDF5;color:#047857}
.badge--sector-unread{background:#EFF6FF;color:#1D4ED8}
.badge--sector-overdue{background:#FEF2F2;color:#B91C1C}
.badge--priority-critical{background:#FEF2F2;color:#DC2626;font-weight:700;min-width:62px;text-align:center}
.badge--priority-high{background:#FFFBEB;color:#D97706;font-weight:700;min-width:62px;text-align:center}
.badge--priority-medium{background:#EFF6FF;color:#3B82F6;font-weight:700;min-width:62px;text-align:center}
.badge--priority-low{background:#F3F4F6;color:#6B7280;font-weight:700;min-width:62px;text-align:center}
.badge--warning-note{margin-bottom:8px;color:#92400E;border:1px solid #FDE68A;background:#FFFBEB;padding:10px 12px;border-radius:12px}
.badge--overdue-text{color:#B91C1C}
.badge--status-dot{display:inline-block;width:8px;height:8px;border-radius:50%}

:root[data-theme="dark"] .badge--sector{background:#1E1B4B;color:#A5B4FC}
:root[data-theme="dark"] .badge--sector-review{background:#451A03;color:#FDBA74}
:root[data-theme="dark"] .badge--reroute-ops{background:#500724;color:#F9A8D4}
:root[data-theme="dark"] .badge--reroute-warn{background:#451A03;color:#FDE68A}
:root[data-theme="dark"] .badge--my-sector{background:#1E1B4B;color:#C7D2FE}
:root[data-theme="dark"] .badge--ops-triage{background:#3B0764;color:#D8B4FE}
:root[data-theme="dark"] .badge--sector-new{background:#022C22;color:#6EE7B7}
:root[data-theme="dark"] .badge--sector-unread{background:#172554;color:#93C5FD}
:root[data-theme="dark"] .badge--sector-overdue{background:#450A0A;color:#FCA5A5}
:root[data-theme="dark"] .badge--priority-critical{background:#450A0A;color:#FCA5A5}
:root[data-theme="dark"] .badge--priority-high{background:#451A03;color:#FDE68A}
:root[data-theme="dark"] .badge--priority-medium{background:#172554;color:#93C5FD}
:root[data-theme="dark"] .badge--priority-low{background:#1C1917;color:#A8A29E}
:root[data-theme="dark"] .badge--warning-note{color:#FDE68A;border-color:#854D0E;background:#451A03}
:root[data-theme="dark"] .badge--overdue-text{color:#FCA5A5}
:root[data-theme="dark"] .monitor-alert--urgent{color:#FCA5A5;background:#450A0A;border-color:#7F1D1D}
:root[data-theme="dark"] .monitor-alert--sla{color:#FCA5A5;background:#450A0A;border-color:#7F1D1D}
:root[data-theme="dark"] .detail-head{background:linear-gradient(180deg,var(--surface) 0%,var(--surface) 85%,rgba(22,27,34,.9) 100%);border-bottom-color:var(--border)}


/* ── v5 patch: keyboard accessibility ── */
[data-nav]:focus-visible,[data-atab]:focus-visible,[data-quick-filter]:focus-visible,
.filter-pill:focus-visible,.campus-choice:focus-visible,.alert-chip:focus-visible,
.ticket-item:focus-visible,.admin-board-row:focus-visible,
button:focus-visible,select:focus-visible,input:focus-visible,textarea:focus-visible,a:focus-visible{
  outline:2px solid var(--green);outline-offset:2px;border-radius:4px}
.filter-pill,.alert-chip,.campus-choice{cursor:pointer}


/* ── v5 patch phase 2: additional badge & stat dark-mode classes ── */
.badge--my-assigned{background:#DBEAFE;color:#1D4ED8}
.badge--my-review{background:#E0F2FE;color:#075985}
.badge--my-overdue{background:#FEE2E2;color:#B91C1C}
.badge--manual-routing{background:#EEF2FF;color:#4338CA}
.badge--external-referral{background:#FEF2F2;color:#991B1B}
.badge--review-needed{background:#FFFBEB;color:#B45309}
.badge--unassigned{background:#F3F4F6;color:#374151}
.badge--recent-correction{background:#F5F3FF;color:#6D28D9}
.badge--scope-review{background:#F5F3FF;color:#5B21B6}
.badge--domain-general{background:#ecfeff;color:#155e75}
.badge--domain-facility{background:#fff7ed;color:#9a3412}
.stat-num--dark{color:#0F172A}
.stat-num--indigo{color:#4338CA}
.stat-num--red{color:#B91C1C}
.stat-num--danger{color:#DC2626;font-weight:700}
.staff-sector-pill--card{min-width:132px;border:1px solid #D1D5DB;border-radius:14px;padding:10px 12px;background:#fff}
.staff-sector-pill__label{font-size:.75rem;color:#64748B;margin-bottom:4px}
.repair-info-box{margin:10px 0 0;background:#EFF6FF;color:#1D4ED8;border:1px solid #BFDBFE;padding:10px 12px;border-radius:12px}

:root[data-theme="dark"] .badge--my-assigned{background:#172554;color:#93C5FD}
:root[data-theme="dark"] .badge--my-review{background:#0C4A6E;color:#7DD3FC}
:root[data-theme="dark"] .badge--my-overdue{background:#450A0A;color:#FCA5A5}
:root[data-theme="dark"] .badge--manual-routing{background:#1E1B4B;color:#A5B4FC}
:root[data-theme="dark"] .badge--external-referral{background:#450A0A;color:#FCA5A5}
:root[data-theme="dark"] .badge--review-needed{background:#451A03;color:#FDE68A}
:root[data-theme="dark"] .badge--unassigned{background:#1C1917;color:#A8A29E}
:root[data-theme="dark"] .badge--recent-correction{background:#2E1065;color:#C4B5FD}
:root[data-theme="dark"] .badge--scope-review{background:#2E1065;color:#C4B5FD}
:root[data-theme="dark"] .badge--domain-general{background:#083344;color:#67E8F9}
:root[data-theme="dark"] .badge--domain-facility{background:#431407;color:#FDBA74}
:root[data-theme="dark"] .stat-num--dark{color:#E2E8F0}
:root[data-theme="dark"] .stat-num--indigo{color:#A5B4FC}
:root[data-theme="dark"] .stat-num--red{color:#FCA5A5}
:root[data-theme="dark"] .stat-num--danger{color:#FCA5A5}
:root[data-theme="dark"] .staff-sector-pill--card{border-color:var(--border);background:var(--surface)}
:root[data-theme="dark"] .staff-sector-pill__label{color:var(--text-secondary)}
:root[data-theme="dark"] .repair-info-box{background:#172554;color:#93C5FD;border-color:#1E40AF}


/* ── v5 patch phase 3: remaining dark-mode fixes ── */
.ticket-item__reason--overdue{color:#B91C1C}
.chip--primary-active{background:#ECFDF5}
:root[data-theme="dark"] .ticket-item__reason--overdue{color:#FCA5A5}
:root[data-theme="dark"] .chip--primary-active{background:#022C22}


/* ── v5 patch: W-12 touch target minimum 44px ── */
@media (pointer:coarse){
  .filter-pill{min-height:44px;padding:0 14px}
  .alert-chip{min-height:44px;padding:8px 12px}
  .admin-tab{min-height:44px}
  .campus-choice{min-height:44px;min-width:44px}
  .suggest-chip{min-height:44px;padding:0 14px}
  .mode-pill,.auth-pill,.role-pill{min-height:44px}
  .ticket-item__select{min-width:44px;min-height:44px;display:flex;align-items:center;justify-content:center}
  .btn--sm{min-height:44px}
  .detail-badge{min-height:32px;display:inline-flex;align-items:center}
  /* 2026-04-23 · iOS Safari 자동 zoom 방지 — 터치 디바이스에서 입력 필드 최소 16px 강제.
   *   iOS 는 focus 시 font-size<16px 인 input/textarea 를 감지하면 자동으로 확대.
   *   공개 접수 페이지 첫 입력창 확대되는 문제 방지 (데스크탑 .88rem 유지, 터치만 16px).
   * 2026-07-26 · FMS-25 · 고정 16px → max(16px, 대응 rem).
   *   고정값이면 루트 확대 시 역전이 생긴다: 루트 20px 에서 데스크톱은 17.5px 인데 폰만 16px 로 '축소'.
   *   max() 는 iOS 줌 방지 하한 16px 을 그대로 유지하면서 루트 확대만 통과시킨다.
   *   기본 환경(루트 16px)에서는 대응 rem 이 모두 ≤1rem 이라 max 결과가 정확히 16px — 픽셀 동일.
   *   대응 rem = 각 컨트롤의 본문 규칙 값(.compose__input @70 = .88rem, textarea @695 = .98rem,
   *   그 외 input/select 는 본문 규칙이 없어(font:inherit @22) 1rem). */
  .compose__input{font-size:max(16px,.88rem)}
  textarea{font-size:max(16px,.98rem)}
  input[type="text"],
  input[type="email"],
  input[type="tel"],
  input[type="number"],
  input[type="search"],
  input[type="date"],
  select{
    font-size:max(16px,1rem);
  }
}
/* 2026-04-23 · 노치 safe-area 대응 — v111 에서 app-shell/header 에 padding-top 직접 추가했다가
 *   데스크탑에서 상단 탭과 하위 카드가 겹치는 레이아웃 깨짐(v113 사용자 리포트) 발생.
 *   모바일 터치 디바이스에서만 body 상단 padding 을 주는 방식으로 변경 — sticky header 레이아웃 미영향. */
@media (pointer:coarse){
  body{padding-top:env(safe-area-inset-top,0px)}
}


/* ── v5 patch phase 4: text color + info-box classes ── */
.text--indigo{color:#4338CA}.text--red{color:#B91C1C}.text--slate{color:#475569}
.text--danger{color:#DC2626}.text--purple{color:#6D28D9}.text--violet{color:#5B21B6}
.text--indigo-dark{color:#3730A3}.text--slate-dark{color:#334155}
.text--blue{color:#2563EB}.text--base{color:#0F172A}
.info-box--danger{background:#FEF2F2;color:#991B1B;border:1px solid #FCA5A5;padding:10px 12px;border-radius:12px}
.info-box--success{background:#ECFDF5;color:#166534;border:1px solid #A7F3D0;padding:10px 12px;border-radius:12px}
.info-box--neutral{background:#F8FAFC;color:#334155;border:1px solid #CBD5E1;padding:10px 12px;border-radius:12px}

:root[data-theme="dark"] .text--indigo{color:#A5B4FC}
:root[data-theme="dark"] .text--red{color:#FCA5A5}
:root[data-theme="dark"] .text--slate{color:#94A3B8}
:root[data-theme="dark"] .text--danger{color:#FCA5A5}
:root[data-theme="dark"] .text--purple{color:#C4B5FD}
:root[data-theme="dark"] .text--violet{color:#C4B5FD}
:root[data-theme="dark"] .text--indigo-dark{color:#A5B4FC}
:root[data-theme="dark"] .text--slate-dark{color:#CBD5E1}
:root[data-theme="dark"] .text--blue{color:#93C5FD}
:root[data-theme="dark"] .text--base{color:var(--text)}
:root[data-theme="dark"] .info-box--danger{background:#450A0A;color:#FCA5A5;border-color:#7F1D1D}
:root[data-theme="dark"] .info-box--success{background:#022C22;color:#6EE7B7;border-color:#065F46}
:root[data-theme="dark"] .info-box--neutral{background:var(--surface-alt);color:var(--text-secondary);border-color:var(--border)}

/* ═══ btn-link ═══ */
.btn-link{background:none;border:none;color:var(--text-secondary);font-size:.8rem;font-weight:600;cursor:pointer;padding:6px 4px;text-decoration:none;transition:color .15s}
.btn-link:hover,.btn-link:focus-visible{color:var(--green);text-decoration:underline}

/* ═══ Track page — 처리현황 조회 ═══ */
.track-page{flex:1;display:flex;flex-direction:column;padding:0 16px 24px;gap:20px;animation:msgIn .3s ease-out}
.track-page__header{display:flex;flex-direction:column;align-items:center;gap:8px;padding:32px 0 8px}
.track-page__logo{width:36px;height:36px;border-radius:12px;object-fit:contain}
.track-page__title{font-size:1.1rem;font-weight:800;letter-spacing:-.02em}
.track-page__form{display:flex;flex-direction:column;gap:8px}
.track-page__input-row{display:flex;gap:8px;align-items:stretch}
.track-page__input-row .btn{flex-shrink:0;white-space:nowrap}
.track-page__input{flex:1 1 0;min-width:0;font-size:.92rem;padding:10px 14px;border:1.5px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--text);transition:border-color .15s;font-variant-numeric:tabular-nums}
.track-page__input:focus{outline:none;border-color:var(--green)}
.track-page__input::placeholder{color:var(--text-tertiary)}
.track-page__error{font-size:.82rem;color:var(--danger);padding:6px 0}
.track-page__loading{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:32px 16px;background:var(--surface-alt);border:1px solid var(--border);border-radius:var(--radius-md);margin-top:8px;animation:msgIn .25s ease-out}
.track-page__loading .spinner{margin:0}
.track-page__loading-text{font-size:.85rem;color:var(--text-secondary);font-weight:600}
.track-page__btn-spinner{display:inline-block;width:12px;height:12px;border:2px solid rgba(255,255,255,.4);border-top-color:#fff;border-radius:50%;animation:spin .7s linear infinite;margin-right:6px;vertical-align:-2px}
.track-page__footer{text-align:center;padding:8px 0 16px}

/* Track stepper */
.track-stepper{display:flex;align-items:center;justify-content:center;gap:0;padding:16px 4px}
.track-stepper__step{display:flex;flex-direction:column;align-items:center;gap:5px;flex:0 0 auto;min-width:52px}
.track-stepper__circle{width:40px;height:40px;border-radius:50%;display:grid;place-items:center;font-size:1rem;background:var(--surface-alt);border:2px solid var(--border);color:var(--text-tertiary);transition:all .25s}
.track-stepper__step--active .track-stepper__circle{background:var(--green-light);border-color:var(--green);color:var(--green)}
.track-stepper__step--done .track-stepper__circle{background:var(--green);border-color:var(--green);color:#fff}
.track-stepper__label{font-size:.72rem;font-weight:700;color:var(--text-tertiary);transition:color .25s}
.track-stepper__step--active .track-stepper__label{color:var(--green)}
.track-stepper__step--done .track-stepper__label{color:var(--green)}
.track-stepper__line{flex:1;height:2px;background:var(--border);min-width:16px;max-width:48px;transition:background .25s}
.track-stepper__line--done{background:var(--green)}

/* Track result card */
.track-result{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:20px 16px;display:flex;flex-direction:column;gap:12px;box-shadow:var(--shadow)}
.track-result__badge{display:inline-block;align-self:flex-start;font-size:.75rem;font-weight:700;padding:4px 10px;border-radius:var(--radius-full);color:#fff;background:#6B7280}
.track-result__badge--received{background:#3B82F6}.track-result__badge--assigned{background:#8B5CF6}
.track-result__badge--in_progress{background:#F59E0B;color:#422006}.track-result__badge--on_hold{background:#6B7280}
.track-result__badge--needs_info{background:#0EA5E9}.track-result__badge--construction_pending{background:#7C3AED}
.track-result__badge--reopened{background:#F97316}.track-result__badge--resolved{background:#10B981}
.track-result__badge--rejected{background:#EF4444}.track-result__badge--transferred{background:#EC4899}
.track-result__badge--merged{background:#6366F1}
.track-result__receipt{font-size:1.15rem;font-weight:800;color:var(--green);letter-spacing:.01em}
.track-result__summary{font-size:.9rem;color:var(--text);line-height:1.55}
.track-result__original{margin-top:10px;padding:14px 16px;border-radius:12px;background:var(--surface-alt);border:1px solid var(--border);border-left:4px solid var(--green,#00843D);animation:msgIn .25s ease-out}
.track-result__original-label{font-size:.78rem;font-weight:800;color:var(--green-dark,#00843D);margin-bottom:6px;display:flex;align-items:center;gap:4px}
.track-result__original-body{font-size:.88rem;line-height:1.6;color:var(--text);white-space:pre-wrap;word-break:keep-all}
.track-result__meta{font-size:.8rem;color:var(--text-secondary)}
.track-result__dates{display:flex;flex-direction:column;gap:4px;border-top:1px solid var(--border);padding-top:12px;margin-top:4px}
.track-result__date-row{display:flex;justify-content:space-between;font-size:.8rem;color:var(--text-secondary)}
.track-result__date-label{font-weight:600;color:var(--text-tertiary)}

/* Track timeline */
.track-timeline{border-top:1px solid var(--border);padding-top:14px;margin-top:4px}
.track-timeline__title{font-size:.82rem;font-weight:700;margin-bottom:10px;color:var(--text)}
.track-timeline__item{display:flex;gap:10px;padding-bottom:12px;position:relative}
.track-timeline__item:not(:last-child)::before{content:'';position:absolute;left:5px;top:14px;bottom:0;width:1.5px;background:var(--border)}
.track-timeline__dot{width:11px;height:11px;border-radius:50%;background:var(--green);flex-shrink:0;margin-top:3px;border:2px solid var(--green-light)}
.track-timeline__content{flex:1;min-width:0}
.track-timeline__label{font-size:.82rem;font-weight:600;color:var(--text)}
.track-timeline__time{font-size:.72rem;color:var(--text-tertiary);margin-top:1px}

/* Track dark mode */
:root[data-theme="dark"] .track-result{background:var(--surface);border-color:var(--border);box-shadow:0 2px 8px rgba(0,0,0,.2)}
:root[data-theme="dark"] .track-stepper__circle{background:var(--surface-alt);border-color:var(--border)}
:root[data-theme="dark"] .track-stepper__step--active .track-stepper__circle{background:var(--green-light);border-color:var(--green-dark)}
:root[data-theme="dark"] .track-stepper__step--done .track-stepper__circle{background:var(--green-dark);border-color:var(--green-dark)}
:root[data-theme="dark"] .track-timeline__dot{background:var(--green-dark);border-color:var(--green-light)}

/* ═══ v6.1 ═══ */

/* Resolver group (처리주체 선택) */
.resolver-group{margin:12px 0 4px}
.resolver-group__label{font-size:.82rem;font-weight:700;color:var(--text);margin-bottom:8px;display:flex;align-items:center;gap:6px}
.resolver-group__badge{font-size:.65rem;font-weight:700;background:var(--blue-light,#DBEAFE);color:var(--blue-dark,#1D4ED8);padding:2px 7px;border-radius:4px}
.resolver-group__options{display:flex;gap:8px}
.resolver-opt{flex:1;padding:11px 10px;border:2px solid var(--border);border-radius:var(--radius-sm,10px);background:var(--surface);cursor:pointer;text-align:center;transition:border-color .2s,background .2s,box-shadow .2s;display:flex;flex-direction:column;align-items:center;gap:3px}
.resolver-opt__icon{font-size:22px;line-height:1}
.resolver-opt__text{font-size:.82rem;font-weight:700;color:var(--text)}
.resolver-opt__sub{font-size:.7rem;font-weight:400;color:var(--text-secondary)}
.resolver-opt:hover{border-color:var(--green);background:var(--green-light)}
.resolver-opt--selected{border-color:var(--green);background:var(--green-light);box-shadow:0 0 0 1px var(--green)}
.resolver-opt--selected .resolver-opt__text{color:var(--green-dark)}
:root[data-theme="dark"] .resolver-opt{background:var(--surface-alt);border-color:var(--border)}
:root[data-theme="dark"] .resolver-opt:hover,:root[data-theme="dark"] .resolver-opt--selected{border-color:var(--green-dark);background:rgba(0,132,61,.15)}

/* 접수번호 안내 배너 */
.success__notice{background:#FEF3C7;border:1.5px solid #FDE68A;border-radius:var(--radius-sm,10px);padding:12px 14px;margin:0 0 16px;font-size:.82rem;color:#92400E;line-height:1.6;text-align:left;display:flex;gap:8px;align-items:flex-start}
.success__notice-icon{font-size:18px;flex-shrink:0;margin-top:1px}
.success__notice strong{font-weight:700}
:root[data-theme="dark"] .success__notice{background:rgba(254,243,199,.12);border-color:rgba(253,230,138,.25);color:#FDE68A}

/* 사진 미첨부 경고 모달 */
.photo-warn-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:9999;align-items:center;justify-content:center;padding:20px}
.photo-warn-overlay.show{display:flex}
.photo-warn-box{background:var(--surface);border-radius:var(--radius,14px);padding:24px 20px 20px;max-width:340px;width:100%;box-shadow:0 8px 32px rgba(0,0,0,.15);text-align:center;animation:photoWarnIn .25s ease}
.photo-warn-box__icon{font-size:40px;margin-bottom:10px}
.photo-warn-box__title{font-size:1rem;font-weight:700;margin-bottom:8px;color:var(--text)}
.photo-warn-box__desc{font-size:.82rem;color:var(--text-secondary);line-height:1.6;margin-bottom:18px}
.photo-warn-box__desc strong{font-weight:700;color:var(--text)}
.photo-warn-box__actions{display:flex;gap:8px}
.photo-warn-box__actions .btn{flex:1}
@keyframes photoWarnIn{from{opacity:0;transform:scale(.92)}to{opacity:1;transform:scale(1)}}
:root[data-theme="dark"] .photo-warn-box{background:var(--surface);box-shadow:0 8px 32px rgba(0,0,0,.4)}

/* QA H-2: 필수 동의 블록 (접수 리뷰 카드 내) */
.consent-block{margin-top:14px;padding:12px 14px;border:1px solid var(--border);border-radius:var(--radius-sm,10px);background:var(--surface-alt,#F9FAFB)}
.consent-block__title{font-size:.78rem;font-weight:700;color:var(--text);margin-bottom:8px}
.consent-block__note{font-size:.72rem;color:var(--text-secondary);margin-top:6px;line-height:1.5}
.consent-item{display:flex;align-items:flex-start;gap:8px;font-size:.82rem;color:var(--text);padding:4px 0;cursor:pointer}
.consent-item input[type="checkbox"]{margin-top:3px;flex-shrink:0;width:16px;height:16px;accent-color:var(--primary,#00843D)}
.consent-item a{color:var(--primary,#00843D);text-decoration:underline}
.consent-item a:hover{opacity:.8}

/* QA H-2: 약관/처리방침 독립 페이지 */
.legal-page{max-width:780px;margin:0 auto;padding:28px 20px 48px;color:var(--text);line-height:1.7}
/* ★가로 노치 — 이 두 장(privacy·terms)은 .app-shell 밖의 body 직속이라 앞의 520px 중앙정렬
   보호를 못 받는다. viewport-fit=cover 이므로 좌우를 보정한다. */
@media (orientation:landscape){.legal-page{padding-left:max(20px, env(safe-area-inset-left));padding-right:max(20px, env(safe-area-inset-right))}}
.legal-page__header{border-bottom:1px solid var(--border);padding-bottom:16px;margin-bottom:24px}
.legal-page__header h1{font-size:1.5rem;font-weight:800;margin:8px 0 4px;color:var(--text)}
.legal-page__meta{font-size:.78rem;color:var(--text-secondary);margin:0}
/* ★터치 영역(모바일 점검 2026-07-31) — 22.3px 였다. 법정 고지문에서 접수 화면으로 되돌아가는
   유일한 링크다. 흐름 배치라 커져도 배치가 깨지지 않으므로 그냥 44px 로 둔다. */
.legal-page__back{display:inline-flex;align-items:center;min-height:44px;padding:0 6px;margin:0 0 6px -6px;font-size:.82rem;color:var(--primary,#00843D);text-decoration:none}
.legal-page__back:hover{text-decoration:underline}
.legal-page__body h2{font-size:1.02rem;font-weight:700;margin:22px 0 8px;color:var(--text)}
.legal-page__body p,.legal-page__body li{font-size:.88rem;color:var(--text)}
.legal-page__body ul,.legal-page__body ol{padding-left:22px;margin:6px 0 12px}
.legal-page__body a{color:var(--primary,#00843D)}
.legal-page__body strong{font-weight:700}

/* ════════════════════════════════════════════════════════════
   📬 메일함 (Mailbox) — Phase 1A · processor 전용 뷰
   prefix: .mb-*  (collision-safe; admin-demo.html에서 포팅)
   ════════════════════════════════════════════════════════════ */
.mb{--mb-accent:#0F766E;--mb-accent-soft:#ECFDF5;--mb-warm:#B45309;--mb-warm-soft:#FEF3C7;--mb-surface:var(--surface,#fff);--mb-surface-alt:#F3F4F6;--mb-border-soft:#EEF0F3;--mb-text:var(--text,#111827);--mb-text-2:#4B5563;--mb-text-3:#9CA3AF;display:block;max-width:none;width:100%;margin:0;padding:4px 16px 64px}
.mb-hero{background:var(--mb-surface);border:1px solid var(--mb-border-soft);border-radius:14px;padding:18px 20px;margin:6px 0 14px;box-shadow:0 1px 2px rgba(17,24,39,.04);display:flex;align-items:center;gap:22px;flex-wrap:wrap}
.mb-hero__left{flex:1;min-width:200px}
.mb-hero__greet{font-size:.8125rem;color:var(--mb-text-2)}
.mb-hero__summary{font-size:1.0625rem;font-weight:600;margin-top:2px;color:var(--mb-text)}
.mb-hero__summary em{color:var(--mb-accent);font-style:normal}
.mb-hero__right{display:flex;gap:10px;align-items:center}
.mb-hero__chip{background:var(--mb-surface-alt);border:1px solid var(--mb-border-soft);border-radius:999px;padding:6px 12px;font-size:.75rem;color:var(--mb-text-2)}
.mb-hero__progress{width:140px;height:6px;background:var(--mb-surface-alt);border-radius:999px;overflow:hidden}
.mb-hero__progress>span{display:block;height:100%;background:var(--mb-accent);transition:width .3s ease}

.mb-filters{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:10px}
.mb-seg{display:inline-flex;background:var(--mb-surface);border:1px solid var(--mb-border-soft);border-radius:999px;padding:3px;box-shadow:0 1px 2px rgba(17,24,39,.04)}
.mb-seg button{background:transparent;border:0;padding:7px 14px;font-size:.8125rem;color:var(--mb-text-2);border-radius:999px;cursor:pointer;font-weight:500}
.mb-seg button[aria-selected="true"]{background:var(--mb-accent);color:#fff}
.mb-seg .cnt{margin-left:6px;font-size:.6875rem;opacity:.75}
.mb-chips{display:inline-flex;flex-wrap:wrap;gap:6px}
.mb-chip{background:var(--mb-surface);border:1px solid var(--mb-border-soft);border-radius:999px;padding:6px 11px;font-size:.75rem;color:var(--mb-text-2);cursor:pointer;display:inline-flex;align-items:center;gap:5px}
.mb-chip[aria-pressed="true"]{background:#111827;color:#fff;border-color:#111827}
.mb-chip .n{color:var(--mb-text-3);margin-left:2px;font-variant-numeric:tabular-nums}
.mb-chip[aria-pressed="true"] .n{color:#D1D5DB}
.mb-search{flex:1;min-width:200px;position:relative;margin-left:auto}
.mb-search input{width:100%;background:var(--mb-surface);border:1px solid var(--mb-border-soft);border-radius:10px;padding:9px 12px 9px 34px;font-size:.8125rem;outline:none;color:var(--mb-text)}
.mb-search input:focus{border-color:var(--mb-accent)}
.mb-search::before{content:"🔍";position:absolute;left:11px;top:50%;transform:translateY(-50%);font-size:.8125rem;opacity:.6}

.mb-list{background:var(--mb-surface);border:1px solid var(--mb-border-soft);border-radius:14px;overflow:hidden;box-shadow:0 1px 2px rgba(17,24,39,.04)}
.mb-list__head{display:flex;align-items:center;gap:10px;padding:10px 16px;border-bottom:1px solid var(--mb-border-soft);color:var(--mb-text-3);font-size:.75rem;background:#FBFCFD}
.mb-list__head .spacer{flex:1}
.mb-row{display:flex;align-items:flex-start;gap:14px;padding:14px 16px;border-bottom:1px solid var(--mb-border-soft);cursor:pointer;position:relative;transition:background .12s ease}
.mb-row:last-child{border-bottom:0}
.mb-row:hover{background:#FAFBFC}
.mb-row.is-unread{background:linear-gradient(90deg,rgba(15,118,110,.04),transparent 30%)}
.mb-row.is-unread::before{content:"";position:absolute;left:6px;top:22px;width:6px;height:6px;border-radius:50%;background:var(--mb-accent)}
.mb-row__body{flex:1;min-width:0}
.mb-row__title{font-size:.9375rem;font-weight:600;line-height:1.45;color:var(--mb-text);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.mb-row__meta{display:flex;align-items:center;gap:8px;margin-top:6px;font-size:.75rem;color:var(--mb-text-2);flex-wrap:wrap}
.mb-row__meta .sep{color:var(--mb-text-3)}
.mb-row__meta .sector{color:var(--mb-accent);font-weight:600}
.mb-badge{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:999px;font-size:.6875rem;font-weight:500;background:var(--mb-surface-alt);color:var(--mb-text-2);border:1px solid var(--mb-border-soft)}
.mb-badge--warm{background:var(--mb-warm-soft);color:var(--mb-warm);border-color:transparent}
.mb-badge--photo{background:#EEF2FF;color:#4338CA;border-color:transparent}
.mb-badge--review{background:#FEF2F2;color:#B91C1C;border-color:transparent}
.mb-row__right{display:flex;align-items:center;gap:10px;flex-shrink:0;padding-top:2px}
.mb-row__time{font-size:.75rem;color:var(--mb-text-3);white-space:nowrap;min-width:48px;text-align:right}

.mb-empty{padding:40px 20px;text-align:center;color:var(--mb-text-3);font-size:.8125rem}

@media (max-width:720px){
  .mb-hero{padding:14px 16px;gap:12px;flex-direction:column;align-items:flex-start}
  .mb-hero__summary{font-size:1rem}
  .mb-hero__right{width:100%;justify-content:space-between}
  .mb-hero__progress{flex:1;max-width:none;margin-left:10px}
  .mb-filters{gap:8px;flex-direction:column;align-items:stretch;min-width:0}
  /* 2026-05-28 · 모바일 가로 스크롤 깨짐 fix — proc-* 와 동일 패턴. */
  .mb-seg{align-self:stretch;overflow-x:auto;max-width:100%;min-width:0;width:100%;box-sizing:border-box;-webkit-overflow-scrolling:touch;scrollbar-width:none}
  .mb-seg::-webkit-scrollbar{display:none}
  .mb-seg button{flex-shrink:0;white-space:nowrap}
  .mb-chips{flex-wrap:nowrap;overflow-x:auto;padding-bottom:2px;-webkit-overflow-scrolling:touch;scrollbar-width:none;max-width:100%;min-width:0;width:100%;box-sizing:border-box}
  .mb-chips::-webkit-scrollbar{display:none}
  .mb-chip{white-space:nowrap;flex-shrink:0}
  .mb-search{margin-left:0;width:100%}
  .mb-row{padding:12px 14px;gap:10px;flex-direction:column;align-items:stretch}
  .mb-row.is-unread::before{top:16px;left:4px}
  .mb-row__title{font-size:.90625rem;-webkit-line-clamp:3}
  .mb-row__right{justify-content:space-between;padding-top:0;gap:8px;width:100%}
  .mb-row__time{min-width:0;text-align:left;font-size:.71875rem}
}


/* ──────────── Sub-Phase 1B: 처리자 메일함 디테일 시트 (.mbd-*) ──────────── */
.mbd-overlay{position:fixed;inset:0;background:rgba(17,24,39,.45);display:flex;align-items:flex-start;justify-content:center;padding:60px 20px;z-index:60;overflow:auto}
/* 2026-05-15 · 데스크톱 다이얼로그 max-height + 내부 스크롤 (proc-dialog와 동일 패턴). overscroll-behavior로 배경 스크롤 누수도 차단. */
.mbd-dialog{background:#fff;width:100%;max-width:580px;border-radius:16px;padding:22px 22px 24px;box-shadow:0 20px 40px rgba(0,0,0,.18);font-family:-apple-system,BlinkMacSystemFont,"Pretendard","Noto Sans KR",sans-serif;max-height:90vh;overflow-y:auto;overscroll-behavior:contain}
.mbd-head{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.mbd-back{background:none;border:0;color:#0F766E;font-size:.8125rem;cursor:pointer;padding:4px 6px;font-weight:500}
.mbd-id{margin-left:auto;color:#9CA3AF;font-size:.75rem;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
.mbd-loc{font-size:.75rem;color:#4B5563;margin-top:6px}
.mbd-title{font-size:1.0625rem;font-weight:700;margin-top:4px;line-height:1.45;color:#111827}
.mbd-body{font-size:.875rem;color:#111827;margin-top:14px;line-height:1.6;background:#F3F4F6;border-radius:10px;padding:12px 14px;white-space:pre-wrap}
.mbd-meta{display:flex;gap:6px;flex-wrap:wrap;margin-top:12px;font-size:.75rem;color:#4B5563}
.mbd-badge{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:999px;font-size:.6875rem;font-weight:500;background:#F3F4F6;color:#4B5563;border:1px solid #EEF0F3}
.mbd-badge--warm{background:#FEF3C7;color:#B45309;border-color:transparent}
.mbd-badge--review{background:#FEE2E2;color:#B91C1C;border-color:transparent}
.mbd-photos{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}
.mbd-photos .ph{width:96px;height:96px;border-radius:10px;overflow:hidden;border:1px solid #EEF0F3;cursor:zoom-in;background:#F3F4F6}
.mbd-photos .ph img{width:100%;height:100%;object-fit:cover;display:block}
.mbd-photos .ph--proc{outline:2px solid #0F766E}
.mbd-contact{margin-top:12px;padding:10px 12px;border:1px dashed #E5E7EB;border-radius:10px;font-size:.8125rem;color:#4B5563;display:flex;align-items:center;gap:8px}
.mbd-contact b{color:#111827;font-weight:600}
.mbd-contact.none{color:#9CA3AF;font-style:italic;border-style:solid;background:#F3F4F6}
.mbd-section{margin-top:16px;padding:12px 14px;border:1px solid #EEF0F3;border-radius:12px;background:#FBFCFD}
.mbd-section__title{font-size:.75rem;color:#6B7280;font-weight:600;margin-bottom:8px;letter-spacing:.02em}
.mbd-radio-row{display:flex;gap:14px;flex-wrap:wrap}
.mbd-radio{display:inline-flex;align-items:center;gap:6px;font-size:.8125rem;color:#111827;cursor:pointer}
.mbd-radio[aria-disabled="true"]{color:#9CA3AF;cursor:not-allowed}
.mbd-upload{display:inline-flex;align-items:center;gap:8px;background:#F3F4F6;border:1px dashed #D1D5DB;border-radius:10px;padding:10px 12px;font-size:.8125rem;color:#4B5563;cursor:pointer}
.mbd-upload input{display:none}
.mbd-upload__hint{color:#9CA3AF;font-size:.6875rem;margin-left:6px}
.mbd-actions{margin-top:18px;display:grid;grid-template-columns:1fr 1fr;gap:8px}
.mbd-actions__primary{grid-column:1 / -1}
.mbd-btn{background:#F3F4F6;color:#111827;border:1px solid #EEF0F3;padding:11px 14px;border-radius:12px;font-size:.84375rem;cursor:pointer;font-weight:500}
.mbd-btn:hover{background:#E5E7EB}
.mbd-btn--primary{background:#0F766E;color:#fff;border-color:#0F766E;font-size:.9375rem;font-weight:600;padding:13px}
.mbd-btn--primary:hover{filter:brightness(1.05)}
.mbd-btn--danger{background:#FEE2E2;color:#B91C1C;border-color:transparent}
.mbd-btn--danger:hover{background:#FECACA}
.mbd-btn--accent{background:#ECFDF5;color:#0F766E;border-color:transparent}
.mbd-btn--accent:hover{background:#D1FAE5}
.mbd-btn[disabled]{opacity:.55;cursor:not-allowed}
.mbd-lightbox{position:fixed;inset:0;background:rgba(0,0,0,.85);display:flex;align-items:center;justify-content:center;z-index:80;padding:20px;cursor:zoom-out}
.mbd-lightbox img{max-width:100%;max-height:92vh;border-radius:8px;box-shadow:0 10px 30px rgba(0,0,0,.4)}
#mbdPrintSheet{display:none}
@media print{
  @page{size:A4;margin:14mm}
  body *{visibility:hidden !important}
  #mbdPrintSheet, #mbdPrintSheet *{visibility:visible !important}
  #mbdPrintSheet{display:block !important;position:absolute;inset:0;background:#fff;padding:0;color:#111}
}
/* 2026-07-26 · FMS-25 · px font-size 의도적 제외 — 위 #procPrintSheet 블록과 동일 사유(고정 치수 출력물). */
#mbdPrintSheet{font-family:-apple-system,BlinkMacSystemFont,"Pretendard","Noto Sans KR",sans-serif;color:#111;padding:20mm;max-width:210mm}
#mbdPrintSheet h1{font-size:20px;margin:0 0 4px;border-bottom:2px solid #111;padding-bottom:8px;display:flex;align-items:baseline;gap:10px}
#mbdPrintSheet h1 small{font-size:12px;color:#555;font-weight:400;margin-left:auto}
#mbdPrintSheet .ps-sub{font-size:12px;color:#555;margin-bottom:16px}
#mbdPrintSheet .ps-grid{display:grid;grid-template-columns:110px 1fr;gap:6px 14px;font-size:13px;margin-bottom:14px}
#mbdPrintSheet .ps-grid dt{color:#666;font-weight:600}
#mbdPrintSheet .ps-grid dd{margin:0}
#mbdPrintSheet .ps-box{border:1px solid #333;border-radius:4px;padding:12px 14px;font-size:13px;line-height:1.6;margin-bottom:14px;white-space:pre-wrap}
#mbdPrintSheet .ps-box h3{margin:0 0 6px;font-size:12px;color:#555;font-weight:600;letter-spacing:.02em}
#mbdPrintSheet .ps-photos{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin-bottom:14px}
#mbdPrintSheet .ps-photos img{width:100%;max-height:75mm;object-fit:contain;border:1px solid #ccc;background:#fafafa}
#mbdPrintSheet .ps-sign{display:flex;gap:40px;margin-top:22px;font-size:12px;color:#555}
#mbdPrintSheet .ps-sign div{flex:1;border-top:1px solid #333;padding-top:6px}
#mbdPrintSheet .ps-footer{margin-top:18px;padding-top:10px;border-top:1px dashed #999;font-size:11px;color:#777;display:flex;justify-content:space-between}
@media (max-width: 720px){
  .mbd-overlay{padding:0;align-items:flex-end}
  /* 2026-05-28 · safe-area 확장 (proc-dialog 와 동일 패턴) */
  .mbd-dialog{max-width:100%;border-radius:18px 18px 0 0;padding:18px 18px calc(28px + var(--safe-bottom));max-height:92vh;overflow:auto}
  .mbd-actions{grid-template-columns:1fr}
}

/* Sub-Phase 1C: in-app prompt dialog (mailboxPromptDialog)
   desktop: 560px center modal / mobile: bottom sheet */
.mbd-prompt-overlay{position:fixed;inset:0;background:rgba(15,23,42,0.55);display:flex;align-items:center;justify-content:center;z-index:9999;padding:24px;animation:mbdPromptFade .15s ease-out;}
.mbd-prompt-overlay.is-closing{opacity:0;transition:opacity .15s ease-in;}
@keyframes mbdPromptFade{from{opacity:0;}to{opacity:1;}}
@keyframes mbdPromptSlideUp{from{transform:translateY(20px);opacity:0;}to{transform:translateY(0);opacity:1;}}
.mbd-prompt-dialog{background:#fff;border-radius:14px;width:560px;max-width:100%;max-height:calc(100dvh - 48px);box-shadow:0 24px 64px rgba(15,23,42,0.28),0 4px 12px rgba(15,23,42,0.08);display:flex;flex-direction:column;overflow:hidden;animation:mbdPromptSlideUp .18s ease-out;}
.mbd-prompt-header{display:flex;align-items:center;justify-content:space-between;padding:18px 22px;border-bottom:1px solid #E5E7EB;background:#F8FAFC;flex-shrink:0;}
.mbd-prompt-header.is-warning{background:#FFF7E6;border-bottom-color:#FED7AA;}
.mbd-prompt-header.is-danger{background:#FEF2F2;border-bottom-color:#FECACA;}
.mbd-prompt-title{margin:0;font-size:1rem;font-weight:700;color:#0F172A;}
.mbd-prompt-header.is-warning .mbd-prompt-title{color:#92400E;}
.mbd-prompt-header.is-danger .mbd-prompt-title{color:#991B1B;}
.mbd-prompt-close{background:transparent;border:0;font-size:1.5rem;line-height:1;color:#64748B;cursor:pointer;width:32px;height:32px;border-radius:8px;display:flex;align-items:center;justify-content:center;transition:background .12s;}
.mbd-prompt-close:hover{background:rgba(15,23,42,0.06);color:#0F172A;}
/* min-height:0 이 없으면 flex 자식이 내용 크기로 버텨 overflow-y 가 동작하지 않는다(가로모드/키보드에서 확인·취소 잘림) */
.mbd-prompt-body{padding:18px 22px;display:flex;flex-direction:column;gap:10px;overflow-y:auto;overscroll-behavior:contain;min-height:0;}
.mbd-prompt-desc{margin:0;font-size:.8125rem;color:#475569;line-height:1.55;}
.mbd-prompt-input{width:100%;min-height:96px;resize:vertical;padding:10px 12px;border:1px solid #CBD5E1;border-radius:10px;font-size:.875rem;font-family:inherit;line-height:1.5;color:#0F172A;background:#fff;transition:border-color .12s,box-shadow .12s;box-sizing:border-box;}
.mbd-prompt-input:focus{outline:none;border-color:#2563EB;box-shadow:0 0 0 3px rgba(37,99,235,0.15);}
.mbd-prompt-counter{font-size:.6875rem;color:#94A3B8;text-align:right;}
.mbd-prompt-actions{display:flex;gap:8px;justify-content:flex-end;padding:14px 22px;border-top:1px solid #E5E7EB;background:#F8FAFC;flex-shrink:0;}
.mbd-prompt-btn{padding:9px 18px;border-radius:10px;border:1px solid transparent;font-size:.875rem;font-weight:600;cursor:pointer;transition:background .12s,border-color .12s,color .12s,opacity .12s;}
.mbd-prompt-cancel{background:#fff;border-color:#CBD5E1;color:#334155;}
.mbd-prompt-cancel:hover{background:#F1F5F9;}
.mbd-prompt-submit{background:#2563EB;color:#fff;}
.mbd-prompt-submit:hover:not(:disabled){background:#1D4ED8;}
.mbd-prompt-submit[data-tone="warning"]{background:#D97706;}
.mbd-prompt-submit[data-tone="warning"]:hover:not(:disabled){background:#B45309;}
.mbd-prompt-submit[data-tone="danger"]{background:#DC2626;}
.mbd-prompt-submit[data-tone="danger"]:hover:not(:disabled){background:#B91C1C;}
.mbd-prompt-submit:disabled{opacity:.5;cursor:not-allowed;}
body.mbd-prompt-open{overflow:hidden;}
@media (max-width:720px){
  .mbd-prompt-overlay{align-items:flex-end;padding:0;}
  .mbd-prompt-dialog{width:100%;max-width:100%;max-height:92vh;border-radius:16px 16px 0 0;animation:mbdPromptSlideSheet .22s ease-out;}
  @keyframes mbdPromptSlideSheet{from{transform:translateY(100%);}to{transform:translateY(0);}}
  .mbd-prompt-body{padding:16px 18px;}
  .mbd-prompt-actions{padding:12px 18px calc(12px + env(safe-area-inset-bottom));}
  .mbd-prompt-btn{flex:1;padding:12px 16px;}
}

/* Sub-Phase 1D: 검수대기 노란톤 배경 + 2회 반려 ⚠️ 배지 (명세서 v1.1 §5.1) */
.mb-row--awaiting{background:#FFF7E6 !important;border-left:3px solid #D97706;}
.mb-row--awaiting:hover{background:#FFEDD5 !important;}
.mb-row--alert{background:#FEF2F2 !important;border-left:3px solid #DC2626;}
.mb-row--alert:hover{background:#FEE2E2 !important;}
.mb-row--awaiting.mb-row--alert{background:#FEF2F2 !important;border-left-color:#DC2626;} /* alert wins */
.mb-badge--alert{background:#FEE2E2;color:#991B1B;border:1px solid #FECACA;font-weight:700;}
.mbd-badge--alert{background:#FEE2E2;color:#991B1B;border:1px solid #FECACA;font-weight:700;}
/* Detail sheet awaiting tone (명세서 §6.2) */
.mbd-dialog[data-awaiting="1"] .mbd-head,
.mbd-dialog[data-awaiting="1"]{background:#FFFBEB;}

/* Phase 2-1: 용역사 의뢰 UI */
.mbd-vendor-dialog{width:min(620px,96vw);}
.mbd-vendor-section{margin-top:14px;}
.mbd-vendor-section__title{font-size:.8125rem;font-weight:600;color:#334155;margin-bottom:6px;}
.mbd-vendor-req{color:#DC2626;margin-left:2px;}
.mbd-vendor-hint{color:#94A3B8;font-size:.6875rem;font-weight:400;margin-left:4px;}
.mbd-prompt-counter.is-invalid{color:#DC2626;font-weight:600;}
.mbd-vendor-list{display:flex;flex-direction:column;gap:6px;max-height:200px;overflow-y:auto;border:1px solid #E2E8F0;border-radius:10px;padding:6px;background:#F8FAFC;}
.mbd-vendor-opt{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid transparent;border-radius:8px;background:#fff;cursor:pointer;transition:.15s;}
.mbd-vendor-opt:hover{border-color:#CBD5E1;}
.mbd-vendor-opt input[type=radio]{margin:0;}
.mbd-vendor-opt input[type=radio]:checked + .mbd-vendor-opt__body{color:#0F172A;}
.mbd-vendor-opt:has(input:checked){border-color:#0F172A;background:#F1F5F9;}
.mbd-vendor-opt__body{flex:1;}
.mbd-vendor-opt__name{font-weight:600;font-size:.875rem;color:#0F172A;}
.mbd-vendor-opt__sub{font-size:.75rem;color:#64748B;margin-top:2px;}
.mbd-vendor-date{width:100%;padding:10px 12px;border:1px solid #CBD5E1;border-radius:8px;font-size:.875rem;}

/* 용역사 배정 표시 섹션 (detail sheet) */
.mbd-vendor-assign{background:#F8FAFC;border-left:4px solid #0F172A;padding:12px;border-radius:8px;}
.mbd-vendor-assign__name{font-size:.9375rem;font-weight:700;color:#0F172A;margin-top:4px;}
.mbd-vendor-assign__meta{font-size:.75rem;color:#64748B;margin-top:4px;}
.mbd-vendor-assign__instr{margin-top:8px;padding:8px 10px;background:#fff;border:1px solid #E2E8F0;border-radius:6px;font-size:.8125rem;color:#334155;white-space:pre-wrap;}
.mbd-vendor-assign__memo{margin-top:6px;padding:8px 10px;background:#ECFDF5;border:1px solid #A7F3D0;border-radius:6px;font-size:.8125rem;color:#065F46;}
.mbd-vendor-assign__actions{margin-top:10px;display:flex;gap:6px;flex-wrap:wrap;}
.mbd-vendor-badge{display:inline-block;margin-left:6px;padding:2px 8px;border-radius:10px;font-size:.6875rem;font-weight:600;}
.mbd-vendor-badge--pending{background:#FEF3C7;color:#92400E;}
.mbd-vendor-badge--submitted{background:#DBEAFE;color:#1E40AF;}
.mbd-vendor-badge--awaiting{background:#FEF9C3;color:#854D0E;}
.mbd-vendor-badge--passed{background:#D1FAE5;color:#065F46;}
.mbd-vendor-badge--rejected{background:#FEE2E2;color:#991B1B;}

/* ═══ Phase 2-3 · 마스터 운영 콘솔 공통 토큰/헬퍼 (Step 1) ═══ */
:root{
  --master-card-bg:var(--surface);
  --master-card-border:var(--border);
  --master-card-radius:18px;
  --master-card-shadow:0 1px 2px rgba(15,23,42,.04),0 1px 1px rgba(15,23,42,.03);
  --master-card-padding:16px 18px;
  --master-card-gap:12px;
  --master-card-accent:#2563EB;
  --master-card-accent-soft:rgba(37,99,235,.08);
  --master-kpi-bg:linear-gradient(180deg,var(--surface) 0%,var(--surface-alt) 100%);
}
[data-theme="dark"]{
  --master-card-shadow:0 1px 2px rgba(0,0,0,.35),0 1px 1px rgba(0,0,0,.25);
  --master-card-accent-soft:rgba(96,165,250,.14);
}
.master-console{display:grid;gap:14px;margin-top:8px}
.master-card{background:var(--master-card-bg);border:1px solid var(--master-card-border);border-radius:var(--master-card-radius);box-shadow:var(--master-card-shadow);padding:var(--master-card-padding);display:flex;flex-direction:column;gap:var(--master-card-gap);position:relative}
.master-card--accent{border-left:3px solid var(--master-card-accent)}
.master-card--muted{background:var(--surface-alt)}
.master-card--danger{border-color:#FCA5A5}
.master-card--danger .master-card__title{color:#B91C1C}
[data-theme="dark"] .master-card--danger{border-color:#7F1D1D}
[data-theme="dark"] .master-card--danger .master-card__title{color:#FCA5A5}
.master-card__head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}
.master-card__head-text{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.master-card__title{font-size:.95rem;font-weight:800;color:var(--text);line-height:1.25}
.master-card__subtitle{font-size:.76rem;color:var(--text-secondary);line-height:1.4}
.master-card__actions{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.master-card__actions .btn{min-height:32px}
.master-card__body{display:flex;flex-direction:column;gap:10px;min-width:0}
.master-card__foot{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end;padding-top:4px;border-top:1px dashed var(--border);margin-top:2px}
.master-card-grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.master-card-grid--cols-2{grid-template-columns:repeat(auto-fit,minmax(320px,1fr))}
.master-card-grid--cols-3{grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}
@media (max-width:640px){.master-card{padding:13px 14px;border-radius:16px}.master-card-grid{gap:10px}}
.master-kpi{display:grid;gap:10px;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));padding:12px;border:1px solid var(--border);border-radius:16px;background:var(--master-kpi-bg)}
.master-kpi__item{display:flex;flex-direction:column;gap:2px;padding:4px 6px;min-width:0;border-left:3px solid transparent}
.master-kpi__item--accent{border-left-color:var(--master-card-accent)}
.master-kpi__item--warn{border-left-color:#F59E0B}
.master-kpi__item--danger{border-left-color:#DC2626}
.master-kpi__item--ok{border-left-color:#10B981}
.master-kpi__value{font-size:1.35rem;font-weight:800;color:var(--text);line-height:1.1;letter-spacing:-.01em}
.master-kpi__label{font-size:.74rem;color:var(--text-secondary);font-weight:600}
.master-kpi__hint{font-size:.68rem;color:var(--text-tertiary);margin-top:2px}
.master-tabs{display:flex;gap:4px;padding:3px;border:1px solid var(--border);border-radius:12px;background:var(--surface-alt);align-self:flex-start;flex-wrap:wrap}
.master-tabs__item{appearance:none;border:0;background:transparent;cursor:pointer;padding:6px 12px;border-radius:10px;font-size:.78rem;font-weight:700;color:var(--text-secondary);display:inline-flex;align-items:center;gap:6px;transition:background .15s,color .15s}
.master-tabs__item:hover{color:var(--text)}
.master-tabs__item.is-active{background:var(--surface);color:var(--text);box-shadow:0 1px 2px rgba(15,23,42,.08)}
.master-tabs__count{display:inline-flex;min-width:20px;justify-content:center;padding:1px 6px;border-radius:999px;background:var(--master-card-accent-soft);color:var(--master-card-accent);font-size:.7rem;font-weight:800}
[data-theme="dark"] .master-tabs__item.is-active{background:var(--surface-alt);color:var(--text)}
.master-empty{padding:20px 16px;border:1px dashed var(--border);border-radius:14px;text-align:center;color:var(--text-secondary);font-size:.82rem;background:var(--surface-alt)}
.master-empty strong{display:block;color:var(--text);margin-bottom:4px;font-size:.9rem}

/* ═══════════════════════════════════════════════
   Phase 2-3 · 마스터 운영 콘솔 공통 토큰/헬퍼 (Step 1)
   - 각 섹션(용역사/운영관리/출퇴근/결재/삭제민원/사용량) 이
     동일한 카드 · 그리드 · KPI · 서브탭 스타일을 공유한다.
   ═══════════════════════════════════════════════ */
:root{
  --master-card-bg:var(--surface);
  --master-card-border:var(--border);
  --master-card-radius:18px;
  --master-card-shadow:0 1px 2px rgba(15,23,42,.04),0 1px 1px rgba(15,23,42,.03);
  --master-card-padding:16px 18px;
  --master-card-gap:12px;
  --master-card-accent:#2563EB;
  --master-card-accent-soft:rgba(37,99,235,.08);
  --master-kpi-bg:linear-gradient(180deg,var(--surface) 0%,var(--surface-alt) 100%);
}
[data-theme="dark"]{
  --master-card-shadow:0 1px 2px rgba(0,0,0,.35),0 1px 1px rgba(0,0,0,.25);
  --master-card-accent-soft:rgba(96,165,250,.14);
}
.master-console{display:grid;gap:14px;margin-top:8px}
.master-card{
  background:var(--master-card-bg);
  border:1px solid var(--master-card-border);
  border-radius:var(--master-card-radius);
  box-shadow:var(--master-card-shadow);
  padding:var(--master-card-padding);
  display:flex;flex-direction:column;gap:var(--master-card-gap);
  position:relative;
}
.master-card--accent{border-left:3px solid var(--master-card-accent)}
.master-card--muted{background:var(--surface-alt)}
.master-card--danger{border-color:#FCA5A5}
.master-card--danger .master-card__title{color:#B91C1C}
[data-theme="dark"] .master-card--danger{border-color:#7F1D1D}
[data-theme="dark"] .master-card--danger .master-card__title{color:#FCA5A5}
.master-card__head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}
.master-card__head-text{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.master-card__title{font-size:.95rem;font-weight:800;color:var(--text);line-height:1.25}
.master-card__subtitle{font-size:.76rem;color:var(--text-secondary);line-height:1.4}
.master-card__actions{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.master-card__actions .btn{min-height:32px}
.master-card__body{display:flex;flex-direction:column;gap:10px;min-width:0}
.master-card__foot{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end;padding-top:4px;border-top:1px dashed var(--border);margin-top:2px}
.master-card-grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.master-card-grid--cols-2{grid-template-columns:repeat(auto-fit,minmax(320px,1fr))}
.master-card-grid--cols-3{grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}
@media (max-width:640px){
  .master-card{padding:13px 14px;border-radius:16px}
  .master-card-grid{gap:10px}
}
/* KPI strip (상단 핵심지표) */
.master-kpi{
  display:grid;gap:10px;
  grid-template-columns:repeat(auto-fit,minmax(140px,1fr));
  padding:12px;border:1px solid var(--border);border-radius:16px;
  background:var(--master-kpi-bg);
}

/* Phase 2-3 Step 3: master ops card grid */
.master-ops-card .detail-note{margin-bottom:8px}
.master-ops-card--wide{grid-column:1 / -1}
.master-table-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:10px;background:var(--surface)}
.master-simple-table{width:100%;border-collapse:collapse;font-size:.82rem}
.master-simple-table thead th{padding:8px 10px;text-align:left;background:var(--surface-muted);border-bottom:1px solid var(--border);font-weight:600;color:var(--text-secondary);white-space:nowrap}
.master-simple-table tbody td{vertical-align:top}
.master-simple-table tbody tr:last-child td{border-bottom:0}


/* Phase 2-3 Step 7: master-usage-popover (사용량 칩 클릭 상세) */
.master-usage-trigger{
  display:inline-flex;align-items:center;gap:6px;padding:0;border:0;background:transparent;cursor:pointer;color:inherit;
}
.master-usage-trigger .master-usage-chip{pointer-events:none}
.master-usage-trigger:hover .master-usage-chip{background:var(--surface-alt)}
.master-usage-trigger.is-open .master-usage-caret{transform:none}
.master-usage-caret{font-size:.75rem;color:var(--text-tertiary);margin-left:2px}
.master-usage-popover{
  position:absolute;right:8px;top:calc(var(--header-h,52px) + 8px);z-index:90;
  width:min(360px, calc(100vw - 24px));
  background:var(--surface,#fff);border:1px solid var(--border);border-radius:14px;
  box-shadow:0 12px 28px rgba(15,23,42,.18);padding:14px 14px 12px;
}
.master-usage-mobile .master-usage-popover{position:fixed;left:12px;right:12px;top:calc(var(--header-stack-h,90px) + 8px);width:auto}
.master-usage-popover__head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.master-usage-popover__close{background:transparent;border:0;font-size:1.4rem;line-height:1;color:var(--text-secondary);cursor:pointer;padding:2px 6px;border-radius:6px}
.master-usage-popover__close:hover{background:var(--surface-alt)}
.master-usage-popover__grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-bottom:12px}
.master-usage-popover__lbl{font-size:.7rem;color:var(--text-tertiary);margin-bottom:2px}
.master-usage-popover__val{font-size:.92rem;font-weight:700;color:var(--text-primary)}
.master-usage-popover__section{margin-top:12px;padding-top:10px;border-top:1px dashed var(--border)}
.master-usage-popover__shead{font-size:.78rem;font-weight:700;color:var(--text-secondary);margin-bottom:8px}
.master-usage-trend{display:flex;gap:6px;align-items:flex-end;height:80px}
.master-usage-trend__col{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:4px;height:100%;cursor:default}
.master-usage-trend__fill{width:100%;background:linear-gradient(180deg,#3B82F6,#1D4ED8);border-radius:4px 4px 0 0;min-height:2px;transition:height .2s}
.master-usage-trend__lbl{font-size:.65rem;color:var(--text-tertiary)}
.master-usage-events{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px;font-size:.78rem}
.master-usage-events li{display:flex;gap:8px;align-items:center;justify-content:space-between;padding:4px 8px;background:var(--surface-alt);border-radius:6px}
.master-usage-events__type{font-weight:700;color:var(--text-primary)}
.master-usage-events__pct{color:#2563EB;font-weight:700}
.master-usage-events__time{color:var(--text-tertiary);font-size:.7rem}

/* ═══════════════════════════════════════════════
   Phase 2-2 · 팀장 통계 대시보드 (.manager-stats-*)
   ═══════════════════════════════════════════════ */
/* 2026-04-22 · 팀장 통계 균형 배치 — 기존 960px 제한이 와이드 모니터에서 좌측 치우침
 *   원인. 마스터 stats(.stats-flat)처럼 풀너비 사용하되 초대형 화면에서 줄 길이가
 *   과해지지 않도록 상한만 1280px 로 느슨하게 두고 좌우 auto 마진으로 중앙 정렬. */
.manager-stats{max-width:1280px;margin-left:auto;margin-right:auto}
.manager-stats__subtabs{margin:12px 0}
.manager-stats__table-wrap{overflow-x:auto;margin-bottom:16px;border:1px solid var(--border);border-radius:12px;background:var(--surface)}
.manager-stats__team-table{width:100%;border-collapse:collapse;font-size:.8rem}
.manager-stats__team-table thead th{padding:8px 10px;text-align:left;background:var(--surface-muted,var(--surface-alt));border-bottom:1px solid var(--border);font-weight:600;color:var(--text-secondary);white-space:nowrap}
.manager-stats__team-table tbody td{padding:8px 10px;border-bottom:1px solid var(--border);vertical-align:middle}
.manager-stats__team-table tbody tr:last-child td{border-bottom:0}
.manager-stats__row--active{background:var(--master-card-accent-soft,rgba(37,99,235,.06))}
.manager-stats__row--active td{font-weight:700}
.manager-stats__duelist{display:flex;flex-direction:column;gap:8px;margin-bottom:16px}
.manager-stats__due-item{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--border);border-radius:12px;background:var(--surface)}
.manager-stats__due-main{flex:1;min-width:0}
.manager-stats__due-title{font-size:.82rem;font-weight:700;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.manager-stats__due-meta{font-size:.74rem;color:var(--text-secondary);margin-top:3px;display:flex;flex-wrap:wrap;gap:4px;align-items:center}
.manager-stats__due-actions{display:flex;gap:6px;flex-shrink:0}
/* Phase 4 · assignmentMode 탭 */
.manager-stats__am-tabs{margin:4px 0 12px;padding-top:4px;border-top:1px dashed var(--border)}
@media(max-width:600px){
  .manager-stats__due-item{flex-direction:column;align-items:stretch}
  .manager-stats__due-actions{justify-content:flex-end;margin-top:6px}
  .manager-stats__team-table{font-size:.72rem}
  .manager-stats__team-table thead th,.manager-stats__team-table tbody td{padding:6px 6px}
}

/* ═══════════════════════════════════════════════
   2026-04-17 · Design Spec v1.1 §3.4
   마스터 상단 6그룹 재편 (MASTER_TOP_TABS)
   ═══════════════════════════════════════════════ */
.admin-tabs--master-top{padding:6px 0 0;border-bottom:none}
/* 2026-04-20 · master-sub 행을 master-top 행 아래로 쌓이도록 별도 top 지정.
   기존엔 `.admin-tabs{ top: ... }` 규칙 하나만 있어 두 행이 같은 Y에 겹침. */
.admin-tabs--master-sub{
  padding:2px 0 8px;
  border-bottom:1px solid var(--border);
  top:calc(var(--header-stack-h) + var(--master-usage-h) + var(--admin-top-tabs-h,0px));
  z-index:79;
}
.master-top-tabs{display:flex;flex-wrap:nowrap;gap:6px;overflow-x:auto;padding:4px 2px;-webkit-overflow-scrolling:touch;scrollbar-width:thin}
.master-top-tab{display:flex;align-items:center;gap:8px;padding:9px 14px;min-height:42px;border:1px solid var(--border);border-radius:999px;background:var(--surface);color:var(--text-secondary);font-size:.82rem;font-weight:700;white-space:nowrap;cursor:pointer;transition:background .15s,color .15s,border-color .15s,box-shadow .15s}
.master-top-tab:hover{border-color:#93C5FD;color:var(--text-primary)}
.master-top-tab.active{background:#2563EB;border-color:#1D4ED8;color:#fff;box-shadow:0 2px 6px rgba(37,99,235,.22)}
.master-top-tab__icon{font-size:1.02rem;line-height:1}
.master-top-tab__label{font-size:.82rem}
.master-top-tab__badge{margin-left:2px;min-width:22px;padding:1px 7px;border-radius:999px;background:#EF4444;color:#fff;font-size:.66rem;font-weight:800;text-align:center;line-height:1.35}
.master-top-tab.active .master-top-tab__badge{background:#fff;color:#2563EB}
.master-sub-nav{display:flex;flex-wrap:wrap;gap:4px;padding:6px 2px 0;border-top:1px dashed var(--border);margin-top:4px}
.master-sub-tab{padding:6px 12px;border:1px solid transparent;border-radius:8px;background:transparent;color:var(--text-secondary);font-size:.76rem;font-weight:600;cursor:pointer;transition:background .15s,color .15s,border-color .15s}
.master-sub-tab:hover{background:var(--surface-alt);color:var(--text-primary)}
.master-sub-tab.active{background:#E0E7FF;border-color:#93C5FD;color:#1D4ED8;font-weight:700}

/* 대시보드 탭 퀵액션 카드 */
.master-dash{max-width:none;width:100%}
.master-dash__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px;margin-top:14px}
.master-dash-card{display:flex;align-items:center;gap:10px;padding:14px 16px;min-height:72px;border:1px solid var(--border);border-radius:12px;background:var(--surface);cursor:pointer;text-align:left;transition:border-color .15s,background .15s,box-shadow .15s}
.master-dash-card:hover{border-color:#93C5FD;box-shadow:0 2px 8px rgba(37,99,235,.1)}
.master-dash-card__icon{font-size:1.6rem;line-height:1;flex-shrink:0}
.master-dash-card__body{display:flex;flex-direction:column;gap:2px;min-width:0}
.master-dash-card__body strong{font-size:.9rem;color:var(--text-primary);font-weight:700}
.master-dash-card__body span{font-size:.74rem;color:var(--text-secondary)}

/* 2026-04-20 · 대시보드 동적 위젯 3종 ───────────────────────── */
.master-dash__widgets{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px;margin-top:14px}
.dash-widget{border:1px solid var(--border);border-radius:12px;background:var(--surface);padding:12px 14px;display:flex;flex-direction:column;gap:8px;min-height:128px}
.dash-widget__head{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}
.dash-widget__head strong{font-size:.92rem;color:var(--text-primary);font-weight:700}
.dash-widget__hint{font-size:.72rem;color:var(--text-secondary)}
.dash-widget__empty{margin:0;font-size:.78rem;color:var(--text-secondary)}
.dash-widget__foot{margin-top:auto;padding-top:4px;border-top:1px dashed var(--border)}
.dash-widget__notice-text{font-size:.86rem;line-height:1.55;color:var(--text-primary);white-space:pre-wrap;word-break:break-word}
.dash-widget__meta{font-size:.72rem;color:var(--text-secondary)}
.dash-widget__audit-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:4px}
.dash-widget__audit-row{display:grid;grid-template-columns:1fr 1fr 1fr auto;gap:6px;font-size:.74rem;color:var(--text-secondary);padding:4px 0;border-bottom:1px dotted var(--border)}
.dash-widget__audit-row:last-child{border-bottom:none}
.dash-widget__audit-action{color:var(--text-primary);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dash-widget__audit-actor{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dash-widget__audit-target{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.7rem}
.dash-widget__audit-ts{white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.7rem;color:var(--text-secondary)}
.dash-widget__vendor-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:6px}
.dash-widget__vendor-row{display:grid;grid-template-columns:minmax(0,1.2fr) repeat(4,minmax(44px,auto));gap:6px;align-items:center;padding:6px 0;border-bottom:1px dotted var(--border)}
.dash-widget__vendor-row:last-child{border-bottom:none}
.dash-widget__vendor-name{font-size:.82rem;color:var(--text-primary);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dash-widget__vendor-stat{display:inline-flex;flex-direction:column;align-items:center;gap:0;font-size:.66rem;color:var(--text-secondary);line-height:1.1}
.dash-widget__vendor-stat strong{font-size:.88rem;color:var(--text-primary);font-weight:700}
.dash-widget__vendor-stat--warn strong{color:#EA580C}
.dash-widget__vendor-stat--ok strong{color:#16A34A}
.dash-widget__vendor-stat--bad strong{color:#DC2626}
@media (max-width:640px){
  .master-dash__widgets{grid-template-columns:1fr}
  .dash-widget__audit-row{grid-template-columns:1fr 1fr auto}
  .dash-widget__audit-target{display:none}
  .dash-widget__vendor-row{grid-template-columns:1fr repeat(4,auto)}
}

/* 2026-04-22 · Step 5-2/5-8/5-9 · 공지사항 · 오늘 지표 · 마감 임박 위젯 ─────── */
.dash-widget--notice{grid-column:span 2}
@media (max-width:720px){.dash-widget--notice{grid-column:span 1}}
.dash-notice__list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:6px;max-height:260px;overflow-y:auto}
.dash-notice__item{border:1px solid var(--border);border-radius:10px;padding:8px 10px;background:var(--surface-subtle,#fafafa);display:flex;flex-direction:column;gap:4px}
.dash-notice__item--pinned{border-color:#F59E0B;background:#FFFBEB}
.dash-notice__text{font-size:.84rem;line-height:1.5;color:var(--text-primary);white-space:pre-wrap;word-break:break-word}
.dash-notice__pin{display:inline-block;margin-right:4px}
.dash-notice__meta{display:flex;align-items:center;justify-content:space-between;gap:6px;flex-wrap:wrap;font-size:.7rem;color:var(--text-secondary)}
.dash-notice__author{display:inline-flex;align-items:center;gap:6px;font-weight:600;color:var(--text-primary)}
.dash-notice__role{display:inline-block;padding:1px 6px;border-radius:999px;font-size:.62rem;font-weight:700;letter-spacing:.02em}
.dash-notice__role--master{background:#DC2626;color:#fff}
.dash-notice__role--manager{background:#1D4ED8;color:#fff}
.dash-notice__time{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.68rem}
.dash-notice__acts{display:inline-flex;gap:4px;margin-left:auto}
.dash-notice__act{border:1px solid var(--border);background:transparent;border-radius:6px;padding:2px 6px;cursor:pointer;font-size:.8rem;line-height:1;color:var(--text-secondary)}
.dash-notice__act:hover{background:var(--surface-subtle,#f0f0f0);color:var(--text-primary)}
.dash-notice__act--del:hover{color:#DC2626;border-color:#FCA5A5}
.dash-notice__form{display:flex;flex-direction:column;gap:6px;padding:8px;border:1px dashed var(--border);border-radius:10px;background:var(--surface-subtle,#fafafa);margin-bottom:6px}
.dash-notice__input{width:100%;border:1px solid var(--border);border-radius:8px;padding:6px 8px;font-size:.84rem;line-height:1.5;resize:vertical;min-height:60px;font-family:inherit;background:var(--surface)}
.dash-notice__input:focus{outline:2px solid var(--accent,#1D4ED8);outline-offset:1px}
.dash-notice__form-row{display:flex;align-items:center;justify-content:space-between;gap:8px}
.dash-notice__counter{font-size:.7rem;color:var(--text-secondary);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.dash-notice__form-btns{display:inline-flex;gap:6px}

/* 오늘 지표 스트립 */
.dash-today__grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.dash-today__cell{border:1px solid var(--border);border-radius:10px;padding:10px 8px;background:var(--surface-subtle,#fafafa);display:flex;flex-direction:column;align-items:center;gap:2px;text-align:center}
.dash-today__label{font-size:.7rem;color:var(--text-secondary);letter-spacing:.02em}
.dash-today__num{font-size:1.32rem;color:var(--text-primary);font-weight:800;line-height:1.15}

/* 마감 임박 TOP 3 */
.dash-sla__list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:4px}
.dash-sla__row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:8px;align-items:center;padding:6px 8px;border:1px solid var(--border);border-radius:8px;cursor:pointer;transition:background .15s ease,border-color .15s ease}
.dash-sla__row:hover{background:var(--surface-subtle,#f5f5f5);border-color:var(--accent,#1D4ED8)}
.dash-sla__row:focus-visible{outline:2px solid var(--accent,#1D4ED8);outline-offset:1px}
.dash-sla__row--overdue{background:#FEF2F2;border-color:#FCA5A5}
.dash-sla__row--overdue:hover{background:#FEE2E2}
.dash-sla__row--soon{background:#FFFBEB;border-color:#FDE68A}
.dash-sla__row--soon:hover{background:#FEF3C7}
.dash-sla__no{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.72rem;color:var(--text-secondary);white-space:nowrap}
.dash-sla__title{font-size:.84rem;color:var(--text-primary);font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.dash-sla__due{font-size:.74rem;font-weight:700;white-space:nowrap;padding:2px 8px;border-radius:999px;background:rgba(0,0,0,.06);color:var(--text-primary)}
.dash-sla__row--overdue .dash-sla__due{background:#DC2626;color:#fff}
.dash-sla__row--soon .dash-sla__due{background:#F59E0B;color:#fff}
@media (max-width:640px){
  .dash-today__num{font-size:1.15rem}
  .dash-sla__row{grid-template-columns:minmax(0,1fr) auto;gap:6px}
  .dash-sla__no{display:none}
}

/* 분류 규칙 전용 상단 설명 */
.master-rules .detail-note{font-size:.8rem;line-height:1.6}

/* 모바일 · 탑탭 압축 (아이콘만 표시) */
@media (max-width:640px){
  .master-top-tab{padding:8px 10px;gap:4px}
  .master-top-tab__label{font-size:.74rem}
  .master-dash__grid{grid-template-columns:1fr}
}

/* 2026-04-20 · 분류 규칙 v2 (바인딩 / 분류 규칙 / 테스트) ───────────────────────── */
.rules-subnav{display:flex;gap:4px;padding:6px;border:1px solid var(--border);border-radius:10px;background:var(--surface-alt,rgba(241,245,249,.6));margin:12px 0 16px}
.rules-subnav__tab{padding:8px 14px;border:0;background:transparent;font-size:.84rem;font-weight:600;color:var(--text-secondary);border-radius:6px;cursor:pointer;transition:background .12s,color .12s}
.rules-subnav__tab:hover{background:rgba(59,130,246,.08);color:var(--text-primary)}
.rules-subnav__tab.active{background:var(--surface);color:var(--text-primary);box-shadow:0 1px 4px rgba(15,23,42,.08)}

.rules-tab-body{display:flex;flex-direction:column;gap:16px}

.rules-user,.rules-seed,.rules-add,.rules-test{border:1px solid var(--border);border-radius:12px;background:var(--surface);padding:14px 16px}
.rules-user__head,.rules-seed__head{display:flex;align-items:center;gap:10px;margin-bottom:10px;flex-wrap:wrap}
.rules-user__head strong,.rules-seed__head strong{font-size:.95rem}
.rules-count{font-size:.74rem;color:var(--text-secondary);background:rgba(148,163,184,.18);padding:2px 8px;border-radius:10px}
.rules-meta{font-size:.72rem;color:var(--text-secondary);margin-left:auto}

.rules-table{width:100%;border-collapse:collapse;font-size:.78rem}
.rules-table th,.rules-table td{padding:8px 10px;border-bottom:1px solid var(--border);text-align:left;vertical-align:top}
.rules-table th{font-weight:600;color:var(--text-secondary);background:rgba(241,245,249,.45);font-size:.72rem;text-transform:uppercase;letter-spacing:.04em}
.rules-table--seed th{background:rgba(241,245,249,.3)}
.rules-table tr:last-child td{border-bottom:0}
.rules-kw-cell{color:var(--text-primary);max-width:260px;word-break:break-word}
.rules-dim{display:inline-block;margin-left:4px;font-size:.68rem;color:var(--text-secondary)}
.rules-chip{display:inline-block;padding:2px 8px;border-radius:10px;background:rgba(59,130,246,.12);color:#1d4ed8;font-size:.68rem;font-weight:600}
.rules-chip--kw{background:rgba(16,185,129,.12);color:#047857}

.rules-fold{border-top:1px solid var(--border);padding-top:10px;margin-top:10px}
.rules-fold>summary{cursor:pointer;font-size:.82rem;color:var(--text-primary);font-weight:600;padding:4px 0;list-style:none}
.rules-fold>summary::-webkit-details-marker{display:none}
.rules-fold>summary::before{content:'▸';display:inline-block;margin-right:6px;color:var(--text-secondary);transition:transform .15s}
.rules-fold[open]>summary::before{transform:rotate(90deg)}
.rules-fold>summary:hover{color:#1d4ed8}

.rules-add__title{font-weight:700;font-size:.9rem;margin-bottom:8px}
.rules-add-kind{display:inline-flex;border:1px solid var(--border);border-radius:8px;overflow:hidden;margin-bottom:10px}
.rules-add-kind__btn{padding:6px 12px;border:0;background:transparent;color:var(--text-secondary);font-size:.78rem;font-weight:600;cursor:pointer}
.rules-add-kind__btn.active{background:var(--accent,#2563eb);color:#fff}
.rules-add__hint{margin-bottom:10px}
.rules-add__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px}
.rules-add-label{display:flex;flex-direction:column;gap:4px;font-size:.74rem;color:var(--text-secondary);font-weight:600}
.rules-add-input{width:100%;padding:7px 10px;border:1px solid var(--border);border-radius:6px;background:var(--surface);color:var(--text-primary);font-size:.82rem}
.rules-add-input:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px rgba(59,130,246,.18)}
.rules-add__actions{display:flex;gap:8px;margin-top:12px;justify-content:flex-end}

.rules-test{display:flex;flex-direction:column;gap:12px}
.rules-test__form{display:flex;flex-direction:column;gap:10px}
.rules-test-textarea{width:100%;padding:8px 10px;border:1px solid var(--border);border-radius:8px;font-size:.85rem;font-family:inherit;line-height:1.5;resize:vertical;background:var(--surface);color:var(--text-primary)}
.rules-test-textarea:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px rgba(59,130,246,.18)}
.rules-test-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px}
.rules-test__actions{display:flex;gap:8px;justify-content:flex-end}

.rules-test-result{border:1px solid var(--border);border-radius:10px;background:rgba(59,130,246,.04);padding:12px 14px;display:flex;flex-direction:column;gap:6px}
.rules-test-result__head{display:flex;align-items:center;gap:10px;padding-bottom:6px;border-bottom:1px dashed var(--border);margin-bottom:4px}
.rules-test-result__head strong{font-size:.9rem}
.rules-confidence{font-size:.72rem;color:var(--text-secondary);margin-left:auto;background:rgba(148,163,184,.18);padding:2px 8px;border-radius:10px}
.rules-test-result__row{display:flex;gap:10px;font-size:.82rem;align-items:flex-start;padding:3px 0}
.rules-test-result__row>span:first-child{min-width:80px;color:var(--text-secondary);font-size:.76rem;font-weight:600}
.rules-test-result__row>strong{color:var(--text-primary)}
.rules-mode{font-family:ui-monospace,monospace;font-size:.74rem;padding:2px 6px;background:rgba(16,185,129,.12);color:#047857;border-radius:4px}
.rules-reason-list{display:flex;flex-wrap:wrap;gap:4px}
.rules-reason-chip{display:inline-block;padding:2px 8px;font-size:.68rem;background:rgba(148,163,184,.16);color:var(--text-primary);border-radius:8px}
.rules-test-placeholder{border:1px dashed var(--border);border-radius:10px;padding:14px;background:rgba(241,245,249,.4);color:var(--text-secondary);font-size:.82rem}

@media (max-width:640px){
  .rules-subnav{flex-wrap:wrap}
  .rules-add__grid,.rules-test-grid{grid-template-columns:1fr}
  .rules-table{font-size:.72rem}
  .rules-table th,.rules-table td{padding:6px 6px}
}

/* ── Phase 4 Step 4-1: 리스트/보드 뷰 토글 + 보드 scaffold ────────── */
.admin-list-view-toggle{display:inline-flex;gap:6px;margin:4px 0 10px;align-items:center}
.admin-list-view-toggle .filter-pill--view{font-weight:600}
.admin-kanban{display:block;width:100%;margin-top:6px}
.admin-kanban__placeholder{
  display:flex;align-items:center;justify-content:center;text-align:center;
  padding:32px 16px;border:2px dashed #CBD5E1;border-radius:14px;
  background:#F8FAFC;color:#475569;font-size:.92rem;line-height:1.6
}
.admin-kanban__placeholder strong{color:#0F172A;margin-left:4px}

/* ── Phase 4 Step 4-1: 리스트/보드 뷰 토글 + 보드 scaffold ────────── */
.admin-list-view-toggle{display:inline-flex;gap:6px;margin:4px 0 10px;align-items:center}
.admin-list-view-toggle .filter-pill--view{font-weight:600}
.admin-kanban{display:block;width:100%;margin-top:6px}
.admin-kanban__placeholder{
  display:flex;align-items:center;justify-content:center;text-align:center;
  padding:32px 16px;border:2px dashed #CBD5E1;border-radius:14px;
  background:#F8FAFC;color:#475569;font-size:.92rem;line-height:1.6
}
.admin-kanban__placeholder strong{color:#0F172A;margin-left:4px}

/* ═══════════════════════════════════════════════════════════════
 * 2026-04-27 · Phase 3-9 · 접수페이지 디자인 디테일 보강
 * ─ 시각/마감 향상 (기능 변경 없음).
 * ─ 여백·타이포·인터랙션 피드백 폴리시 — submit, review, success, track 영역.
 * ═══════════════════════════════════════════════════════════════ */
/* (1) compose 입력창 — 포커스 시 더 부드러운 ring */
.compose__input{transition:border-color .2s ease,box-shadow .2s ease,background .2s ease}
.compose__input:focus{box-shadow:0 0 0 4px rgba(0,132,61,.12)}
.compose--entry .compose__input:focus{box-shadow:0 0 0 4px rgba(0,132,61,.14),0 4px 12px rgba(15,23,42,.04)}

/* (2) compose 전송 버튼 — 호버/액티브 디테일 */
.compose__btn{transition:background .15s ease,transform .12s ease,box-shadow .15s ease}
.compose__btn:not(:disabled):hover{box-shadow:0 4px 14px rgba(0,132,61,.22)}
.compose__btn:not(:disabled):active{transform:scale(.92)}

/* (3) 캠퍼스 선택 카드 — 호버 시 부드러운 들어올림 */
.campus-choice:active:not(:disabled){transform:translateY(0);transition:transform .08s ease}

/* (4) suggest-chip — 살짝 들리는 호버 */
.suggest-chip{transition:all .18s cubic-bezier(.22,1,.36,1)}
.suggest-chip:hover{transform:translateY(-1px);box-shadow:0 4px 12px rgba(0,132,61,.14)}
.suggest-chip:active{transform:translateY(0)}

/* (5) 리뷰 카드 — 입체감 추가 */
.review-card{box-shadow:0 6px 20px rgba(0,132,61,.06),0 2px 6px rgba(15,23,42,.04)}
:root[data-theme="dark"] .review-card{box-shadow:0 6px 20px rgba(0,0,0,.32),0 2px 6px rgba(0,0,0,.18)}

/* (6) 접수 완료 — 영수증 번호 강조 + 액션 그룹 폴리시 */
.success{padding:48px 22px 34px}
.success__icon{filter:drop-shadow(0 6px 12px rgba(16,185,129,.18))}
.success__receipt{padding:8px 14px;background:linear-gradient(180deg,rgba(0,132,61,.08),rgba(0,132,61,.02));border:1px dashed rgba(0,132,61,.32);border-radius:14px;display:inline-block;font-variant-numeric:tabular-nums}
:root[data-theme="dark"] .success__receipt{background:linear-gradient(180deg,rgba(63,185,80,.14),rgba(63,185,80,.04));border-color:rgba(63,185,80,.32)}
.success__notice{margin:14px auto;max-width:380px;padding:12px 14px;background:#FFFBEB;border:1px solid #FDE68A;border-radius:12px;display:flex;gap:10px;align-items:flex-start;text-align:left;font-size:.82rem;line-height:1.55}
:root[data-theme="dark"] .success__notice{background:#451A03;border-color:#854D0E;color:#FDE68A}
.success__notice-icon{font-size:1rem;flex-shrink:0;margin-top:1px}

/* (7) 접수번호 입력칸 (track) — 포커스 ring 강화 */
.track-page__input{transition:border-color .2s ease,box-shadow .2s ease,background .2s ease}
.track-page__input:focus{box-shadow:0 0 0 4px rgba(0,132,61,.12)}

/* (8) 인터랙션 피드백 — 키보드 포커스 표시 일관 */
.compose__btn:focus-visible,.btn:focus-visible{outline:2px solid var(--green);outline-offset:2px}

/* (9) 모바일 한정 — 접수페이지 여백/타이포 미세 조정 */
@media (max-width:520px){
  .success{padding:40px 18px 28px}
  .success__title{font-size:1.04rem}
  .success__receipt{font-size:1.18rem;padding:7px 12px}
  .success__notice{font-size:.78rem;padding:10px 12px;max-width:100%}
  .review-card{padding:14px}
  .review-card__title{font-size:.88rem}
}

/* ═══════════════════════════════════════════════════════════════
 * 2026-04-27 · Phase 2-7 hotfix · 다크모드 누락 보강
 * ─ "UI tone-up pass 4" 블록(line ~343-)이 하드코딩 light 값으로
 *   --bg/--surface 토큰을 덮어써서 dark 모드에 적용되지 않던 문제 수정.
 * ─ data-theme="dark" 일 때 동일 셀렉터를 dark 톤으로 다시 덮어씀.
 * ═══════════════════════════════════════════════════════════════ */
:root[data-theme="dark"] body{background:linear-gradient(180deg,#0D1117 0%,#0A0E13 100%)}
:root[data-theme="dark"] .app-shell{background:linear-gradient(180deg,#161B22 0%,#10151B 100%);box-shadow:0 20px 60px rgba(0,0,0,.4)}
/* [디자인통일 4단계] 다크 테마도 동일 파인 헤더 유지(양 테마 동일 크롬, CMS 패턴) — 반투명 파인+3px 그린 rail. */
:root[data-theme="dark"] .header{background:rgba(11,38,22,.92);border-bottom:3px solid #00843D}
:root[data-theme="dark"] .admin-tabs{background:rgba(22,27,34,.92);border-bottom-color:#30363D}
:root[data-theme="dark"] .admin-tab{color:#8B949E}
:root[data-theme="dark"] .admin-tab.active{color:var(--green-dark);border-bottom-color:var(--green-dark)}
:root[data-theme="dark"] .admin-content{background:linear-gradient(180deg,#0D1117 0%,#10151B 100%)}
:root[data-theme="dark"] .review-card,
:root[data-theme="dark"] .admin-toolbar,
:root[data-theme="dark"] .admin-userbar,
:root[data-theme="dark"] .ticket-item,
:root[data-theme="dark"] .history-item,
:root[data-theme="dark"] .detail-history__item,
:root[data-theme="dark"] .kv,
:root[data-theme="dark"] .search-bar input,
:root[data-theme="dark"] .detail-form-grid select,
:root[data-theme="dark"] .contact-fields input,
:root[data-theme="dark"] textarea{border-color:#30363D}
:root[data-theme="dark"] .stat-card{background:linear-gradient(180deg,#161B22 0%,#1C2333 100%)}
:root[data-theme="dark"] .stat-card__label{color:#8B949E}
:root[data-theme="dark"] .ticket-item{background:linear-gradient(180deg,#161B22 0%,#10151B 100%)}
:root[data-theme="dark"] .ticket-item:hover{border-color:#3FB950;background:#1C2333;box-shadow:0 8px 24px rgba(0,0,0,.4)}
:root[data-theme="dark"] .ticket-item__meta{color:#8B949E}
:root[data-theme="dark"] .ticket-item__reason{color:#8B949E}
:root[data-theme="dark"] .search-bar input,
:root[data-theme="dark"] .detail-form-grid select,
:root[data-theme="dark"] .contact-fields input,
:root[data-theme="dark"] textarea,
:root[data-theme="dark"] .kv input,
:root[data-theme="dark"] .kv select{background:#1C2333;border-color:#30363D;box-shadow:none;color:var(--text)}
:root[data-theme="dark"] .search-bar input:focus,
:root[data-theme="dark"] .detail-form-grid select:focus,
:root[data-theme="dark"] .contact-fields input:focus,
:root[data-theme="dark"] textarea:focus,
:root[data-theme="dark"] .kv input:focus,
:root[data-theme="dark"] .kv select:focus{border-color:var(--green-dark);box-shadow:0 0 0 3px rgba(63,185,80,.18)}
:root[data-theme="dark"] .filter-pill{background:#161B22;color:#8B949E;border-color:#30363D}
:root[data-theme="dark"] .filter-pill.active{background:var(--green-dark);color:#0D1117;border-color:var(--green-dark)}
:root[data-theme="dark"] .sync-chip{background:#161B22;border-color:#30363D}
:root[data-theme="dark"] .bottom-sheet__panel{background:linear-gradient(180deg,#161B22 0%,#10151B 100%)}
:root[data-theme="dark"] .admin-compact-panel,
:root[data-theme="dark"] .admin-fold{background:linear-gradient(180deg,#161B22 0%,#10151B 100%);border-color:#30363D}
:root[data-theme="dark"] .stat-card--focus{border-color:#3FB950;background:linear-gradient(180deg,#161B22 0%,#0D2818 100%)}
:root[data-theme="dark"] .admin-board-table-wrap{background:linear-gradient(180deg,#161B22 0%,#10151B 100%);border-color:#30363D}
:root[data-theme="dark"] .admin-content .detail-note{color:#8B949E}

/* ═══════════════════════════════════════════════════════════════
 * 2026-04-27 · Phase 2-7 hotfix #2 · 다크모드 리뷰 카드 시인성 보강
 * ─ 라인 368 의 .kv 흰색 그라디언트가 dark 모드에서도 적용되어
 *   값 텍스트(kv__val)가 흰배경 위 흰글자로 시인성 저하.
 * ─ kv 배경/테두리/텍스트 색상을 dark 명시 + 연락처 토글, suggest-chip 등 인접 컴포넌트 보강.
 * ═══════════════════════════════════════════════════════════════ */
:root[data-theme="dark"] .kv{background:linear-gradient(180deg,#1C2333 0%,#161B22 100%);border:1px solid #30363D}
:root[data-theme="dark"] .kv__key{color:#A8B3BD;font-weight:800}
:root[data-theme="dark"] .kv__val{color:#E6EDF3}
:root[data-theme="dark"] .contact-toggle{background:#1C2333;border-color:#30363D;color:#C9D1D9}
:root[data-theme="dark"] .contact-toggle.active{background:#0D2818;border-color:#3FB950;color:#3FB950}
:root[data-theme="dark"] .suggest-chip{background:#1C2333;border-color:#30363D;color:#C9D1D9}
:root[data-theme="dark"] .suggest-chip:hover{background:#0D2818;border-color:#3FB950;color:#3FB950}
:root[data-theme="dark"] .review-card__title{color:#E6EDF3}
:root[data-theme="dark"] .review-card__badge{background:#0D2818;color:#3FB950}
:root[data-theme="dark"] .msg--system .msg__bubble{background:#1C2333;border-color:#30363D;color:#E6EDF3}
:root[data-theme="dark"] .compose__input{background:#1C2333;color:#E6EDF3;border-color:#30363D}
:root[data-theme="dark"] .compose__input:focus{background:#161B22;border-color:#3FB950;box-shadow:0 0 0 4px rgba(63,185,80,.18)}
:root[data-theme="dark"] .compose__input::placeholder{color:#6E7781}
:root[data-theme="dark"] .compose{background:#161B22;border-top-color:#30363D}
:root[data-theme="dark"] .compose__hint-badge{background:#1C2333;border-color:#30363D;color:#A8B3BD}
:root[data-theme="dark"] .compose__hint-badge--accent{background:#0D2818;border-color:#3FB950;color:#3FB950}
:root[data-theme="dark"] .tool-btn{background:#161B22;border-color:#30363D;color:#A8B3BD}
:root[data-theme="dark"] .tool-btn:hover{background:#1C2333}
:root[data-theme="dark"] .tool-btn--active{background:#0D2818;border-color:#3FB950;color:#3FB950}
/* 캠퍼스 메타 칩 (선택 캠퍼스) */
:root[data-theme="dark"] .campus-meta{background:linear-gradient(180deg,rgba(63,185,80,.12),rgba(63,185,80,.04));border-color:rgba(63,185,80,.32);color:#3FB950}



/* ═══════════════════════════════════════════════════════════════
 * 2026-04-27 · Phase 2-7 hotfix #3 · 다크모드 btn--outline 흰배경 수정
 * ─ 라인 369 .btn--outline{background:rgba(255,255,255,.78)} 가
 *   다크모드에서도 흰배경으로 적용 → 수정/사진첨부/민원접수하기 등 outline 버튼이
 *   다크 화면 위에 흰 사각형으로 노출되던 문제 수정.
 * ═══════════════════════════════════════════════════════════════ */
:root[data-theme="dark"] .btn--outline{background:rgba(28,35,51,.86);border-color:#30363D;color:#E6EDF3}
:root[data-theme="dark"] .btn--outline:hover:not(:disabled){background:#1C2333;border-color:#3FB950;color:#3FB950}
:root[data-theme="dark"] .btn--outline:disabled{background:rgba(28,35,51,.5);color:#6E7781}

/* ═══════════════════════════════════════════════════════════════
 * 2026-04-27 · UA 컨트롤 color-scheme 잠금
 * ─ <meta name="color-scheme" content="light dark"> 는 브라우저에게 둘 다 지원한다고
 *   알려서 OS prefers-color-scheme 에 따라 native 컨트롤(체크박스, 스크롤바, 폼 위젯,
 *   selection 색 등) 을 자동 다크/라이트 렌더. 우리는 data-theme 로 명시 제어하므로
 *   CSS color-scheme 속성을 data-theme 에 묶어 UA 컨트롤도 같이 잠근다.
 * ═══════════════════════════════════════════════════════════════ */
:root{color-scheme:light}
:root[data-theme="dark"]{color-scheme:dark}
:root[data-theme="light"]{color-scheme:light}

/* 체크박스 색상 — 라이트모드에서는 그린, 다크모드에서도 그린 (브랜드 일관) */
input[type="checkbox"],
input[type="radio"]{accent-color:var(--green, #00843D)}
:root[data-theme="dark"] input[type="checkbox"],
:root[data-theme="dark"] input[type="radio"]{accent-color:var(--green-dark, #3FB950)}

/* 동의 체크박스(.consent-item input) 도 동일하게 — accent-color 로 자연스럽게 처리 */
.consent-item input[type="checkbox"]{accent-color:var(--green, #00843D);width:18px;height:18px;cursor:pointer;flex-shrink:0}
:root[data-theme="dark"] .consent-item input[type="checkbox"]{accent-color:var(--green-dark, #3FB950)}

/* 스크롤바 색상 — light 에서는 light 톤, dark 는 dark 톤 (color-scheme 만으로 부족할 때 보강) */
:root[data-theme="light"] *::-webkit-scrollbar{width:10px;height:10px}
:root[data-theme="light"] *::-webkit-scrollbar-track{background:#F1F4F7}
:root[data-theme="light"] *::-webkit-scrollbar-thumb{background:#CBD5E1;border-radius:6px;border:2px solid #F1F4F7}
:root[data-theme="light"] *::-webkit-scrollbar-thumb:hover{background:#94A3B8}
:root[data-theme="dark"] *::-webkit-scrollbar{width:10px;height:10px}
:root[data-theme="dark"] *::-webkit-scrollbar-track{background:#161B22}
:root[data-theme="dark"] *::-webkit-scrollbar-thumb{background:#30363D;border-radius:6px;border:2px solid #161B22}
:root[data-theme="dark"] *::-webkit-scrollbar-thumb:hover{background:#484F58}

/* ═══════════════════════════════════════════════════════════════
 * 2026-04-27 · 채팅 레이아웃 단순화 (revert v2/v3) — 안전 우선
 * ─ overflow:hidden + :has() + visualViewport 동기화 조합이 일부 모바일 환경에서
 *   화면이 검정으로 사라지는 회귀 발생. 복잡한 height 제어 제거.
 * ─ 핵심만: chat-area min-height:0 (flex 자식 overflow 가능하게) + compose flex-shrink:0.
 *   compose 는 기존 sticky 그대로. 키보드 보강은 dvh 의 자연 동작에 의존.
 * ═══════════════════════════════════════════════════════════════ */
:root{--compose-h:0px;--keyboard-h:0px}
.chat-area{min-height:0}
.app-shell--public .chat-area>:first-child{margin-top:auto}
.app-shell--public .compose:not(.compose--entry){flex:0 0 auto;flex-shrink:0}
/* 2026-04-28 · compose sticky 견고화 — 채팅 모드에서 shell 높이를 viewport 로 잠가
 * chat-area 가 내부 스크롤만 하도록 강제. min-height:100dvh 만 두면 메시지가 많아질 때
 * shell 이 viewport 를 넘겨 sticky bottom:0 이 의도대로 동작 안 함. */
.app-shell--public:has(.chat-area){height:100dvh;min-height:0;overflow:hidden}
.app-shell--public .chat-area{flex:1 1 0;min-height:0;overflow-y:auto;overscroll-behavior:contain}
.app-shell--public .compose:not(.compose--entry){position:sticky;bottom:0;z-index:5}



/* ══════════════════════════════════════════════════
   2026-04-28 · BUG-010 + ENH-008(1차) · 하드코딩 hex 75% 토큰화
   다크모드에서 라이트 톤 inline style 영역의 시인성 보강.
   주의: !important 는 inline style 우회용으로만 한정.
   ══════════════════════════════════════════════════ */

/* 토큰 정의 — 향후 인라인 → token() 마이그레이션을 위한 표준 */
:root{
  --token-warm-bg:#FEF3C7; --token-warm-fg:#92400E;
  --token-success-bg:#D1FAE5; --token-success-fg:#065F46;
  --token-danger-bg:#FEE2E2; --token-danger-fg:#B91C1C;
  --token-info-bg:#DBEAFE; --token-info-fg:#1D4ED8;
  --token-purple-bg:#EDE9FE; --token-purple-fg:#6D28D9;
  --token-orange-bg:#FFF7ED; --token-orange-fg:#9A3412;
}
:root[data-theme="dark"]{
  --token-warm-bg:#3A2412; --token-warm-fg:#F5B252;
  --token-success-bg:#064E3B; --token-success-fg:#6EE7B7;
  --token-danger-bg:#3F1D1D; --token-danger-fg:#FCA5A5;
  --token-info-bg:#1E3A8A; --token-info-fg:#93C5FD;
  --token-purple-bg:#2E1065; --token-purple-fg:#C4B5FD;
  --token-orange-bg:#431407; --token-orange-fg:#FDBA74;
}

/* 헬퍼 클래스 — 향후 inline style 마이그레이션에 사용 */
.bg-warm-soft{background:var(--token-warm-bg)!important;color:var(--token-warm-fg)!important}
.bg-success-soft{background:var(--token-success-bg)!important;color:var(--token-success-fg)!important}
.bg-danger-soft{background:var(--token-danger-bg)!important;color:var(--token-danger-fg)!important}
.bg-info-soft{background:var(--token-info-bg)!important;color:var(--token-info-fg)!important}
.bg-purple-soft{background:var(--token-purple-bg)!important;color:var(--token-purple-fg)!important}
.bg-orange-soft{background:var(--token-orange-bg)!important;color:var(--token-orange-fg)!important}

/* 다크모드 — 자주 보이는 영역의 inline style 자동 보정 (!important 로 inline 우회) */
:root[data-theme="dark"] [style*="background:#FEF3C7"]{background:var(--token-warm-bg)!important;color:var(--token-warm-fg)!important}
:root[data-theme="dark"] [style*="background:#FEE2E2"]{background:var(--token-danger-bg)!important;color:var(--token-danger-fg)!important}
:root[data-theme="dark"] [style*="background:#FECACA"]{background:#451B1B!important;color:#FCA5A5!important;border-color:#7F1D1D!important}
:root[data-theme="dark"] [style*="background:#FFF7ED"]{background:var(--token-orange-bg)!important;color:var(--token-orange-fg)!important;border-color:#7C2D12!important}
:root[data-theme="dark"] [style*="background:#FED7AA"]{background:#431407!important;color:#FED7AA!important}
:root[data-theme="dark"] [style*="background:#D1FAE5"]{background:var(--token-success-bg)!important;color:var(--token-success-fg)!important}
:root[data-theme="dark"] [style*="background:#DBEAFE"]{background:var(--token-info-bg)!important;color:var(--token-info-fg)!important}
:root[data-theme="dark"] [style*="background:#EDE9FE"]{background:var(--token-purple-bg)!important;color:var(--token-purple-fg)!important}
:root[data-theme="dark"] [style*="background:#FEF2F2"]{background:#1F1010!important;color:#FCA5A5!important;border-color:#7F1D1D!important}

/* 인라인 #fff 카드 배경 다크 → surface */
:root[data-theme="dark"] [style*="background:#fff"],
:root[data-theme="dark"] [style*="background:#FFFFFF"]{background:var(--surface)!important;color:var(--text)!important}

/* 인라인 #F9FAFB / #FAFBFC 배경 (subtle) 다크 → surface-alt */
:root[data-theme="dark"] [style*="background:#F9FAFB"],
:root[data-theme="dark"] [style*="background:#FAFBFC"],
:root[data-theme="dark"] [style*="background:#FBFCFD"]{background:var(--surface-alt)!important}

/* 인라인 텍스트 컬러 보정 (라이트 톤 회색을 다크에서 가독) */
:root[data-theme="dark"] [style*="color:#6B7280"],
:root[data-theme="dark"] [style*="color:#4B5563"],
:root[data-theme="dark"] [style*="color:#374151"]{color:var(--text-secondary)!important}


/* ══════════════════════════════════════════════════
   2026-04-28 · 잔재 패치 (검증 라운드 1) · BUG-002 잔재 + BUG-011 보강
   ══════════════════════════════════════════════════ */

/* BUG-002 잔재 — admin-board-row 다크 시인성 (.proc-row 외 다른 layout) */
:root[data-theme="dark"] .admin-board-summary__title{color:var(--text)}
:root[data-theme="dark"] .admin-board-summary__title:hover{color:var(--green-dark)}
:root[data-theme="dark"] .admin-board-summary__sub{color:var(--text-secondary)}
:root[data-theme="dark"] .admin-board-summary__sub .is-danger{color:#FCA5A5}
:root[data-theme="dark"] .admin-board-row__open{color:var(--green-dark)}
:root[data-theme="dark"] .admin-board-row.is-expanded .admin-board-summary__title{color:var(--green-dark)}
:root[data-theme="dark"] .admin-board-row:hover td{background:#1C2333}
:root[data-theme="dark"] .admin-board-row.is-selected td{background:#0D2818}
:root[data-theme="dark"] .admin-board-row.is-active td{background:#172554}
:root[data-theme="dark"] .admin-board-row.is-expanded td{background:#1C2333}
:root[data-theme="dark"] .admin-board-row-expanded > td{background:#161B22}
/* 마스터 triage 카드 / 컴팩트 카드의 라이트 amber/red 배경을 다크에서 진한 톤으로 보정 */
:root[data-theme="dark"] .master-triage__card--amber{background:rgba(245,158,11,.08);border-color:rgba(245,158,11,.25)}
:root[data-theme="dark"] .master-triage__card--red{background:rgba(220,38,38,.10);border-color:rgba(220,38,38,.30)}
:root[data-theme="dark"] .master-triage__card--blue{background:rgba(59,130,246,.10);border-color:rgba(59,130,246,.30)}
:root[data-theme="dark"] .master-triage__card-title,
:root[data-theme="dark"] .master-triage__card-count{color:var(--text)}
:root[data-theme="dark"] .master-triage__card-sub{color:var(--text-secondary)}

/* BUG-011 보강 — admin-board-row 의 viewport 외 행은 reflow/렌더 비용 절감 */
.admin-board-row{content-visibility:auto;contain-intrinsic-size:0 56px}
/* 다크 토글 시 잠시 transition 끄기 — 84개 행 동시 background-color 보간 폭주 방지 */
html.skku-theme-switching *{transition:none!important}


/* ══════════════════════════════════════════════════
   2026-04-28 · ENH-008 (2차) · 다크 토큰화 잔여 + 가이드라인
   1차에서 처리되지 않은 추가 인라인 hex 패턴 보정.
   ══════════════════════════════════════════════════ */

/* 다크모드 — 1차 + α: 추가 라이트 톤 인라인 배경 자동 보정 */
:root[data-theme="dark"] [style*="background:#FEF2F2"]{background:#1F1010!important}
:root[data-theme="dark"] [style*="background:#FEF8E1"]{background:#3A2412!important}
:root[data-theme="dark"] [style*="background:#FFFBEB"]{background:#3A2412!important}
:root[data-theme="dark"] [style*="background:#F0FDF4"]{background:#0D2818!important}
:root[data-theme="dark"] [style*="background:#ECFDF5"]{background:#0D2818!important}
:root[data-theme="dark"] [style*="background:#F0F9FF"]{background:#0F1B30!important}
:root[data-theme="dark"] [style*="background:#FAFBFC"]{background:#1C2333!important}
:root[data-theme="dark"] [style*="background:#FAFAFA"]{background:#161B22!important}
:root[data-theme="dark"] [style*="background:#F8FAFC"]{background:#1C2333!important}
:root[data-theme="dark"] [style*="background:#F3F4F6"]{background:#262D38!important}
:root[data-theme="dark"] [style*="background:#fff"],
:root[data-theme="dark"] [style*="background:#FFF"]{background:var(--surface)!important}
:root[data-theme="dark"] [style*="background:#dc2626"]{background:#7F1D1D!important;color:#FCA5A5!important}
:root[data-theme="dark"] [style*="background:#3B82F6"]{background:#1E3A8A!important;color:#93C5FD!important}

/* 다크모드 텍스트 컬러 자동 보정 (라이트 회색 → 다크 친화적 회색) */
:root[data-theme="dark"] [style*="color:#888"]{color:var(--text-tertiary)!important}
:root[data-theme="dark"] [style*="color:#9CA3AF"]{color:var(--text-tertiary)!important}
:root[data-theme="dark"] [style*="color:#9AA0A6"]{color:var(--text-tertiary)!important}
:root[data-theme="dark"] [style*="color:#5F6368"]{color:var(--text-secondary)!important}
:root[data-theme="dark"] [style*="color:#1A1D21"]{color:var(--text)!important}
:root[data-theme="dark"] [style*="color:#0F172A"]{color:var(--text)!important}
:root[data-theme="dark"] [style*="color:#111827"]{color:var(--text)!important}
:root[data-theme="dark"] [style*="color:#1F2937"]{color:var(--text)!important}

/* 다크모드 강조 컬러 — light mode 의 진한 색 → 다크에서 연하게 */
:root[data-theme="dark"] [style*="color:#B91C1C"]{color:#FCA5A5!important}
:root[data-theme="dark"] [style*="color:#991B1B"]{color:#FCA5A5!important}
:root[data-theme="dark"] [style*="color:#7F1D1D"]{color:#FCA5A5!important}
:root[data-theme="dark"] [style*="color:#92400E"]{color:#F5B252!important}
:root[data-theme="dark"] [style*="color:#9A3412"]{color:#FDBA74!important}
:root[data-theme="dark"] [style*="color:#B45309"]{color:#F5B252!important}
:root[data-theme="dark"] [style*="color:#065F46"]{color:#6EE7B7!important}
/* 2026-08-12 경량점검 · #166534(민원대장 「✓ 모두 불러왔습니다」)이 이 표에서 빠져 있었다.
   같은 배너의 형제 두 줄(#B91C1C·#92400E)은 위에서 보정되는데 이 초록만 원색으로 남아,
   다크 배경(.admin-content #0D1117~#10151B) 위에서 명암비 2.65:1 / 2.57:1 이었다
   (AA 4.5:1 은 물론 대형텍스트 3:1 도 미달. 12px 이라 애초에 대형텍스트도 아니다).
   라이트 모드는 6.94:1 로 통과하므로 다크에서만 깨져 있었다.
   ★:not([style*="background"]) 가 «필수»다(적대적 리뷰 F1). 같은 #166534 리터럴을 용역사
     캠퍼스 배지도 쓰는데(index-inline.js renderMasterVendorCard · vendors-management.js),
     그쪽은 background:#DCFCE7 을 인라인으로 함께 찍는다. 그 배경은 이 파일 어디에도 다크
     보정이 없어서(#DCFCE7 은 styles.css 에 0회), 글자만 #6EE7B7 로 바꾸면 연초록 위 연초록이
     되어 6.41:1 → 1.39:1 로 «읽을 수 없게» 된다. 명암비를 고치려다 다른 자리를 부수는 셈이다.
     배경을 스스로 칠하는 요소는 제 배경과 짝이 맞으므로 건드리지 않는다. */
:root[data-theme="dark"] [style*="color:#166534"]:not([style*="background"]){color:#6EE7B7!important}
:root[data-theme="dark"] [style*="color:#1E40AF"]{color:#93C5FD!important}
:root[data-theme="dark"] [style*="color:#1D4ED8"]{color:#93C5FD!important}
:root[data-theme="dark"] [style*="color:#3730A3"]{color:#A5B4FC!important}
:root[data-theme="dark"] [style*="color:#6D28D9"]{color:#C4B5FD!important}
:root[data-theme="dark"] [style*="color:#7C3AED"]{color:#C4B5FD!important}
:root[data-theme="dark"] [style*="color:#0F766E"]{color:#5EEAD4!important}

/* 다크모드 border 컬러 보정 */
:root[data-theme="dark"] [style*="border-color:#FCA5A5"]{border-color:#7F1D1D!important}
:root[data-theme="dark"] [style*="border-color:#FECACA"]{border-color:#7F1D1D!important}
:root[data-theme="dark"] [style*="border-color:#FED7AA"]{border-color:#7C2D12!important}
:root[data-theme="dark"] [style*="border-color:#F59E0B"]{border-color:#B45309!important}
:root[data-theme="dark"] [style*="border:1px solid #d1d5db"],
:root[data-theme="dark"] [style*="border:1px solid #D1D5DB"],
:root[data-theme="dark"] [style*="border:1px solid #fecaca"],
:root[data-theme="dark"] [style*="border:1px solid #FECACA"]{border-color:var(--border)!important}

/* ──────── 가이드라인 (주석으로 코드 안에 보존) ────────
 * 신규 화면/컴포넌트 작성 시 다음 토큰 사용 권장:
 *   배경  : var(--surface), var(--surface-alt), var(--bg)
 *   텍스트: var(--text), var(--text-secondary), var(--text-tertiary)
 *   강조  : var(--green), var(--green-dark), var(--green-light)
 *   테두리: var(--border)
 *
 * 컬러 박스 (warm/danger/success/info/purple/orange):
 *   class="bg-warm-soft" / "bg-danger-soft" / "bg-success-soft" /
 *         "bg-info-soft" / "bg-purple-soft" / "bg-orange-soft"
 *   → light/dark 자동 전환
 *
 * 인라인 style="background:#XXX" 사용 시:
 *   - light/dark 매핑은 위의 [style*="..."] 셀렉터로 자동 보정됨
 *   - 단, 새 hex 코드 추가 시 이 파일에 다크 오버라이드 추가 필요
 *
 * 회피해야 할 것:
 *   - 인라인 hex 직접 사용 (가능하면 토큰/클래스로)
 *   - 흰색 배경 #fff 직접 (var(--surface) 사용)
 * ─────────────────────────────────────────────────── */


/* ══════════════════════════════════════════════════
   2026-04-28 · BUG-011 Phase 1 · 가상 스크롤 안전 보강
   ══════════════════════════════════════════════════ */

/* 행 너비 계산 가속 — table-layout fixed 로 column 폭 고정, layout 패스 단축 */
.admin-board-table{table-layout:fixed}
/* 정확한 intrinsic size — 1차 56px → 64px (실측 기반) */
.admin-board-row{content-visibility:auto;contain-intrinsic-size:0 64px}
/* 100행 초과 안내 배너 */
.admin-board-table-warn{padding:10px 14px;margin:8px 0;border:1px dashed var(--token-warm-fg);background:var(--token-warm-bg);color:var(--token-warm-fg);border-radius:8px;font-size:.82rem}
.admin-board-table-warn strong{font-weight:800}


/* 2026-04-28 · proc-dialog 우상단 X 닫기 버튼 + 다이얼로그 헤드 정렬 */
.proc-dialog{position:relative}
.proc-dialog__close{margin-left:auto;width:32px;height:32px;border-radius:50%;border:1px solid var(--proc-border-soft);background:var(--proc-surface-alt);color:var(--proc-text-2);cursor:pointer;display:grid;place-items:center;font-size:1.05rem;line-height:1;font-family:inherit;padding:0}
.proc-dialog__close:hover{background:var(--proc-border);color:var(--proc-text)}
.proc-dialog__close:focus-visible{outline:2px solid var(--proc-accent);outline-offset:2px}
:root[data-theme="dark"] .proc-dialog__close{background:#262D38;border-color:#30363D;color:#C9D1D9}
:root[data-theme="dark"] .proc-dialog__close:hover{background:#30363D;color:var(--text)}


/* ══════════════════════════════════════════════════
   2026-04-28 · 접수페이지 디자인 디테일 7항목
   B(완료 임팩트), C(메시지 버블), D-mod(사진), E(전환), F(폼), G(푸터), I(캐릭터)
   ══════════════════════════════════════════════════ */

/* ─── B. 접수 완료 화면 ─── */
/* 2026-04-28 · 캐릭터 제거 후 캠퍼스 배지가 체크 아이콘과 한 줄에 붙는 회귀 정리.
 * .success 를 flex column 으로 전환해 [캠퍼스 배지] → [체크] → [제목] → [접수번호] 순서로
 * 세로 정렬, 모든 자식 가운데 정렬 보장. */
.success{display:flex;flex-direction:column;align-items:center;text-align:center}
.success>.campus-meta{margin:0 0 14px}
.success__icon{
  display:inline-flex;width:88px;height:88px;border-radius:50%;
  background:linear-gradient(140deg,rgba(0,132,61,.10),rgba(0,132,61,.02));
  align-items:center;justify-content:center;font-size:2.6rem;
  animation:successCheckIn .55s cubic-bezier(.34,1.56,.64,1) both;
  margin-bottom:12px
}
@keyframes successCheckIn{
  from{transform:scale(.4) rotate(-12deg);opacity:0}
  60%{transform:scale(1.1) rotate(2deg);opacity:1}
  to{transform:scale(1) rotate(0);opacity:1}
}
.success__title{animation:successFadeUp .45s ease-out .2s both}
.success__receipt{
  position:relative;animation:successFadeUp .45s ease-out .35s both;
  font-family:ui-monospace,Menlo,'SF Mono',monospace;letter-spacing:.05em
}
.success__receipt-copy{
  display:inline-flex;align-items:center;justify-content:center;
  width:32px;height:32px;margin-left:8px;border-radius:50%;
  border:1px solid var(--border);background:var(--surface);cursor:pointer;
  transition:all .15s;font-size:.95rem;vertical-align:middle;color:var(--text-secondary)
}
.success__receipt-copy:hover{background:var(--green-light);border-color:var(--green);color:var(--green-dark);transform:translateY(-1px)}
.success__receipt-copy:active{transform:translateY(0) scale(.95)}
.success__desc,.success__notice,.success__actions{animation:successFadeUp .45s ease-out .5s both}
@keyframes successFadeUp{
  from{opacity:0;transform:translateY(8px)}
  to{opacity:1;transform:translateY(0)}
}

/* ─── C. 메시지 버블 ─── */
.msg{animation:msgIn .35s cubic-bezier(.22,.9,.3,1) both}
@keyframes msgIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}
.msg__bubble{box-shadow:0 1px 2px rgba(15,23,42,.04)}
.msg--system .msg__bubble{
  border-radius:14px 14px 14px 4px;
  position:relative
}
.msg--user .msg__bubble{
  border-radius:14px 14px 4px 14px;
  box-shadow:0 2px 6px rgba(0,132,61,.16)
}
:root[data-theme="dark"] .msg--user .msg__bubble{box-shadow:0 2px 6px rgba(63,185,80,.22)}

/* ─── D-mod. 사진 미리보기 (모바일 친화) ─── */
.photo-thumb{
  border-radius:10px;overflow:hidden;
  box-shadow:0 2px 8px rgba(15,23,42,.10),0 1px 2px rgba(15,23,42,.06);
  transition:transform .15s,box-shadow .15s
}
.photo-thumb:active{transform:scale(.97)}
.photo-thumb img{transition:transform .3s}
.photo-thumb:hover img{transform:scale(1.05)}
:root[data-theme="dark"] .photo-thumb{box-shadow:0 2px 8px rgba(0,0,0,.32),0 1px 2px rgba(0,0,0,.20)}

/* ─── E. 페이지 전환 미세 모션 ─── */
.review-card{animation:reviewIn .42s cubic-bezier(.22,.9,.3,1) both}
@keyframes reviewIn{from{opacity:0;transform:translateY(10px) scale(.99)}to{opacity:1;transform:translateY(0) scale(1)}}
.welcome,.suggest-chip{animation:welcomeIn .42s ease-out both}
.welcome{animation-delay:.05s}
.suggest-chip:nth-child(1){animation-delay:.12s}
.suggest-chip:nth-child(2){animation-delay:.18s}
.suggest-chip:nth-child(3){animation-delay:.24s}
.suggest-chip:nth-child(4){animation-delay:.3s}
@keyframes welcomeIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}

/* ─── F. 입력 폼 피드백 ─── */
.contact-fields input{transition:border-color .18s,box-shadow .18s}
.contact-fields input:focus{
  border-color:var(--green);
  box-shadow:0 0 0 3px rgba(0,132,61,.10)
}
.contact-fields input.is-valid{
  border-color:var(--green);
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='%2300843D' d='M6.5 11L3 7.5l1-1L6.5 9 12 3.5l1 1z'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 10px center;background-size:14px 14px;
  padding-right:34px
}
.contact-fields input.is-invalid{
  border-color:#DC2626;background:#FEF2F2
}
:root[data-theme="dark"] .contact-fields input.is-invalid{background:#3F1D1D}
.compose__char-count{
  position:absolute;right:14px;bottom:10px;font-size:11px;
  color:var(--text-tertiary);font-variant-numeric:tabular-nums;pointer-events:none;
  background:linear-gradient(transparent 0%,var(--surface-alt) 60%);
  padding:0 4px;border-radius:4px;opacity:0;transition:opacity .15s
}
.compose:focus-within .compose__char-count,.compose__char-count.is-shown{opacity:.85}

/* ─── G. 공식 푸터 ─── */
.public-footer{
  margin:24px auto 16px;padding:0 16px;text-align:center;
  /* ★작은 글자(2026-07-31): .7rem = 11.2px. 법정 고지 링크다 */
  font-size:.78rem;color:var(--text-tertiary);line-height:1.5;
  letter-spacing:.02em
}
.public-footer__brand{font-weight:700;color:var(--text-secondary)}
/* ★법정 고지 링크 터치 타깃(디자인 마감 2026-07-28) — 글자 높이 14px 가 그대로 탭 영역이었다.
   44px 대신 34px: 푸터 링크는 · 로 이어져 모바일에서 줄바꿈되므로 44px 히트영역은 줄끼리 겹쳐
   오탭을 늘린다. 34px 는 WCAG 2.5.8(AA) 최소 24px 를 넘기면서 푸터 증가를 줄당 20px 로 억제.
   문장 속 인라인 링크(.pii3-note 등)는 inline 예외라 손대지 않는다. */
.public-footer a{display:inline-block;min-height:34px;line-height:34px;padding:0 4px}
.public-footer__divider{margin:0 6px;opacity:.5}

/* ─── I. 캐릭터 활용 — success 화면에 미세 활용 ─── */
.success__character{
  display:block;margin:0 auto 4px;width:64px;height:64px;border-radius:50%;
  background:var(--green-light);overflow:hidden;
  animation:successCharIn .5s cubic-bezier(.34,1.56,.64,1) .15s both
}
.success__character img{width:100%;height:100%;object-fit:contain;padding:6px}
@keyframes successCharIn{from{opacity:0;transform:translateY(-6px) scale(.85)}to{opacity:1;transform:translateY(0) scale(1)}}


/* ══════════════════════════════════════════════════
   2026-05-28 · 모바일/다크 모드 점검 보정 패치
   - 공지사항(특히 pinned) 카드 다크 톤
   - --surface-subtle 토큰 신설 (그동안 fallback 으로만 동작)
   - 인라인 hex 추가 매핑 (#F5F3FF 등)
   - 모바일 inline-flex 가로 스크롤 깨짐은 .proc-chips / .mb-chips 미디어쿼리에서 처리됨
   ══════════════════════════════════════════════════ */

/* surface-subtle 토큰 정식 정의 (fallback 의존 → 명시 정의로) */
:root{ --surface-subtle:#FAFBFC; }
:root[data-theme="dark"]{ --surface-subtle:#1C2333; }

/* 공지사항 카드 다크 보정 — 클래스 직접 매핑(인라인 hex 아님) */
:root[data-theme="dark"] .dash-notice__item{
  background:var(--surface-subtle);
  border-color:var(--border);
}
:root[data-theme="dark"] .dash-notice__item--pinned{
  background:#2A2412;
  border-color:#B45309;
}
:root[data-theme="dark"] .dash-notice__form{
  background:var(--surface-subtle);
  border-color:var(--border);
}
:root[data-theme="dark"] .dash-notice__text{ color:var(--text); }
:root[data-theme="dark"] .dash-notice__meta{ color:var(--text-secondary); }
:root[data-theme="dark"] .dash-notice__act{ color:var(--text-secondary); border-color:var(--border); }
:root[data-theme="dark"] .dash-notice__act:hover{ background:var(--surface-alt); color:var(--text); }

/* dash-today / dash-sla 등 동일 변수 사용 영역도 함께 보정 */
:root[data-theme="dark"] .dash-today__cell{
  background:var(--surface-subtle);
  border-color:var(--border);
}

/* proc-dialog 의 공사 의뢰/공사 발주 종결 카드 (#F5F3FF 보라색 라이트 톤) */
:root[data-theme="dark"] [style*="background:#F5F3FF"]{
  background:#2E1065!important;
  color:var(--text)!important;
  border-color:#5B21B6!important;
}
:root[data-theme="dark"] [style*="border:1px solid #C4B5FD"]{ border-color:#5B21B6!important; }
:root[data-theme="dark"] [style*="border-color:#C4B5FD"]{ border-color:#5B21B6!important; }

/* 인라인 #fff 카드 내부에 박힌 짙은 텍스트 가독성 — 안전망 */
:root[data-theme="dark"] [style*="background:#fff"] [style*="color:#1F2937"],
:root[data-theme="dark"] [style*="background:#fff"] [style*="color:#111827"],
:root[data-theme="dark"] [style*="background:#FFFFFF"] [style*="color:#1F2937"]{
  color:var(--text)!important;
}

/* test-period-banner — linear-gradient 사용으로 인라인 매핑 미적용. 다크 보정. */
:root[data-theme="dark"] .test-period-banner{
  background:linear-gradient(180deg,#3A2412 0%,#2A1810 100%);
  border-color:rgba(245,158,11,.45);
  color:#FED7AA;
}

/* admin-board-table-wrap / admin-fold / admin-compact-panel 등 라이트 그라데이션 사용 영역 다크 보정 */
:root[data-theme="dark"] .admin-compact-panel,
:root[data-theme="dark"] .admin-fold,
:root[data-theme="dark"] .admin-board-table-wrap,
:root[data-theme="dark"] .admin-board-detail{
  background:var(--surface);
  border-color:var(--border);
}
:root[data-theme="dark"] .admin-board-expanded-cell{
  background:var(--surface-alt);
  border-bottom-color:var(--border);
}
:root[data-theme="dark"] .admin-summary-line__item,
:root[data-theme="dark"] .admin-simple-item{
  background:var(--surface);
  border-color:var(--border);
  color:var(--text);
}
:root[data-theme="dark"] .admin-content .admin-toolbar--sub{ background:var(--surface-alt); }

/* ★.mb 의 «리터럴» 토큰을 다크에서 한 번에 갈아끼운다(2026-08-25 점검).
   .mb 블록(2840행)은 --mb-surface·--mb-text 만 테마 변수를 참조하고 --mb-text-2/--mb-surface-alt/
   --mb-border-soft 는 라이트 리터럴이라, 아래 소비처별 오버라이드가 «빠뜨린» 곳이 그대로 남았다 —
   .mb-hero__greet 가 다크 배경(#161B22) 위 #4B5563 = 2.29:1 로 읽히지 않았다.
   소비처를 하나씩 덮는 대신 토큰을 덮으면 누락이 원리상 생기지 않는다.
   특이도: :root[data-theme="dark"] .mb (0,2,1) > .mb (0,1,0) 이라 이긴다.
   ※--mb-text-3 은 «일부러» 두었다 — 위 주석 참조(바꾸면 6.81:1 → 2.09:1 로 나빠진다).
   ★2R 리뷰가 짚은 부작용을 «의도»로 적어 둔다(다음 점검이 또 파지 않도록):
     그 결과 다크에서 --mb-text-2(#8B949E, 5.62:1) 가 --mb-text-3(#9CA3AF, 6.81:1) 보다 «약해져»
     라이트와 위계가 뒤집힌다(목록 행에서 시간이 본문 메타보다 또렷하다).
     둘 다 4.5:1 을 넘으므로 접근성 위반은 아니고, 위계를 되살리려면 --mb-text-3 을 낮춰야 하는데
     그 방향이 곧 2.09:1 이다. **명암비를 위계보다 우선한 판단이며, 되돌리려면 다크 팔레트
     (--text-tertiary #484F58) 자체를 손봐야 한다 — 그건 이 파일 전역 영향이라 사람 결정 사항.** */
:root[data-theme="dark"] .mb{
  --mb-surface-alt:var(--surface-alt);
  --mb-text-2:var(--text-secondary);
  --mb-border-soft:var(--border);
}

/* mb-list (메일함 리스트) 다크 보정 */
:root[data-theme="dark"] .mb-list,
:root[data-theme="dark"] .mb-list__head,
:root[data-theme="dark"] .mb-row{ background:var(--surface); color:var(--text); }
:root[data-theme="dark"] .mb-list__head{ background:var(--surface-alt); color:var(--text-secondary); border-color:var(--border); }
:root[data-theme="dark"] .mb-row{ border-bottom-color:var(--border); }
:root[data-theme="dark"] .mb-row:hover{ background:var(--surface-alt); }
:root[data-theme="dark"] .mb-row__title{ color:var(--text); }
:root[data-theme="dark"] .mb-row__meta{ color:var(--text-secondary); }
/* ★2026-08-25 점검: 이 두 줄이 다크에서 «명암비를 낮추고» 있었다 — 다크 --text-tertiary(#484F58)를
   --surface(#161B22) 위에 얹으면 2.09:1 이다. .mb 가 들고 있는 --mb-text-3(#9CA3AF)는 같은 배경에서
   6.81:1 이라 오히려 손대지 않는 편이 낫다. 토큰을 바꾸지 말고 원래 값으로 되돌린다. */
:root[data-theme="dark"] .mb-row__time{ color:var(--mb-text-3); }
:root[data-theme="dark"] .mb-empty{ color:var(--mb-text-3); }

/* mb-chips / mb-chip 다크 보정 — pressed 상태 까만 칩 → 다크 모드에서는 녹색 강조 */
:root[data-theme="dark"] .mb-chip{ background:var(--surface); border-color:var(--border); color:var(--text-secondary); }
:root[data-theme="dark"] .mb-chip[aria-pressed="true"]{ background:#3FB950; color:#0D1117; border-color:#3FB950; }
:root[data-theme="dark"] .mb-chip[aria-pressed="true"] .n{ color:#0D1117; opacity:.7; }
:root[data-theme="dark"] .mb-seg{ background:var(--surface); border-color:var(--border); }
:root[data-theme="dark"] .mb-seg button{ color:var(--text-secondary); }
:root[data-theme="dark"] .mb-seg button[aria-selected="true"]{ background:#3FB950; color:#0D1117; }
:root[data-theme="dark"] .mb-search input{ background:var(--surface); border-color:var(--border); color:var(--text); }
:root[data-theme="dark"] .mb-search input::placeholder{ color:var(--text-tertiary); }
:root[data-theme="dark"] .mb-hero{ background:var(--surface); border-color:var(--border); }
:root[data-theme="dark"] .mb-hero__chip{ background:var(--surface-alt); border-color:var(--border); color:var(--text-secondary); }
:root[data-theme="dark"] .mb-hero__progress{ background:var(--surface-alt); }

/* ★메일함 «상세 시트»(.mbd-*) 다크 보정 — 2026-08-25 점검에서 다크 규칙이 0건임이 드러났다.
   .mbd-* 블록(2911행~)은 색을 전부 라이트 리터럴로 박아 두어, 다크 테마에서 목록은 어두운데
   행을 열면 전면 흰 시트가 떴다(형제 .proc-dialog 와 .mb-* 는 이미 다크 대응이 있다).
   색은 전부 실측 명암비로 골랐다 — 본문 13.29:1 · 보조문구 5.10:1 · 뒤로 6.81:1.
   (1R 리뷰 정정: 종전 여기에 5.62 라 적었으나 그건 --text-secondary 값이고, .mbd-back 은 --brand 로 6.81 이다.)
   ★1R 적대적 리뷰(2026-08-25) 반영 — 종전 주석은 「컬러 배지는 자체 배경을 들고
   있어 그대로 둔다」고 단언했으나 틀렸다 — 자체 배경을 들어도 «특이도»에서 진다.
   .mbd-btn(0,1,0) 대비 :root[data-theme="dark"] .mbd-btn(0,3,0) 가 이겨 --primary/--danger/--accent
   가 전부 회색으로 평준화됐다 — 오늘 확인 대화상자를 붙인 「검수 통과」가
   옆 버튼과 구분되지 않게 되어 수리 의도와 정면으로 어긋난다.
   → :not([class*="mbd-btn--"]) 로 «기본형»에만 걸어 modifier 색을 살려 둔다. */
:root[data-theme="dark"] .mbd-dialog{ background:var(--surface); color:var(--text); box-shadow:0 20px 40px rgba(0,0,0,.55); }
:root[data-theme="dark"] .mbd-title{ color:var(--text); }
:root[data-theme="dark"] .mbd-body{ background:var(--surface-alt); color:var(--text); }
:root[data-theme="dark"] .mbd-loc,
:root[data-theme="dark"] .mbd-meta{ color:var(--text-secondary); }
:root[data-theme="dark"] .mbd-badge:not([class*="mbd-badge--"]){ background:var(--surface-alt); color:var(--text-secondary); border-color:var(--border); }
:root[data-theme="dark"] .mbd-section{ background:var(--surface-alt); border-color:var(--border); }
:root[data-theme="dark"] .mbd-section__title{ color:var(--text-secondary); }
:root[data-theme="dark"] .mbd-radio{ color:var(--text); }
:root[data-theme="dark"] .mbd-radio[aria-disabled="true"]{ color:var(--text-secondary); }
:root[data-theme="dark"] .mbd-contact{ border-color:var(--border); color:var(--text-secondary); }
:root[data-theme="dark"] .mbd-contact b{ color:var(--text); }
:root[data-theme="dark"] .mbd-contact.none{ background:var(--surface-alt); color:var(--text-secondary); }
:root[data-theme="dark"] .mbd-upload{ background:var(--surface-alt); border-color:var(--border); color:var(--text-secondary); }
:root[data-theme="dark"] .mbd-upload__hint{ color:var(--text-secondary); }
:root[data-theme="dark"] .mbd-btn:not([class*="mbd-btn--"]){ background:var(--surface-alt); color:var(--text); border-color:var(--border); }
:root[data-theme="dark"] .mbd-btn:not([class*="mbd-btn--"]):hover{ background:var(--border); }
:root[data-theme="dark"] .mbd-photos .ph{ background:var(--surface-alt); border-color:var(--border); }
/* 청록 링크는 다크 배경에서 3.16:1 이라 브랜드 그린(6.81:1)으로 바꾼다. */
:root[data-theme="dark"] .mbd-back{ color:var(--brand); }

/* 추가 인라인 hex — 자주 등장하는 라이트 톤 */
:root[data-theme="dark"] [style*="background:#FAFAFA"]{ background:var(--surface-alt)!important; }
:root[data-theme="dark"] [style*="background:#f3f4f6"],
:root[data-theme="dark"] [style*="background:#F3F4F6"]{ background:var(--surface-alt)!important; }
:root[data-theme="dark"] [style*="background:#E5E7EB"]{ background:#30363D!important; }
:root[data-theme="dark"] [style*="background:#EFF6FF"]{ background:#0F1B30!important; color:#93C5FD!important; }
:root[data-theme="dark"] [style*="border-color:#E5E7EB"]{ border-color:var(--border)!important; }
:root[data-theme="dark"] [style*="border:1px solid #E5E7EB"]{ border-color:var(--border)!important; }
:root[data-theme="dark"] [style*="border:1px dashed #cbd5e1"]{ border-color:var(--border)!important; }

/* 짙은 텍스트 인라인 (#111827 / #1F2937) 가 다크 surface 위에 박히는 경우 — 보정 */
:root[data-theme="dark"] [style*="color:#111827"],
:root[data-theme="dark"] [style*="color:#1F2937"]{ color:var(--text)!important; }

/* ──────────────────────────────────────────────────
   2026-05-28 · 모바일 터치 UX 마이너 보정
   - iOS Safari 300ms tap delay 제거 (button/a/input)
   - 칩/버튼 텍스트 우발 선택 방지 (사용자 텍스트는 유지)
   ────────────────────────────────────────────────── */
button, a, [role="button"], .proc-chip, .mb-chip, .proc-seg button, .mb-seg button{
  touch-action:manipulation;
}
.proc-chip, .mb-chip, .proc-seg button, .mb-seg button, .proc-dialog__back, .proc-dialog__close, .mbd-back{
  -webkit-user-select:none; user-select:none;
}

/* ──────────────────────────────────────────────────
   2026-05-29 · 직원(staff) 통계 탭 — staff-stats-view 모듈
   - 캠퍼스 토글 / KPI / 캠퍼스 비교 누적막대 / 슬라이스 카드 / 피벗 표
   ────────────────────────────────────────────────── */
.staff-stats{padding:0;font-size:.875rem;color:var(--text)}
.staff-stats__header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px;flex-wrap:wrap}
.staff-stats__header-left{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.staff-stats__header-right{display:flex;gap:6px;align-items:center}
.staff-stats__title{font-size:1.05rem;font-weight:800;color:var(--text)}
.staff-stats__range{padding:6px 12px;border-radius:8px;border:1px solid var(--border);font-size:.82rem;font-weight:600;background:var(--surface);color:var(--text);font-family:var(--font)}
.staff-stats__range-dates{display:inline-flex;align-items:center;gap:4px;font-size:.78rem;color:var(--text-secondary);white-space:nowrap;font-variant-numeric:tabular-nums;font-weight:600}
.staff-stats__date{padding:5px 8px;border-radius:8px;border:1px solid var(--border);font-size:.78rem;background:var(--surface);color:var(--text);font-family:var(--font);font-variant-numeric:tabular-nums}
.staff-stats__date:focus{outline:none;border-color:var(--green);box-shadow:0 0 0 3px rgba(0,132,61,.1)}
.staff-stats__date-sep{color:var(--text-tertiary)}
.staff-stats__campus-toggle{display:inline-flex;padding:3px;background:var(--surface);border:1px solid var(--border);border-radius:999px}
.staff-stats__campus-pill{font-size:.75rem;padding:6px 14px;border-radius:999px;color:var(--text-secondary);background:transparent;border:0;cursor:pointer;font-family:inherit;line-height:1;transition:background .15s,color .15s}
.staff-stats__campus-pill:hover{color:var(--text)}
.staff-stats__campus-pill.is-active{background:var(--text);color:var(--surface);font-weight:600}
.staff-stats__campus-count{font-size:.625rem;opacity:.6;margin-left:3px}
.staff-stats__campus-pill.is-active .staff-stats__campus-count{opacity:.7}
.staff-stats__panel{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:14px 16px;margin-bottom:10px}
.staff-stats__kpi-row{display:flex;gap:28px;align-items:baseline;padding-bottom:10px;border-bottom:1px solid var(--border);flex-wrap:wrap}
.staff-stats__kpi{min-width:64px}
.staff-stats__kpi-label{font-size:.6875rem;color:var(--text-tertiary)}
.staff-stats__kpi-value{font-size:1.375rem;font-weight:700;line-height:1.1;color:var(--text);margin-top:1px}
.staff-stats__kpi.is-danger .staff-stats__kpi-label,
.staff-stats__kpi.is-danger .staff-stats__kpi-value{color:var(--danger,#DC2626)}
.staff-stats__bars{display:flex;flex-direction:column;gap:7px;margin-top:12px}
.staff-stats__bar-row{}
.staff-stats__bar-label{display:flex;justify-content:space-between;font-size:.6875rem;margin-bottom:3px}
.staff-stats__bar-name{color:var(--text-secondary);font-weight:600}
.staff-stats__bar-meta{color:var(--text-tertiary)}
/* 2026-07-26 · FMS-25 · 막대 라벨 rem 화. height→min-height + line-height:1 로 확대 시 막대가 따라 자란다.
   기본(루트 16px) 픽셀 동일: 세그먼트가 align-items:center 라 글자 상단 = (12 - 9)/2 = 1.5px 로
   line-height 값과 무관하게 고정되고, 내용(9px) < min-height(12px) 이므로 막대 높이도 12px 그대로. */
.staff-stats__bar-stack{display:flex;min-height:12px;border-radius:4px;overflow:hidden;font-size:.5625rem;line-height:1;color:#fff;font-weight:600}
.staff-stats__bar-seg{display:flex;align-items:center;justify-content:center;white-space:nowrap}
.staff-stats__bar-seg--done-natural{background:#185FA5}
.staff-stats__bar-seg--prog-natural{background:#85B7EB;color:#042C53}
.staff-stats__bar-seg--done-humanities{background:#0F6E56}
.staff-stats__bar-seg--prog-humanities{background:#5DCAA5;color:#04342C}
.staff-stats__bar-seg--delay{background:#E24B4A}
.staff-stats__bar-seg--una{background:#D1D5DB}
.staff-stats__section-label{font-size:.6875rem;font-weight:700;color:var(--text-tertiary);letter-spacing:.04em;margin:14px 0 6px}
.staff-stats__slice-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:14px}
.staff-stats__slice-grid.is-cols-2{grid-template-columns:repeat(2,1fr);max-width:50%}
.staff-stats__slice{background:var(--surface);border:1px solid var(--border);border-top:2px solid transparent;border-radius:8px;padding:11px 13px 10px}
.staff-stats__slice.is-dim{opacity:.55}
.staff-stats__slice--blue{border-top-color:#185FA5}
.staff-stats__slice--green{border-top-color:#0F6E56}
.staff-stats__slice-title{font-size:.625rem;color:var(--text-tertiary);font-weight:600}
.staff-stats__slice-num{font-size:1.375rem;font-weight:700;line-height:1.1;margin-top:3px;color:var(--text)}
.staff-stats__slice-sub{font-size:.625rem;color:var(--text-secondary);margin-top:3px}
.staff-stats__slice-avg{font-size:.625rem;color:var(--text-tertiary)}
.staff-stats__pivot-panel{padding:12px 14px 10px}
.staff-stats__dim-toggle{display:flex;gap:6px;align-items:center;margin-bottom:10px;flex-wrap:wrap}
.staff-stats__dim-label{font-size:.6875rem;color:var(--text-tertiary);margin-right:4px}
.staff-stats__dim-pill{font-size:.6875rem;padding:4px 10px;border-radius:12px;border:1px solid var(--border);color:var(--text-secondary);background:transparent;cursor:pointer;font-family:inherit;line-height:1;transition:background .15s,color .15s,border-color .15s}
.staff-stats__dim-pill:hover{color:var(--text)}
.staff-stats__dim-pill.is-active{background:#DBEAFE;color:#1E40AF;border-color:transparent;font-weight:600}
.staff-stats__table-wrap{overflow-x:auto}
.staff-stats__table{width:100%;font-size:.75rem;border-collapse:collapse}
.staff-stats__table thead th{text-align:right;padding:7px 6px;font-weight:600;color:var(--text-secondary);border-bottom:1px solid var(--border);white-space:nowrap}
.staff-stats__table thead th:first-child{text-align:left;width:32%}
.staff-stats__table thead th.is-danger{color:var(--danger,#DC2626)}
.staff-stats__table tbody td{text-align:right;padding:7px 6px;border-bottom:1px solid var(--border);color:var(--text)}
.staff-stats__table tbody td:first-child{text-align:left}
.staff-stats__table tbody tr:last-child td{border-bottom:none}
.staff-stats__table tbody tr.is-zero td{color:var(--text-tertiary)}
.staff-stats__row-name{font-weight:600}
.staff-stats__row-sub{color:var(--text-tertiary);font-size:.6875rem;margin-left:4px}
.staff-stats__table td.is-danger{color:var(--danger,#DC2626);font-weight:700}
.staff-stats__table tbody tr.staff-stats__group-head td{text-align:left;padding:9px 8px 5px;font-weight:700;color:var(--text);background:var(--surface-alt);border-bottom:1px solid var(--border)}
.staff-stats__group-count{font-weight:500;color:var(--text-secondary);font-size:.6875rem;margin-left:7px}
.staff-stats__table tbody tr.staff-stats__subtotal td{font-weight:700;color:var(--text-secondary);background:var(--surface-alt);border-top:1px solid var(--border)}
.staff-stats__table tbody tr.staff-stats__subtotal td:first-child{text-align:left}
.staff-stats__empty{text-align:center !important;color:var(--text-tertiary);padding:18px !important}
@media (max-width: 720px){
  .staff-stats__header{align-items:flex-start}
  .staff-stats__header-left{width:100%}
  .staff-stats__campus-toggle{width:100%;justify-content:space-between}
  .staff-stats__campus-pill{flex:1;text-align:center}
  .staff-stats__slice-grid{grid-template-columns:repeat(2,1fr)}
  .staff-stats__slice-grid.is-cols-2{max-width:100%}
  .staff-stats__kpi-row{gap:18px}
}

/* 2026-06-02 · 잠금화면 이메일/비밀번호 로그인·가입 폼 */
/* 포털 단일 로그인(2026-07-26): 자체 로그인 폼 제거로 __google/__divider/__fields/__input/__links/__link 규칙 삭제.
   남은 것은 안내 카드가 실제로 쓰는 컨테이너·버튼·문구 3종뿐. */
.lock-login{max-width:320px;margin:18px auto 0;display:flex;flex-direction:column;gap:10px;text-align:left}
.lock-login__submit{width:100%;margin-top:2px}
.lock-login__hint{color:var(--text-tertiary);font-size:.74rem;line-height:1.5;text-align:center;margin-top:2px}


/* ===== 2026-07-22 · M-01 · iOS 입력 포커스 줌 방지 =====
   접수·조회·검토 입력류를 모바일에서 16px 하한으로 고정(포커스 시 iOS 자동 확대 방지).
   !important는 위 .admin-toolbar/.admin-board-detail 등 고특이도 소형 폰트 규칙을 덮기 위함이며
   font-size에만 한정. 데스크톱(>640px)·다크모드·레이아웃 무영향(크기만).
   2026-07-26 · FMS-25 · 고정 16px → max(16px, 본문 rem) — 위 pointer:coarse 블록과 동일 사유.
   고정값이면 루트 확대 시 폰이 데스크톱보다 작아지는 역전이 발생한다. !important 는 값만 교체(유지).
   기본 환경(루트 16px)에서 모든 대응 rem 이 ≤1rem 이라 결과는 정확히 16px — 픽셀 동일. */
@media (max-width:640px){
  .compose__input{font-size:max(16px,.88rem) !important}
  .contact-fields input,
  .search-bar input{font-size:max(16px,.84rem) !important}
  .track-page__input{font-size:max(16px,.92rem) !important}
  .detail-form-grid input,
  .detail-form-grid select,
  textarea{font-size:max(16px,.98rem) !important}
}


/* ══════════════════════════════════════════════════
   2026-07-26 · 모바일 사용성 스윕 (배치 F · FMS)
   ★ 이 블록은 파일 최후행이어야 한다. 여기 담긴 규칙들은 앞쪽의 "더 뒤에 있는"
     동일 특이도 규칙(3850행대 .photo-thumb, 3820행대 .success__receipt-copy,
     4060/4100행대 .staff-stats__*)을 이기기 위해 위치로만 승부한다.
     다른 곳으로 옮기면 조용히 무효화된다.
   ══════════════════════════════════════════════════ */

/* FMS-17 · 민원 원문 복사 버튼 — staff-detail.js 인라인 스타일(≈17px)을 클래스로 승격 */
.detail-note__copy{display:inline-flex;align-items:center;justify-content:center;gap:4px;flex-shrink:0;min-width:44px;min-height:44px;padding:0 12px;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--text-secondary);font-family:var(--font);font-size:.78rem;font-weight:600;line-height:1;cursor:pointer;transition:background .12s,border-color .12s,color .12s}
.detail-note__copy:hover{background:var(--surface-alt);border-color:var(--green);color:var(--green-dark)}
.detail-note__copy:active{transform:scale(.97)}

/* FMS-23 · 로딩 오버레이 — 다크에서 흰 배경 80% 위 어두운 글자(대비 ≈1.07:1)로 '처리 중…'이 안 보이던 문제.
   .loading-card / .loading-card__text 는 마크업만 있고 규칙이 없어 여기서 처음 정의한다. */
.loading-card{display:grid;justify-items:center;gap:6px;padding:20px 26px;border-radius:16px;background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-md)}
.loading-card__text{font-size:.86rem;font-weight:700;color:var(--text);text-align:center}
/* prefers-color-scheme 분기는 두지 않는다 — data-theme 이 항상 명시 세팅되므로 죽은 코드이고,
   부트 첫 페인트에서 'OS 다크 + 저장값 라이트' 조합이면 오버레이만 어두워지는 역효과가 난다. */
:root[data-theme="dark"] .loading-overlay{background:rgba(13,17,23,.82)}

/* FMS-24 후속 · 상태 전이 버튼의 하드코딩 #fff 배경 다크 보정
   (616/716행은 라이트 디자인 의도라 유지하고, 다크에서만 더 높은 특이도로 덮는다) */
:root[data-theme="dark"] .status-action-btn{background:var(--surface-alt);border-color:var(--border);color:var(--text)}
:root[data-theme="dark"] #detailStatusSection .status-action-btn{background:var(--surface-alt);border-color:#2F5B44;color:#7EE2A8}
:root[data-theme="dark"] #detailStatusSection .status-action-btn:hover{background:#12241A;border-color:#3FB950}
:root[data-theme="dark"] .status-action-btn--terminal,
:root[data-theme="dark"] #detailStatusSection .status-action-btn.status-action-btn--terminal{background:#2A1212;border-color:#7F1D1D;color:#FCA5A5}
:root[data-theme="dark"] .status-action-btn--terminal:hover,
:root[data-theme="dark"] #detailStatusSection .status-action-btn.status-action-btn--terminal:hover{background:#3A1A1A;border-color:#B91C1C}

/* 터치 기기 최소 히트영역 — pointer:coarse 한정이라 마우스 레이아웃은 불변 */
@media (pointer:coarse){
  .tool-btn{min-height:44px;padding:0 14px}                                   /* FMS-02 사진 첨부 */
  .campus-inline{display:inline-flex;align-items:center;min-height:44px;padding:0 16px} /* FMS-05 캠퍼스 변경 */
  .success__receipt-copy{width:40px;height:40px}                              /* FMS-06 접수번호 복사(줄바꿈 위험으로 40px) */
  .admin-content .filter-row--clean .filter-pill{min-height:44px !important}  /* FMS-12 round11 !important 상쇄 */
  .staff-detail__other-btn{min-height:44px;padding:0 14px}                    /* FMS-20 '⋯ 다른 처리'(반려·이관) */
  .staff-detail__others{gap:8px}
  .staff-detail__toggle,.staff-detail__link{min-height:48px}
  .admin-filter-dropdown__item{min-height:44px;padding:0 12px}                /* FMS-21 */
  .master-sub-tab{min-height:44px;padding:0 14px}                             /* FMS-22 일괄 */
  .master-tabs__item{min-height:44px;padding:0 14px}
  .rules-subnav__tab{min-height:44px;padding:0 16px}
  .staff-stats__campus-pill{min-height:44px;padding:0 14px}
  .staff-stats__dim-pill{min-height:44px;padding:0 12px}
  /* 2026-08-12 경량점검 · 민원대장 배너 버튼(+500건 더 불러오기 · 전체 불러오기 · 다시 시도).
     인라인 style 로만 그려져 class 가 없어서 .btn{min-height:40px} 등 기존 구제를 하나도
     못 받았다(실측 높이 25.05px — 이 블록이 스스로 세운 44px 기준 미달).
     padding 은 인라인(3px 9px)이라 !important 가 필요하고, min-height·display 는 인라인에
     없으므로 그대로 이긴다. */
  [data-ledger-more],[data-ledger-all],[data-ledger-retry]{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:0 12px!important}
  .dash-notice__acts{gap:8px}
  .dash-notice__act{display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:44px}
  .mbd-back{display:inline-flex;align-items:center;min-height:44px;padding:8px 10px}
}

/* FMS-01 · 첨부사진 삭제(X) 18×18 — 사진 제거의 유일한 조작점.
   .photo-thumb{overflow:hidden}(3850행대)이 44px ::after 히트영역을 잘라내므로 overflow 를 풀고
   라운딩을 img 로 옮긴다. .photo-strip 도 overflow-x:auto 스크롤 컨테이너라 padding 으로 여유를 준다.
   셀렉터를 div.photo-thumb:not(--placeholder) 로 좁힌 이유: 같은 클래스를 관리 화면 첨부 스트립이
   <a class="photo-thumb"> 로 재사용하는데 거기엔 삭제 버튼이 없어 건드릴 이유가 없다.
   :active 확대는 썸네일 전체가 눌리는 것처럼 오인시키므로 모바일에서 해제. */
@media (max-width:640px){
  /* padding-top 은 ::after 상단 여유분(≥12px)까지 확보해야 한다 — overflow-x:auto 는 세로도 클리핑한다 */
  .photo-strip{padding-top:14px;padding-right:8px}
  div.photo-thumb:not(.photo-thumb--placeholder){overflow:visible;width:60px;height:60px;margin-right:10px}
  div.photo-thumb:not(.photo-thumb--placeholder) img{border-radius:10px}
  div.photo-thumb:not(.photo-thumb--placeholder):active{transform:none}
  div.photo-thumb:not(.photo-thumb--placeholder):hover img{transform:none}
  .photo-thumb__x{width:28px;height:28px;top:-6px;right:-6px;font-size:.74rem;box-shadow:0 1px 4px rgba(0,0,0,.35)}
  .photo-thumb__x::after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:44px;height:44px}
}

/* 보류-2 · 가로모드 캠퍼스 게이트 — '접수번호로 조회' 버튼이 폴드 23px 초과(라이브 실측).
   828/837행 min-height:calc(100dvh - ...) 가 짧은 뷰포트에서 shell 을 강제로 키우고
   730행 overflow:hidden 이 그 초과분을 잘라낸다. 짧은 가로 뷰포트에서만 밀도를 낮추고
   스크롤 탈출구를 연다(세로/데스크톱 레이아웃 불변). */
@media (orientation:landscape) and (max-height:560px){
  .submit-entry-shell{align-items:flex-start;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:12px 16px calc(12px + var(--safe-bottom))}
  .campus-gate{gap:10px;padding:16px 18px;border-radius:20px}
  .campus-gate__mark--character{width:52px;height:52px}
  .campus-gate__title{font-size:1rem}
  .campus-choice{min-height:46px;font-size:.92rem}
  .campus-gate__track{margin-top:2px}
}


/* 제3자 개인정보 간접수집 고지문(법 제20조, 2026-07-26 신설) — 정보주체가 아닌 직원이 제3자의
   이름·연락처를 입력하는 지점에 공통 삽입. 6개 앱 공통 클래스명 .pii3-note(문구도 동일). */
.pii3-note{font-size:.72rem;line-height:1.6;color:var(--text-secondary);margin:6px 0 0}
.pii3-note a{color:var(--green,#00843D);font-weight:700}


/* ★모바일 헤더 잘림 해소 (디자인 점검 2026-07-29)
   증상: .header 는 position:fixed 인데 내용이 454px 필요해 ≤500px 전 구간에서 오른쪽이 잘렸다.
         fixed 요소는 넘친 만큼 문서 스크롤을 만들지 않으므로 ☀️테마 토글은 360/414/430/480 어디서도
         '아예 도달 불가'였고 ≤414 에서는 로그아웃까지 잘렸다. 원인은 .header__right 의
         flex-wrap:nowrap(@216) + .header__right > *{flex-shrink:0}(@281) 조합 — 절대 줄지 않는다.
   택하지 않은 안 — 헤더 2행 흘림: ①고정 헤더가 휴대폰에서 56→약 99px 로 영구히 43px 더 먹는다.
         모바일 세로 공간은 이번 점검 내내 되찾아 온 자원이라 상시 비용으로 내주기 아깝다.
         ②2행이 되면 높이가 변해 --header-h → contact-strip/admin-tabs 오프셋 재동기화
         (index-inline.js:3735 의 FMS-25 ResizeObserver)에 의존하게 된다. 그 경로는 정상 동작하지만,
         높이를 아예 바꾸지 않으면 애초에 의존할 필요가 없다. 가로 스크롤 안은 헤더 높이가 상수라
         이 두 비용을 모두 피한다.
         ※2026-07-29 정정: 한때 "그 RO 가 발화하지 않는다"고 적었으나 **측정 오류**였다 —
           자동화 브라우저 탭이 document.visibilityState='hidden' 이라 rAF·ResizeObserver 가
           브라우저에 의해 정지된 상태에서 잰 값이었다(대조군으로 새로 만든 RO 도 0회 발화).
   ① .header__sub 숨김 — 휴대폰에서 '시설·일반 · 직원' 설명문은 컨트롤보다 우선순위가 낮다(브랜드 111→91).
   ② gap 축소로 여유 확보.
   ③ 그래도 남는 초과분은 컨트롤 스트립 가로 스크롤로 흡수 — 어떤 폭에서도 도달 불가가 없어진다.
      (같은 화면의 공종 필터 행이 이미 쓰는 방식이라 조작 관용도 일치.)
   ※padding/margin-block 8px: overflow-x:auto 는 overflow-y 를 auto 로 승격시켜 벨 위로 4px 튀어나온
     .alert-bell__count 배지를 잘라먹는다. 패딩으로 배지를 스크롤 박스 안에 넣고 음수 마진으로 높이는 원복.
   ※justify-content:flex-end 는 쓰지 말 것 — 넘친 내용이 왼쪽(스크롤 시작 反대편)으로 밀려 벨이 잘린다.
   실측(320/360/390/414/430/520): 헤더 높이 56 고정 · 라벨 잘림 0 · 배지 잘림 0 · 문서 가로스크롤 0 ·
     전 컨트롤 도달 가능. */
@media(max-width:520px){
  /* ★적대적 리뷰 반영(2026-07-29): 처음엔 .header__sub 를 전역으로 숨겼는데, 넘치는 건 관리자 헤더뿐이고
     시민 페이지(#app.app-shell--public)는 헤더 컨트롤이 테마 토글 1개라 애초에 넘치지 않는다.
     거기서까지 '시설·일반 민원' 부제를 지우는 건 이유 없는 손실이라 관리자로 좁힌다.
     특이도 (1,1,0) — @368 의 `@media(max-width:360px){.header__sub{display:none}}` 은 그대로 살아 있어
     시민 페이지의 ≤360 동작(종전부터 숨김)은 변하지 않는다. */
  #app:not(.app-shell--public) .header__sub{display:none}
  .header{gap:6px}
  .header__right{gap:3px;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;
    padding-block:8px;margin-block:-8px}
  .header__right::-webkit-scrollbar{display:none}
}


/* ★동작 줄이기(prefers-reduced-motion) 존중 — 지원 0건이었다(디자인 마감 2026-07-28).
   이 파일에 @keyframes 27개·animation: 34건이 있고 그중 entryStageIn(@761 translateY(30px))·
   adminDetailSlideIn(@1732) 처럼 큰 이동을 동반하는 것이 있어 전정기능 민감 사용자에게 부담이 된다.
   파일 맨 끝에 두고 !important 로 앞의 모든 규칙(다크 구획 포함)을 이긴다.
   OS 에서 동작 줄이기를 켜지 않은 사용자에게는 아무 변화도 없다. */
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;
    transition-duration:.01ms!important;scroll-behavior:auto!important}
}
