:root{
  /* Light mode (mapped to brand.css Quiet Authority tokens) */
  --canvas: var(--brand-canvas);
  --paper: var(--brand-paper);
  --ink: var(--brand-ink);
  --ink-muted: var(--brand-ink-soft);
  --gold: var(--brand-gold);
  --gold-light: var(--brand-line);
  --whisper: var(--brand-whisper);
  --ok: var(--brand-ok);
  --err: var(--brand-err);
  --info: #4a6fa5;
  --warn: var(--brand-warn);
  --rail-w: 220px; --tabs-h: 38px; --top-h: 46px;
}
[data-theme="dark"] {
  --canvas:#1A1714; --paper:#252220; --ink:#E8E4DC; --ink-muted:#9A8E7E;
  --gold:#C9A872; --gold-light:#5A4D3E; --whisper:#2D2925;
  --ok:#7DB37D; --err:#D87575; --info:#8AAACE; --warn:#E5A560;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0;height:100vh;overflow:hidden;background:var(--canvas);color:var(--ink);font-family:'Pretendard','Noto Sans KR',sans-serif;transition:background .2s,color .2s}

#auth-gate{display:none;position:fixed;inset:0;background:#0b0b0b;color:#eee;flex-direction:column;align-items:center;justify-content:center;z-index:99999;padding:40px;text-align:center}
#auth-gate h2{font-family:'Playfair Display',serif;font-weight:400;font-size:28px;margin:0 0 12px}
.btn-primary{background:var(--gold);color:#0b0b0b;border:0;padding:13px 28px;font-size:13.5px;font-weight:600;border-radius:8px;cursor:pointer;font-family:inherit}

#shell{display:none;flex-direction:column;height:100vh;width:100vw}

/* ═══ Top Bar ═══ */
.topbar{height:var(--top-h);background:var(--paper);border-bottom:1px solid var(--gold-light);display:flex;align-items:center;padding:0 12px;gap:10px;flex-shrink:0;z-index:100;position:relative}
.topbar .brand{display:flex;align-items:center;gap:10px;flex-shrink:0;cursor:pointer;padding:4px 10px;border-radius:8px;transition:background .15s}
.topbar .brand:hover{background:var(--whisper)}
.topbar .brand-mark{display:inline-flex;align-items:center;color:var(--gold);font-size:30px;line-height:1}
.topbar .brand-mark .icon-icon-ava{font-size:30px;line-height:1;color:var(--gold)}
.topbar .brand-sub{font-family:'Playfair Display',serif;font-style:italic;color:var(--ink);font-size:14px;font-weight:500;letter-spacing:.5px}

/* 검색 — 타입 칩 + 입력 (2026-05-08 강화 v3: 6칩 다 보이게 + fade 스크롤 힌트) */
.search-block{display:flex;flex:0 0 820px;min-width:740px;max-width:820px;align-items:stretch;background:var(--whisper);border:1px solid var(--gold-light);border-radius:8px;overflow:hidden;position:relative;min-height:32px}
.search-block:focus-within{border-color:var(--gold);background:var(--paper)}
.search-types{display:flex;gap:0;background:var(--paper);border-right:1px solid var(--gold-light);overflow-x:auto;flex-shrink:0;max-width:480px;scrollbar-width:thin;scrollbar-color:var(--gold-light) transparent;position:relative}
.search-types::-webkit-scrollbar{height:3px}
.search-types::-webkit-scrollbar-thumb{background:var(--gold-light);border-radius:2px}
.search-types::-webkit-scrollbar-track{background:transparent}
.search-types button{padding:0 9px;background:transparent;border:0;font-family:inherit;font-size:10.5px;color:var(--ink-muted);cursor:pointer;white-space:nowrap;border-bottom:2px solid transparent;font-weight:500}
.search-types button:hover{color:var(--ink)}
.search-types button.active{color:var(--ink);border-bottom-color:var(--gold);background:var(--whisper);font-weight:600}
.search-input{flex:1;padding:0 10px 0 28px;border:0;outline:none;background:transparent;font-family:inherit;font-size:12px;color:var(--ink);min-width:280px}
.search-icon{position:absolute;left:auto;color:var(--ink-muted);font-size:10.5px;pointer-events:none;display:flex;align-items:center;height:100%;padding-left:8px}
.search-results{position:absolute;top:calc(100% + 4px);left:0;right:0;background:var(--paper);border:0;border-radius:var(--brand-r-lg);box-shadow:var(--brand-shadow-modal);max-height:420px;overflow-y:auto;display:none;z-index:200}
.search-results.show{display:block}
.search-results .gh{padding:5px 12px;font-family:'Playfair Display',serif;font-style:italic;color:var(--gold);font-size:9.5px;letter-spacing:1.5px;text-transform:uppercase;background:var(--whisper);position:sticky;top:0}
.search-results .gi{padding:7px 12px;cursor:pointer;font-size:12px;border-bottom:1px solid var(--brand-line);display:flex;align-items:center;gap:8px}
.search-results .gi:hover{background:var(--whisper)}
.search-results .gi.kbd-active{background:var(--whisper);box-shadow:inset 3px 0 0 var(--gold)}
.search-results .gi i{color:var(--gold);width:14px;text-align:center;font-size:11px}
.search-results .gi .meta{color:var(--ink-muted);font-size:10.5px;margin-left:auto;font-family:monospace}
.search-results .gi .pname{font-weight:600}
.search-results .gi .ph{color:var(--ink-muted);font-size:10.5px;font-family:monospace;margin-left:5px}
.search-results .gi .qa{display:none;gap:3px;margin-left:auto}
.search-results .gi:hover .qa{display:inline-flex}
.search-results .gi .qa button{background:var(--paper);border:1px solid var(--gold-light);color:var(--ink-muted);font-size:9.5px;padding:2px 6px;border-radius:3px;cursor:pointer;font-family:inherit;display:inline-flex;align-items:center;gap:3px}
.search-results .gi .qa button:hover{background:var(--gold);color:#fff;border-color:var(--gold)}

/* 알림 센터 (벨 드롭다운) */
/* 시스템 헬스 LED (2026-05-10 UX, 제안 H) */
.ws-health{display:inline-flex;align-items:center;gap:3px;padding:6px 8px;border-radius:5px;border:1px solid var(--gold-light);background:#fff;cursor:pointer}
.ws-health:hover{border-color:var(--gold)}
.ws-health .led{width:7px;height:7px;border-radius:50%;background:#bbb;transition:.3s}
.ws-health .led.ok{background:#3F7A4F;box-shadow:0 0 4px rgba(63,122,79,.5)}
.ws-health .led.warn{background:#E07F1A;box-shadow:0 0 4px rgba(224,127,26,.5);animation:ledBlink 1s infinite}
.ws-health .led.err{background:#A03838;box-shadow:0 0 6px rgba(160,56,56,.7);animation:ledBlink .6s infinite}
@keyframes ledBlink{0%,100%{opacity:1}50%{opacity:.4}}

/* OR 모드 토글 — active 상태 시 강조 (2026-05-10 UX) */
#or-mode-toggle{padding:4px 9px;border-radius:5px;border:1px solid var(--gold-light);background:#fff;cursor:pointer;color:var(--ink-muted);font-family:inherit;transition:all .15s}
#or-mode-toggle:hover{border-color:var(--gold);color:var(--ink)}
#or-mode-toggle.active{background:linear-gradient(135deg,#FFD980,#FFA940);border-color:#A8743F;color:#5a3a00;font-weight:600}
#or-mode-toggle.active::before{content:'';display:inline-block;width:6px;height:6px;background:#5a3a00;border-radius:50%;margin-right:4px;animation:notifPulse 2s ease-in-out infinite}

.notif-btn{position:relative}
/* 알림 카운트 배지 — 숫자 + 응급(빨강)/일반(노랑) 색 구분 (2026-05-10 UX) */
.notif-btn .dot{position:absolute;top:-2px;right:-2px;min-width:16px;height:16px;padding:0 4px;background:var(--err);color:#fff;border-radius:99px;border:1.5px solid var(--paper);font-size:9.5px;font-weight:700;line-height:13px;text-align:center;font-family:'Pretendard',sans-serif;letter-spacing:-.3px;box-shadow:0 1px 3px rgba(0,0,0,.2)}
.notif-btn .dot.critical{background:var(--err);animation:notifPulse 1.5s ease-in-out infinite}
.notif-btn .dot.normal{background:var(--warn,#A8743F)}
@keyframes notifPulse{0%,100%{transform:scale(1);box-shadow:0 0 0 0 rgba(160,56,56,.6)}50%{transform:scale(1.08);box-shadow:0 0 0 6px rgba(160,56,56,0)}}
.notif-panel{position:absolute;top:calc(100% + 4px);right:8px;background:var(--paper);border:0;border-radius:var(--brand-r-lg);box-shadow:var(--brand-shadow-modal);width:360px;max-height:480px;overflow-y:auto;display:none;z-index:300}
.notif-panel.show{display:block}
.notif-panel .nh{padding:10px 14px;border-bottom:1px solid var(--brand-line);font-family:'Playfair Display',serif;font-style:italic;color:var(--gold);font-size:11px;letter-spacing:1.5px;text-transform:uppercase;display:flex;justify-content:space-between;align-items:center}
.notif-panel .nh button{background:transparent;border:0;color:var(--ink-muted);font-size:10.5px;cursor:pointer}
.notif-panel .ni{padding:10px 14px;border-bottom:1px solid var(--whisper);cursor:pointer;display:flex;gap:10px;transition:.12s}
.notif-panel .ni:hover{background:var(--whisper)}
.notif-panel .ni.seen{opacity:.55}
.notif-panel .ni.seen:hover{opacity:.85}
/* 2026-05-10 UX: 알림 카드 정보 밀도 ↑ (제안 D) */
.notif-panel .ni .body .hdr{font-size:12px;color:var(--ink);display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.notif-panel .ni .body .hdr b{font-weight:600}
.notif-panel .ni .body .hdr .t{margin-left:auto;font-size:10.5px;color:var(--ink-muted);font-family:monospace;font-weight:400}
.notif-panel .ni .body .quote{font-size:11.5px;color:var(--ink-muted);font-style:italic;margin-top:3px;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.notif-panel .ni .body .qa-row{display:flex;gap:5px;margin-top:6px;align-items:center}
.notif-panel .ni .body .qa-row .qa{background:var(--gold);color:#fff;border:0;padding:3px 9px;border-radius:4px;font-size:10.5px;cursor:pointer;font-family:inherit;font-weight:600}
.notif-panel .ni .body .qa-row .qa:hover{background:#8a6f4d}
.notif-panel .ni .body .qa-row .qa-call{display:inline-flex;align-items:center;justify-content:center;background:#3F7A4F;color:#fff;text-decoration:none;width:24px;height:22px;border-radius:4px;font-size:11px}
.notif-panel .ni .body .qa-row .qa-dismiss{margin-left:auto;background:transparent;border:1px solid var(--gold-light);color:var(--ink-muted);padding:2px 7px;border-radius:4px;font-size:10px;cursor:pointer;font-family:inherit}
.notif-panel .ni .body .qa-row .qa-dismiss:hover{border-color:var(--err);color:var(--err)}
.notif-panel .ni.critical .body .hdr b{color:var(--err)}
.notif-panel .ni.high .body .hdr b{color:var(--warn)}
.notif-panel .ni .icon{font-size:14px;color:var(--gold);width:22px;text-align:center;flex-shrink:0;margin-top:2px}
.notif-panel .ni.critical .icon{color:var(--err)}
.notif-panel .ni.high .icon{color:var(--warn)}
.notif-panel .ni.kakao .icon{color:#FAE100}
.notif-panel .ni .body{flex:1;font-size:12px}
.notif-panel .ni .body b{color:var(--ink)}
.notif-panel .ni .body .meta{font-size:10px;color:var(--ink-muted);margin-top:2px}
.notif-panel .empty{padding:30px 14px;text-align:center;color:var(--ink-muted);font-style:italic;font-size:11.5px}

/* 단축키 모달 */
.kbd-modal{position:fixed;inset:0;background:rgba(0,0,0,0.6);backdrop-filter:blur(8px);z-index:9500;display:none;align-items:center;justify-content:center;padding:20px}
.kbd-modal.show{display:flex}
.kbd-modal .panel{background:var(--paper);border-radius:var(--brand-r-lg);width:100%;max-width:520px;padding:24px;box-shadow:var(--brand-shadow-modal)}
.kbd-modal h3{font-family:'Playfair Display',serif;font-weight:400;font-size:20px;margin:0 0 16px;letter-spacing:.5px}
.kbd-modal .row{display:flex;justify-content:space-between;align-items:center;padding:7px 0;border-bottom:1px solid var(--whisper);font-size:13px}
.kbd-modal .row:last-child{border-bottom:0}
.kbd-modal kbd{background:var(--whisper);border:1px solid var(--gold-light);border-bottom-width:2px;padding:2px 8px;border-radius:4px;font-family:'JetBrains Mono','Courier New',monospace;font-size:11.5px;color:var(--ink);margin:0 2px}
.kbd-modal .label{color:var(--ink)}
.kbd-modal .desc{color:var(--ink-muted);font-style:italic;font-size:11.5px;margin-top:14px;text-align:center}

/* AI 상담 어시스턴트 사이드바 */
/* 2026-05-11 원장 요청: AI 토글을 우하단 FAB(+) 바로 위에 배치 — 좌하단 X */
.ai-toggle{position:fixed;right:22px;bottom:88px;z-index:310;width:48px;height:48px;border-radius:50%;background:linear-gradient(135deg,var(--gold),#8b6f4a);color:#fff;border:0;font-size:20px;cursor:pointer;box-shadow:0 6px 18px rgba(168,140,100,0.45);display:flex;align-items:center;justify-content:center;transition:.2s}
.ai-toggle:hover{transform:scale(1.05)}
.ai-toggle .pulse-dot{position:absolute;top:5px;right:5px;width:8px;height:8px;background:#fff;border-radius:50%;animation:pulseDot 1.5s infinite}
@keyframes pulseDot{0%,100%{opacity:1}50%{opacity:.4}}

.ai-side{position:fixed;top:0;right:0;bottom:0;width:380px;background:var(--paper);border-left:1px solid var(--gold-light);z-index:295;display:flex;flex-direction:column;transform:translateX(100%);transition:transform .25s ease;box-shadow:-8px 0 24px rgba(0,0,0,0.15)}
.ai-side.open{transform:translateX(0)}
/* ★ AI 사이드 열렸을 때 — 본문 380px 줄임 + FAB·toggle 도 왼쪽으로 */
body.ai-side-open #shell{transition:padding-right .25s ease;padding-right:380px}
body.ai-side-open .fab{right:400px}
body.ai-side-open .ai-toggle{right:400px;bottom:90px}   /* fab(20px) 위로 70px = 90px — 두 버튼 분리 유지 */
@media (max-width:900px){
  body.ai-side-open #shell{padding-right:0}
  body.ai-side-open .fab{right:14px}
  body.ai-side-open .ai-toggle{right:14px;bottom:80px}
}
.ai-side .head{padding:14px 18px;border-bottom:1px solid var(--gold-light);background:linear-gradient(135deg,#FBFAF8,#F5F2EC);display:flex;justify-content:space-between;align-items:center}
.ai-side .head .t{font-family:'Playfair Display',serif;font-style:italic;color:var(--gold);font-size:13px;letter-spacing:2px;text-transform:uppercase}
.ai-side .head .t i{margin-right:4px}
.ai-side .head .ctx{font-size:10.5px;color:var(--ink-muted);margin-top:2px;font-family:monospace}
.ai-side .head .x{background:transparent;border:0;color:var(--ink-muted);cursor:pointer;font-size:16px}

.ai-side .messages{flex:1;overflow-y:auto;padding:14px 16px;display:flex;flex-direction:column;gap:10px}
.ai-side .msg{padding:9px 12px;border-radius:10px;font-size:12.5px;line-height:1.6;white-space:pre-wrap;word-break:break-word}
.ai-side .msg.user{background:var(--gold);color:#fff;align-self:flex-end;max-width:88%;border-bottom-right-radius:3px}
.ai-side .msg.assistant{background:var(--whisper);color:var(--ink);align-self:flex-start;max-width:88%;border-bottom-left-radius:3px;border:1px solid var(--gold-light)}
.ai-side .msg.assistant .meta{font-size:9.5px;color:var(--ink-muted);margin-top:4px;font-style:italic;font-family:'Playfair Display',serif;letter-spacing:.5px}
.ai-side .msg.thinking{background:var(--whisper);color:var(--ink-muted);align-self:flex-start;font-style:italic}
.ai-side .msg.thinking::after{content:'...';animation:dots 1.2s infinite}
@keyframes dots{0%,20%{content:''}40%{content:'.'}60%{content:'..'}80%,100%{content:'...'}}

.ai-side .quick-prompts{padding:8px 16px;border-top:1px solid var(--whisper);display:flex;gap:5px;flex-wrap:wrap}
.ai-side .quick-prompts button{background:var(--whisper);border:1px solid var(--gold-light);color:var(--ink);padding:4px 9px;border-radius:999px;font-size:10.5px;cursor:pointer;font-family:inherit;white-space:nowrap}
.ai-side .quick-prompts button:hover{border-color:var(--gold);color:var(--gold)}

.ai-side .input-area{padding:10px 14px;border-top:1px solid var(--gold-light);background:var(--paper);display:flex;gap:6px;align-items:flex-end}
.ai-side .input-area textarea{flex:1;padding:8px 10px;border:1px solid var(--gold-light);border-radius:8px;font-family:inherit;font-size:12.5px;background:#fff;resize:none;min-height:38px;max-height:120px;color:var(--ink)}
.ai-side .input-area textarea:focus{outline:none;border-color:var(--gold)}
.ai-side .input-area button{background:var(--gold);color:#fff;border:0;padding:8px 12px;border-radius:8px;cursor:pointer;font-size:14px;font-family:inherit;flex-shrink:0;display:flex;align-items:center;justify-content:center;min-width:38px;height:38px}
.ai-side .input-area button:hover{background:#8b6f4a}
.ai-side .input-area button.mic{background:transparent;color:var(--gold);border:1px solid var(--gold-light)}
.ai-side .input-area button.mic.recording{background:var(--err);color:#fff;border-color:var(--err);animation:pulseRec 1s infinite}
@keyframes pulseRec{0%,100%{box-shadow:0 0 0 0 rgba(178,58,58,0.6)}50%{box-shadow:0 0 0 8px rgba(178,58,58,0)}}

.ai-side .empty{text-align:center;color:var(--ink-muted);font-style:italic;padding:30px 10px;font-size:12px}
.ai-side .empty .icon{font-size:36px;color:var(--gold-light);margin-bottom:10px}
.ai-side .empty .big{font-family:'Playfair Display',serif;font-style:italic;color:var(--gold);font-size:13px;letter-spacing:2px;text-transform:uppercase;margin-bottom:8px}

@media (max-width:780px){
  .ai-side{width:100%}
  .ai-toggle{bottom:80px;right:14px;width:42px;height:42px;font-size:17px}
}

/* 자리비움 잠금 화면 */
.away-lock{position:fixed;inset:0;background:rgba(11,11,11,0.92);backdrop-filter:blur(10px);z-index:99998;display:none;flex-direction:column;align-items:center;justify-content:center;padding:40px;text-align:center;color:#fff}
.away-lock.show{display:flex}
.away-lock .icon{font-size:48px;color:var(--gold);margin-bottom:16px}
.away-lock h2{font-family:'Playfair Display',serif;font-weight:400;font-size:30px;margin:0 0 10px;letter-spacing:1px}
.away-lock .sub{color:#aaa;font-size:14px;margin-bottom:30px}
.away-lock .clock-big{font-family:'Playfair Display',serif;font-size:48px;color:var(--gold);margin-bottom:20px;letter-spacing:2px}
.away-lock button{background:var(--gold);color:#0b0b0b;border:0;padding:13px 36px;font-size:14px;font-weight:600;border-radius:8px;cursor:pointer;font-family:inherit;letter-spacing:1px}
.away-lock button:hover{opacity:.9}

.topbar .actions{display:flex;align-items:center;gap:6px;margin-left:auto}
.topbar .actions .kpi{display:inline-flex;align-items:baseline;gap:3px;font-size:11px;color:var(--ink-muted);padding:3px 8px;border-radius:4px;cursor:pointer}
.topbar .actions .kpi:hover{background:var(--whisper)}
.topbar .actions .kpi .l{font-style:italic;font-family:'Playfair Display',serif;font-size:9.5px;letter-spacing:.3px}
.topbar .actions .kpi .v{font-family:'Playfair Display',serif;font-size:14px;font-weight:500;color:var(--ink)}
.topbar .actions .kpi.warn .v{color:var(--warn)}
.topbar .actions .kpi.err .v{color:var(--err)}
.topbar .iconbtn{background:transparent;border:0;color:var(--ink-muted);cursor:pointer;padding:5px 8px;border-radius:4px;font-size:13px}
.topbar .iconbtn:hover{background:var(--whisper);color:var(--ink)}
.topbar .iconbtn.active{color:var(--gold)}
.topbar .user{font-size:11px;color:var(--ink-muted);display:flex;align-items:center;gap:8px;padding-left:6px;border-left:1px solid var(--gold-light)}
.topbar .user button{background:transparent;border:1px solid var(--gold-light);color:var(--ink-muted);padding:3px 10px;border-radius:999px;font-family:inherit;font-size:10px;cursor:pointer}
.topbar .user button:hover{border-color:var(--gold);color:var(--gold)}

/* 핀 공지 띠 (있을 때만) */
.notice-bar{background:linear-gradient(90deg,#FEF3E7,#FBFAF8);border-bottom:1px solid #E8C48D;padding:5px 14px;font-size:11.5px;color:#8b5a26;display:flex;align-items:center;gap:8px;flex-shrink:0;cursor:pointer;display:none}
.notice-bar.show{display:flex}
.notice-bar:hover{background:linear-gradient(90deg,#FEF8E8,#FBFAF8)}
.notice-bar i{color:var(--warn)}
.notice-bar .ct{margin-left:auto;font-family:'Playfair Display',serif;font-style:italic;font-size:10.5px}
[data-theme="dark"] .notice-bar{background:linear-gradient(90deg,#3D3025,#2D2925);color:#E5A560;border-color:#5A4D3E}

/* ═══ Body ═══ */
.body{flex:1;display:flex;min-height:0;position:relative}

.rail{width:var(--rail-w);background:var(--paper);border-right:1px solid var(--gold-light);flex-shrink:0;overflow-y:auto;display:flex;flex-direction:column;transition:width .2s ease}
.rail.collapsed{width:48px}
.rail.collapsed .rail-section .header > span,
.rail.collapsed .rail-section .items{display:none}
/* 태블릿 (≤768px) — 기본 접힘 + 오버레이 */
@media (max-width: 768px){
  .rail{position:fixed;left:0;top:var(--top-h);bottom:0;z-index:250;box-shadow:2px 0 12px rgba(0,0,0,.18);transform:translateX(-100%)}
  .rail.tablet-open{transform:translateX(0)}
  /* 사이드바 열려있을 때 backdrop */
  .rail.tablet-open::after{content:'';position:fixed;top:var(--top-h);left:var(--rail-w);right:0;bottom:0;background:rgba(0,0,0,.3);z-index:-1}
  .topbar .rail-toggle{display:flex !important}
  /* 검색바 압축 */
  .search-block{flex:1;min-width:120px}
  .search-types{max-width:120px}
}
/* 데스크톱: 토글 버튼 숨김 */
.topbar .rail-toggle{display:none;background:transparent;border:0;color:var(--ink-muted);font-size:18px;padding:6px 10px;cursor:pointer;align-items:center}
.topbar .rail-toggle:hover{color:var(--gold)}
.rail-section{border-bottom:1px solid var(--whisper)}
.rail-section .header{padding:7px 14px;font-family:'Playfair Display',serif;font-style:italic;color:var(--gold);font-size:9.5px;letter-spacing:1.8px;text-transform:uppercase;cursor:pointer;display:flex;justify-content:space-between;align-items:center;user-select:none}
.rail-section .header:hover{background:var(--whisper)}
.rail-section .header i.chev{font-size:9px;transition:transform .15s}
.rail-section.open .header i.chev{transform:rotate(90deg)}
.rail-section .items{display:none;padding:0 0 4px}
.rail-section.open .items{display:block}
.rail-section .item{padding:5px 14px 5px 22px;font-size:12px;cursor:pointer;color:var(--ink);display:flex;align-items:center;gap:6px;border-left:3px solid transparent}
.rail-section .item:hover{background:var(--whisper);border-left-color:var(--gold-light)}
.rail-section .item.active{background:var(--whisper);border-left-color:var(--gold);color:var(--gold);font-weight:600}
.rail-section .item i{color:var(--gold);font-size:10px;width:14px;text-align:center;flex-shrink:0;opacity:.7}
.rail-section .item.active i{opacity:1}
.rail-section .item .star{margin-left:auto;color:var(--ink-muted);opacity:0;font-size:10px;cursor:pointer;padding:2px}
.rail-section .item:hover .star,.rail-section .item .star.fav{opacity:1}
.rail-section .item .star.fav{color:var(--warn)}

.rail.collapsed .header span,.rail.collapsed .item span,.rail.collapsed .item i,.rail.collapsed .item .star{display:none}
.rail.collapsed .header i.chev{display:none}

/* 즐겨찾기·최근 환자 (Rail 하단) */
.rail-bottom{margin-top:auto;border-top:1px solid var(--gold-light);padding:6px 0;background:var(--paper)}
.rail.collapsed .rail-bottom{display:none}
.rail-bottom h4{font-family:'Playfair Display',serif;font-style:italic;color:var(--gold);font-size:9.5px;letter-spacing:1.8px;text-transform:uppercase;margin:6px 14px 4px;display:flex;justify-content:space-between;align-items:center}
.rail-bottom .item{padding:4px 14px;font-size:11.5px;cursor:pointer;color:var(--ink);display:flex;align-items:center;gap:6px}
.rail-bottom .item:hover{background:var(--whisper)}
.rail-bottom .item .ph{color:var(--ink-muted);font-size:10px;font-family:monospace;margin-left:auto}
.rail-bottom .empty{color:var(--ink-muted);font-style:italic;font-size:10.5px;padding:4px 14px 8px;text-align:center}

.rail-collapse-btn{padding:6px 14px;color:var(--ink-muted);font-size:10.5px;cursor:pointer;border-top:1px solid var(--whisper);display:flex;align-items:center;gap:6px;background:transparent;border-left:0;border-right:0;border-bottom:0;font-family:inherit;width:100%;text-align:left}
.rail-collapse-btn:hover{background:var(--whisper);color:var(--ink)}

/* Main */
.main{flex:1;display:flex;flex-direction:column;min-width:0;background:var(--canvas)}

/* ═══ 상담 모드 (Privacy / Focus Mode) — Alt+C / Esc (2026-05-15 재미나이 #1) ═══
   환자 옆에서 모니터 보여줄 때 다른 환자 알림 차단 + 사이드바 접힘 + 풀스크린 몰입.
   의료법 §22 환자 개인정보 보호 — 다른 환자 정보가 우연히 노출되는 사고 방지. */
body.consult-mode .rail,
body.consult-mode .tabs-bar,
body.consult-mode #fab,
body.consult-mode .ai-toggle,
body.consult-mode .ai-side,
body.consult-mode .notif-panel,
body.consult-mode .emergency-stack,
body.consult-mode .topbar .search-block,
body.consult-mode .topbar #kpi-area,
body.consult-mode .topbar .ws-health,
body.consult-mode .topbar .notif-btn,
body.consult-mode .topbar #or-mode-toggle,
body.consult-mode .topbar .theme-btn,
body.consult-mode .topbar .iconbtn[onclick*="showKbdHelp"],
body.consult-mode .topbar .user,
body.consult-mode .notice-bar,
body.consult-mode #impersonate-banner,
body.consult-mode .ava-ui-toast-stack {
  display: none !important;
}
/* 마케팅 허브 링크도 숨김 */
body.consult-mode .topbar a[href*="marketing-hub"] { display: none !important; }
body.consult-mode .topbar { justify-content: space-between; background: linear-gradient(135deg, var(--paper) 0%, var(--whisper) 100%); }
body.consult-mode .topbar .brand::after {
  content: ' · 🤝 상담 모드';
  color: var(--gold);
  font-family: 'Playfair Display', serif;
  font-style: italic;
  font-weight: 500;
  margin-left: 8px;
}
/* 상담 모드 종료 안내 — 상단바 우측에 작은 hint */
body.consult-mode .topbar::after {
  content: 'Alt+C 또는 Esc 로 해제';
  color: var(--ink-muted);
  font-size: 11px;
  font-style: italic;
  margin-right: 14px;
  letter-spacing: 0.04em;
}
/* 프레임 영역 풀스크린 강조 */
body.consult-mode .main {
  background: var(--paper);
  box-shadow: inset 0 0 0 1px var(--gold-light);
}
/* 상담 모드 진입/해제 부드러운 전환 */
body, body.consult-mode .topbar, body.consult-mode .main {
  transition: background 0.2s ease;
}

/* ─── Tier 1A: 탭 overflow fade gradient — 좌우 끝에 "더 있음" 시각 hint (2026-05-15) ─── */
.tabs-bar{height:var(--tabs-h);background:var(--whisper);border-bottom:1px solid var(--gold-light);display:flex;align-items:center;padding:0 8px;gap:2px;overflow-x:auto;flex-shrink:0;position:relative;scrollbar-width:thin;scrollbar-color:var(--gold-light) transparent}
.tabs-bar::-webkit-scrollbar{height:3px}
.tabs-bar::-webkit-scrollbar-thumb{background:var(--gold-light);border-radius:2px}
.tabs-bar::-webkit-scrollbar-track{background:transparent}
/* 좌/우 fade — sticky pseudo 로 스크롤과 무관하게 가장자리 표시 */
.tabs-bar::before, .tabs-bar::after {
  content:'';
  position:sticky; top:0; height:100%;
  width:24px; pointer-events:none;
  flex-shrink:0;
  z-index:2;
  transition:opacity .15s ease;
}
.tabs-bar::before {
  left:0;
  background:linear-gradient(to right, var(--whisper) 30%, transparent);
  margin-right:-24px;  /* 탭 영역과 겹치게 */
  opacity:0;
}
.tabs-bar::after {
  right:0;
  background:linear-gradient(to left, var(--whisper) 30%, transparent);
  margin-left:-24px;
  opacity:0;
}
.tabs-bar.has-overflow-left::before { opacity:1; }
.tabs-bar.has-overflow-right::after { opacity:1; }
.tab{display:inline-flex;align-items:center;gap:6px;padding:7px 12px;background:transparent;border:0;border-bottom:2px solid transparent;font-family:inherit;font-size:12px;color:var(--ink-muted);cursor:pointer;white-space:nowrap;border-radius:4px 4px 0 0;transition:.1s;max-width:220px;flex-shrink:0;position:relative}
.tab:hover{background:rgba(0,0,0,0.04);color:var(--ink)}
/* Tier 1C: 활성 탭 강화 — 살짝 lift + 미세 그림자 (2026-05-15) */
.tab.active{background:var(--paper);color:var(--ink);border-bottom-color:var(--gold);font-weight:600;box-shadow:0 -1px 0 var(--gold), 0 -3px 8px rgba(168,140,100,0.08);transform:translateY(-1px);position:relative;z-index:2}
.tab.active i.icon{opacity:1;color:var(--gold)}
.tab i.icon{font-size:11px;color:var(--gold);flex-shrink:0}
.tab .title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:140px}
.tab .pin{color:var(--gold);font-size:9px}
.tab .close{margin-left:4px;color:var(--ink-muted);font-size:11px;width:14px;height:14px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;flex-shrink:0}
.tab .close:hover{background:rgba(0,0,0,0.1);color:var(--err)}
.tab .loading-dot{width:6px;height:6px;border-radius:50%;background:var(--gold);animation:pulse 1s infinite}
@keyframes pulse{0%,100%{opacity:.4}50%{opacity:1}}
/* 2026-05-10 UX: prewarmed 탭 = ⚡ 황금 표시 (즉시 로드 가능) */
.tab.prewarmed{border-bottom-color:#FFB300}
.tab .prewarm-bolt{color:#FFB300;font-size:10px;text-shadow:0 0 4px rgba(255,179,0,.4);animation:boltGlow 2s ease-in-out infinite}
@keyframes boltGlow{0%,100%{opacity:.7;transform:scale(1)}50%{opacity:1;transform:scale(1.1)}}
.tab.locked{opacity:.7;font-style:italic}
.tab.locked::after{content:'🔒';position:absolute;top:1px;right:1px;font-size:8px}

.tab-add{padding:6px 10px;color:var(--ink-muted);background:transparent;border:1px dashed var(--gold-light);border-radius:4px;font-size:11px;cursor:pointer;font-family:inherit;margin-left:6px;flex-shrink:0}
.tab-add:hover{color:var(--gold);border-color:var(--gold)}

/* Quick switch — 캘린더 ↔ 환자 등 빠른 전환 (탭바 우측) */
.quick-switch{margin-left:auto;display:flex;gap:3px;padding:0 6px;flex-shrink:0}
.quick-switch button{padding:5px 11px;border:1px solid var(--gold-light);background:var(--paper);border-radius:5px;font-family:inherit;font-size:11px;cursor:pointer;color:var(--ink);display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
.quick-switch button:hover{border-color:var(--gold);color:var(--gold)}
.quick-switch button.active{background:var(--gold);color:#fff;border-color:var(--gold);font-weight:600}
.quick-switch button i{font-size:10px}
@media (max-width:780px){.quick-switch button span{display:none}}

/* 탭 우클릭 메뉴 */
.tab-ctx{position:fixed;background:var(--paper);border:1px solid var(--gold-light);border-radius:6px;box-shadow:0 8px 20px rgba(0,0,0,0.18);z-index:9500;min-width:170px;padding:4px 0;display:none;font-size:12.5px}
.tab-ctx.show{display:block}
.tab-ctx .ti{padding:6px 14px;cursor:pointer;color:var(--ink);display:flex;align-items:center;gap:8px}
.tab-ctx .ti:hover{background:var(--whisper)}
.tab-ctx .ti i{color:var(--ink-muted);font-size:11px;width:13px;text-align:center}
.tab-ctx .ti.danger{color:var(--err)}
.tab-ctx .sep{height:1px;background:var(--whisper);margin:3px 0}

/* Iframe container */
.frames{flex:1;position:relative;overflow:hidden;background:var(--canvas)}
.frames iframe{position:absolute;inset:0;width:100%;height:100%;border:0;background:var(--paper);display:none}
.frames iframe.active{display:block}
/* ─── Tier 1B: iframe 로더 — 우아한 skeleton (2026-05-15) ─── */
.frame-loader{position:absolute;inset:0;display:flex;align-items:flex-start;justify-content:center;background:var(--paper);z-index:5;flex-direction:column;gap:14px;display:none;padding:32px 40px}
.frame-loader.show{display:flex}
/* skeleton 행들 — 자연스러운 너비 변주 */
.frame-loader::before {
  content:'';
  display:block;
  width:38%; height:22px; border-radius:6px;
  background:linear-gradient(90deg, var(--gold-light) 0%, var(--whisper) 50%, var(--gold-light) 100%);
  background-size:800px 100%;
  animation:wsSkelShimmer 1.4s linear infinite;
  margin-bottom:6px;
  align-self:flex-start;
}
.frame-loader::after {
  content:'';
  display:flex; flex-direction:column; gap:10px;
  width:100%;
  /* 가짜 카드 5개 — repeating-linear-gradient 로 한 줄로 */
  background:
    linear-gradient(90deg, var(--whisper) 0%, var(--gold-light) 50%, var(--whisper) 100%) 0   0   / 100% 14px no-repeat,
    linear-gradient(90deg, var(--whisper) 0%, var(--gold-light) 50%, var(--whisper) 100%) 0  28px / 76% 14px no-repeat,
    linear-gradient(90deg, var(--whisper) 0%, var(--gold-light) 50%, var(--whisper) 100%) 0  56px / 92% 14px no-repeat,
    linear-gradient(90deg, var(--whisper) 0%, var(--gold-light) 50%, var(--whisper) 100%) 0  84px / 68% 14px no-repeat,
    linear-gradient(90deg, var(--whisper) 0%, var(--gold-light) 50%, var(--whisper) 100%) 0 112px / 84% 14px no-repeat;
  background-size:800px 14px;
  animation:wsSkelShimmer 1.4s linear infinite;
  height:140px;
}
@keyframes wsSkelShimmer { 0% { background-position:-400px 0; } 100% { background-position:400px 0; } }
@media (prefers-reduced-motion: reduce) {
  .frame-loader::before, .frame-loader::after { animation:none; }
}
/* 기존 spinner·label HTML은 숨김 (skeleton 으로 대체) */
.frame-loader .spinner{display:none}
.frame-loader .label{display:none}
@keyframes spin{to{transform:rotate(360deg)}}

.frames .empty{display:flex;align-items:center;justify-content:center;height:100%;color:var(--ink-muted);font-style:italic;font-family:'Gowun Batang',serif;flex-direction:column;gap:14px}
.frames .empty .big{font-family:'Playfair Display',serif;font-style:italic;color:var(--gold);font-size:18px;letter-spacing:3px;text-transform:uppercase}
.frames .empty .icon{font-size:48px;color:var(--gold-light)}

/* FAB 빠른 액션 */
.fab{position:fixed;bottom:20px;right:20px;z-index:300;display:flex;flex-direction:column;align-items:flex-end;gap:8px;pointer-events:none}
.fab > *{pointer-events:auto}   /* 컨테이너는 click pass-through, 자식 버튼만 hit */
.fab-main{width:52px;height:52px;border-radius:50%;background:var(--gold);color:#fff;border:0;font-size:20px;cursor:pointer;box-shadow:0 6px 18px rgba(168,140,100,0.4);display:flex;align-items:center;justify-content:center;transition:.2s}
.fab-main:hover{transform:scale(1.05);box-shadow:0 8px 24px rgba(168,140,100,0.5)}
.fab-main.open{background:var(--err);transform:rotate(45deg)}
.fab-actions{display:flex;flex-direction:column-reverse;gap:6px;opacity:0;pointer-events:none;transition:.2s}
.fab.open .fab-actions{opacity:1;pointer-events:auto}
.fab-actions a,.fab-actions button{background:var(--paper);color:var(--ink);border:1px solid var(--gold-light);border-radius:999px;padding:8px 14px;font-size:12px;cursor:pointer;display:inline-flex;align-items:center;gap:6px;text-decoration:none;font-family:inherit;box-shadow:0 4px 10px rgba(0,0,0,0.1);white-space:nowrap}
.fab-actions a:hover,.fab-actions button:hover{border-color:var(--gold);color:var(--gold);transform:translateX(-2px)}
.fab-actions i{color:var(--gold);font-size:11px}

/* 응급 토스트 */
.emergency-stack{position:fixed;top:60px;right:20px;z-index:9000;display:flex;flex-direction:column;gap:8px;max-width:380px}
/* 2026-05-10 UX: 4번째 이상은 stacked (숨김) — "+N건 더 보기" 클릭 시 펼침 */
.emergency-stack .stacked{display:none}
.emerg-toast{background:var(--paper);border:2px solid var(--err);border-left:6px solid var(--err);border-radius:8px;padding:12px 14px;box-shadow:0 8px 24px rgba(178,58,58,0.3);animation:slideIn .3s ease;cursor:pointer;display:flex;gap:10px}
.emerg-toast.high{border-color:var(--warn);border-left-color:var(--warn);box-shadow:0 8px 24px rgba(201,123,38,0.3)}
.emerg-toast.medium{border-color:var(--gold);border-left-color:var(--gold);box-shadow:0 6px 18px rgba(168,140,100,0.25)}
.emerg-toast.complaint{border-color:#7B5BC9;border-left-color:#7B5BC9}
@keyframes slideIn{from{transform:translateX(100%);opacity:0}to{transform:translateX(0);opacity:1}}
.emerg-toast .icon{font-size:24px;color:var(--err);flex-shrink:0}
.emerg-toast.high .icon{color:var(--warn)}
.emerg-toast.medium .icon{color:var(--gold)}
.emerg-toast .body{flex:1;min-width:0}
.emerg-toast .sev{font-size:10px;font-weight:700;letter-spacing:1px;text-transform:uppercase;color:var(--err);margin-bottom:2px}
.emerg-toast.high .sev{color:var(--warn)}
.emerg-toast.medium .sev{color:var(--gold)}
.emerg-toast .pname{font-weight:600;font-size:13px;color:var(--ink)}
.emerg-toast .quote{font-size:11.5px;color:var(--ink-muted);margin-top:3px;font-style:italic;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.emerg-toast .close{background:transparent;border:0;color:var(--ink-muted);cursor:pointer;font-size:14px;padding:0 4px;align-self:flex-start}

/* 카톡 답장 토스트 */
.reply-toast{background:var(--paper);border:1px solid var(--gold);border-left:4px solid #FAE100;border-radius:8px;padding:10px 14px;box-shadow:0 6px 18px rgba(0,0,0,0.15);animation:slideIn .3s ease;cursor:pointer;display:flex;gap:8px;font-size:12px}
.reply-toast .icon{font-size:18px;color:#FAE100}
.reply-toast .body{flex:1}
.reply-toast .pname{font-weight:600;color:var(--ink);font-size:12.5px}
.reply-toast .msg{color:var(--ink-muted);font-size:11px;margin-top:2px;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}

/* Mobile */
@media (max-width:780px) {
  :root{--rail-w:200px;}
  .topbar{padding:0 6px;gap:5px}
  .search-block{flex:1;min-width:0}
  .search-types{max-width:120px}
  .topbar .actions{display:none}
  .topbar .user{display:none}
  .topbar .iconbtn.theme-btn{display:none}
  .rail{position:absolute;left:0;top:var(--top-h);bottom:0;z-index:50;box-shadow:4px 0 12px rgba(0,0,0,0.1);transform:translateX(-100%);transition:transform .2s}
  .rail.open-mobile{transform:translateX(0)}
  #rail-toggle{display:inline-flex !important}
  .quick-switch button{padding:5px 8px}
  .fab{bottom:14px;right:14px}
  .emergency-stack{top:50px;right:8px;left:8px;max-width:none}
  /* 모바일 키보드 회피 — focus 시 상단 고정 */
  .search-block:focus-within{position:sticky;top:0;z-index:300}
}
#rail-toggle{display:none;background:transparent;border:0;color:var(--ink);font-size:18px;cursor:pointer;padding:4px 8px;align-items:center}

/* 인쇄 — iframe 만 인쇄 */
@media print {
  .topbar, .notice-bar, .rail, .tabs-bar, .quick-switch, .fab, .emergency-stack, .tab-ctx { display: none !important; }
  .body, .main, .frames { all: unset; display: block !important; height: auto !important; }
  .frames iframe { position: static !important; width: 100% !important; height: auto !important; min-height: 100vh; }
}
