/* care-admin.css — ERP 관리자(데스크톱) 레이아웃. care-base.css 뒤에 로드 */

/* 상단 바 + 내비 */
.erp-head { background: var(--card); border-bottom: 1px solid var(--line); position: sticky; top: 0; z-index: 20; }
.erp-head-top { max-width: none; margin: 0 auto; padding: 12px 22px; display: flex; align-items: center; gap: 16px; } /* 전폭 — 좌우 여백 최소화(0821 대표) */
.erp-brand { font-size: 19px; font-weight: 750; letter-spacing: -0.02em; }
.erp-brand small { font-weight: 500; color: var(--ink-faint); font-size: 14px; margin-left: 6px; letter-spacing: 0; }
.erp-head-tools { margin-left: auto; display: flex; align-items: center; gap: 10px; }
.branch-select { padding: 7px 10px; border: 1px solid var(--line); border-radius: var(--radius-btn); font-size: 15px; background: #fff; color: var(--ink); }
.status { width: 9px; height: 9px; border-radius: 50%; background: #c9ced3; display: inline-block; }
.status.ok { background: var(--accent); } .status.err { background: var(--danger); }

.erp-nav { max-width: none; margin: 0 auto; padding: 0 22px; display: flex; gap: 2px; }
.erp-nav button { border: none; background: none; padding: 11px 14px; font-size: 16px; color: var(--ink-soft); cursor: pointer; border-bottom: 2px solid transparent; font-weight: 550; }
.erp-nav button:hover { color: var(--ink); }
.erp-nav button.active { color: var(--accent); border-bottom-color: var(--accent); }
.erp-nav button:disabled { color: #bcc2c8; cursor: not-allowed; }
.erp-nav button:disabled::after { content: ' 준비중'; font-size: 12px; }

.page { max-width: none; margin: 0 auto; padding: 22px 18px; }
/* 기준정보(설정) — 폼+참고표 위주라 와이드 모니터에서 카드가 과도하게 퍼짐. 급여관리 요율표처럼 실제로 넓어야 하는 표는 예외(0829 필드 폭 패스) */
#sec-master .master-panel, #sec-master #backupCard, #sec-master #xlsxCard { max-width: 900px; }
.section { }
.section-head { display: flex; align-items: baseline; gap: 10px; margin-bottom: 14px; }
.section-head h2 { margin: 0; font-size: 20px; font-weight: 700; letter-spacing: -0.01em; }
.section-head .hint { color: var(--ink-faint); font-size: 15px; }

/* 서브탭(기준정보 내부) */
.subtabs { display: inline-flex; gap: 2px; margin-bottom: 16px; flex-wrap: wrap; background: var(--surface-card); border-radius: var(--radius-btn); padding: 3px; }
.subtabs button { border: none; background: none; border-radius: var(--radius-btn); padding: 7px 14px; font-size: 14px; line-height: 1.2; color: var(--ink-soft); cursor: pointer; }
.subtabs button.active { background: #fff; color: var(--ink); font-weight: 700; box-shadow: 0 1px 2px rgba(20,20,19,.1); }

/* 카드/패널 */
.panel { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); box-shadow: var(--shadow); margin-bottom: 18px; overflow: hidden; }
.panel-head { padding: 13px 18px; border-bottom: 1px solid var(--line-soft); font-weight: 700; font-size: 16px; }
.panel-body { padding: 16px 18px; }

/* 인라인 추가 폼 */
.row-form { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; margin-bottom: 14px; }
.row-form input, .row-form select { padding: 8px 11px; border: 1px solid var(--line); border-radius: var(--radius-btn); font-size: 15px; background: #fff; color: var(--ink); }
.row-form input[type="text"] { min-width: 130px; }
.row-form input[type="number"] { width: 110px; }
.row-form label { font-size: 14px; color: var(--ink-soft); display: inline-flex; align-items: center; gap: 5px; }

/* 테이블 */
.table-scroll { overflow-x: auto; }
.grid { width: 100%; border-collapse: collapse; font-size: 15px; }
.grid th, .grid td { padding: 9px 10px; text-align: left; border-bottom: 1px solid var(--line-soft); white-space: nowrap; }
.grid th { font-size: 14px; font-weight: 600; color: var(--ink-soft); background: #ffffff; }
.grid td.num, .grid th.num { text-align: right; }
.grid td.act, .grid th.act { text-align: center; }
.grid td.ctr, .grid th.ctr { text-align: center; }
/* 일별 일정 표 — 담당자를 맨 앞에 두고 시간을 바짝 붙임(매니저 0828). 나머지 열은 왼쪽으로 몰리고 남는 폭은 오른쪽 여백. */
.sch-day th, .sch-day td { width: 1%; }
.sch-day th.sd-th, .sch-day td.sd-th { padding-right: 4px; }
.sch-day td.sd-th { font-weight: 600; }
.sch-day th.sd-tm, .sch-day td.sd-tm { padding-left: 6px; font-variant-numeric: tabular-nums; }
.sch-day th.act, .sch-day td.act { width: 99%; text-align: left; }

/* 담당자 표 — 고정 폭 균등 정렬 */
.th-grid { table-layout: fixed; }
.th-grid td, .th-grid th { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.grid tr:hover td { background: #ffffff; }
.grid tr.inactive td { color: var(--ink-faint); }
.grid .empty { text-align: center; color: var(--ink-faint); padding: 22px; }
.cell-input { width: 92px; padding: 5px 7px; border: 1px solid var(--line); border-radius: var(--radius-btn); font-size: 15px; }
/* 신규 신청 큐 */
.nav-badge { display: inline-block; min-width: 17px; height: 17px; padding: 0 6px; margin-left: 2px; border-radius: var(--radius-pill); background: var(--accent-soft); color: #b8481d; font-size: 13px; font-weight: 700; line-height: 17px; text-align: center; vertical-align: middle; }
#notifyBadge { background: var(--danger); color: #fff; } /* 발송 관리만 긴급 적색 유지 */
.btn-mini.primary { color: #fff; background: var(--cta, var(--accent)); border-color: transparent; }
.btn-mini.primary:hover { filter: brightness(0.95); }
.apps-table td.apps-memo { white-space: normal; max-width: 260px; color: var(--ink-soft); font-size: 14px; }
.grid td .badge:not(.on):not(.off):not(.warn):not(.danger) { background: #f0f1f3; color: var(--ink-faint); }
/* 진행 확정 · 티켓 발행 모달 */
.cfm-overlay { position: fixed; inset: 0; background: rgba(20, 22, 26, .45); display: flex; align-items: center; justify-content: center; z-index: 100; padding: 16px; }
.cfm-modal { background: var(--card); border-radius: var(--radius-lg); width: 100%; max-width: 420px; box-shadow: 0 20px 60px rgba(0, 0, 0, .3); overflow: hidden; display: flex; flex-direction: column; max-height: calc(100vh - 32px); max-height: calc(100dvh - 32px); }
.cfm-head { display: flex; align-items: center; justify-content: space-between; padding: 15px 18px; border-bottom: 1px solid var(--line); font-size: 17px; flex-shrink: 0; }
.cfm-x { border: 0; background: none; font-size: 18px; color: var(--ink-faint); cursor: pointer; padding: 2px 6px; }
.cfm-body { padding: 16px 18px; flex: 1 1 auto; min-height: 0; overflow-y: auto; -webkit-overflow-scrolling: touch; }
.cfm-member { font-weight: 700; font-size: 17px; }
.cfm-wish { font-size: 14px; color: var(--ink-soft); margin: 4px 0 14px; }
.cfm-f { display: flex; flex-direction: column; gap: 5px; margin-bottom: 12px; font-size: 14px; color: var(--ink-soft); }
/* ── 폼 라벨·힌트 위계(가독성 패스 0828 "텍스트가 너무 많다") — 전 페이지 공통 ──
   라벨=짧고 진하게 · 부가 설명(small)=제 줄에 작고 옅게 · 긴 설명=title 툴팁.
   힌트 규칙은 :where(0특이성) — .lbl-internal(빨강) 등 경고색 라벨이 항상 이기게. */
.cfm-f > span, .qb-kv > span { font-size: 13px; font-weight: 650; color: var(--ink); line-height: 1.35; }
:where(.cfm-f > span, .mf-label, .qb-kv > span) > :where(small) { display: block; font-size: 12px; font-weight: 400; color: var(--ink-faint); margin-top: 1px; line-height: 1.4; letter-spacing: 0; }
/* "?" 도움말 아이콘 — 긴 설명을 상시 노출 대신 요청 시에만 표시(PC=hover, 모바일=탭). 0829 가독성 2차 패스(초기값=title 툴팁 → 커스텀 팝오버로 교체) */
.info-tip { display: inline-flex; align-items: center; justify-content: center; width: 17px; height: 17px; margin-left: 4px; border: 1px solid var(--line); border-radius: 50%; background: #fff; color: var(--ink-faint); font-size: 11px; font-weight: 700; line-height: 1; cursor: help; flex: none; vertical-align: middle; -webkit-tap-highlight-color: transparent; }
.info-tip:hover, .info-tip:focus-visible, .info-tip.on { border-color: var(--accent); color: var(--accent); outline: none; }
.info-tip-pop { position: fixed; z-index: 300; display: none; max-width: min(320px, calc(100vw - 24px)); background: #fff; border: 1px solid var(--line); border-radius: var(--radius-btn); box-shadow: 0 8px 30px rgba(20,20,19,.16); padding: 10px 12px; font-size: 13px; line-height: 1.6; color: var(--ink-soft); }
.info-tip-pop b { color: var(--ink); font-weight: 700; }
.info-tip-pop code { background: var(--accent-soft); border-radius: 4px; padding: 1px 4px; font-size: 12px; }
.cfm-f select, .cfm-f input { padding: 10px 11px; border: 1px solid var(--line); border-radius: var(--radius-btn); font-size: 17px; background: #fff; color: var(--ink); }
.cfm-row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.cfm-calc { font-size: 14px; color: var(--ink-soft); background: var(--accent-soft); border-radius: var(--radius-btn); padding: 9px 11px; margin-bottom: 12px; font-variant-numeric: tabular-nums; }
/* 청구 총액 브레이크다운 (할인·부가세 반영) */
.cfm-quote { border: 1px solid var(--line); border-radius: var(--radius); padding: 11px 13px; margin-bottom: 12px; font-variant-numeric: tabular-nums; }
.cfm-q-line { font-size: 15px; color: var(--ink-soft); line-height: 1.7; }
.cfm-q-line b { color: var(--ink); }
.cfm-q-line .cfm-q-total { color: var(--accent); font-size: 17px; }
.cfm-copymsg { margin-top: 9px; font-size: 14px; padding: 7px 12px; }
.cfm-director-f { align-self: end; padding-bottom: 9px; }
/* 분할납부 행 — 결제방법(+카드 경로/카드사)+금액+삭제. 카드 선택 시 4칸이라 유연 줄바꿈 */
.lgf-pay-row { display: flex; flex-wrap: wrap; gap: 0 12px; align-items: flex-end; }
.lgf-pay-row .cfm-f { flex: 1 1 46%; min-width: 140px; }
.lgf-pay-row .lgf-rm { flex: 0 0 34px; width: 34px; height: 38px; margin: 0 0 14px; align-self: flex-end; }
.lgf-pay-row + .lgf-pay-row { border-top: 1px dashed var(--line); padding-top: 12px; margin-top: 2px; }
.cfm-foot { display: flex; gap: 10px; padding: 14px 18px; border-top: 1px solid var(--line); flex-shrink: 0; }
.cfm-foot button { white-space: nowrap; }
.cfm-foot .btn-ghost { flex: 0 0 90px; }
.cfm-foot .btn-primary { flex: 1; }
/* 포함 상세 편집기 */
.desc-modal { max-width: 460px; }
.desc-toolbar { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 10px; }
.desc-tb { border: 1px solid var(--line); background: #fff; border-radius: var(--radius-btn); padding: 6px 11px; font-size: 15px; cursor: pointer; color: var(--ink); }
.desc-tb:hover { background: #f2ebe1; }
.desc-tb mark { background: #fdf0c8; padding: 0 2px; border-radius: 2px; }
#descText { width: 100%; min-height: 120px; padding: 11px 12px; border: 1px solid var(--line); border-radius: var(--radius-btn); font-size: 15px; line-height: 1.6; font-family: ui-monospace, Menlo, monospace; resize: vertical; box-sizing: border-box; }
.desc-preview-label { font-size: 14px; color: var(--ink-soft); margin: 13px 0 6px; }
.desc-preview { border: 1px solid var(--line); border-radius: var(--radius-btn); padding: 12px 14px; background: #ffffff; font-size: 16px; color: var(--ink); min-height: 40px; line-height: 1.65; }
.desc-cell { min-width: 200px; }
.desc-mini { font-size: 14px; color: var(--ink-soft); max-width: 250px; max-height: 44px; overflow: hidden; margin-bottom: 5px; line-height: 1.4; }
.dim { color: var(--ink-faint); }
/* 상세 서식 렌더 공통 */
.ap-desc-body b, .ap-desc-body strong { font-weight: 700; }
.ap-desc-body mark { background: #fdf0c8; color: inherit; padding: 0 3px; border-radius: var(--radius-sm); }
.ap-desc-body ul, .ap-desc-body ol { margin: 6px 0; padding-left: 18px; }
.ap-desc-body li { margin: 3px 0; }
.ap-desc-body p { margin: 6px 0; }
.cell-input.wide { width: 150px; }
/* 담당자 이름 + 원장 왕관 */
.th-name { display: flex; align-items: center; gap: 5px; }
.th-crown { font-size: 16px; line-height: 1; margin-right: 4px; }
.th-name-cell b { font-weight: 600; }
/* 아이콘 버튼(연필·휴지통) */
.ic-btn { border: 1px solid var(--line); background: var(--card); border-radius: var(--radius-sm); width: 30px; height: 28px; display: inline-grid; place-items: center; cursor: pointer; color: var(--ink-soft); vertical-align: middle; padding: 0; }
.ic-btn:hover { background: var(--surface-card); color: var(--ink); }
.ic-btn.danger { color: var(--danger); }
.ic-btn.danger:hover { background: var(--danger-soft); border-color: #e6cbc7; }
/* 담당자 상세 우측 드로어 */
.drawer-overlay { position: fixed; inset: 0; background: rgba(20,22,26,.4); z-index: 100; display: flex; justify-content: flex-end; }
.drawer { width: 420px; max-width: 92vw; height: 100%; background: var(--card); box-shadow: -8px 0 30px rgba(0,0,0,.15); display: flex; flex-direction: column; overflow: hidden; animation: dwIn .28s cubic-bezier(.22,1,.36,1); }
@keyframes dwIn { from { transform: translateX(34px); opacity: 0; } to { transform: none; opacity: 1; } }
@keyframes dwInUp { from { transform: translateY(34px); opacity: 0; } to { transform: none; opacity: 1; } }
/* 좁은 화면(태블릿·폰) — 우측 드로어 대신 포털과 동일한 하단시트로(0829 드로어→하단시트 패스) */
@media (max-width: 840px) {
  .drawer-overlay { align-items: flex-end; }
  .drawer { width: 100%; max-width: none; height: auto; max-height: 88vh; border-radius: var(--radius-lg) var(--radius-lg) 0 0; animation-name: dwInUp; }
}
.drawer-head { display: flex; align-items: center; justify-content: space-between; padding: 16px 20px; border-bottom: 1px solid var(--line); }
.drawer-head b { font-size: 18px; }
.drawer-body { flex: 1; overflow-y: auto; padding: 4px 20px 28px; }
.dw-sec { padding: 18px 0; border-bottom: 1px solid var(--line-soft); }
.dw-sec:last-child { border-bottom: 0; }
.dw-h { font-size: 15px; font-weight: 700; color: var(--ink); margin-bottom: 12px; }
.dw-f { display: flex; flex-direction: column; gap: 6px; margin-bottom: 12px; font-size: 14px; color: var(--ink-soft); }
.dw-f em { font-style: normal; color: var(--ink-faint); font-weight: 400; font-size: 13px; }
.dw-f input { padding: 10px 12px; border: 1px solid var(--line); border-radius: var(--radius-btn); font-size: 16px; background: #fff; color: var(--ink); }
.dw-sec .btn-primary { width: 100%; }
.dw-stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 9px; }
.dw-stats > div { background: var(--surface-card); border-radius: var(--radius); padding: 12px 8px; text-align: center; }
.dw-stats span { display: block; font-size: 13px; color: var(--ink-soft); margin-bottom: 4px; }
.dw-stats b { font-size: 17px; font-variant-numeric: tabular-nums; }
.dw-note { font-size: 14px; color: var(--ink-faint); margin: 0 0 12px; }
.dw-off-list { display: flex; flex-direction: column; gap: 6px; margin-bottom: 12px; }
.dw-off-empty { font-size: 14px; color: var(--ink-faint); padding: 6px 2px; }
.dw-off-row { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 9px 12px; border: 1px solid var(--line); border-radius: var(--radius-btn); font-size: 15px; }
.dw-off-add { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.dw-off-add input[type="date"] { padding: 8px 10px; border: 1px solid var(--line); border-radius: var(--radius-btn); font-size: 15px; }
.dw-off-add input[type="text"] { flex: 1; min-width: 90px; padding: 8px 10px; border: 1px solid var(--line); border-radius: var(--radius-btn); font-size: 15px; }
.dw-off-add > span { color: var(--ink-faint); }
/* 메뉴 관리 — 대분류→소분류→회차별 단가 */
.menu-tree { display: flex; flex-direction: column; gap: 18px; }
.mcat-h { display: flex; align-items: center; justify-content: space-between; gap: 8px; font-size: 16px; font-weight: 750; color: var(--accent-deep); margin-bottom: 8px; padding-bottom: 6px; border-bottom: 2px solid var(--accent-soft); }
.mcat-ord { display: inline-flex; gap: 4px; flex: 0 0 auto; }
.mcat-ord .ic-btn { width: 26px; height: 26px; padding: 0; display: inline-flex; align-items: center; justify-content: center; font-size: 15px; line-height: 1; }
.mcat-ord .ic-btn:disabled { opacity: .32; cursor: default; background: var(--card); }
.mcat-ord .ic-btn:disabled:hover { background: var(--card); color: var(--ink-soft); }
.msub { border: 1px solid var(--line); border-radius: var(--radius); padding: 12px 14px; margin-bottom: 8px; background: var(--card); }
.msub-head { display: flex; align-items: center; gap: 8px; justify-content: space-between; }
.msub-name { width: 240px; max-width: 50%; font-weight: 600; font-size: 16px; }
.msub-act { display: flex; gap: 6px; align-items: center; flex: 0 0 auto; }
.msub-desc { margin: 8px 0 2px; font-size: 15px; color: var(--ink-soft); }
.msub-tiers { display: flex; flex-wrap: wrap; align-items: center; gap: 7px; margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--line); }
.msub-tlabel { font-size: 14px; color: var(--ink-soft); font-weight: 600; margin-right: 4px; }
.tier-chip { display: inline-flex; align-items: center; gap: 6px; background: var(--accent-soft); color: var(--accent-deep); border-radius: var(--radius-btn); padding: 5px 8px 5px 11px; font-size: 14px; font-weight: 600; font-variant-numeric: tabular-nums; }
.tier-x { border: 0; background: none; color: var(--accent-deep); cursor: pointer; font-size: 14px; padding: 0 2px; opacity: .7; }
.tier-x:hover { opacity: 1; }
.tier-add { display: inline-flex; align-items: center; gap: 5px; }
.tier-in { width: 60px; padding: 5px 8px; border: 1px solid var(--line); border-radius: var(--radius-btn); font-size: 14px; }
.tier-in.tier-price { width: 100px; }
.cell-input.num { text-align: right; font-variant-numeric: tabular-nums; }

/* 견적 화면 */
.quote-wrap { display: grid; grid-template-columns: 1fr 360px; gap: 22px; align-items: start; }
.quote-form .field { display: flex; flex-direction: column; gap: 6px; margin-bottom: 14px; }
.quote-form .field > span { font-size: 15px; font-weight: 600; color: var(--ink-soft); }
.quote-form select, .quote-form input[type="text"] { padding: 10px 12px; border: 1px solid var(--line); border-radius: var(--radius-btn); font-size: 16px; background: #fff; color: var(--ink); }
.quote-form .chk { flex-direction: row; align-items: center; gap: 8px; font-size: 16px; color: var(--ink); }

/* 영수증 카드 */
.receipt { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); box-shadow: var(--shadow); padding: 20px; position: sticky; top: 90px; }
.receipt h3 { margin: 0 0 4px; font-size: 17px; }
.receipt .rc-sub { color: var(--ink-faint); font-size: 14px; margin-bottom: 14px; }
.rc-line { display: flex; justify-content: space-between; padding: 7px 0; font-size: 16px; border-bottom: 1px dashed var(--line-soft); }
.rc-line .rc-label { color: var(--ink-soft); }
.rc-line .rc-val { font-variant-numeric: tabular-nums; }
.rc-line.rc-total { border-bottom: none; margin-top: 6px; padding-top: 12px; border-top: 2px solid var(--line); font-weight: 750; font-size: 19px; }
.rc-line.rc-total .rc-val { color: var(--accent); }
.rc-muted .rc-val { color: var(--ink-faint); }
.receipt .rc-actions { display: flex; gap: 8px; margin-top: 16px; }

.stub { text-align: center; color: var(--ink-faint); padding: 60px 20px; font-size: 17px; }
.warn-txt { color: var(--warn); }

/* 회원 2-pane */
.members-wrap { display: grid; grid-template-columns: 320px 1fr; gap: 20px; align-items: start; }
.members-list .table-scroll { max-height: 70vh; overflow-y: auto; }
.mem-row { cursor: pointer; }
.mem-row.sel td { background: var(--accent-soft) !important; }
.members-detail { min-height: 200px; }

.mem-head { display: flex; justify-content: space-between; gap: 16px; flex-wrap: wrap; background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); box-shadow: var(--shadow); padding: 16px 18px; margin-bottom: 14px; }
.mem-head h3 { margin: 0 0 4px; font-size: 19px; }
.mem-link { font-size: 14px; color: var(--ink-faint); }
.mem-link code { background: var(--surface-card); padding: 1px 6px; border-radius: var(--radius-sm); word-break: break-all; }
.mem-kpis { display: flex; gap: 18px; }
.mem-kpis > div { text-align: right; }
.mem-kpis span { display: block; font-size: 13px; color: var(--ink-soft); }
.mem-kpis b { font-size: 19px; font-variant-numeric: tabular-nums; }

/* 아코디언 */
/* 회원 상세 탭 (기본정보 / 홈·출장 조건 / 관리스케줄 / 결제) */
.mem-tabs { display: flex; gap: 4px; margin-bottom: 12px; border-bottom: 2px solid var(--line); }
.mem-tab { border: none; background: none; cursor: pointer; font-size: 16px; font-weight: 600; color: var(--ink-soft); padding: 9px 14px 8px; border-bottom: 2.5px solid transparent; margin-bottom: -2px; display: inline-flex; align-items: center; gap: 6px; }
.mem-tab:hover { color: var(--ink); }
.mem-tab.on { color: var(--accent); border-bottom-color: var(--accent); font-weight: 750; }
.mem-tab-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--danger, #c0392b); }
.mem-tabbody { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); box-shadow: var(--shadow); margin-bottom: 12px; overflow: hidden; }
.mem-sub-div { font-size: 15px; font-weight: 750; color: var(--ink); margin: 18px 0 10px; padding-top: 14px; border-top: 1px solid var(--line); grid-column: 1 / -1; display: flex; align-items: center; }
.mem-sub-div small { font-weight: 400; color: var(--ink-faint); margin-left: 6px; }
.mem-sub-div .sub-div-act { margin-left: auto; }
/* 내부 메모=빨강 · 포털 노출 필드=주황 경고 — 내부 메모를 고객 노출 칸에 잘못 적는 실수 방지 */
.lbl-internal { color: #c62828 !important; }
.lbl-internal small { color: #c62828; opacity: .85; font-weight: 700; }
.ta-internal { border: 1.6px solid #e57373 !important; background: #fff5f5 !important; }
.ta-internal:focus { outline: none; border-color: #c62828 !important; box-shadow: 0 0 0 3px rgba(198, 40, 40, .12); }
.ta-internal::placeholder { color: #c62828; opacity: .45; }
.lbl-exposed { color: #b26a00 !important; font-weight: 700; }
.ta-exposed { border: 1.6px solid #ffb74d !important; background: #fffdf4 !important; }

/* 관리스케줄 탭 — 배정 폼 + 고객 희망(예약 신청) 표시 */
.assign-box { border: 1px solid var(--line); border-radius: var(--radius); padding: 12px 14px; margin-bottom: 6px; grid-column: 1 / -1; }
.assign-box .row-form { margin: 0; }
/* 시간 = 24시간제 시·분 드롭다운 + 분 직접입력 (배정 드로어와 동일 패턴) */
.as-timerow { display: inline-flex; align-items: center; gap: 4px; }
.as-timerow .as-tsep { color: var(--ink-faint); font-size: 13px; }
.as-timerow select { font-variant-numeric: tabular-nums; }
.as-timerow select:disabled { background: #f1efe9; color: var(--ink-faint); border-style: dashed; cursor: not-allowed; }
.row-form .as-timerow input[type="number"]#asMinDirect { width: 84px; margin-left: 4px; } /* '분 직접' 플레이스홀더가 안 잘리는 폭 */
.row-form .as-timerow input[type="number"]#asHourDirect { width: 58px; }
.wish-note { background: var(--accent-soft); border-radius: var(--radius-btn); padding: 10px 12px; margin-bottom: 11px; font-size: 15px; color: var(--ink); line-height: 1.6; }
.wish-note .wish-memo { color: var(--ink-soft); margin-top: 2px; }
.wish-note .wish-sub { color: var(--ink-faint); font-size: 14px; margin-top: 4px; }
/* 탭 본문(acc-body 2열 그리드) 안에서 목록·폼·테이블은 항상 풀폭 */
.mem-tabbody .sched-list, .mem-tabbody .note-add, .mem-tabbody #noteList,
.mem-tabbody .row-form, .mem-tabbody .table-scroll, .mem-tabbody #buyArea, .mem-tabbody #payArea { grid-column: 1 / -1; }
.acc { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); box-shadow: var(--shadow); margin-bottom: 12px; overflow: hidden; }
.acc > summary { padding: 13px 18px; font-weight: 700; font-size: 16px; cursor: pointer; list-style: none; }
.acc > summary::-webkit-details-marker { display: none; }
.acc > summary::before { content: '▸ '; color: var(--ink-faint); }
.acc[open] > summary::before { content: '▾ '; }
.acc-body { padding: 8px 18px 18px; display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px 18px; }
.mf { display: flex; flex-direction: column; gap: 4px; }
.mf-wide { grid-column: 1 / -1; }
.mf-label { font-size: 13px; font-weight: 650; color: var(--ink); line-height: 1.35; }
.mf .cell-input, .mf-textarea { width: 100%; }
.mf-textarea { min-height: 60px; resize: vertical; font-family: inherit; padding: 7px 9px; border: 1px solid var(--line); border-radius: var(--radius-btn); font-size: 15px; }
.acc-actions { grid-column: 1 / -1; margin-top: 6px; }

/* 구매/결제 박스 */
.buy-box { background: #ffffff; border: 1px solid var(--line); border-radius: var(--radius); padding: 12px 14px; margin: 10px 0; }
.buy-box label { font-size: 14px; color: var(--ink-soft); }
.buy-box select, .buy-box input { padding: 7px 10px; border: 1px solid var(--line); border-radius: var(--radius-btn); font-size: 15px; }
.buy-quote { display: flex; gap: 16px; flex-wrap: wrap; padding: 8px 0; }
.bq-line { font-size: 15px; color: var(--ink-soft); }
.bq-line b { color: var(--ink); font-variant-numeric: tabular-nums; }
.bq-total b { color: var(--accent); font-size: 17px; }
.pay-title { font-size: 15px; font-weight: 600; margin-bottom: 8px; }

/* 관리자 배정 달력 */
.acal-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; }
.acal-head { margin-bottom: 4px; }
.acal-head > div { text-align: center; font-size: 14px; font-weight: 700; color: var(--ink-soft); padding: 4px 0; }
.acal-cell { min-height: 84px; background: #fff; border: 1px solid var(--line-soft); border-radius: var(--radius-btn); padding: 4px; cursor: pointer; }
.acal-cell:hover { background: #ffffff; }
.acal-cell.empty { background: transparent; border: none; cursor: default; min-height: 0; }
.acal-cell.today { border-color: var(--cta, var(--accent)); box-shadow: 0 0 0 1px var(--cta, var(--accent)) inset; }
.acal-d { font-size: 14px; font-weight: 700; color: var(--ink-soft); margin-bottom: 3px; }
.acal-cell .wd0 { color: #c0392b; } .acal-cell .wd6 { color: #2b6cb0; }
.acal-chip { font-size: 13px; line-height: 1.3; border-radius: var(--radius-sm); padding: 3px 5px; margin-bottom: 3px; background: var(--accent-soft); color: var(--ink); white-space: normal; word-break: break-word; }
.acal-chip b { font-variant-numeric: tabular-nums; }
.acal-chip .pl { color: var(--ink-faint); font-size: 12px; }
/* 달력 칩 맨 앞 담당 실장명 "(박미희)" — 정렬 기준이 실장 순서라 앞에 표기 */
.acal-chip .acal-th { font-weight: 700; color: var(--ink-soft); font-size: 12px; }
.acal-chip.done .acal-th { color: rgba(255,255,255,.85); }
.acal-chip .wb-care { font-size: 11px; line-height: 15px; padding: 0 4px; vertical-align: 1px; }
.acal-chip.done .wb-care { opacity: .85; }
.acal-chip.done { background: var(--accent); color: #fff; } .acal-chip.done .pl { color: rgba(255,255,255,.78); }
.acal-chip.ns { background: var(--danger-soft); color: var(--danger); } /* 노쇼=danger 계열 통일(확정·잡는중 파스텔과 혼동 방지) */
.acal-chip.cx { background: #f0f1f3; color: var(--ink-faint); text-decoration: line-through; }

/* 월간 달력 — 폰에서 7칸을 1fr로 나누면 칸이 ≈49px라 '실장명+시간+이름'이 한 글자씩 세로로 깨짐(대표 0829).
   칸 최소 폭을 주고 가로 스크롤. 요일 머리줄과 본문이 같은 고정 폭이라 세로줄이 어긋나지 않는다. */
@media (max-width: 760px) {
  #schCalBody { overflow-x: auto; -webkit-overflow-scrolling: touch; overscroll-behavior-x: contain; }
  #schCalBody .acal-grid { grid-template-columns: repeat(7, 132px); width: max-content; min-width: 100%; }
  #schCalBody .acal-cell { min-height: 96px; }
}

@media (max-width: 900px) {
  .members-wrap { grid-template-columns: 1fr; }
  .acc-body { grid-template-columns: 1fr; }
}

@media (max-width: 900px) {
  .quote-wrap { grid-template-columns: 1fr; }
  .receipt { position: static; }
}

/* ── 티케팅 원장 ─────────────────────────────────────── */
.lg-tabs { display: inline-flex; gap: 2px; background: var(--surface-card); border-radius: var(--radius-btn); padding: 3px; margin-bottom: 14px; }
.lg-tab { border: 0; background: transparent; padding: 6px 16px; border-radius: var(--radius-sm); font-size: 15px; font-weight: 600; color: var(--ink-soft); cursor: pointer; }
.lg-tab.on { background: var(--card); color: var(--ink); box-shadow: 0 1px 2px rgba(0,0,0,.06); }
.lg-bar { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 12px; }
.lg-month { display: inline-flex; align-items: center; gap: 6px; }
.lg-month input[type="month"] { border: 1px solid var(--line); border-radius: var(--radius-btn); padding: 6px 10px; font: inherit; color: var(--ink); }
.lg-kpis { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-bottom: 14px; }
.lg-kpi { border: 1px solid var(--line); border-radius: var(--radius); padding: 12px 14px; background: var(--card); }
.lg-kpi .k-label { font-size: 14px; color: var(--ink-faint); margin-bottom: 4px; }
.lg-kpi .k-val { font-size: 22px; font-weight: 700; color: var(--ink); font-variant-numeric: tabular-nums; }
.lg-kpi .k-sub { font-size: 13px; color: var(--ink-faint); margin-top: 2px; font-variant-numeric: tabular-nums; }
.lg-kpi.accent { background: var(--dark); border-color: var(--dark); }
.lg-kpi.accent .k-label { color: rgba(255,255,255,.62); }
.lg-kpi.accent .k-val { color: #fff; }
.lg-kpi.accent .k-sub { color: rgba(255,255,255,.5); }
.lg-grid td, .lg-grid th { white-space: nowrap; }
.lg-grid .num { font-variant-numeric: tabular-nums; }
.lg-grid tr.voided td { opacity: .42; text-decoration: line-through; }
.lg-grid tr.refund td { color: var(--danger); }
.it-badge { display: inline-block; padding: 1px 7px; border-radius: var(--radius-sm); font-size: 13px; font-weight: 600; background: var(--accent-soft); color: var(--accent); }
.it-badge.neg { background: var(--danger-soft, #f7e6e4); color: var(--danger); }
.it-badge.neutral { background: #eef0f2; color: var(--ink-soft); }
.rcp-dot { font-size: 13px; color: var(--ink-faint); }
.rcp-dot.issued { color: #1a7f5a; }
.rcp-dot.cancelled { color: var(--danger); text-decoration: line-through; }
.cfm-f.chk-f { flex-direction: row; align-items: center; gap: 7px; }
.cfm-f.chk-f span { font-size: 15px; color: var(--ink-soft); }
/* 회원 목록 속성 필터(출산방법·초산/경산·압 선호) */
.mem-filters { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 8px 2px 10px; font-size: 14px; color: var(--ink-soft); }
.mem-filters label { display: inline-flex; align-items: center; gap: 4px; white-space: nowrap; }
.mem-filters select { padding: 5px 8px; border: 1px solid var(--line); border-radius: var(--radius-btn); font-size: 14px; background: #fff; color: var(--ink); }
/* 배정 폼 수정/복사 모드 배너 */
.as-editbar { background: var(--accent-soft); border: 1px solid #f0c9b6; border-radius: var(--radius-btn); padding: 8px 12px; margin-bottom: 10px; font-size: 15px; color: var(--ink); display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.as-editbar b { font-variant-numeric: tabular-nums; }
.sc-row[data-row-sid]:hover { background: var(--accent-soft); }

/* 조리원 안 감 체크(기본정보 퇴소일 옆) */
.skip-chk { display: inline-flex; align-items: center; gap: 5px; font-size: 14px; color: var(--ink-soft); margin-top: 5px; cursor: pointer; }
.skip-chk input { width: 15px; height: 15px; accent-color: var(--accent); cursor: pointer; }
@media (max-width: 720px) { .lg-kpis { grid-template-columns: 1fr; } }

/* ── 주간 배정판 ─────────────────────────────────────── */
.wb-body { padding: 0; }
/* 세로도 판 내부 스크롤(max-height) — 날짜 헤더행 sticky top(틀고정)은 판이 자체 스크롤 컨테이너일 때만 동작 */
/* touch-action: 두 손가락=JS 핀치(그리드 CSS zoom)가 받도록 브라우저 기본 핀치 차단, 한 손가락 팬은 그대로 */
.wb-scroll { overflow: auto; max-height: max(420px, calc(100vh - 230px)); max-height: max(420px, calc(100dvh - 230px)); overscroll-behavior-x: contain; scroll-behavior: smooth; touch-action: pan-x pan-y; }
/* 주간판 헤더 툴바 — 제목/툴바를 한 줄 flex 로. 왼쪽=날짜 이동, 오른쪽=목록·확대(대표 0830)
   🚨 이름 주의: .wb-tools 는 셀 안 호버 툴(＋배정·가배정…, opacity:0) 이미 사용 중 → 헤더는 .wb-headtools */
.wb-panel .panel-head { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.wb-headtools { flex: 1; font-weight: 400; display: flex; align-items: center; gap: 3px; min-width: 0; }
/* 테두리 예산(design.md §3-1) — 툴바 버튼은 전부 고스트, hover 때만 배경 틴트 */
.wb-headtools .wb-gh { border-color: transparent; background: none; }
.wb-headtools .wb-gh:hover { background: var(--surface-card); color: var(--ink); }
.wb-headtools #wbRange { font-variant-numeric: tabular-nums; font-size: 15px; font-weight: 700; padding: 0 2px; white-space: nowrap; }
.wb-headtools #wbPrev, .wb-headtools #wbNext { font-size: 17px; font-weight: 700; line-height: 1; color: var(--ink); }
.wb-headtools #wbToday { color: var(--accent); font-weight: 650; }
.wb-headtools #wbToday:hover { background: var(--accent-soft); color: var(--accent); }
/* 오른쪽 묶음(미발송·빈타임·가배정 ｜ 확대) — 래퍼 없이 첫 항목만 밀어낸다(폰 ⋯ 메뉴가 노드를 옮기므로 래퍼 금지) */
.wb-headtools #wbNotify { margin-left: auto; }
.wb-headtools #wbNotify[hidden] + #wbFreeList { margin-left: auto; }
.wb-headtools .wb-tvr { width: 1px; height: 16px; background: var(--line); flex: none; margin: 0 5px; }
/* 개수는 버튼 안 틴트 배지로 — '빈타임 목록' 같은 군더더기 명사 제거(대표 0830) */
.wb-headtools .btn-mini b { font-size: 12px; font-weight: 700; padding: 1px 6px; margin-left: 4px;
  border-radius: var(--radius-pill); background: var(--surface-card); color: var(--ink-soft); font-variant-numeric: tabular-nums; }
.wb-headtools #wbNotify b { background: var(--warn-soft); color: var(--warn); }
.wb-headtools #wbHoldList b:empty { display: none; }
/* 폰 ⋯ 메뉴 — 실제 버튼 노드를 JS가 이 안으로 옮겨 담는다(핸들러 유지). 메뉴 안에서는 테두리를 되살려 항목 구분 */
.wb-mmenu .wb-gh { border-color: var(--line); background: var(--card); }
.wb-mmenu { position: absolute; right: 10px; top: calc(100% - 2px); z-index: 40; min-width: 172px; padding: 6px; display: flex; flex-direction: column; gap: 4px;
  background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); box-shadow: 0 10px 28px rgba(0,0,0,.16); }
.wb-mmenu[hidden] { display: none; }
.wb-mmenu .btn-mini { width: 100%; padding: 10px 12px; font-size: 14px; text-align: center; }
.wb-mmenu .wb-zoom { justify-content: center; padding: 4px 0; }
.wb-mmenu #wbNotify, .wb-mmenu #wbFreeList { margin-left: 0; } /* 데스크톱의 오른쪽 밀어내기 해제 */
.wb-sheet-bd { position: fixed; inset: 0; z-index: 70; background: rgba(0,0,0,.34); }
.wb-sheet-bd[hidden] { display: none; }
.wbf-close { display: none; } /* 폰 필터 시트에서만 보임 */

/* 확대/축소 컨트롤 — 100% = 한 화면에 일주일 */
.wb-zoom { display: inline-flex; align-items: center; gap: 2px; }
.wb-zoom b { min-width: 42px; text-align: center; font-size: 14px; color: var(--ink-soft); font-variant-numeric: tabular-nums; }
/* 열 개수는 JS가 표시 일수에 맞춰 gridTemplateColumns 로 덮어씀(무제한 가로 스크롤) */
/* width:max-content 필수 — 그리드 박스를 전체 열 너비로 넓혀야 1열(직원 이름) position:sticky 가 스크롤 중에도 고정됨 */
.wb-grid { display: grid; grid-template-columns: 190px repeat(7, minmax(148px, 1fr)); width: max-content; min-width: 100%; }
/* 주 구분선(월요일 열) · 월 시작 강조 — 긴 타임라인에서 주/월 경계 인지 */
.wb-dh.wk, .wb-slot.wk { border-left: 2px solid var(--line); }
.wb-dh.mstart .date { color: var(--accent); }
.wb-c { border-bottom: 1px solid var(--line-soft); border-right: 1px solid var(--line-soft); padding: 5px 4px; min-height: 84px; }
.wb-corner, .wb-rh { position: sticky; left: 0; z-index: 3; background: var(--card); border-right: 1px solid var(--line); }
/* 날짜 헤더행 틀고정 — 세로 스크롤 시 상단 고정. 1열(z3)보다 위, 코너(양축 고정)가 최상위 */
/* 요일·날짜는 가로 배치 — 세로 2줄이던 걸 1줄로 줄여 배정 칸을 더 보여준다(대표 0830) */
.wb-dh { background: #fff; border-bottom: 1px solid var(--line); min-height: 0; padding: 7px 9px; position: sticky; top: 0; z-index: 4;
  display: flex; align-items: center; gap: 6px; }
.wb-corner { z-index: 5; top: 0; border-bottom: 1px solid var(--line); display: flex; align-items: center; font-size: 13px; color: var(--ink-faint); font-weight: 600; padding: 7px 10px; }
.wb-dh .dow { font-size: 13px; color: var(--ink-faint); font-weight: 600; flex: none; }
.wb-dh .date { font-size: 19px; font-weight: 750; letter-spacing: -.02em; font-variant-numeric: tabular-nums; flex: none; } /* 날짜·실장 이름은 한 눈에 찾는 기준점 — 블록 글자보다 크게(매니저 0828) */
.wb-dh.sun .date, .wb-dh.sun .dow { color: var(--danger); }
.wb-dh.today { background: var(--accent-soft); box-shadow: inset 0 2px 0 var(--accent); }
.wb-dh.today .date { color: var(--ink); font-weight: 800; } /* 주황 글자가 '빨간날'로 오해돼 배경 강조만 */
/* 담당자 정보 열 */
/* 1열 축소(140px) 재설계 — 이름은 말줄임 없이 온전히, 직책 배지는 공간 부족 시 다음 줄, ✎=셀 우상단 고정 */
.wb-rh { padding: 8px 8px 8px; display: flex; flex-direction: column; gap: 4px; align-items: flex-start; } /* 🚨position:relative 금지 — 위 sticky(1열 고정)를 덮어씀. ✎ absolute 기준은 sticky가 이미 제공 */
.wb-th { display: flex; align-items: center; flex-wrap: wrap; gap: 2px 4px; min-width: 0; width: 100%; padding-right: 16px; }
.wb-th b { font-weight: 750; font-size: 17px; letter-spacing: -.01em; white-space: normal; word-break: keep-all; line-height: 1.25; min-width: 0; }
.wb-th .cr { font-size: 14px; flex: none; }
.wb-role { font-size: 12px; color: var(--ink-soft); background: var(--surface-card); border-radius: var(--radius-sm); padding: 1px 6px; font-weight: 700; white-space: nowrap; flex: none; }
.wb-role.boss { color: #b8481d; background: var(--accent-soft); } /* 코랄 틴트=원장 전용 */
/* 가능 관리 태그(이름 접미사) — 주간판 1열·담당자 목록 공용 */
.wb-skill { font-size: 13px; font-weight: 800; color: #9b6dd0; background: none; border-radius: 0; padding: 0; white-space: normal; word-break: break-all; line-height: 1.5; }
.wb-skills { display: flex; flex-wrap: wrap; gap: 3px; }
.th-name-cell .wb-skill { margin-left: 5px; }

/* ── 촘촘히(컴팩트) 모드 — 엑셀형 한 줄 카드, 한 화면에 실장 4~5명 ── */
.wb-compact .wb-c { min-height: 34px; padding: 3px; }
.wb-compact .wb-day { gap: 2px; } /* 블록 사이 세로 여백 축소(매니저 0828) */
.wb-compact .wb-rh { padding: 4px 8px; gap: 2px; }
.wb-compact .wb-rh .wb-skills, .wb-compact .wb-rh .wb-reg, .wb-compact .wb-rh .wb-hours { display: none; }
.wb-compact .wb-th b { font-size: 15px; }
.wb-compact .wb-role { font-size: 11px; padding: 0 4px; }
.wb-compact .wb-load { font-size: 12px; }
.wb-compact .wb-dh { padding: 4px 6px; }
.wb-compact .wb-dh .date { font-size: 17px; }
.wb-compact .wb-dh .dow { font-size: 13px; }
.wb-compact .wb-corner { padding: 5px 8px; font-size: 13px; }
/* 블록 글자·패딩·격자는 base .wb-blk 규칙이 정본(촘촘히가 유일 모드 — '넓게' 폐기 0828) */
.wb-compact .wb-blk .b2-acts { display: none; } /* ✉·📨 아이콘 숨김 — 블록 클릭(드로어)에서 처리 */
.wb-compact .paydot { font-size: 9px; }
.wb-compact .wb-free { font-size: 13px; padding: 5px 6px; margin-top: 2px; }
.wb-compact .wb-memo { font-size: 11px; }
.wb-compact .wb-offlabel { font-size: 12px; padding: 1px 5px; }

/* ── 모바일 촘촘히(대표 0825) — 엑셀 시트처럼 작은 글자·낮은 행. 열 폭은 JS(wbDayW 150px)·확대축소는 핀치(그리드 CSS zoom) ── */
@media (max-width: 840px) {
  .wb-compact .wb-c { min-height: 26px; padding: 2px 3px; }
  .wb-compact .wb-rh { padding: 3px 5px; gap: 1px; }
  .wb-compact .wb-th b { font-size: 13px; }
  .wb-compact .wb-role { font-size: 9px; }
  .wb-compact .wb-load { font-size: 10px; }
  .wb-compact .wb-dh { padding: 3px 5px; gap: 4px; }
  .wb-compact .wb-dh .date { font-size: 15px; }
  .wb-compact .wb-dh .dow { font-size: 11px; }
  .wb-compact .wb-corner { padding: 3px 6px; font-size: 11px; }
  .wb-compact .wb-shopld { gap: 2px; }
  .wb-compact .wb-shopld i { width: 9px; height: 9px; }
  .wb-compact .wb-day { gap: 2px; }
  /* 약자 칸 38px = 약자(A90)+첫 배지까지 한 줄(0828 '첫'=약자 옆) · 회차(b4)·장소(pl)는 접음 */
  .wb-compact .wb-blk { padding: 0 3px 1px; border-radius: var(--radius-sm); grid-template-columns: 33px 38px minmax(40px, 1fr) 0 14px; column-gap: 2px; }
  .wb-compact .wb-blk .b1, .wb-compact .wb-blk .b2 { gap: 2px; }
  /* 폰 폭(≈143px)에선 다섯 칸이 안 들어감 — 회차·장소는 접고 시간·이름·약자·결제점만(탭하면 상세) */
  .wb-compact .wb-blk .b4, .wb-compact .wb-blk .b2 .pl { display: none; }
  .wb-compact .wb-blk .b3 .wb-fr { display: inline; } /* 회차 칸이 접히므로 첫/재는 약자 옆으로 */
  /* 글자 확대(매니저 0828) — 한글 가독 하한(11~12px)까지 상향 + 음수 자간 완화(작은 한글 획 붙음 방지) */
  .wb-compact .wb-blk .tm { font-size: 12px; letter-spacing: 0; }
  .wb-compact .wb-blk .nm { font-size: 12px; }
  .wb-compact .wb-blk .wb-care { font-size: 12px; line-height: inherit; padding: 0; }
  .wb-compact .wb-blk .b2 { font-size: 11px; }
  .wb-compact .wb-blk .wb-seq { font-size: 12px; padding: 0 2px; }
  .wb-compact .wb-blk .wb-tag, .wb-compact .wb-blk .wb-st { font-size: 9px; padding: 0 2px; }
  .wb-compact .nm4 { font-size: 9px; line-height: 12px; padding: 0 3px; }
  .wb-compact .paydot { font-size: 8px; }
  .wb-compact .wb-free { font-size: 11px; padding: 3px 4px; border-radius: var(--radius-sm); }
  .wb-compact .wb-free.full { font-size: 10px; padding: 2px 4px; }
  .wb-compact .wb-ttempty { font-size: 11px; padding: 2px 0; border-radius: var(--radius-sm); }
  .wb-compact .wb-memo { font-size: 9px; }
  .wb-compact .wb-offlabel { font-size: 10px; padding: 0 4px; }
}

/* 드로어 가능 관리(읽기전용) */
.dw-skills-ro { display: flex; flex-wrap: wrap; gap: 5px; }
.skm-tag { font-size: 13px; font-weight: 700; color: #6a3fc0; background: #efe8fc; border-radius: var(--radius-sm); padding: 2px 8px; white-space: nowrap; }

.dww-cap { margin-left: 6px; padding: 4px 6px; border: 1px solid var(--line); border-radius: var(--radius-btn); font-size: 13px; background: #fff; color: var(--ink); }

/* 약자표(참고 패널) */
.skm-ref { border: 1px solid var(--line); background: var(--bg); border-radius: var(--radius); padding: 10px 12px; margin: 0 2px 12px; }
.skm-ref-h { font-size: 14px; font-weight: 750; margin-bottom: 7px; }
.skm-ref-h em { font-style: normal; font-weight: 400; color: var(--ink-faint); font-size: 13px; }
.skm-ref-row { display: flex; flex-wrap: wrap; align-items: center; gap: 5px; margin-top: 5px; }
.skm-ref-lbl { font-size: 13px; color: var(--ink-soft); width: 44px; flex: none; font-weight: 700; }
.skm-ref-chip { font-size: 13px; color: var(--ink-soft); background: #fff; border: 1px solid var(--line); border-radius: var(--radius-sm); padding: 1px 7px; }
.skm-ref-chip b { color: #6a3fc0; font-weight: 800; margin-right: 2px; }

/* 가능 관리 매트릭스 */
.skm-grid { width: 100%; border-collapse: collapse; }
.skm-grid th, .skm-grid td { border: 1px solid var(--line); padding: 7px 6px; text-align: center; }
.skm-grid thead th { background: var(--accent-soft); font-size: 14px; position: sticky; top: 0; z-index: 1; }
.skm-grid th.skm-name { text-align: left; width: 150px; }
.skm-grid .skm-col { line-height: 1.2; }
.skm-abbr { display: block; font-size: 12px; font-weight: 800; color: #6a3fc0; margin-top: 1px; }
.skm-grid td.skm-name { text-align: left; white-space: nowrap; }
.skm-grid td.skm-name b { font-weight: 700; }
.skm-role { font-size: 12px; color: var(--ink-faint); margin-left: 5px; }
.skm-cell { background: #fff; }
.skm-chk { display: flex; align-items: center; justify-content: center; cursor: pointer; }
.skm-chk input { width: 17px; height: 17px; cursor: pointer; accent-color: #7a4bd0; }
.skm-grid tbody tr:hover td { background: var(--accent-soft); }
.skm-grid tbody tr:hover td.skm-cell { background: #f6f1fe; }
.wb-reg { display: flex; flex-wrap: wrap; gap: 3px; }
.wb-reg .rc { font-size: 12px; background: var(--bg); border: 1px solid var(--line); border-radius: var(--radius-sm); padding: 1px 5px; color: var(--ink-soft); }
.wb-load { font-size: 13px; color: var(--ink-faint); margin-top: 2px; }
.wb-load b { color: var(--ink); font-weight: 700; }
/* 셀 · 블록 */
.wb-day { display: flex; flex-direction: column; gap: 4px; height: 100%; }
/* 좌측 색 스트라이프(3px) 제거 — 상태색은 배경+1px 테두리색으로(폭 절약·엑셀 톤, 사용자 0828) */
/* ── 고정 한 줄 격자(매니저 0828) — 항상 한 줄. 칸(열)이 고정 폭이라 숫자 폭이 달라도(10:00 vs 13:30)
   다음 칸이 밀리지 않고, 모든 블록이 같은 격자를 쓰므로 판 전체에서 세로로 일직선.
   [시간][약자·첫][이름][회차][장소·결제·태그] — 폭 배분은 '이름 4글자 무잘림'이 기준(사용자 0828 "폰트를 줄여서라도 다 보여줘"):
   글자 14px(사용자 0828 확정)·간격 3px, 이름 칸 58px+(4글자 무잘림). 넘치면 각 칸 안에서 말줄임. ── */
.wb-blk { border: 1px solid var(--line); background: var(--accent-soft); border-radius: var(--radius-sm); padding: 1px 3px 2px; line-height: 1.15;
  display: grid; grid-template-columns: 45px 44px minmax(56px, 1fr) 47px 50px; column-gap: 3px; align-items: center; overflow: hidden; }
.wb-blk > * { min-width: 0; overflow: hidden; white-space: nowrap; }
.wb-blk .b2 { display: flex; align-items: center; gap: 3px; }
.wb-blk .b2 .pl { flex: 1 1 auto; min-width: 0; }
.wb-blk .b2 .paydot, .wb-blk .b2 .wb-mgrtag { flex: none; } /* 결제 점은 항상 칸 오른쪽 끝에 — 장소가 길면 장소만 말줄임 */
/* 결제 점이 블록 오른쪽 테두리에 딱 붙어 답답해 보임(대표 0830) — 점 앞뒤로 숨통을 준다 */
.wb-blk .b2 .paydot { margin-left: 2px; margin-right: 3px; }
.wb-blk .b2-acts { display: none; } /* ✉·📨는 우클릭 메뉴/드로어에서 — 폭 절약 */
.wb-blk .b0 { grid-area: 1 / 1; display: flex; align-items: center; gap: 4px; }
.wb-blk .b1 { grid-area: 1 / 3; display: flex; align-items: center; gap: 3px; }
.wb-blk .b3 { grid-area: 1 / 2; display: flex; align-items: center; gap: 3px; }
.wb-blk .b4 { grid-area: 1 / 4; display: flex; align-items: center; }
.wb-blk .b2 { grid-area: 1 / 5; }
/* 긴 이름(박상미(박지선맘) 등)=말줄임+툴팁 — 줄바꿈으로 행 높이가 틀어지지 않게(엑셀 줄맞춤 0828) */
/* min-width = 이름이 최소 3~4글자는 남게 하는 바닥값 — 열이 좁아지면 옆 요소(장소·태그)가 먼저 줄어듦(매니저 0828 '창을 줄이니 이름이 사라져요') */
.wb-blk .nm { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; max-width: 100%; }
/* 숫자 폭 고정 — 윈도우 기본 한글 글꼴(맑은 고딕)은 숫자 폭이 제각각이라 줄이 어긋나 보임(매니저 0828).
   tnum(고정폭 숫자) + 숫자 폭이 일정한 글꼴 우선 + 칸 자체가 고정 폭이라 3중으로 안 밀림. */
/* 🚨 Apple SD Gothic Neo는 tnum 미지원(숫자가 가변폭 — '10:00'과 '13:30'이 3px 다름 → 줄 어긋나 보임, 사용자 0828).
   숫자·콜론은 tnum 되는 SF(system-ui)/Segoe UI에서 먼저 가져오고 한글만 뒤 폰트로 폴백. */
/* 🚨 약자(wb-care, A·AR 등)도 기본 폰트(Apple SD Gothic Neo)로 두면 시간·이름과 다른 폰트의 라틴 글리프를 써서
   line-height·박스 높이가 같아도 실제 베이스라인이 위로 밀려 보임(사용자 0829 재현·측정 확인) — 같은 스택으로 통일. */
.wb-blk .tm, .wb-blk .wb-care, .wb-seq, .nm4, .hl-d { font-variant-numeric: tabular-nums; font-feature-settings: 'tnum' 1, 'lnum' 1;
  font-family: -apple-system, system-ui, 'Segoe UI', 'Apple SD Gothic Neo', 'Malgun Gothic', sans-serif; }
/* 시간 칸 45px = 14px 'HH:MM'(≈42px)+여유 — 폭이 딱 맞으면 시간이 약자에 붙어 줄이 어긋나 보임(사용자 0828) */
.wb-blk .tm { font-weight: 750; font-size: 14px; letter-spacing: -.01em; }
.wb-blk .nm { font-weight: 650; font-size: 14px; color: var(--ink); }
/* 약자 칸(b3) 안 요소 — 약자·'N분'(약자 없는 세션)·첫 배지. 칸 폭 44px 안에서 한 줄 */
.wb-blk .wb-care { font-size: 14px; line-height: inherit; padding: 0; }
.wb-blk .wb-dur { color: var(--ink-soft); font-weight: 700; }
.wb-blk .wb-seq { font-size: 13px; padding: 0; } /* 패딩 금지 — 47px 칸에 '재10-1'이 딱 들어감 */
/* 첫/재 = 회차 배지 앞 접두(대표 0829 "재10-1"). 약자 칸에 두면 AR90+첫이 넘쳐 잘렸음 → 회차 칸으로 이동. */
.wb-fr { font-size: 10px; font-weight: 800; letter-spacing: -.02em; margin-right: 1px; vertical-align: 1px; }
.wb-fr.f { color: var(--accent); }   /* 첫 = 코랄(첫 고객 문자 대상) */
.wb-fr.re { color: #4a72b5; }        /* 재 = 파랑(재구매) */
.wb-blk.done .wb-fr, .wb-blk.cx .wb-fr, .wb-blk.ns .wb-fr { color: inherit; opacity: .8; }
/* b3(약자 칸)의 첫/재 사본은 폰(compact)에서만 — 폰은 회차 칸(b4)을 접기 때문 */
.wb-blk .b3 .wb-fr { display: none; }
/* 약자 추정(티켓 미연결) — 점선 밑줄로 '확정값 아님' 신호 */
.wb-care.guess { text-decoration: underline dashed 1px; text-underline-offset: 2px; opacity: .9; }
.wb-blk .wb-tag, .wb-blk .wb-st { font-size: 10px; padding: 0 2px; }
/* 동명이인 자동 구분 — 이름 옆 휴대폰 뒷4자리(주간판·달력·일별·회원 리스트 공용) */
.nm4 { font-size: 11px; font-weight: 700; color: var(--ink-faint); background: none; border-radius: 0; padding: 0; margin-left: 3px; line-height: 15px; white-space: nowrap; flex: none; font-variant-numeric: tabular-nums; vertical-align: 0; }
.acal-chip.done .nm4 { color: rgba(255,255,255,.85); background: rgba(255,255,255,.2); }
/* 관리 표기 약자(A120·AR120·ARs) — 이름 앞 강조 칩 */
/* 글자색=거의 검정(이름과 같은 무게로 읽히게)·크기=이름 급·칩(상자) 없이 평문 (매니저 0828) */
.wb-care { font-size: 15px; font-weight: 800; letter-spacing: .01em; color: #16232e; background: none; border: 0; border-radius: 0; padding: 0; line-height: 18px; white-space: nowrap; flex: none; font-variant-numeric: tabular-nums; }
.wb-blk.done .wb-care { opacity: .75; }
.wb-blk .b2 { font-size: 13px; color: var(--ink-soft); display: flex; flex-wrap: nowrap; align-items: center; gap: 3px; min-width: 0; overflow: hidden; }
/* 뒤쪽 액션 아이콘(✉ 📨 ✎ 📍) 묶음 — 항상 우측 정렬, 줄바꿈 시에도 한 덩어리로 이동 */
.wb-blk .b2-acts { display: inline-flex; align-items: center; gap: 3px; margin-left: auto; }
.wb-blk .pl { color: var(--ink); font-weight: 650; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } /* 출장/샵 = 중요 정보 — 옅은 회색→진하게(0821 대표) */
/* 결제 표시(🟢·🔴) — 공간을 적게 먹는 작은 점으로(매니저 0828) */
.wb-blk .paydot { font-size: 9px; line-height: 1; flex: none; }
/* 빈 자리(요일 용량) — 엑셀의 주황 빈칸 대응. 블록만 하게 크게 + 클릭=바로 배정. full=마감 */
.wb-free { margin-top: 4px; font-size: 14px; font-weight: 800; color: #8a4b0f; background: #ffd9a3; border: 1.5px solid #ea9d2d; border-radius: var(--radius-btn); padding: 10px 8px; text-align: center; cursor: pointer; transition: background .12s; }
.wb-free:hover { background: #ffca7e; }
.wb-free.full { color: var(--ink-faint); background: #f0efec; border: 1px solid var(--line-soft); font-weight: 700; font-size: 13px; padding: 5px 8px; cursor: default; }
/* ── 타임표(대표 0825·엑셀형 0828) — 하루 4타임 고정 줄. 레인 높이 균일(--tt-h)+옅은 가로줄=열 사이 줄이 이어져 스프레드시트처럼 보임.
   빈타임=진주황 실선(오늘 이후·비어있음이 가배정보다 눈에 띄게), 지난 날짜=자리만. 블록·빈타임이 레인을 꽉 채워 공간 손해 없음. ── */
/* 레인 높이 = 모드별 고정값(카드가 고정 2줄이라 계산·측정 불필요, 매니저 0828 '반응형 말고 고정') */
.wb-tt { display: flex; flex-direction: column; flex: 1; --tt-h: 30px; } /* 일반 모드 3줄 카드(≈68px)가 넘치지 않는 값 — 레인 높이 균일이 줄맞춤의 핵심 */
/* 🚨 레인 최소 높이는 '줄(wb-ttrow)'이 아니라 '칸(wb-ttcell)'에 — 카드와 같은 박스에 걸려야
   [카드 있는 줄]과 [빈 줄]의 바깥 높이가 정확히 같아짐(패딩 때문에 3px 어긋나던 문제) */
.wb-ttrow { display: flex; align-items: stretch; gap: 4px; border-bottom: 1px dashed var(--line-soft); padding: 1px 0 2px; }
.wb-ttrow:last-child { border-bottom: 0; }
.wb-ttcell { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; min-height: var(--tt-h); }
.wb-ttrow.thin .wb-ttcell { min-height: 0; }
.wb-ttcell > .wb-blk { flex: 1; }
.wb-ttempty { flex: 1; display: flex; align-items: center; justify-content: center; border: 1.5px solid #ea9d2d; background: #ffd9a3; color: #8a4b0f; border-radius: var(--radius-sm); font-size: 13px; font-weight: 800; text-align: center; padding: 4px 0; cursor: pointer; transition: background .12s; }
.wb-ttempty:hover { background: #ffca7e; }
/* 지난 날짜 빈 칸 — 조용하지만 클릭하면 배정 가능(누락 회차 뒤늦게 넣기, 대표 0829 "8/18 송미령 3타임 누락") */
.wb-ttempty.past { border: 1px dashed var(--line-soft); background: transparent; color: transparent; cursor: pointer; padding: 0; min-height: 13px; font-size: 11px; font-weight: 800; transition: background .12s, color .12s, border-color .12s; }
.wb-ttempty.past:hover { border-color: #e3c390; background: #fdf7ee; color: #c79340; }
/* 근무 타임 아님·지난 날짜 = 얇은 줄로 접기(빈칸이 세로 공간을 먹지 않게, 매니저 0828 '이런 공간들을 줄여주세요') */
.wb-ttrow.thin { min-height: 0; }
/* 얇은 줄이어도 오늘 이후면 클릭 배정 가능 — 부분 휴무 뒤 남는 시간대(＋) */
.wb-ttempty.slim { flex: 1; display: flex; align-items: center; justify-content: center; border: 1px dashed #e3c390; background: #fdf7ee; color: #c79340; border-radius: var(--radius-sm); font-size: 11px; font-weight: 800; padding: 0; min-height: 15px; cursor: pointer; transition: background .12s, color .12s; }
.wb-ttempty.slim:hover { background: #ffe9c6; color: #8a4b0f; border-style: solid; }
.wb-compact .wb-tt { --tt-h: 24px; } /* 한 줄 카드(글자 13px, ≈21px)가 넘치지 않는 값 — 글자 축소(0828) 재측정 */
@media (max-width: 840px) { .wb-compact .wb-tt { --tt-h: 22px; } } /* 🚨 모바일 값은 위 규칙보다 뒤에 — 같은 특정성이라 앞에 두면 죽은 규칙 */ /* 한 줄 카드(≈29px)가 넘치지 않는 값 — 글자 키움(0828) 반영 */
.wb-compact .wb-ttempty { padding: 1px 0; font-size: 12px; }
.wb-compact .wb-ttempty.past { min-height: 9px; font-size: 10px; }
/* 터치 기기엔 호버가 없음 — 지난 날짜 빈 칸도 옅게 ＋가 보이게(탭 대상 인지) */
@media (hover: none) { .wb-ttempty.past { color: #d3cec6; } }
.wb-compact .wb-ttempty.slim { min-height: 11px; font-size: 10px; }

/* 상담매니저 태그 칩(시간 조율중·입금 대기 등) — 드로어 저장 결과가 블록에 바로 보이게 */
.wb-mgrtag { font-size: 11px; font-weight: 800; color: #8a6d1a; background: #fdf3d8; border: 1px solid #ecd9a0; border-radius: var(--radius-sm); padding: 0 4px; white-space: nowrap; }
.wb-compact .wb-mgrtag { font-size: 11px; padding: 0 3px; }

/* 차량등록 c/x — 지역 뒤 붙는 굵은 글자 (c=등록 가능·x=불가) */
.wb-blk .vr { font-weight: 800; margin-left: 1px; font-style: normal; }
.wb-blk .vr.c { color: #1a7f5a; }
.wb-blk .vr.x { color: #c0392b; }
.wb-blk.done { border-color: #9ccbbd; background: #e7f3ef; }
.wb-blk.done .tm { color: #147a63; }
.wb-blk.cx { border-color: var(--line); background: var(--bg); opacity: .6; }
.wb-blk.cx .nm, .wb-blk.cx .tm { text-decoration: line-through; }
.wb-blk.ns { border-color: #dfa79e; background: var(--danger-soft, #f8e5e2); }
.wb-blk.ns .tm { color: var(--danger); }
.wb-blk { cursor: pointer; }
.wb-blk:hover { box-shadow: 0 2px 8px rgba(30,20,10,.12); }
.wb-sms { font-size: 11px; font-weight: 700; border-radius: var(--radius-sm); padding: 1px 5px; cursor: pointer; background: var(--bg); color: var(--ink-faint); border: 1px solid var(--line); }
.wb-sms.on { background: #e7f3ef; color: #147a63; border-color: transparent; }
.wb-st { font-size: 11px; font-weight: 700; border-radius: var(--radius-sm); padding: 0 4px; margin-left: auto; align-self: center; white-space: nowrap; flex: none; }
.wb-st.done { background: #d9efe7; color: #147a63; }
.wb-st.ns { background: #f3d6d2; color: var(--danger); }
.wb-legend { display: flex; flex-wrap: wrap; gap: 14px; padding: 10px 16px; border-top: 1px solid var(--line-soft); font-size: 13px; color: var(--ink-soft); }
.wb-legend .lg { display: flex; align-items: center; gap: 5px; }
.wb-legend .sw { width: 20px; height: 11px; border-radius: var(--radius-sm); border: 1px solid var(--accent); background: var(--accent-soft); }
.wb-legend .sw.done { border-color: #9ccbbd; background: #e7f3ef; }
.wb-legend .sw.ns { border-color: #dfa79e; background: var(--danger-soft, #f8e5e2); }
.wb-legend .sw.cx { border-color: var(--line); background: var(--bg); }
/* 결제 상태 = 🔴/🟢 점 하나로만 표시(대표 0830).
   전에는 블록에 링(outline)까지 둘러 미결제 블록이 통째로 빨간 박스가 됐다 — 배정상태 색을 덮고
   같은 정보를 두 번 말하는 셈이라 링은 제거. 링 클래스(pay-*)도 더 이상 붙지 않는다. */
/* 🟢결제완료·🔴미수(대표 0825) — 주간판·월달력·일별 공용. 이모지는 폰트보다 커 보여서 한 단계 작게 */
.paydot { font-size: 9px; line-height: 1; flex: none; }
/* 추후 배정 행(담당자 미지정) — 상단 구분선 + 옅은 앰버 */
.wb-narh, .wb-naslot { border-top: 2px solid #f0c9b6; }
.wb-narh { background: #fbf5ec; }
.wb-role.na { color: #b07d1a; background: var(--warn-soft); font-weight: 700; }
/* 새 배정 — 날짜 행별 담당자 셀렉트 */
.slot-row .slot-th { min-width: 108px; max-width: 150px; }
/* 회차·첫/마지막 배지 (엑셀 f/e 자동화) */
/* 회차(10-1) — 이름과 같은 급으로 크게 + 칩(상자) 없이 평문(매니저 0828) */
.wb-seq { font-size: 14px; font-weight: 700; color: var(--ink-soft); background: none; border-radius: 0; padding: 0; font-variant-numeric: tabular-nums; white-space: nowrap; flex: none; }
.wb-tag { font-size: 11px; font-weight: 800; border-radius: var(--radius-sm); padding: 1px 5px; letter-spacing: .02em; white-space: nowrap; flex: none; }
.wb-tag.f { background: #e3edf7; color: #37628f; }
.wb-tag.e { background: var(--accent); color: #fff; }
/* 자유 메모 블록 */
.wb-memo { border: 1px dashed var(--line); border-radius: var(--radius-sm); padding: 3px 6px; font-size: 13px; color: var(--ink-soft); display: flex; align-items: center; justify-content: space-between; gap: 5px; background: var(--surface-card); }
.wb-memo.thm { border-style: solid; border-color: #cfe3d9; background: #eaf3ef; color: #1f5c48; }
.wb-memo-tag { display: inline-block; font-size: 9px; font-weight: 700; background: #d5e8df; color: #1f5c48; border-radius: var(--radius-sm); padding: 0 4px; margin-right: 4px; vertical-align: 1px; }
.wb-memo.offm { border-color: #e6cbc7; background: var(--danger-soft, #f8e5e2); color: var(--danger); }
.wb-memo-x { border: 0; background: none; color: inherit; opacity: 0; cursor: pointer; font-size: 12px; padding: 0 2px; }
.wb-memo:hover .wb-memo-x { opacity: .7; }
/* 셀 호버 툴(＋배정 ✎메모) */
.wb-slot { position: relative; }
.wb-tools { display: flex; gap: 4px; margin-top: 2px; opacity: 0; transition: opacity .12s; }
.wb-slot:hover .wb-tools { opacity: 1; }
.wb-tool { border: 1px dashed var(--line); background: transparent; border-radius: var(--radius-sm); font-size: 12px; color: var(--ink-faint); padding: 2px 7px; cursor: pointer; }
.wb-tool:hover { color: var(--accent); border-color: var(--accent-line); background: var(--accent-soft); }
/* ── 우클릭(PC)·길게 누르기(모바일) 빠른 메뉴 — 상태·구분색·전환·복사 바로 ── */
.wb-ctx { position: fixed; z-index: 400; min-width: 218px; background: #fff; border: 1px solid var(--line); border-radius: var(--radius); box-shadow: 0 12px 34px rgba(30,20,10,.2); padding: 6px; }
.wb-ctx .cx-h { font-size: 13px; color: var(--ink-soft); font-weight: 700; padding: 7px 10px 5px; display: flex; align-items: center; gap: 6px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.wb-ctx .cx-h b { color: var(--ink); font-variant-numeric: tabular-nums; }
.wb-ctx .cx-tag { font-size: 11px; font-weight: 800; color: #92551c; background: #f7d9b8; border-radius: var(--radius-sm); padding: 0 4px; flex: none; }
.wb-ctx .cx-lb { font-size: 12px; font-weight: 700; color: var(--ink-faint); padding: 2px 10px; }
.wb-ctx .cx-row { display: flex; gap: 5px; padding: 3px 8px 7px; }
.wb-ctx .cx-chip { flex: 1; border: 1px solid var(--line); background: #fff; border-radius: var(--radius-btn); font-size: 13px; font-weight: 700; padding: 8px 2px; cursor: pointer; color: var(--ink); white-space: nowrap; }
.wb-ctx .cx-chip.on { outline: 2px solid var(--ink); outline-offset: -1px; }
.wb-ctx .cx-chip.cst-confirmed { background: #fdf6d8; border-color: #e2cf85; }
.wb-ctx .cx-chip.cst-revise { background: #e2f1fb; border-color: #a3cde8; }
.wb-ctx .cx-chip.cst-hold { background: #fdeada; border-color: #eab887; }
.wb-ctx .cx-chip.chc { background: #fdeada; border: 1.5px dashed #dd9a55; }
.wb-ctx .cx-chip.chc-mg { background: #f9d9ee; border-color: #d1198f; }
.wb-ctx .cx-chip.chc-bl { background: #d9e8fb; border-color: #2f6fd6; }
.wb-ctx .cx-chip.chc-pu { background: #ded9f8; border-color: #4b3fd6; }
.wb-ctx .cx-i { display: flex; align-items: center; gap: 8px; width: 100%; border: 0; background: none; text-align: left; font-size: 14px; font-weight: 600; color: var(--ink); padding: 10px; border-radius: var(--radius-btn); cursor: pointer; }
.wb-ctx .cx-i:hover { background: var(--accent-soft); }
.wb-ctx .cx-i.danger { color: var(--danger); }
.wb-ctx .cx-sep { height: 1px; background: var(--line-soft); margin: 4px 6px; }
@media (pointer: coarse) {
  .wb-ctx .cx-i { padding: 12px 10px; font-size: 15px; }
  .wb-ctx .cx-chip { padding: 11px 2px; font-size: 14px; }
}
/* 폰 = 바텀시트 — 탭하면 하단에서 올라오는 큰 버튼 메뉴, [상세 수정]으로 드로어 진입 */
.wb-ctx-dim { position: fixed; inset: 0; z-index: 399; background: rgba(25,18,10,.34); }
.wb-ctx.sheet { left: 0; right: 0; bottom: 0; top: auto; width: 100%; min-width: 0; box-sizing: border-box; border-radius: var(--radius-lg) var(--radius-lg) 0 0; border-left: 0; border-right: 0; border-bottom: 0; padding: 6px 12px calc(12px + env(safe-area-inset-bottom)); box-shadow: 0 -10px 34px rgba(30,20,10,.25); }
.wb-ctx.sheet::before { content: ''; display: block; width: 38px; height: 4px; border-radius: 2px; background: var(--line); margin: 4px auto 8px; }
.wb-ctx.sheet .cx-h { font-size: 15px; padding: 4px 8px 8px; }
.wb-ctx.sheet .cx-i { padding: 13px 10px; font-size: 16px; }
.wb-ctx.sheet .cx-chip { padding: 13px 2px; font-size: 15px; }
.wb-ctx.sheet .cx-lb { font-size: 13px; }
/* 길게 누르기 중 iOS 텍스트 선택·콜아웃 방지 */
.wb-blk, .wb-ttempty, .wb-offbar, .wb-memo { -webkit-user-select: none; user-select: none; -webkit-touch-callout: none; }
/* 드래그 */
.wb-blk[draggable="true"] { cursor: grab; }
.wb-blk.dragging { opacity: .45; }
.wb-c.dropover { outline: 2px dashed var(--accent); outline-offset: -3px; background: var(--accent-soft); }
/* 원장: 원거래 연결 칩 + 미수 스트립 */
.lnk-chip { font-size: 12px; font-weight: 700; background: #eef0f2; color: var(--ink-soft); border-radius: var(--radius-sm); padding: 1px 6px; margin-left: 5px; }
.lg-unpaid { display: flex; align-items: center; gap: 10px; border: 1px dashed var(--warn); background: var(--warn-soft); color: var(--ink-soft); border-radius: var(--radius-btn); padding: 8px 13px; font-size: 14px; margin-bottom: 12px; }
.lg-unpaid b { color: var(--warn); font-variant-numeric: tabular-nums; }

/* ── 문자 양식 ─────────────────────────────────────── */
.msg-vars { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 14px; }
.msg-vars .vc { font-size: 13px; background: var(--accent-soft); color: var(--accent); border: 1px solid var(--accent-line); border-radius: var(--radius-sm); padding: 3px 8px; cursor: pointer; font-family: ui-monospace, Menlo, monospace; }
.msg-vars .vc:hover { filter: brightness(.97); }
/* 케이스 섹션 — 상황별 그룹 헤더(번호·설명·ON/OFF) + 양식 카드 목록 */
.msgc { border: 1px solid var(--line); border-radius: var(--radius); background: #fff; margin-bottom: 14px; }
.msgc.on { border-color: var(--accent-line); }
.msgc-h { display: flex; align-items: flex-start; gap: 12px; padding: 12px 15px; border-bottom: 1px solid var(--line-soft); background: var(--bg); border-radius: var(--radius) var(--radius) 0 0; }
.msgc-no { font-size: 19px; font-weight: 800; color: var(--accent); line-height: 1.2; }
.msgc-t { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.msgc-t b { font-size: 15px; letter-spacing: -.01em; }
.msgc-when { font-size: 13px; color: var(--ink-soft); line-height: 1.5; }
.msgc-side { display: flex; align-items: center; gap: 8px; flex: none; }
.msgc-badge { font-size: 12px; font-weight: 800; border-radius: var(--radius-pill); padding: 2px 9px; background: #f0f1f3; color: var(--ink-faint); }
.msgc-badge.on { background: var(--ok-soft); color: var(--ok); }
.msgc-list { display: flex; flex-direction: column; gap: 12px; padding: 13px 15px; }
/* 양식 카드 — 좌 편집 / 우 휴대폰 폭 미리보기 */
.msg-card { display: grid; grid-template-columns: minmax(0, 1fr) 296px; gap: 16px; border: 1px solid var(--line-soft); border-radius: var(--radius); padding: 12px 14px; background: #fff; }
.msg-card.off { opacity: .62; }
.msg-edit { min-width: 0; display: flex; flex-direction: column; gap: 8px; }
.msg-ch { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.msg-ch input.msg-name { font-weight: 700; font-size: 16px; border: 1px solid transparent; border-radius: var(--radius-btn); padding: 5px 8px; background: transparent; color: var(--ink); min-width: 150px; flex: 1; }
.msg-ch input.msg-name:hover, .msg-ch input.msg-name:focus { border-color: var(--line); background: #fff; outline: none; }
.msg-situ { font-size: 12px; font-weight: 700; padding: 3px 10px; border-radius: var(--radius-pill); background: var(--accent-soft); color: var(--accent); white-space: nowrap; }
.msg-use { font-size: 14px; margin-left: auto; white-space: nowrap; }
.msg-body { width: 100%; flex: 1; min-height: 140px; border: 1px solid var(--line); border-radius: var(--radius-btn); padding: 10px 11px; font: inherit; font-size: 15px; line-height: 1.55; color: var(--ink); resize: vertical; box-sizing: border-box; }
.msg-adv summary { font-size: 13px; color: var(--ink-faint); cursor: pointer; user-select: none; }
.msg-adv[open] summary { color: var(--ink-soft); }
.msg-adv-row { display: flex; gap: 14px; flex-wrap: wrap; margin-top: 8px; font-size: 13px; color: var(--ink-soft); }
.msg-adv-row label { display: flex; align-items: center; gap: 6px; }
.msg-adv-row select { padding: 5px 8px; border: 1px solid var(--line); border-radius: var(--radius-btn); font-size: 13px; background: #fff; color: var(--ink); }
.msg-foot { display: flex; justify-content: flex-end; gap: 8px; margin-top: auto; }
/* 휴대폰 미리보기 — 모바일 실수신 화면 폭(말풍선 약 250px) 기준 */
.msg-phone { width: 296px; align-self: start; border: 1px solid var(--line); border-radius: var(--radius-lg); background: #f2f3f6; overflow: hidden; display: flex; flex-direction: column; }
.msg-phone-top { text-align: center; font-size: 12px; font-weight: 700; color: var(--ink-faint); padding: 8px 10px; background: #fafafc; border-bottom: 1px solid var(--line-soft); }
.msg-phone-scr { padding: 14px 12px; min-height: 120px; }
.msg-bub { max-width: 100%; box-sizing: border-box; background: #fff; border: 1px solid #e3e5ea; border-radius: var(--radius-sm) var(--radius-lg) var(--radius-lg) var(--radius-lg); padding: 10px 12px; font-size: 13px; line-height: 1.55; color: #222; white-space: pre-wrap; word-break: break-word; box-shadow: 0 1px 2px rgba(0,0,0,.04); }
.msg-bub b { color: var(--accent); font-weight: 700; }
.msg-phone-meta { text-align: center; font-size: 11px; color: var(--ink-faint); padding: 0 10px 10px; }
.msg-pending { border: 1px dashed var(--warn); background: var(--warn-soft); color: var(--warn); border-radius: var(--radius-btn); padding: 10px 12px; font-size: 14px; margin-bottom: 12px; }
@media (max-width: 880px) {
  .msgc-h { flex-wrap: wrap; }
  .msg-card { grid-template-columns: 1fr; }
  .msg-phone { width: 100%; max-width: 320px; margin: 0 auto; }
}

/* ── 산모 상세 모달(보드/회원) ───────────────────────── */
.mm-modal { max-width: 560px; }
.mm-body { padding: 0; max-height: 78vh; overflow-y: auto; }
.mm-hero { padding: 16px 18px; border-bottom: 1px solid var(--line-soft); }
.mm-hero .nm { font-size: 20px; font-weight: 750; letter-spacing: -.01em; }
.mm-hero .ct { color: var(--ink-soft); font-size: 15px; margin-top: 2px; }
.mm-badges { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 9px; }
.mm-bdg { font-size: 13px; font-weight: 600; border-radius: var(--radius-pill); padding: 3px 10px; background: var(--accent-soft); color: var(--accent); }
.mm-bdg.g { background: var(--bg); color: var(--ink-soft); }
.mm-sec { padding: 13px 18px; border-bottom: 1px solid var(--line-soft); }
.mm-sec .h { font-size: 12px; color: var(--ink-faint); font-weight: 700; margin-bottom: 9px; }
.mm-tk { border: 1px solid var(--line-soft); border-radius: var(--radius-btn); padding: 9px 11px; margin-bottom: 7px; }
.mm-tk .t1 { display: flex; justify-content: space-between; gap: 8px; align-items: baseline; }
.mm-tk .tn { font-weight: 650; font-size: 15px; }
.mm-tk .rem { font-size: 14px; color: var(--accent); font-weight: 700; }
.mm-tk .t2 { font-size: 13px; color: var(--ink-faint); margin-top: 2px; display: flex; gap: 10px; }
.mm-hist { display: flex; flex-direction: column; gap: 0; }
.mm-h { display: flex; align-items: center; gap: 9px; padding: 6px 0; border-bottom: 1px dashed var(--line-soft); font-size: 14px; }
.mm-h:last-child { border-bottom: 0; }
.mm-h .dt { font-variant-numeric: tabular-nums; color: var(--ink); font-weight: 600; min-width: 74px; }
.mm-h .st { font-size: 12px; font-weight: 700; border-radius: var(--radius-sm); padding: 1px 6px; }
.mm-h .st.done { background: var(--ok-soft); color: var(--ok); }
.mm-h .st.sch { background: var(--accent-soft); color: var(--accent); }
.mm-h .st.cx { background: var(--bg); color: var(--ink-faint); }
.mm-h .st.ns { background: var(--danger-soft, #f8e5e2); color: var(--danger); }
.mm-stat { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; }
.mm-stat > div { border: 1px solid var(--line-soft); border-radius: var(--radius-btn); padding: 9px 6px; text-align: center; }
.mm-stat span { font-size: 12px; color: var(--ink-faint); display: block; }
.mm-stat b { font-size: 18px; font-variant-numeric: tabular-nums; }

/* ── 문자 발송(솔라피) : 모드 배지 + 이력 + 카드 발송 버튼 ── */
.wb-send { font-size: 12px; cursor: pointer; border-radius: var(--radius-sm); padding: 1px 4px; background: var(--bg); border: 1px solid var(--line); line-height: 1.4; opacity: 0; transition: opacity .12s; }
.wb-blk:hover .wb-send, .wb-send:focus-visible { opacity: 1; }
.wb-send:hover { background: var(--accent-soft); border-color: transparent; }
.sms-mode-row { display: flex; align-items: center; gap: 10px; margin: 0 0 12px; flex-wrap: wrap; }
.sms-mode { font-size: 14px; font-weight: 700; border-radius: var(--radius-pill); padding: 3px 11px; white-space: nowrap; }
.sms-mode.live { background: var(--ok-soft, #e7f3ef); color: var(--ok, #147a63); }
.sms-mode.dry { background: var(--warn-soft, #fbf1dc); color: var(--warn, #a9741a); }
.sms-mode.off { background: var(--bg); color: var(--ink-faint); border: 1px solid var(--line); }
.sms-log-head { display: flex; align-items: center; justify-content: space-between; margin: 18px 0 8px; }
.sms-log-head h4 { margin: 0; font-size: 15px; color: var(--ink-soft); }
.sms-log-list { display: flex; flex-direction: column; gap: 4px; max-height: 320px; overflow-y: auto; }
.sms-log-row { display: grid; grid-template-columns: 46px 1fr; grid-auto-rows: auto; gap: 2px 8px; align-items: center; border: 1px solid var(--line-soft); border-radius: var(--radius-btn); padding: 7px 10px; font-size: 14px; }
.sms-log-row .sms-st { grid-row: 1 / span 2; align-self: center; text-align: center; font-size: 12px; font-weight: 700; border-radius: var(--radius-sm); padding: 3px 0; background: var(--bg); color: var(--ink-faint); }
.sms-log-row.st-sent .sms-st { background: var(--ok-soft, #e7f3ef); color: var(--ok, #147a63); }
.sms-log-row.st-dryrun .sms-st { background: var(--warn-soft, #fbf1dc); color: var(--warn, #a9741a); }
.sms-log-row.st-failed .sms-st { background: var(--danger-soft, #f8e5e2); color: var(--danger); }
.sms-log-row.st-queued .sms-st { background: var(--accent-soft); color: var(--accent); }
.sms-meta { color: var(--ink-faint); font-size: 13px; }
.sms-to { font-variant-numeric: tabular-nums; color: var(--ink-soft); font-size: 13px; grid-column: 2; }
.sms-body { color: var(--ink); grid-column: 2; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sms-err { grid-column: 2; color: var(--danger); font-size: 13px; }
/* 빠른 배정 모달 (주간 배정판 ＋배정) */
.qb-modal { max-width: 480px; }
.qb-body { max-height: min(72vh, 640px); overflow-y: auto; }
.qb-top { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 14px; }
.qb-kv { display: flex; flex-direction: column; gap: 5px; font-size: 14px; color: var(--ink-soft); }
.qb-kv > b { font-size: 17px; color: var(--ink); padding: 10px 11px; background: var(--accent-soft); border-radius: var(--radius-btn); }
.qb-kv > select { font-size: 16px; font-weight: 700; color: var(--ink); padding: 9px 8px; background: var(--accent-soft); border: 1px solid var(--line); border-radius: var(--radius-btn); cursor: pointer; }
.qb-kv input[type="date"] { padding: 9px 11px; border: 1px solid var(--line); border-radius: var(--radius-btn); font-size: 16px; background: #fff; color: var(--ink); }
.qb-list { border: 1px solid var(--line); border-radius: var(--radius-btn); max-height: 168px; overflow-y: auto; margin-bottom: 12px; }
.qb-list .qb-empty { padding: 14px; text-align: center; color: var(--ink-faint); font-size: 14px; }
.qb-mrow { display: flex; align-items: center; gap: 8px; padding: 9px 12px; cursor: pointer; border-bottom: 1px solid var(--line); font-size: 15px; }
.qb-mrow:last-child { border-bottom: 0; }
.qb-mrow:hover { background: #faf6f0; }
.qb-mrow.sel { background: var(--accent-soft); }
.qb-mrow .nm { font-weight: 700; }
.qb-mrow .ct { color: var(--ink-faint); font-size: 14px; }
.qb-mrow .tk { margin-left: auto; color: var(--ink-soft); font-size: 13px; white-space: nowrap; }
.qb-ticket-sec { margin-bottom: 12px; }
.qb-trow { display: flex; align-items: center; gap: 8px; padding: 9px 12px; border: 1px solid var(--line); border-radius: var(--radius-btn); margin-bottom: 6px; cursor: pointer; font-size: 15px; }
.qb-trow.sel { border-color: var(--accent); background: var(--accent-soft); }
.qb-trow.navail { opacity: 0.55; cursor: not-allowed; }
.qb-trow .tn { font-weight: 700; }
.qb-trow .rem { margin-left: auto; color: var(--ink-soft); font-size: 14px; white-space: nowrap; font-variant-numeric: tabular-nums; }
.qb-seq { display: flex; align-items: center; gap: 7px; background: var(--accent-soft); border-radius: var(--radius-btn); padding: 9px 12px; font-size: 14px; color: var(--ink); font-variant-numeric: tabular-nums; }
.qb-seq b { font-size: 16px; }
.qb-timerow { display: flex; align-items: center; gap: 6px; }
/* 관리 표기(약자) 선택 행 — 드로어 */
.qb-carerow { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.qb-carerow select { flex: 1; min-width: 180px; padding: 9px 10px; border: 1px solid var(--line); border-radius: var(--radius-btn); font-size: 15px; background: #fff; color: var(--ink); }
.qb-carefree { display: inline-flex; align-items: center; gap: 5px; font-size: 14px; color: var(--ink-soft); cursor: pointer; white-space: nowrap; }
.qb-carefree input { width: 15px; height: 15px; accent-color: var(--accent); cursor: pointer; }
.qb-carefree b { color: #1f5f8b; }
/* 회차 옵션(고주파 유/무료·솔트 …) — 드로어 부착 행 */
.qb-adrow { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 7px 0; border-bottom: 1px dashed var(--line); }
.qb-adrow:last-child { border-bottom: 0; }
.qb-adname { font-size: 15px; font-weight: 650; color: var(--ink); min-width: 120px; }
.qb-adname .qb-adcode { color: #1f5f8b; font-weight: 800; }
.qb-adname small { color: var(--ink-faint); font-weight: 500; }
.qb-adtg { display: inline-flex; border: 1px solid var(--line); border-radius: var(--radius-btn); overflow: hidden; }
.qb-adbtn { padding: 6px 12px; font-size: 14px; font-weight: 650; background: #fff; color: var(--ink-soft); border: 0; border-right: 1px solid var(--line); cursor: pointer; }
.qb-adbtn:last-child { border-right: 0; }
.qb-adbtn.active { background: var(--ink-soft); color: #fff; }
.qb-adbtn.ad-paid.active { background: #b5502a; color: #fff; }
.qb-adbtn.ad-free.active { background: #1f5f8b; color: #fff; }
.qb-adprice { width: 108px; padding: 7px 9px; border: 1px solid var(--line); border-radius: var(--radius-btn); font-size: 15px; text-align: right; font-variant-numeric: tabular-nums; background: #fff; color: var(--ink); }
.qb-adfix { font-size: 14px; color: var(--ink-soft); padding: 0 8px; align-self: center; }
.qb-adrow.orphan .qb-adname { color: var(--ink-faint); }
.qb-timerow select { padding: 9px 10px; border: 1px solid var(--line); border-radius: var(--radius-btn); font-size: 17px; background: #fff; color: var(--ink); font-variant-numeric: tabular-nums; }
.qb-tsep { font-size: 15px; color: var(--ink-soft); }
#qbMinDirect { width: 84px; padding: 9px 10px; border: 1px solid var(--line); border-radius: var(--radius-btn); font-size: 16px; margin-left: 8px; background: #fff; color: var(--ink); }
/* 시 직접 입력 — 시 셀렉트에서 [직접…]을 고를 때만 나타남(20260859) */
#qbHourDirect { width: 66px; padding: 9px 8px; border: 1px solid var(--accent-line); border-radius: var(--radius-btn); font-size: 17px; background: #fff; color: var(--ink); font-variant-numeric: tabular-nums; }
/* 형태(출장/샵)=라디오 — 알약 세그먼트 폐기(사용자 0828 "라디오 버튼으로 하면 안되나") */
.qb-formtg { display: flex; align-items: center; gap: 18px; }
.qb-fradio { display: inline-flex; align-items: center; gap: 6px; font-size: 15px; color: var(--ink); cursor: pointer; }
.qb-fradio input { width: 17px; height: 17px; accent-color: var(--accent); cursor: pointer; margin: 0; }
/* 배정 드로어(등록+수정 통합) — 달력을 보면서 조작, 백드롭 없음 */
.qb-drawer { position: fixed; top: 0; right: 0; height: 100%; width: 400px; max-width: 94vw; background: var(--card); border-left: 1px solid var(--line); box-shadow: -14px 0 44px rgba(20, 14, 6, .16); z-index: 90; display: flex; flex-direction: column; transform: translateX(105%); transition: transform .22s ease; visibility: hidden; }
.qb-drawer.open { transform: none; visibility: visible; }
/* 좁은 화면(태블릿·폰) — 우측 드로어 대신 포털과 동일한 하단시트로(0829 드로어→하단시트 패스) */
@media (max-width: 840px) {
  .qb-drawer { top: auto; right: 0; left: 0; bottom: 0; height: auto; max-height: 88vh; width: auto; max-width: none; border-left: 0; border-top: 1px solid var(--line); border-radius: var(--radius-lg) var(--radius-lg) 0 0; box-shadow: 0 -14px 44px rgba(20, 14, 6, .16); transform: translateY(105%); }
}
.qb-dhead { display: flex; align-items: center; justify-content: space-between; padding: 15px 18px; border-bottom: 1px solid var(--line); font-size: 17px; flex: 0 0 auto; }
.qb-dbody { flex: 1; overflow-y: auto; padding: 16px 18px; }
/* 드로어 필드 묶음(0828 가독성) — 헤어라인으로 [시간·형태]/[방문 주소]/[표기·옵션]/[상태·메모]를 구분 */
.qb-sec { border-top: 1px solid var(--line-soft); margin-top: 15px; padding-top: 13px; }
.qb-sec > .cfm-f:first-child { margin-top: 0; }
.qb-dfoot { display: flex; flex-wrap: wrap; gap: 8px; padding: 13px 18px; border-top: 1px solid var(--line); flex: 0 0 auto; }
.qb-dfoot .btn-primary { flex: 1; min-width: 76px; }
.qb-dfoot .btn-ghost { flex: 0 0 auto; }
.qb-dfoot .qb-danger { color: var(--danger); border-color: var(--danger); }
/* 등록 유형(고객 배정/가배정) */
.qb-kindtg { display: flex; border: 1px solid var(--line); border-radius: var(--radius-btn); overflow: hidden; margin-bottom: 14px; }
.qb-kbtn { flex: 1; border: 0; background: #fff; padding: 9px 6px; font-size: 14px; cursor: pointer; color: var(--ink-soft); }
.qb-kbtn.active { background: var(--ink); color: #fff; font-weight: 700; }
/* 수정 모드 요약 */
.qb-editinfo { border: 1px solid var(--line); border-radius: var(--radius-btn); padding: 11px 13px; margin-bottom: 12px; font-size: 15px; display: flex; flex-direction: column; gap: 4px; }
.qb-editinfo .nm { font-weight: 700; font-size: 16px; }
/* 뒷4자리·결제 티커 — 이름과 같은 줄(세로 flex라 배지가 제 줄로 떨어지는 것 방지). flex(블록)라 티커 margin-left:auto=카드 우상단 */
.qb-editinfo .nm { display: flex; align-items: baseline; gap: 6px; }
.qb-editinfo .nm4 { font-size: 13px; line-height: 1; margin-left: 0; }
.qb-editinfo .sub { color: var(--ink-soft); font-size: 14px; }
/* 결제 스트립+액션(배정된 세션에서만) — 상태 한 줄+단일 버튼, 보조 액션은 아랫줄 */
.qb-actions { display: flex; flex-direction: column; gap: 8px; margin-bottom: 14px; }
.qb-actrow { display: flex; gap: 8px; }
.qb-act { flex: 1; padding: 11px 8px; border-radius: var(--radius-btn); font-size: 15px; font-weight: 700; cursor: pointer; border: 1px solid var(--line); background: #fff; color: var(--ink); transition: filter .12s; }
.qb-act:hover { filter: brightness(.97); }
.qb-act.pay { background: var(--accent); color: #fff; border-color: transparent; }
.qb-act.info { background: var(--accent-soft); color: var(--accent); border-color: var(--accent-line); }
/* 결제 상태 스트립 — 미수(due)=코랄 틴트 · 입금대기(wait)=앰버 틴트 · 티켓없음(none)=기본 */
.qb-paystrip { border: 1px solid var(--line); border-radius: var(--radius-btn); padding: 10px 12px; font-size: 13px; display: flex; flex-direction: column; gap: 8px; background: var(--bg, #faf9f5); word-break: keep-all; }
.qb-paystrip.due { background: #fdf1ef; border-color: #f2d8d3; }
.qb-paystrip.wait { background: #fdf7e9; border-color: #efe2bd; }
.qb-ps-main { display: flex; align-items: center; gap: 8px; }
.qb-ps-txt { flex: 1; min-width: 0; color: var(--ink); }
.qb-ps-amt { font-weight: 700; }
.qb-paystrip.due .qb-ps-amt { color: #b4483a; }
.qb-ps-sub { font-size: 12px; color: var(--ink-soft); }
.qb-ps-btn { padding: 8px 14px; border-radius: var(--radius-btn); border: 1px solid transparent; background: var(--accent); color: #fff; font-weight: 700; font-size: 13px; cursor: pointer; white-space: nowrap; flex: none; }
.qb-ps-btn:hover { filter: brightness(.95); }
/* 결제완료 티커 — 고객 카드(qbEditInfo) 이름 줄 우측 초록 배지(사용자 0828 "고객 정보 옆에", 액션 줄 큰 칩 대체) */
.qb-paytick { margin-left: auto; font-size: 12px; font-weight: 700; color: #147a63; background: #d9efe7; border-radius: var(--radius-sm); padding: 2px 7px; flex: none; line-height: 1.4; }
/* 배정 상태 3색 토글 */
.qb-statetg { display: flex; gap: 6px; }
.qb-sbtn { flex: 1; border: 1.5px solid var(--line); background: #fff; border-radius: var(--radius-btn); padding: 9px 4px; font-size: 14px; cursor: pointer; color: var(--ink-soft); }
.qb-sbtn.st-confirmed.active { background: #fdf3cd; border-color: #d9bd55; color: #7a611a; font-weight: 700; }
.qb-sbtn.st-revise.active { background: #ddf0fb; border-color: #7db8dd; color: #2c6288; font-weight: 700; }
.qb-sbtn.st-hold.active { background: #fde7d2; border-color: #e5a05e; color: #92551c; font-weight: 700; }
/* 사유 태그 칩 */
.qb-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 7px; }
.qb-tag { border: 1px solid var(--line); background: #fff; border-radius: var(--radius-btn); padding: 5px 11px; font-size: 14px; cursor: pointer; color: var(--ink-soft); }
.qb-tag.sel { background: var(--ink); border-color: var(--ink); color: #fff; font-weight: 600; }
#qbMemo { width: 100%; box-sizing: border-box; padding: 9px 11px; border: 1px solid var(--line); border-radius: var(--radius-btn); font-size: 15px; line-height: 1.5; resize: vertical; font-family: inherit; color: var(--ink); }
/* 주간판·월달력 — 배정 상태 색상 (노랑=확정 · 하늘=수정예정 · 주황=잡는중/가배정 · 보라=지정 매칭) */
.wb-blk.bs-confirmed { background: #fdf6d8; border-color: #e2cf85; }
.wb-blk.bs-revise { background: #e2f1fb; border-color: #a3cde8; }
.wb-blk.bs-hold { background: #fdeada; border-color: #eab887; }
.wb-blk.bs-desig { background: #eee3fa; border-color: #c3a3e5; }
.wb-blk.holdslot { background: #fdeada; border: 1.5px dashed #dd9a55; }
.wb-st.holdst { background: #f7d9b8; color: #92551c; }
.wb-mgr { color: #92551c; cursor: help; font-size: 12px; }
.wb-legend .sw.bsy { background: #fdf6d8; border: 1px solid #d9bd55; }
.wb-legend .sw.bsb { background: #e2f1fb; border: 1px solid #7db8dd; }
.wb-legend .sw.bso { background: #fdeada; border: 1px dashed #dd9a55; }
.wb-legend .sw.bsp { background: #eee3fa; border: 1px solid #9b6dd0; }
.acal-chip.bs-confirmed { background: #fdf3cd; }
.acal-chip.bs-revise { background: #ddf0fb; }
.acal-chip.bs-hold { background: #fde7d2; }
.acal-chip.bs-desig { background: #eee3fa; }
.acal-chip.holdslot { background: #fde7d2; border: 1px dashed #dd9a55; }
/* 가배정 구분색(20260856) — 엑셀 관행(자주·파랑·보라): 파스텔 배경+고채도 테두리. 점선+‘잡는중’ 배지가 1차 신호, 색은 2차 */
.wb-blk.holdslot.hc-mg { background: #f9d9ee; border-color: #d1198f; }
.wb-blk.holdslot.hc-bl { background: #d9e8fb; border-color: #2f6fd6; }
.wb-blk.holdslot.hc-pu { background: #ded9f8; border-color: #4b3fd6; }
.acal-chip.holdslot.hc-mg { background: #f9d9ee; border-color: #d1198f; }
.acal-chip.holdslot.hc-bl { background: #d9e8fb; border-color: #2f6fd6; }
.acal-chip.holdslot.hc-pu { background: #ded9f8; border-color: #4b3fd6; }
.wb-legend .sw.hcmg { background: #f9d9ee; border: 1px dashed #d1198f; }
.wb-legend .sw.hcbl { background: #d9e8fb; border: 1px dashed #2f6fd6; }
.wb-legend .sw.hcpu { background: #ded9f8; border: 1px dashed #4b3fd6; }
.wb-legend .sw.offg { background: #3fa254; border-color: #3fa254; }
.wb-legend .sw.ttem { background: #ffd9a3; border: 1px solid #ea9d2d; }
.wb-legend .sw.ttslim { background: #fdf7ee; border: 1px dashed #e3c390; height: 7px; }
/* 배정 드로어 — 지정(지명) 체크 */
.qb-desig { display: flex; align-items: center; gap: 7px; margin-top: 9px; font-size: 15px; color: var(--ink); cursor: pointer; }
.qb-desig input { accent-color: #9b6dd0; width: 15px; height: 15px; }
.qb-desig small { color: var(--ink-faint); margin-left: 2px; }
/* 주간판 필터 바 — 셀렉트마다 테두리를 두르는 대신 줄 전체가 얕은 틴트 레일 하나(design.md §3-1 테두리 예산).
   값이 걸린 칸만 액센트로 켜지고, [초기화]는 하나라도 걸렸을 때만 렌더된다(renderWbFilter). */
.wb-filter { display: flex; flex-wrap: wrap; align-items: center; gap: 2px 4px; margin: 12px 14px;
  padding: 5px 7px; background: var(--surface-card); border-radius: var(--radius); }
/* 값은 텍스트(.vl)로 그리고 네이티브 select 를 그 위에 투명하게 덮는다 — 칩이 선택값 길이에 딱 맞게 줄어든다 */
.wbf-f { position: relative; display: inline-flex; align-items: center; gap: 5px; padding: 4px 8px; border-radius: var(--radius-btn);
  font-size: 14px; color: var(--ink); white-space: nowrap; cursor: pointer; }
.wbf-f .lb { font-size: 12px; color: var(--ink-faint); }
.wbf-f .vl { font-size: 14px; color: var(--ink); max-width: 140px; overflow: hidden; text-overflow: ellipsis; }
.wbf-f select { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer;
  font-size: 16px; /* iOS 확대 방지 */ }
.wbf-f::after { content: '⌄'; font-size: 12px; line-height: 1; color: var(--ink-faint); margin-top: -3px; }
.wbf-f:hover { background: var(--card); }
.wbf-f:focus-within { outline: 2px solid var(--accent); outline-offset: 1px; }
.wbf-f.on { background: var(--accent-soft); }
.wbf-f.on .lb, .wbf-f.on::after { color: var(--accent); }
.wbf-f.on .vl { color: var(--accent); font-weight: 650; }
.wbf-end { display: inline-flex; align-items: center; gap: 6px; margin-left: auto; padding-right: 2px; }
.wbf-cnt { font-size: 12.5px; color: var(--ink-soft); font-variant-numeric: tabular-nums; }
.wbf-reset { border: 0; background: none; border-radius: var(--radius-btn); padding: 4px 9px; font-size: 13px; cursor: pointer; color: var(--ink-soft); }
.wbf-reset:hover { background: var(--card); color: var(--ink); } /* 가벼운 동작 — danger 색 관례와 분리 */
/* 필터 결과 — 가능 날짜 불 켜기 / 비매칭 흐림 */
.wb-slot.avail { background: #edf6ea; box-shadow: inset 0 0 0 1.5px #b9d8b0; }
.wb-c.dimf { opacity: .32; filter: grayscale(.4); }
/* 직원 드로어 — 근무 형태 체크 */
.dw-forms { display: flex; gap: 16px; padding: 4px 0; }
.dw-forms label { display: inline-flex; align-items: center; gap: 6px; font-size: 15px; color: var(--ink); cursor: pointer; }
.dw-forms input[type="checkbox"] { width: 16px; height: 16px; accent-color: var(--accent); }

/* ── 회원 상세: 관리 스케줄(N회 전체) + 특이사항(누적 메모) ── */
.acc-sub { font-weight: 400; font-size: 14px; color: var(--ink-faint); margin-left: 6px; }
.sched-list { display: flex; flex-direction: column; gap: 5px; }
.sc-row { border: 1px solid var(--line-soft); border-radius: var(--radius-btn); padding: 8px 11px; }
.sc-top { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; font-size: 15px; }
.sc-cancel { margin-left: auto; }
.sc-pay { font-size: 13px; font-weight: 750; border-radius: var(--radius-sm); padding: 2px 7px; }
.sc-pay.unpaid { background: #fde2de; color: #c0392b; }
.sc-pay.paid { background: var(--ok-soft, #e7f3ef); color: var(--ok, #147a63); }
/* 회차 옵션 배지 — 관리 스케줄 행(유료=주황·서비스=파랑) */
.sc-addon { font-size: 13px; font-weight: 750; border-radius: var(--radius-sm); padding: 2px 7px; white-space: nowrap; }
.sc-addon.paid { background: #fbe9df; color: #b5502a; }
.sc-addon.free { background: #e3eef7; color: #1f5f8b; }
/* 월별 급여 상세 — 옵션 수당 배지 */
.mo-ad { font-size: 13px; font-weight: 700; border-radius: var(--radius-sm); padding: 1px 6px; white-space: nowrap; }
.mo-ad.paid { background: #fbe9df; color: #b5502a; }
.mo-ad.free { background: #e3eef7; color: #1f5f8b; }
.kpi-sub { font-size: 12px; font-weight: 700; color: #c0392b; background: #fde2de; border-radius: var(--radius-sm); padding: 1px 5px; vertical-align: 2px; }
.tk-up { font-size: 12px; font-weight: 700; color: #6b4fa1; background: #eee3fa; border-radius: var(--radius-sm); padding: 1px 5px; cursor: help; white-space: nowrap; }
/* 기존/신규 배지 (신규 신청·회원 명부) */
/* 신규 신청 응대 요약 카드 */
.app-summary { background: var(--accent-soft); border: 1px solid var(--accent-line, var(--line)); border-radius: var(--radius); padding: 13px 15px; margin-bottom: 14px; }
.app-sm-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; }
.app-sm-head b { font-size: 15px; color: var(--accent); }
.app-sm-body { font-size: 15px; color: var(--ink); line-height: 1.62; }
.app-sm-line { font-variant-numeric: tabular-nums; }
.app-sm-line.head { font-weight: 800; font-size: 17px; margin-bottom: 3px; }
.app-sm-ask { margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--line); display: flex; align-items: center; flex-wrap: wrap; gap: 6px; }
.app-sm-ask b { font-size: 14px; color: var(--ink-soft); margin-right: 3px; }
.app-ask-chip { font-size: 14px; font-weight: 700; background: #fff; border: 1px solid var(--line); border-radius: var(--radius-pill); padding: 3px 10px; color: #b8481d; }
.app-ask-chip.bad { color: var(--danger); border-color: var(--danger); background: var(--danger-soft); } /* 출장 조건 부적합 — 상담 때 꼭 확인 */
.ret-tag { font-size: 12px; font-weight: 800; border-radius: var(--radius-sm); padding: 1px 6px; vertical-align: 1px; white-space: nowrap; }
.ret-tag.new { background: var(--accent-soft); color: var(--accent); }
.ret-tag.ret { background: #e3edf8; color: #2f6aa8; }
/* 회원 명부 구간 구분선 (신규·배정 / 진행 중 / 완료·마케팅) */
.mem-divider td { background: var(--bg); padding: 8px 12px !important; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); position: sticky; }
.mem-divider .md-label { font-size: 14px; font-weight: 800; color: var(--ink); }
.mem-divider .md-hint { font-size: 13px; color: var(--ink-faint); margin-left: 7px; }
/* 미니 배정판 — 적합 실장 × 7일 가용성 (빈 칸 클릭=폼 채움) */
.mini-wrap { margin-top: 12px; }
.mini-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap; margin-bottom: 7px; }
.mini-title { font-size: 15px; font-weight: 750; color: var(--ink); }
.mini-title small { font-weight: 400; color: var(--ink-faint); margin-left: 5px; }
.mini-nav { display: inline-flex; align-items: center; gap: 7px; font-size: 14px; font-variant-numeric: tabular-nums; }
.mini-all { display: inline-flex; align-items: center; gap: 4px; font-size: 14px; color: var(--ink-soft); cursor: pointer; margin-left: 6px; }
.mini-scroll { overflow-x: auto; border: 1px solid var(--line); border-radius: var(--radius-btn); }
.mini-tb { border-collapse: collapse; width: 100%; font-size: 14px; min-width: 640px; }
.mini-tb th, .mini-tb td { border-bottom: 1px solid var(--line-soft); border-right: 1px solid var(--line-soft); padding: 4px 6px; text-align: center; }
.mini-tb thead th { background: var(--bg); font-size: 13px; color: var(--ink-soft); padding: 6px 4px; white-space: nowrap; }
.mini-tb thead th.wknd { color: var(--danger); }
.mini-tb thead th.today { background: var(--accent-soft); color: var(--accent); }
.mini-wish { color: #d99a1a; }
.mini-th { text-align: left !important; white-space: nowrap; font-size: 14px; background: var(--card); padding: 5px 8px !important; }
.mini-th small { display: block; font-weight: 400; color: var(--ink-faint); font-size: 12px; }
.mini-th.desig { background: #f4edfb; } /* 지정 실장 행 = 연한 보라 */
/* 회원 기본정보 — 지정 실장 다중 체크 */
.desig-checks { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 5px; }
.desig-chk { display: inline-flex; align-items: center; gap: 6px; border: 1px solid var(--line); border-radius: var(--radius-btn); padding: 6px 11px; font-size: 15px; cursor: pointer; background: var(--card); }
.desig-chk input { accent-color: #9b6dd0; width: 14px; height: 14px; margin: 0; }
.desig-chk:has(input:checked) { background: #f4edfb; border-color: #9b6dd0; }
.desig-chk small { color: var(--ink-faint); }
.mini-tb td { min-width: 74px; height: 40px; vertical-align: middle; }
.mini-tb td.off { background: #f0ede9; color: var(--ink-faint); font-size: 13px; }
.mini-tb td.past { background: var(--bg); opacity: .55; }
.mini-tb td.free { cursor: pointer; position: relative; }
.mini-tb td.free:hover { background: var(--accent-soft); }
.mini-tb td.free .mini-plus { color: transparent; font-size: 15px; }
.mini-tb td.free:hover .mini-plus { color: var(--accent); }
.mini-tb td.free.sel { outline: 2px solid var(--accent); outline-offset: -2px; background: var(--accent-soft); }
.mini-tb td.free.sel .mini-plus { color: var(--accent); }
/* 칩 색: 회색=다른 고객 · 노랑=이 고객(지정 아님) · 보라=이 고객+지정 매칭 · 점선 주황=추후 지정(드래그) */
.mini-chip { display: inline-block; background: #efece7; border: 1px solid #ddd6cd; color: var(--ink-faint); border-radius: var(--radius-sm); padding: 0 4px; margin: 1px; font-size: 12px; font-variant-numeric: tabular-nums; }
.mini-chip.mine { background: #fdf6d8; border-color: #d9bd55; color: var(--ink); font-weight: 700; }
.mini-chip.desig { background: #eee3fa; border-color: #9b6dd0; color: #5b3d87; font-weight: 700; }
.mini-chip.na { background: #fdeada; border: 1.5px dashed #dd9a55; color: #92551c; font-weight: 700; cursor: grab; padding: 1px 6px; }
.mini-chip.na:active { cursor: grabbing; }
.mini-narow .na-cell { background: #fffaf4; }
.mini-th.na { background: #fdeada; }
.mini-tb td.free.drophl { outline: 2px dashed var(--accent); outline-offset: -2px; background: var(--accent-soft); }
.mini-legend { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-top: 7px; font-size: 13px; color: var(--ink-soft); }
.mini-legend .sw { width: 16px; height: 10px; border-radius: var(--radius-sm); display: inline-block; margin-left: 8px; }
.mini-legend .sw:first-child { margin-left: 0; }
.mini-legend .sw.gray { background: #efece7; border: 1px solid #ddd6cd; }
.mini-legend .sw.yellow { background: #fdf6d8; border: 1px solid #d9bd55; }
.mini-legend .sw.purple { background: #eee3fa; border: 1px solid #9b6dd0; }
.mini-legend .sw.dashed { background: #fdeada; border: 1.5px dashed #dd9a55; }
.sc-st { font-size: 13px; font-weight: 700; border-radius: var(--radius-sm); padding: 2px 7px; background: var(--bg); color: var(--ink-faint); }
.sc-st.sch { background: var(--accent-soft); color: var(--accent); }
.sc-st.done { background: var(--ok-soft, #e7f3ef); color: var(--ok, #147a63); }
.sc-st.cx { background: var(--bg); color: var(--ink-faint); }
.sc-st.ns { background: var(--danger-soft, #f8e5e2); color: var(--danger); }
.sc-seq { font-size: 13px; font-weight: 700; color: var(--ink-soft); background: var(--bg); border-radius: var(--radius-sm); padding: 2px 6px; font-variant-numeric: tabular-nums; }
.sc-dt { font-variant-numeric: tabular-nums; color: var(--ink); }
.sc-th { color: var(--ink-soft); }
.sc-form { color: var(--ink-faint); font-size: 14px; }
.sc-memo { margin-top: 6px; font-size: 14px; color: var(--ink-soft); line-height: 1.5; }
.sc-memo.dim { color: var(--ink-faint); }
.sc-memo-at { color: var(--ink-faint); font-size: 13px; }
.note-add { display: flex; gap: 8px; margin-bottom: 12px; }
.note-add textarea { flex: 1; min-height: 54px; padding: 9px 11px; border: 1px solid var(--line); border-radius: var(--radius-btn); font-size: 15px; line-height: 1.5; resize: vertical; font-family: inherit; color: var(--ink); }
.note-list { display: flex; flex-direction: column; gap: 8px; }
.note-item { border: 1px solid var(--line-soft); border-radius: var(--radius); padding: 10px 12px; background: #fff; }
.note-head { display: flex; align-items: center; gap: 8px; font-size: 14px; margin-bottom: 5px; }
.note-head b { font-weight: 700; color: var(--ink); }
.note-at { color: var(--ink-faint); }
.note-tools { margin-left: auto; display: flex; gap: 2px; }
.note-body { font-size: 15px; color: var(--ink); line-height: 1.55; white-space: pre-wrap; word-break: break-word; }
/* 분 직접입력 중 — 분 드롭다운 잠금 표시 */
.qb-timerow select:disabled { background: #f1efe9; color: var(--ink-faint); border-style: dashed; cursor: not-allowed; }
/* 고객 선택 후 접힌 리스트 — 선택 행만 + [변경] */
.qb-list.collapsed { max-height: none; overflow: visible; }
.qb-selrow { cursor: default; }
.qb-selrow:hover { background: var(--accent-soft); }
.qb-selrow .btn-mini { margin-left: auto; flex: 0 0 auto; }
/* 가배정→배정 전환 — 이름 유사 추천 고객 배지 */
.qb-rec { font-size: 11px; font-weight: 800; color: #1f5f8b; background: #e3eef7; border: 1px solid #c8dded; border-radius: var(--radius-sm); padding: 0 5px; margin-left: 5px; vertical-align: 1px; }
/* 가배정 구분색 선택(드로어) — 텍스트 라벨+색 칩, 선택=✓+진한 링(색맹 대응 형태 신호 병행) */
.qb-holdcolors { display: flex; flex-wrap: wrap; gap: 8px; }
.qb-hc { flex: none; display: inline-flex; align-items: center; gap: 3px; border: 1.5px dashed #dd9a55; background: #fdeada; color: var(--ink); border-radius: var(--radius-btn); padding: 6px 13px; font-size: 14px; font-weight: 700; cursor: pointer; }
.qb-hc.hc-mg { background: #f9d9ee; border-color: #d1198f; }
.qb-hc.hc-bl { background: #d9e8fb; border-color: #2f6fd6; }
.qb-hc.hc-pu { background: #ded9f8; border-color: #4b3fd6; }
.qb-hc.active { box-shadow: 0 0 0 2px var(--ink); border-style: solid; }
.qb-hc.active::before { content: '✓'; font-weight: 800; margin-right: 2px; }
.qb-hc:disabled { opacity: .38; cursor: not-allowed; }
/* 휴가일 셀 — 조작 차단(배정/메모/휴가 버튼 숨김, 드롭 차단은 JS). 회색 전체 블록 → 엑셀식 초록 한 줄(0828 매니저) */
.wb-slot.offday { background: #eef6ef; } /* 휴무 칸 바탕 — 완료 블록(#e7f3ef 민트)과 안 겹치게 풀색 쪽으로 */
.wb-slot.offday .wb-tools { display: none; }
/* 휴무 바 — 종일=진초록 한 줄 / 정기 요일휴무(wd)=연초록 / 부분(lane)=해당 타임 레인 안.
   🚨한 줄 고정: 좁은 열에서 시간이 아래로 꺾이면 레인 높이가 틀어짐 → nowrap+자간 압축, 사유부터 말줄임 */
/* 휴무 글자 = 고객 이름과 같은 크기(매니저 0828) — 한 줄 유지는 .ob-t nowrap + 사유 말줄임이 담당 */
/* 🚨 휴무는 완료와 반드시 다른 색이어야 한다(대표 0830 "완료된거랑 휴무랑 구분이 안되잖아").
   전에는 둘 다 --ok-soft(#e7f3ef)/--ok 라 사실상 같은 칸으로 보였다.
   완료 = 옅은 민트(#e7f3ef, 청록 계열) · 휴무 = 진한 풀색 단색(#3fa254, 범례 스와치와 동일). */
.wb-offbar { display: flex; align-items: center; justify-content: safe center; gap: 4px; background: #3fa254; color: #fff; font-size: 15px; font-weight: 800; letter-spacing: -.01em; border-radius: var(--radius-sm); padding: 4px 5px; white-space: nowrap; overflow: hidden; min-width: 0; }
.wb-offbar .ob-t { flex: none; letter-spacing: -.02em; font-variant-numeric: tabular-nums; }
.wb-offbar .wb-offreason { color: #fff; opacity: .82; flex: 0 1 auto; min-width: 0; max-width: none; overflow: hidden; text-overflow: ellipsis; }
.wb-offbar .wb-off-x { color: #fff; flex: none; opacity: .85; }
.wb-offbar .wb-off-x:hover { background: rgba(255,255,255,.24); opacity: 1; }
.wb-offbar.wd { font-weight: 700; }
.wb-offbar.lane { flex: 1; }
.wb-compact .wb-offbar { font-size: 13px; padding: 1px 4px; gap: 3px; }
/* 🚨 모바일 축소는 반드시 위 .wb-compact 규칙보다 뒤에 — 앞에 두면 같은 특정성이라 덮여서 죽은 규칙이 됨 */
@media (max-width: 840px) { .wb-compact .wb-offbar { font-size: 12px; } }
.wb-offlabel { font-size: 13px; font-weight: 700; color: var(--ink-faint); padding: 3px 6px; letter-spacing: .02em; display: flex; align-items: center; gap: 5px; }
.wb-offreason { font-weight: 600; color: var(--ink-soft); max-width: 90px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.wb-off-x { border: none; background: transparent; color: var(--danger, #c64545); font-size: 13px; cursor: pointer; padding: 1px 3px; border-radius: var(--radius-sm); opacity: 0; transition: opacity .12s; }
.wb-slot:hover .wb-off-x { opacity: 1; }
.wb-off-x:hover { background: var(--danger-soft, #f7e6e4); }
/* 추가 근무일(20260855) — 원래 쉬는 요일을 그날만 근무로. 휴무=초록으로 바뀌며 반대 의미인 초록을 피해 파랑 계열(UX 리뷰 0828) */
.wb-offlabel.workon { color: #2c6288; background: #ddf0fb; border-radius: var(--radius-sm); }
/* ── 🔔 알림센터(20260855) — 우측 상단 벨 + 드롭 패널 ── */
.alert-bell { position: relative; border: none; background: transparent; font-size: 19px; cursor: pointer; padding: 4px 6px; border-radius: var(--radius-btn); line-height: 1; }
.alert-bell:hover { background: rgba(0,0,0,.06); }
.alert-badge { position: absolute; top: -3px; right: -4px; min-width: 17px; height: 17px; padding: 0 4px; border-radius: var(--radius-btn); background: var(--danger, #c64545); color: #fff; font-size: 11px; font-weight: 800; display: inline-flex; align-items: center; justify-content: center; }
.alert-panel { position: absolute; z-index: 300; width: min(400px, calc(100vw - 20px)); background: var(--card, #fff); border: 1px solid var(--line); border-radius: var(--radius); box-shadow: 0 10px 32px rgba(0,0,0,.16); overflow: hidden; }
.alert-panel .ap-h { display: flex; align-items: center; gap: 6px; font-size: 15px; font-weight: 700; color: var(--ink); padding: 10px 14px; border-bottom: 1px solid var(--line-soft); }
.alert-panel .ap-h b { color: var(--danger, #c64545); }
.alert-panel .ap-ackall { margin-left: auto; border: 1px solid var(--line); background: #fff; border-radius: var(--radius-btn); font-size: 13px; font-weight: 600; padding: 3px 10px; cursor: pointer; color: var(--ink-soft); }
.alert-panel .ap-ackall:hover { background: var(--accent-soft); }
.alert-panel .ap-list { max-height: min(60vh, 480px); overflow-y: auto; }
.alert-panel .ap-empty { padding: 22px 14px; text-align: center; color: var(--ink-faint); font-size: 14px; }
.ap-row { display: flex; align-items: flex-start; gap: 8px; padding: 10px 14px; border-bottom: 1px solid var(--line-soft); }
.ap-row.warn { background: #fff6f4; }
.ap-row.read { opacity: .55; }
.ap-row .ap-title { font-size: 14px; font-weight: 700; color: var(--ink); }
.ap-row .ap-sms { color: #2b6cb0; font-size: 12px; }
.ap-row .ap-body { font-size: 13px; color: var(--ink-soft); margin-top: 2px; word-break: break-word; }
.ap-row .ap-meta { font-size: 12px; color: var(--ink-faint); margin-top: 3px; }
.ap-row .ap-ack { flex: none; border: 1px solid var(--line); background: #fff; border-radius: var(--radius-btn); font-size: 13px; font-weight: 700; padding: 4px 11px; cursor: pointer; color: var(--ink); margin-top: 2px; }
.ap-row .ap-ack:hover { background: var(--accent-soft); border-color: var(--accent); }
/* 배정 드로어 — 티켓 변경 히스토리 */
.qb-hist { margin-top: 14px; background: var(--bg, #faf9f5); border: 1px solid var(--line-soft, #ebe6df); border-radius: var(--radius); padding: 10px 12px; font-size: 14px; }
.qb-hist-h { font-weight: 700; color: var(--ink-soft, #6c6a64); margin-bottom: 6px; font-size: 14px; }
.qb-hist-row { color: var(--ink, #333); padding: 2px 0; border-top: 1px dashed var(--line-soft, #ebe6df); word-break: break-all; }
.qb-hist-row:first-of-type { border-top: none; }
/* 행 헤더 — 근무시간·연필 */
.wb-hours { font-size: 12px; color: var(--ink-soft); margin-top: 2px; font-variant-numeric: tabular-nums; }
.wb-rh .wb-edit { border: 0; background: none; cursor: pointer; color: var(--ink-faint); font-size: 14px; padding: 3px 4px; position: absolute; top: 5px; right: 3px; margin: 0; }
.wb-rh .wb-edit:hover { color: var(--accent); }
/* 직원 드로어 — 근무시간 셀렉트 */
.dw-hours { display: flex; align-items: center; gap: 8px; }
.dw-hours select { flex: 1; padding: 9px 10px; border: 1px solid var(--line); border-radius: var(--radius-btn); font-size: 16px; background: #fff; color: var(--ink); font-variant-numeric: tabular-nums; }
/* UX 검수 반영 — 파스텔 상태 배경 위 보조텍스트 대비·키보드 포커스 시 툴 노출 */
.wb-blk.bs-confirmed .pl, .wb-blk.bs-revise .pl, .wb-blk.bs-hold .pl, .wb-blk.holdslot .pl { color: var(--ink-soft); }
.wb-slot:focus-within .wb-tools { opacity: 1; }
/* 근무 타임(slot_week·20260855) — 요일×1~4타임 체크그리드 */
.dw-slots { display: flex; flex-direction: column; gap: 3px; }
.dws-row { display: flex; align-items: center; gap: 4px; }
.dws-row .dws-day { width: 46px; flex: 0 0 auto; font-size: 14px; font-weight: 600; color: var(--ink); }
/* 타임 칸 = [체크] + [시작시각 셀렉트] 세로 배치(20260859) — 체크해야 시각을 고를 수 있음 */
.dws-row .dws-c { flex: 1; min-width: 0; display: flex; flex-direction: column; align-items: center; gap: 2px; }
.dws-head .dws-c { font-size: 12px; font-weight: 700; color: var(--ink-faint); }
.dws-c input[type="checkbox"] { width: 17px; height: 17px; accent-color: #e8963e; cursor: pointer; }
.dws-c .dws-ck { display: flex; align-items: center; justify-content: center; }
.dws-c .dws-t { width: 100%; min-width: 0; font-size: 11px; letter-spacing: -.02em; padding: 2px 1px 2px 3px; border: 1px solid var(--line); border-radius: var(--radius-sm); background: var(--card); color: var(--ink); font-variant-numeric: tabular-nums; }
.dws-c .dws-t:disabled { opacity: .38; }
/* 공휴일 행 — 요일 7행과 시각적으로 구분 */
.dws-row.hol { margin-top: 4px; padding-top: 6px; border-top: 1px dashed var(--line); }
.dws-row.hol .dws-day { color: #c0392b; }
/* 요일별 근무시간(알람식) — 직원 드로어 */
.dw-week { display: flex; flex-direction: column; gap: 6px; }
.dww-row { display: flex; align-items: center; gap: 8px; }
.dww-day { display: inline-flex; align-items: center; gap: 6px; width: 52px; flex: 0 0 auto; font-size: 15px; font-weight: 600; color: var(--ink); cursor: pointer; }
.dww-day input[type="checkbox"] { width: 15px; height: 15px; accent-color: var(--accent); }
.dww-row select { flex: 1; padding: 7px 9px; border: 1px solid var(--line); border-radius: var(--radius-btn); font-size: 15px; background: #fff; color: var(--ink); font-variant-numeric: tabular-nums; }
.dww-sep { color: var(--ink-faint); font-size: 14px; }
.dww-off { flex: 1; font-size: 14px; color: var(--ink-faint); padding: 7px 2px; }
/* 요일 비근무 셀 — 연회색(소프트, 배정은 가능) */
.wb-slot.offwd { background: #f5f3ef; }
.wb-offlabel.wd { color: #b3afa6; font-weight: 600; }
/* 부분 휴무(시간 단위) — 칩만 표시, 셀은 배정 가능(시간 겹침은 서버 차단) */
.wb-offlabel.part { display: inline-flex; background: #f0ede8; border: 1px solid #d9d4cc; border-radius: var(--radius-sm); margin: 3px 4px 0; padding: 2px 6px; color: var(--ink-soft); font-variant-numeric: tabular-nums; }
.mini-offpart { display: inline-block; background: #f0ede8; border: 1px solid #d9d4cc; border-radius: var(--radius-sm); padding: 0 4px; margin: 1px; font-size: 12px; font-weight: 700; color: var(--ink-faint); font-variant-numeric: tabular-nums; }
/* 드로어 휴무 등록 — 시간 선택(부분 휴무) */
.dw-off-add select { padding: 8px 6px; border: 1px solid var(--line); border-radius: var(--radius-btn); font-size: 15px; background: #fff; color: var(--ink); font-variant-numeric: tabular-nums; }
#dwOffEhWrap { display: inline-flex; align-items: center; gap: 4px; color: var(--ink-faint); }

/* 담당자 거점 주소 + 다음 우편번호 레이어(관리자) */
.dw-addr-row { display: flex; gap: 6px; }
.dw-addr-row input { flex: 1; min-width: 0; }
.dw-addr-meta { font-size: 13px; color: var(--ink-faint); margin-top: 3px; min-height: 13px; }
.m-addr-layer { position: fixed; inset: 0; z-index: 200; background: rgba(0, 0, 0, .45); display: flex; align-items: center; justify-content: center; }
.m-addr-panel { width: min(560px, 94vw); background: #fff; border-radius: var(--radius); overflow: hidden; box-shadow: 0 12px 40px rgba(0,0,0,.25); }
.m-addr-head { display: flex; justify-content: space-between; align-items: center; padding: 10px 14px; border-bottom: 1px solid var(--line); font-weight: 700; font-size: 16px; }
.m-addr-close { background: none; border: 0; font-size: 20px; line-height: 1; cursor: pointer; color: var(--ink-soft); padding: 2px 6px; }
.m-addr-body { height: min(480px, 70vh); }
/* 주간판·빠른배정 — 방문주소 확인 마커 */
.wb-addr { cursor: help; }
.qb-addr-note { margin-top: 5px; font-size: 14px; color: #b4541e; background: #fde7d2; border: 1px solid #efc39a; border-radius: var(--radius-btn); padding: 6px 9px; }
/* 산모 상세 출장 정보 — 수기 주소 → 주소 검색 업데이트 제안(드로어 qb-addr-note와 동일 톤) */
.addr-manual-hint { margin-top: 5px; font-size: 13px; color: #b4541e; background: #fde7d2; border: 1px solid #efc39a; border-radius: var(--radius-btn); padding: 5px 8px; }
.qb-addr-hint { margin-top: 5px; font-size: 14px; color: #2f6b46; background: #e4f3e9; border: 1px solid #bfe0cb; border-radius: var(--radius-btn); padding: 6px 9px; }
#qbAddrBase[readonly] { background: var(--bg-soft, #f6f4f1); color: var(--ink-soft, #6b6257); }

/* 주간판 1열 — 휴무 등록 빨간 점 + 팝오버 */
.wb-offdot { color: var(--danger, #d64545); font-size: 12px; line-height: 1; cursor: pointer; margin: 0 1px; vertical-align: middle; }
.wb-offdot:hover { transform: scale(1.3); }
.offpop { position: absolute; z-index: 200; width: 220px; background: var(--card, #fff); border: 1px solid var(--line, #ddd); border-radius: var(--radius); box-shadow: 0 10px 34px rgba(20, 20, 30, .18); overflow: hidden; }
.offpop-h { display: flex; align-items: center; justify-content: space-between; padding: 9px 12px; border-bottom: 1px solid var(--line-soft, #eee); font-weight: 700; font-size: 15px; }
.offpop-x { border: 0; background: none; font-size: 16px; color: var(--ink-faint, #999); cursor: pointer; padding: 0 2px; }
.offpop-body { max-height: 220px; overflow-y: auto; padding: 4px 0; }
.offpop-row { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; padding: 6px 12px; font-size: 14px; }
.offpop-row b { font-variant-numeric: tabular-nums; }
.offpop-row span { color: var(--ink-faint, #999); font-size: 13px; }
.offpop-empty { padding: 12px; text-align: center; color: var(--ink-faint, #999); font-size: 14px; }
.offpop-detail { width: 100%; border: 0; border-top: 1px solid var(--line-soft, #eee); background: var(--accent-soft, #f3ede4); color: var(--accent, #7a5a2a); padding: 9px; font-size: 14px; font-weight: 600; cursor: pointer; }
.offpop-detail:hover { filter: brightness(.97); }
/* 담당자 드로어 — 휴무 변경 이력 */
.dw-off-log { display: flex; flex-direction: column; gap: 4px; max-height: 220px; overflow-y: auto; }
.ol-row { display: flex; align-items: center; gap: 8px; font-size: 14px; padding: 5px 2px; border-bottom: 1px solid var(--line-soft, #f0f0f0); }
.ol-act { font-size: 12px; font-weight: 700; border-radius: var(--radius-sm); padding: 2px 7px; flex: 0 0 auto; }
.ol-act.add { background: var(--accent-soft, #f3ede4); color: var(--accent, #7a5a2a); }
.ol-act.del { background: var(--danger-soft, #f8e5e2); color: var(--danger, #d64545); }
.ol-period { font-variant-numeric: tabular-nums; color: var(--ink); }
.ol-meta { margin-left: auto; color: var(--ink-faint, #999); font-size: 13px; }

/* ── 급여관리(payroll) 매트릭스 ── */
.grid tr.row-off th, .grid tr.row-off td { opacity: .5; }
.grid input.cell-input:disabled { background: #f1f1f1; color: #b3b3b3; cursor: not-allowed; }
.avail-chk { width: 16px; height: 16px; cursor: pointer; accent-color: var(--accent, #7a5a2a); vertical-align: middle; }

/* 좌측 2열(실장·형태) 가로 스크롤 고정(sticky) */
#pyRatesTable .py-stick { position: sticky; z-index: 2; background: #fff; }
#pyRatesTable thead .py-stick { z-index: 4; background: #f6efe6; }   /* 헤더 실장/형태 = 대분류 헤더와 같은 톤 */
#pyRatesTable .py-stick-name { left: 0; width: 88px; min-width: 88px; max-width: 88px; overflow: hidden; text-overflow: ellipsis; }
#pyRatesTable .py-stick-form { left: 88px; width: 66px; min-width: 66px; box-shadow: 2px 0 0 var(--line, #e5e5e5); }
#pyRatesTable tbody .py-stick { background: #fff; }
#pyRatesTable tbody tr.t-home > .py-stick { border-top: 1.5px solid var(--line, #d8d2c8); }

/* 2행 헤더: 1행=대분류(그룹) / 2행=소분류명 */
.grid th.py-cat { text-align: center; font-weight: 800; color: var(--ink, #333); background: #f6efe6; border-bottom: 1px solid var(--line, #e5e5e5); }
.grid th.py-catstart, .grid td.py-catstart { border-left: 2px solid var(--line, #d8d2c8); }

/* 결제 안내 모달 */
.pg-who { font-weight: 700; margin-bottom: 2px; }
.pg-sub { font-size: 14px; color: var(--ink-soft); margin-bottom: 12px; }
/* 중복 안내·계좌 미입력 등 복사 전 경고 */
.pg-warn { background: #fff4e5; color: #9a3412; }
.pg-body { width: 100%; min-height: 130px; padding: 9px 11px; border: 1px solid var(--line); border-radius: var(--radius-btn); font: inherit; font-size: 15px; line-height: 1.6; resize: vertical; box-sizing: border-box; }

/* 청구예정 — 입금대기 카드 */
.lg-subhead { font-size: 15px; margin: 4px 2px 8px; color: var(--ink); }
.lg-subhead b { font-size: 16px; }
.payreq-list { display: flex; flex-direction: column; gap: 8px; }
.payreq { display: flex; align-items: center; gap: 12px; border: 1px solid var(--line); border-left: 3px solid #d99a1a; border-radius: var(--radius-btn); padding: 9px 12px; background: #fffdf7; }
.payreq .pr-info { flex: 1; min-width: 0; }
.pr-main { font-size: 15px; }
.pr-amt { color: var(--accent, #7a5a2a); font-weight: 700; font-variant-numeric: tabular-nums; margin-left: 6px; }
.pr-sub { font-size: 13px; color: var(--ink-faint, #999); margin-top: 2px; }
.pr-act { display: flex; gap: 6px; flex: none; }
.btn-mini.primary { background: var(--accent, #7a5a2a); color: #fff; border-color: var(--accent, #7a5a2a); }

/* 결제방법 config 편집 카드 */
#payChList { display: flex; flex-direction: column; gap: 12px; }
.paych { border: 1px solid var(--line); border-radius: var(--radius); padding: 12px 14px; }
.paych.off { opacity: .55; }
.paych-head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
.paych-head b { font-size: 16px; }
.paych-kind { font-size: 13px; color: var(--ink-faint, #999); background: #f2efe9; border-radius: var(--radius-sm); padding: 1px 7px; }
.paych-acts { margin-left: auto; display: flex; align-items: center; gap: 10px; }
.paych .cfm-f { margin-bottom: 8px; }
.paych .pc-acc { width: 100%; box-sizing: border-box; }

/* 실장 1명 = 2줄(출장/샵). 형태 열에 줄별 가능여부 체크박스 */
.grid th.rmx-name { vertical-align: middle; white-space: nowrap; text-align: left; }
.grid tr.t-home > * { border-top: 1.5px solid var(--line, #d8d2c8); }   /* 실장 블록 구분선 */
.grid td.rmx-form { white-space: nowrap; text-align: left; padding-left: 14px; }   /* 체크박스 좌정렬(줄맞춤) */
.rmx-flabel { display: inline-flex; align-items: center; gap: 5px; cursor: pointer; font-weight: 700; font-size: 14px; }
.rmx-home { color: #c2703d; }   /* 출장 */
.rmx-shop { color: #5f83a8; }   /* 샵 */
.rmx-form.rmx-off .rmx-flabel { opacity: .45; }

/* ── 급여관리: 월별 급여 리포트 ── */
.mo-exp { background: none; border: none; color: var(--accent, #7a5a2a); font-weight: 700; cursor: pointer; padding: 0; font-size: 15px; }
.mo-exp:hover { text-decoration: underline; }
.mo-total th, .mo-total td { border-top: 2px solid var(--line, #e5e5e5); font-weight: 700; }
.mo-sub { margin: 2px 0; font-size: 14px; }
.mo-sub th, .mo-sub td { padding: 5px 8px; }
.mo-t { color: var(--ink-faint, #999); font-size: 13px; }
.mo-zero, .mo-zero b { color: var(--ink-faint, #bbb); font-weight: 400; }   /* 건수 0 = 흐리게 */

/* ── 2026-08-14 대표 요청분 — 회차 표기·완전 삭제·원장 장부식·숨김 담당자 ── */
/* 월간 달력 칩 회차(10-1) */
.acal-seq { display: inline-block; white-space: nowrap; font-size: 11px; font-weight: 700; color: var(--ink-soft); background: rgba(0,0,0,.06); border-radius: var(--radius-sm); padding: 0 4px; margin-left: 3px; font-variant-numeric: tabular-nums; }
.acal-chip.done .acal-seq { color: rgba(255,255,255,.85); background: rgba(255,255,255,.2); }
.acal-chip.done .wb-fr { color: rgba(255,255,255,.9); }
/* 회원 모달 관리 히스토리 행 삭제(✕) — 호버 시만 강조 */
.mm-h .mm-h-del { margin-left: auto; border: 0; background: none; color: var(--ink-faint); font-size: 14px; cursor: pointer; border-radius: var(--radius-sm); padding: 1px 6px; opacity: .55; }
.mm-h:hover .mm-h-del { opacity: 1; }
.mm-h .mm-h-del:hover { background: var(--danger-soft, #f8e5e2); color: var(--danger); }
/* 완료 건 완료취소 — 관리자 전용 되돌리기 (실장 포털엔 없음) */
.mm-h .mm-h-undo { margin-left: auto; border: 1px solid var(--line); background: none; color: var(--ink-soft); font-size: 11px; cursor: pointer; border-radius: var(--radius-sm); padding: 2px 8px; opacity: .7; white-space: nowrap; }
.mm-h:hover .mm-h-undo { opacity: 1; }
.mm-h .mm-h-undo:hover { border-color: var(--accent-line, #f0c9b6); color: var(--accent, #d95927); background: var(--accent-soft, #f8e6db); }
/* 새 배정 행 회차 입력 */
.slot-row .slot-no { width: 68px; }
/* 원장 장부식 월 합계행 */
.lg-grid .lg-total td { border-top: 2px solid var(--line, #dcd6cf); background: var(--bg); font-variant-numeric: tabular-nums; }
/* 담당자 목록 — 숨김 담당자 접기/펼치기 행 */
.th-grid .th-hidden-tg td { text-align: center; background: var(--bg); padding: 6px; }
/* 메뉴 트리 — 시술시간(분) 입력 */
.msub-dur-wrap { display: inline-flex; align-items: center; gap: 3px; font-size: 14px; color: var(--ink-soft); margin: 0 6px; white-space: nowrap; }
/* 티켓 1회 단가 힌트 — 합계 아래 작은 줄(실장 인센 계산용) */
.tk-unit { display: block; font-size: 12px; color: var(--ink-faint); font-weight: 400; }
/* 월간 달력 범례 */
.acal-legend { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 8px; font-size: 13px; color: var(--ink-soft); }
.acal-legend .lg { display: inline-flex; align-items: center; gap: 4px; }
.acal-legend .sw { width: 12px; height: 12px; border-radius: var(--radius-sm); display: inline-block; border: 1px solid rgba(0,0,0,.08); }
/* 회원 상세 — 헤더 숨김/완전삭제 버튼 */
.mem-head-act { margin-top: 4px; display: flex; gap: 6px; }
/* 새 배정 — 회원 검색 콤보 (셀렉트 대체: 입력창 + 필터 드롭다운) */
.bk-mwrap { position: relative; }
.bk-mwrap input { min-width: 150px; }
.bk-mlist { position: absolute; top: 100%; left: 0; right: 0; min-width: 220px; max-height: 280px; overflow-y: auto; background: var(--card, #fff); border: 1px solid var(--line); border-radius: var(--radius-btn); box-shadow: 0 8px 24px rgba(0,0,0,.12); z-index: 60; }
.bk-mrow { display: flex; justify-content: space-between; gap: 8px; padding: 8px 10px; cursor: pointer; font-size: 15px; border-bottom: 1px solid var(--line); }
.bk-mrow:last-child { border-bottom: none; }
.bk-mrow:hover { background: var(--accent-soft, #fdf3ea); }
.bk-mrow .ct { color: var(--ink-faint); font-size: 14px; white-space: nowrap; }
.bk-mrow.empty { color: var(--ink-faint); cursor: default; }
/* 일정(일별) 행 클릭 = 드로어 수정 */
.sch-row-click { cursor: pointer; }
.sch-row-click:hover td { background: var(--accent-soft, #fdf3ea); }
/* 일정(일별) 회원 칸 — 약자·회차·형태를 회원 옆에 병기(대표 0828, 월간달력 칩과 동일 표기) */
#schBody .wb-care { vertical-align: 1px; }
#schBody .pl { color: var(--ink-soft); font-weight: 650; white-space: nowrap; }
/* 빠른 배정 — 티켓 없는 회원(미결제 배정 가능) */
.qb-mrow.noticket .tk { color: var(--ink-faint); }
/* 설정 > 문자 — 완료 문자 자동 발송 마스터 스위치 */

/* 주간판 📨 — 발송 양식 선택 메뉴 */
.wb-send-menu { position: absolute; z-index: 300; background: #fff; border: 1px solid var(--line, #ddd); border-radius: var(--radius); box-shadow: 0 8px 24px rgba(0, 0, 0, .14); padding: 6px; min-width: 220px; }
.wb-send-menu-t { font-size: 13px; color: var(--ink-faint, #8a8a8a); padding: 4px 8px 6px; }
.wb-send-menu button { display: block; width: 100%; text-align: left; border: none; background: none; padding: 8px 10px; border-radius: var(--radius-btn); font-size: 15px; cursor: pointer; font-family: inherit; }
.wb-send-menu button:hover { background: #f2f5f9; }

/* 삭제 되돌리기 토스트 */
.undo-toast { position: fixed; left: 50%; bottom: 26px; transform: translateX(-50%); z-index: 300; background: #2b2723; color: #fff; border-radius: var(--radius); padding: 10px 14px; display: flex; align-items: center; gap: 12px; font-size: 15px; box-shadow: 0 8px 24px rgba(0,0,0,.25); }
.undo-toast button { border: 0; background: none; color: #ffb37a; font-weight: 800; font-size: 15px; cursor: pointer; padding: 2px 4px; }
/* 가배정 ✕ — 잡는중 배지 옆 */
.wb-blk.holdslot .wb-memo-x { margin-left: auto; }

/* 카카오 우편번호 레이어(관리자 공용) */
.kpc-layer { position: fixed; inset: 0; background: rgba(20, 18, 15, .45); z-index: 400; display: flex; align-items: center; justify-content: center; padding: 16px; }
.kpc-panel { background: #fff; border-radius: var(--radius); width: 100%; max-width: 480px; height: 70vh; max-height: 560px; display: flex; flex-direction: column; overflow: hidden; box-shadow: 0 20px 60px rgba(0,0,0,.3); }
.kpc-head { display: flex; align-items: center; justify-content: space-between; padding: 12px 16px; border-bottom: 1px solid var(--line); font-weight: 700; }
.kpc-close { border: 0; background: none; font-size: 18px; cursor: pointer; color: var(--ink-soft); }
.kpc-body { flex: 1; min-height: 0; }
.addr-row { display: flex; gap: 6px; align-items: center; }
.addr-row input { flex: 1; min-width: 0; }

/* ── 발송 관리 탭(미발송 대기 큐) ── */
.nq-row { display: flex; gap: 12px; align-items: flex-start; flex-wrap: wrap; padding: 10px 12px; border: 1px solid var(--line); border-radius: var(--radius); margin-bottom: 8px; background: #fff; }
.nq-kind { flex: 0 0 auto; font-size: 13px; font-weight: 800; border-radius: var(--radius-sm); padding: 3px 8px; margin-top: 2px; }
.nq-kind.k-assign { background: #e7f3ef; color: #1d6b52; }
.nq-kind.k-resched { background: #fdf1e2; color: #a05a12; }
.nq-kind.k-cancel { background: #fbe9e7; color: #b23c2e; }
.nq-main { flex: 1 1 260px; min-width: 0; }
.nq-line1 { font-size: 15px; }
.nq-line1 .dim, .nq-meta { color: var(--ink-faint); }
.nq-line2 { font-size: 15px; margin-top: 2px; font-variant-numeric: tabular-nums; }
.nq-arrow { color: #a05a12; font-weight: 800; padding: 0 2px; }
.nq-meta { font-size: 13px; margin-top: 3px; }
.nq-acts { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-top: 2px; }
.nq-acts .chk { font-size: 14px; display: inline-flex; align-items: center; gap: 4px; }
.nq-audfix { font-size: 14px; color: var(--ink-soft); background: #f2f5f9; border-radius: var(--radius-sm); padding: 3px 8px; }
.nq-preview { flex-basis: 100%; border-top: 1px dashed var(--line); padding-top: 8px; }
.nq-msg { margin-bottom: 8px; }
.nq-msg-h { font-size: 14px; color: var(--ink-soft); margin-bottom: 3px; }
.nq-msg pre { margin: 0; white-space: pre-wrap; word-break: break-word; font-family: inherit; font-size: 14px; background: #faf8f5; border: 1px solid var(--line); border-radius: var(--radius-btn); padding: 8px 10px; }
.nq-msg.warn pre { border-color: #e5b96b; background: #fdf6e8; }
.nq-unres { color: #b23c2e; font-weight: 700; }
.nq-hist-filter label { font-size: 14px; color: var(--ink-soft); display: inline-flex; align-items: center; gap: 4px; }
.nq-hist-filter select { padding: 4px 6px; border: 1px solid var(--line); border-radius: var(--radius-btn); font-size: 14px; }
.nq-log-full { grid-column: 1 / -1; margin: 6px 0 0; white-space: pre-wrap; word-break: break-word; font-family: inherit; font-size: 14px; background: #faf8f5; border: 1px solid var(--line); border-radius: var(--radius-btn); padding: 8px 10px; }
#nqHist .sms-log-row { cursor: pointer; }
.wb-notify { background: var(--warn-soft); border-color: #ecd9b0; color: var(--warn); font-weight: 700; }

/* 전역 글씨 +2px — 공유(care-base.css) 클래스의 관리자 화면 오버라이드 */
.badge { font-size: 13px; }
.btn-primary { font-size: 16px; }
.btn-ghost { font-size: 15px; }
.btn-mini { font-size: 14px; }
.toast { font-size: 15px; }

/* ── 샵 룸 정원(20260857) — 날짜 헤더 혼잡 미니 + 드로어 잔여 힌트 ──
   타임 4개를 4분원 채움으로(--p = 예약수/정원). 9px 숫자를 네모에 넣으면 읽히지 않아 도형으로 바꿈(대표 0830).
   예약 0건인 날도 빈 원 4개를 그린다 — 줄이 사라졌다 나타나면 날마다 머리 높이가 달라진다. */
.wb-shopld { display: flex; gap: 3px; margin-left: auto; flex: none; }
.wb-shopld i { font-style: normal; width: 11px; height: 11px; border-radius: 50%; flex: none;
  background: conic-gradient(var(--accent) calc(var(--p, 0) * 1turn), transparent 0);
  box-shadow: inset 0 0 0 1px var(--line); }
.wb-shopld i.full { background: var(--danger); box-shadow: none; } /* 정원 마감 */
.qb-shophint { margin: 8px 0 0; padding: 7px 10px; border-radius: var(--radius-btn); background: #fff4e3; color: #8a5a1e; font-size: 13px; }
.qb-shophint.full { background: #fdeaea; color: #c0392b; font-weight: 600; }

/* ── 빈타임 목록 모달 ── */
.fl-modal { max-width: 720px; max-height: 86vh; display: flex; flex-direction: column; padding: 0; }
.fl-count { margin-left: 10px; font-size: 13px; color: var(--ink-faint); font-weight: 400; margin-right: auto; }
.fl-bar { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; padding: 10px 18px; border-bottom: 1px solid var(--line); font-size: 14px; }
.fl-bar label { display: inline-flex; gap: 6px; align-items: center; }
.fl-bar select { padding: 5px 8px; border: 1px solid var(--line); border-radius: var(--radius-btn); font-size: 14px; }
.fl-hint { color: var(--ink-faint); font-size: 12px; }
.fl-body { overflow: auto; padding: 12px 18px 16px; }
.fl-day { margin-bottom: 12px; }
.fl-dh { font-weight: 700; font-size: 14px; margin: 6px 0 5px; }
.fl-dh.sun { color: #c0392b; }
.fl-rows { display: flex; flex-wrap: wrap; gap: 6px; }
.fl-th { border: 1px solid var(--line); background: var(--card); border-radius: var(--radius-btn); padding: 5px 10px; font-size: 13px; cursor: pointer; display: inline-flex; gap: 7px; align-items: baseline; }
/* 가배정 빠른 등록 창 */
.hq-modal { max-width: 560px; }
.hq-body { padding: 14px 18px 16px; }
.hq-row { display: flex; gap: 10px; flex-wrap: wrap; }
.hq-f { display: flex; flex-direction: column; gap: 4px; font-size: 13px; color: var(--ink-soft); }
.hq-f.grow { flex: 1; min-width: 200px; }
.hq-f input { border: 1px solid var(--line); border-radius: var(--radius-btn); padding: 8px 10px; font-size: 15px; }
.hq-f:not(.grow) input { width: 92px; font-variant-numeric: tabular-nums; }
.hq-lb { margin: 14px 0 6px; font-size: 13px; font-weight: 700; color: var(--ink-soft); }
.hq-lb em { font-style: normal; font-weight: 400; color: var(--ink-faint); margin-left: 4px; }
.hq-actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 16px; }
/* 가배정 목록 — 고객 이름별 묶음 + 안내 문구 복사 + 개별 삭제 (매니저 0828) */
.hl-grp { margin-bottom: 14px; }
.hl-gh { display: flex; align-items: center; gap: 8px; margin: 0 0 6px; }
.hl-gh b { font-size: 15px; font-weight: 750; }
.hl-n { font-size: 12px; color: var(--ink-faint); margin-right: auto; }
.hl-go { border: 1px solid rgba(0,0,0,.16); background: rgba(255,255,255,.72); color: var(--ink); border-radius: var(--radius-sm); cursor: pointer; font-size: 12px; font-weight: 700; padding: 1px 6px; margin-left: 6px; white-space: nowrap; }
.hl-go:hover { background: #fff; border-color: var(--accent); color: var(--accent); }
.hl-x { border: 0; background: none; color: var(--ink-faint); cursor: pointer; font-size: 12px; padding: 0 2px; margin-left: 4px; line-height: 1; }
.hl-x:hover { color: var(--danger); }
.hl-d { font-variant-numeric: tabular-nums; }
.hl-row.past { opacity: .55; }
/* 가배정 목록 줄 — 구분색(자주·파랑·보라)을 주간판 블록과 같은 색으로 */
.hl-row { background: #fdeada; border: 1px dashed #dd9a55; }
.hl-row.hc-mg { background: #f9d9ee; border-color: #d1198f; }
.hl-row.hc-bl { background: #d9e8fb; border-color: #2f6fd6; }
.hl-row.hc-pu { background: #ded9f8; border-color: #4b3fd6; }
#wbHoldN:not(:empty) { margin-left: 3px; color: var(--accent); }
.fl-th:hover { border-color: #e8a26a; background: #fff8ef; }
.fl-th b { color: #B5502A; }
.fl-th small { color: var(--ink-faint); font-size: 12px; }
.fl-clip { margin-top: 8px; font-size: 12px; color: var(--ink-faint); }

/* ── 예상 스케줄(가배정 자동) 모달 ── */
.plan-modal { max-width: min(97vw, 1520px); max-height: 92vh; max-height: 92dvh; display: flex; flex-direction: column; padding: 0; }
.plan-body { overflow: auto; padding: 14px 18px; }
.plan-form { display: flex; flex-wrap: wrap; gap: 10px 16px; font-size: 14px; align-items: center; }
.plan-form label { display: inline-flex; gap: 6px; align-items: center; }
.plan-form select, .plan-form input { padding: 5px 8px; border: 1px solid var(--line); border-radius: var(--radius-btn); font-size: 14px; }
.plan-wd { display: flex; gap: 6px; margin: 10px 0 0; flex-wrap: wrap; }
.plan-wdc { display: inline-flex; gap: 4px; align-items: center; border: 1px solid var(--line); border-radius: var(--radius-btn); padding: 4px 9px; font-size: 13px; cursor: pointer; user-select: none; }
.plan-actions { margin: 10px 0; }
/* 실장×날짜 그리드 미리보기(대표 0828 2차) — 미니 배정판(members-ui .mini-*)과 동일 디자인 재사용 */
.plan-grid { margin: 4px 0 14px; }
.plan-grid .mini-th { position: sticky; left: 0; z-index: 1; }
.plan-grid .mini-scroll thead th:first-child { position: sticky; left: 0; z-index: 2; background: var(--bg); }
.plan-grid .mini-tb th.wkstart, .plan-grid .mini-tb td.wkstart { border-left: 2px solid var(--line); }
.plan-grid .mini-tb td.free.unavail { background: #f7f5f2; cursor: default; }
.plan-grid .mini-tb td.free.unavail:hover { background: #f7f5f2; }
.mini-chip.pick { background: #fdeada; border: 1.5px solid #dd9a55; color: #92551c; font-weight: 700; cursor: pointer; }
.mini-chip.pick:hover { filter: brightness(.96); }
.mini-chip.pick.off { opacity: .4; text-decoration: line-through; }
.mini-chip.pick.sel { outline: 2px solid var(--accent); outline-offset: 1px; }
.plan-subhead { font-size: 13px; font-weight: 700; color: var(--ink-soft); margin: 2px 0 6px; }
.plan-list { display: flex; flex-direction: column; gap: 6px; }
.plan-row { display: flex; gap: 8px; align-items: center; border: 1px dashed #e8a26a; background: #fff8ef; border-radius: var(--radius-btn); padding: 6px 10px; font-size: 13px; flex-wrap: wrap; }
.plan-row.off { opacity: .45; border-color: var(--line); background: #fafafa; }
.plan-row.sel { border-color: var(--accent); box-shadow: inset 0 0 0 1px var(--accent); }
.plan-row input[type="date"], .plan-row select { padding: 4px 6px; border: 1px solid var(--line); border-radius: var(--radius-sm); font-size: 13px; }
.plan-no { min-width: 44px; color: #B5502A; }
.plan-wdl { color: var(--ink-faint); min-width: 16px; }
.plan-note { font-size: 12px; color: var(--ink-faint); margin-right: auto; align-self: center; }

/* ── 일정 복사 모달(달력에서 날짜 여러 개 → 행별 일괄 등록) ── */
.cp-modal { max-width: 940px; max-height: 90vh; max-height: 90dvh; display: flex; flex-direction: column; padding: 0; }
.cp-src { padding: 10px 18px; border-bottom: 1px solid var(--line); font-size: 13px; color: var(--ink-soft); background: var(--bg); flex-shrink: 0; }
.cp-src b { color: var(--ink); }
.cp-src .cp-tk { margin-left: 8px; }
.cp-body { display: flex; gap: 16px; padding: 14px 18px; overflow: auto; align-items: flex-start; }
.cp-calwrap { flex: 0 0 384px; }
.cp-right { flex: 1 1 auto; min-width: 0; }
.cp-calhead { display: flex; align-items: center; justify-content: center; gap: 12px; margin-bottom: 8px; font-size: 15px; }
.cp-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 3px; }
.cp-wdh { margin-bottom: 3px; font-size: 12px; color: var(--ink-faint); text-align: center; }
.cp-wdh .we { color: var(--danger); }
.cp-cell { border: 1px solid var(--line); border-radius: var(--radius-btn); min-height: 46px; padding: 3px 4px; font-size: 12px; cursor: pointer; background: var(--card); line-height: 1.25; user-select: none; }
.cp-cell:hover { border-color: var(--accent); }
.cp-cell.empty { border: 0; background: none; cursor: default; }
.cp-cell.past, .cp-cell.blocked { background: #f4f2ef; color: var(--ink-faint); cursor: not-allowed; border-color: var(--line-soft); }
.cp-cell.past:hover, .cp-cell.blocked:hover { border-color: var(--line-soft); }
.cp-cell.src { border-color: var(--ink-faint); border-style: dashed; background: #f7f5f2; cursor: not-allowed; }
.cp-cell.sel { background: var(--accent-soft); border-color: var(--accent); box-shadow: inset 0 0 0 1px var(--accent); }
.cp-cell .d { font-weight: 600; }
.cp-cell.we .d { color: var(--danger); }
.cp-cell .hint { font-size: 10px; color: var(--ink-faint); white-space: nowrap; overflow: hidden; }
.cp-cell .hint.free { color: #B5502A; }
.cp-cell .mine { color: var(--accent); font-size: 10px; }
.cp-legend { display: flex; flex-wrap: wrap; gap: 4px 12px; margin-top: 9px; font-size: 11px; color: var(--ink-faint); }
.cp-legend .lg { display: inline-flex; align-items: center; gap: 4px; }
.cp-legend .cs { width: 11px; height: 11px; border-radius: var(--radius-sm); border: 1px solid var(--line); display: inline-block; }
.cp-legend .cs.sel { background: var(--accent-soft); border-color: var(--accent); }
.cp-legend .cs.off { background: #f4f2ef; }
.cp-bulk { display: flex; flex-wrap: wrap; gap: 6px 10px; align-items: center; font-size: 12px; color: var(--ink-faint); border-bottom: 1px dashed var(--line); padding-bottom: 9px; margin-bottom: 9px; }
.cp-bulk select, .cp-bulk input { padding: 4px 6px; border: 1px solid var(--line); border-radius: var(--radius-sm); font-size: 13px; }
.cp-list { display: flex; flex-direction: column; gap: 5px; max-height: 46vh; overflow: auto; }
.cp-row { display: flex; gap: 7px; align-items: center; flex-wrap: wrap; border: 1px solid var(--line); border-radius: var(--radius-btn); padding: 6px 9px; font-size: 13px; background: var(--card); }
.cp-row.off { opacity: .45; background: #fafafa; }
.cp-row.bad { border-color: var(--danger); background: var(--danger-soft); }
.cp-row.done { border-color: var(--ok); background: var(--ok-soft); }
.cp-row select, .cp-row input { padding: 3px 5px; border: 1px solid var(--line); border-radius: var(--radius-sm); font-size: 12px; }
.cp-row .cp-d { min-width: 74px; font-weight: 600; }
.cp-row .cp-no { min-width: 42px; color: #B5502A; font-weight: 600; }
.cp-row .cp-no.auto { color: var(--ink-faint); font-weight: 400; }
.cp-row .cp-pay { margin-left: auto; font-size: 11px; white-space: nowrap; }
.cp-row .cp-warn { flex: 1 0 100%; font-size: 11px; color: var(--danger); }
@media (max-width: 880px) {
  .cp-body { flex-direction: column; }
  .cp-calwrap { flex: 1 1 auto; width: 100%; }
  .cp-list { max-height: none; }
}
.cp-cell.dim { background: #f8f6f3; }
.cp-tsep { color: var(--ink-faint); }
.cp-blab { color: var(--ink-faint); }
.cp-row select, .cp-bulk select { max-width: 108px; }
.cp-row .cp-warn.soft { color: var(--ink-faint); }


/* ══ 폰 세로(≤560px) — 주간판 '하루 보기'(대표 0828 "모바일에서 주간판 사이즈가 다 문제생김") ══
   · 날짜 한 칸 = 화면 폭 전부(JS wbDayW) + scroll-snap → 좌우 스와이프로 하루씩 넘김
   · 툴바 11개 버튼 = ‹ 날짜 › · [필터] · [⋯] 로 접고 나머지는 ⋯ 메뉴(JS가 버튼 노드를 이동)
   · 필터 줄(166px) = 바텀시트로 이동 */
@media (max-width: 560px) {
  /* 상단 바·탭 — 글자가 세로로 쪼개지던 문제 */
  .erp-head-top { padding: 10px 12px; gap: 8px; }
  .erp-brand { font-size: 17px; }
  .erp-brand small { display: none; }
  .erp-head-tools { gap: 6px; }
  .branch-select { font-size: 14px; padding: 6px 8px; max-width: 118px; }
  .erp-nav { padding: 0 8px; overflow-x: auto; scrollbar-width: none; }
  .erp-nav::-webkit-scrollbar { display: none; }
  .erp-nav button { white-space: nowrap; padding: 10px 9px; font-size: 15px; }
  .page { padding: 12px 10px; }
  .section-head { flex-wrap: wrap; gap: 4px; }
  .section-head .hint { display: none; }

  /* 배정판 헤드 = 제목 줄 + 툴바 줄 */
  .wb-panel .panel-head { position: relative; display: flex; flex-wrap: wrap; align-items: center; gap: 6px; padding: 9px 10px; font-size: 14px; }
  .wb-headtools { float: none; flex: 1 0 100%; display: flex; align-items: center; gap: 6px; }
  .wb-headtools #wbRange { flex: 1; min-width: 0; font-size: 16px; }
  .wb-headtools > .btn-mini, .wb-headtools > .ic-btn { flex: none; }
  .wb-headtools #wbNotify, .wb-headtools #wbNotify[hidden] + #wbFreeList { margin-left: 0; } /* 폰=한 줄 나열, 밀어내기 해제 */
  .wb-headtools .wb-tvr { display: none; }
  #wbFilterTg.on { background: var(--accent-soft); color: var(--accent); border-color: var(--accent-line); font-weight: 700; }
  #wbMenuTg { font-size: 17px; line-height: 1; padding: 4px 10px; }

  /* 필터 = 바텀시트 */
  .wb-filter { display: none; }
  .wb-filter.sheet { display: flex; position: fixed; left: 0; right: 0; bottom: 0; z-index: 80; margin: 0; max-height: 72dvh; overflow-y: auto;
    flex-wrap: wrap; justify-content: flex-start; gap: 10px 12px; padding: 14px 14px calc(14px + env(safe-area-inset-bottom));
    background: var(--card); border-top: 1px solid var(--line); border-radius: var(--radius-lg) var(--radius-lg) 0 0; box-shadow: 0 -8px 30px rgba(0,0,0,.18); }
  /* 시트에서는 레일이 아니라 한 줄에 하나씩 — 셀렉트에 테두리를 되살려 탭 영역을 명확히 */
  .wb-filter.sheet .wbf-f { flex: 1 1 100%; justify-content: space-between; font-size: 15px; padding: 6px 0; background: none; }
  .wb-filter.sheet .wbf-f .lb { font-size: 15px; color: var(--ink-soft); }
  .wb-filter.sheet .wbf-f.on .lb { color: var(--accent); font-weight: 600; }
  /* 시트에서는 값 칸을 넓게 — 투명 select 는 그대로 위를 덮어 탭 영역이 줄 전체가 된다 */
  .wb-filter.sheet .wbf-f .vl { flex: 1; max-width: none; text-align: right; margin-left: 12px; padding: 8px 11px;
    border: 1px solid var(--line); border-radius: var(--radius-btn); background: var(--card); font-size: 15px; }
  .wb-filter.sheet .wbf-end { flex: 1 1 100%; margin-left: 0; gap: 8px; }
  .wb-filter.sheet .wbf-reset { flex: 1 1 40%; padding: 10px; border: 1px solid var(--line); border-radius: var(--radius-btn); background: var(--card); }
  .wb-filter.sheet .wbf-close { display: block; flex: 1 1 40%; padding: 10px; border: 1px solid var(--line); border-radius: var(--radius-btn); background: var(--ink-soft); color: #fff; font-size: 15px; font-weight: 600; }
  body.wb-sheet-open { overflow: hidden; }

  /* 하루 보기 — 좌우 스와이프 스냅(스냅 기준 왼쪽 여백=1열 폭, JS가 scrollPaddingLeft 로 지정) */
  .wb-scroll { scroll-snap-type: x mandatory; max-height: max(380px, calc(100dvh - 208px)); }
  .wb-dh[data-ds] { scroll-snap-align: start; }
  /* 1열(96px) — 이름·직책·건수만. 지역칩·근무시간은 셀을 밀어내 숨김 */
  .wb-rh { padding: 6px 6px; gap: 2px; }
  .wb-rh .wb-skills, .wb-rh .wb-reg, .wb-rh .wb-hours { display: none; }
  .wb-th { padding-right: 14px; }
  .wb-th b { font-size: 15px; }
  .wb-role { font-size: 11px; padding: 0 4px; }
  .wb-load { font-size: 11px; }
  .wb-corner { padding: 6px; font-size: 11px; }
  .wb-dh { padding: 7px 8px; }
  /* 폰=하루 보기라 날짜 열이 화면보다 넓다(1열 150px 만큼 오른쪽이 화면 밖으로 나감).
     margin-left:auto 로 오른쪽 끝에 붙이면 링이 화면 밖에서 잘린다 → 날짜 바로 옆에 붙인다(대표 0830 모바일). */
  .wb-dh .wb-shopld { margin-left: 10px; gap: 3px; }
  .wb-dh .wb-shopld i { width: 11px; height: 11px; }
  .wb-legend { display: none; } /* 색 범례 — 폰에서는 화면 절반을 먹어 숨김(데스크톱·전체화면에서 확인) */
  /* 셀 호버 툴(＋배정·가배정·✎메모·휴무) — 폰에선 뜨지 않는데 자리(22px)만 먹고, opacity:0 상태로 눌리는 지뢰가 됨.
     터치 경로는 빈타임 탭·길게 누르기 → 바텀시트로 이미 있음 */
  .wb-c .wb-tools { display: none; }
  .wb-c.na0 { display: none; } /* 추후 배정 0건 = 줄 숨김(폰만) */
}

/* 이사 반영 모달(대표 0830) — 기준일 이후 예정 일정의 방문 주소 일괄 교체 */
.mv-note { background: var(--accent-soft); border: 1px solid var(--accent-line); color: #8a4b0f; border-radius: var(--radius-btn); padding: 10px 12px; font-size: 13px; line-height: 1.55; margin-bottom: 12px; word-break: keep-all; }
.mv-note b { color: #7a3f0d; }
.mv-list { margin-top: 10px; max-height: 240px; overflow-y: auto; border: 1px solid var(--line); border-radius: var(--radius-btn); }
.mv-row { display: flex; align-items: baseline; gap: 8px; padding: 7px 10px; border-top: 1px solid var(--line-soft); font-size: 13px; }
.mv-row:first-child { border-top: 0; }
.mv-row .d { font-variant-numeric: tabular-nums; font-weight: 700; min-width: 92px; white-space: nowrap; flex: none; }
.mv-row .th { color: var(--ink-soft); min-width: 56px; white-space: nowrap; flex: none; }
.mv-row .ad { color: var(--ink-faint); flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* 기준일 전 = 옛 주소 유지. 표식은 줄 오른쪽 끝 칩으로 — 날짜 뒤에 붙이면 좁은 칸에서 '(그/대로)'로 쪼개짐 */
.mv-row.keep { opacity: .55; }
.mv-row.keep::after { content: '유지'; flex: none; margin-left: 6px; font-size: 11px; font-weight: 700; color: var(--ink-faint); background: var(--surface-card); border-radius: var(--radius-sm); padding: 1px 6px; }
.mv-empty { padding: 14px; text-align: center; color: var(--ink-faint); font-size: 13px; }

/* ── 티켓 원장(대표 0829) — 당일 마감 티커 + 상태 배지 + 티켓 카드 ── */
.tl-ticker { display: flex; align-items: center; gap: 22px; background: var(--card, #fff); border: 1px solid var(--line); border-radius: var(--radius-lg); padding: 12px 16px; margin-bottom: 12px; box-shadow: var(--shadow); flex-wrap: wrap; }
.tl-t1, .tl-t2 { display: flex; align-items: baseline; gap: 10px; font-variant-numeric: tabular-nums; }
.tl-t1 { flex: 1 1 auto; min-width: 0; }
.tl-t2 { border-left: 1px solid var(--line); padding-left: 22px; }
.tl-ticker .lb { font-size: 12px; font-weight: 650; color: var(--ink-soft); white-space: nowrap; }
.tl-ticker .lb small { font-weight: 500; color: var(--ink-faint); }
.tl-t1 .val { font-size: 17px; font-weight: 700; white-space: nowrap; }
.tl-t2 b { font-size: 15px; font-weight: 700; white-space: nowrap; }
.tl-ticker .by { font-size: 13px; color: var(--ink-soft); }
.tl-ticker .by b { color: var(--ink); font-weight: 650; }
.tl-ticker .by .sep { color: var(--line); }
.tl-ticker .due { font-size: 13px; font-weight: 650; color: var(--danger); white-space: nowrap; }
.badge.ok { background: var(--ok-soft); color: var(--ok); }
.tl-refund td { color: var(--ink-faint); }
.tl-act { white-space: nowrap; }
.warn-txt { color: var(--danger); font-weight: 650; }
/* 티켓 카드 */
.tkc-head { border: 1px solid var(--line); border-radius: var(--radius-lg); padding: 11px 13px; margin-bottom: 12px; display: flex; flex-direction: column; gap: 3px; }
.tkc-head .nm { font-weight: 700; font-size: 16px; display: flex; align-items: center; gap: 8px; }
.tkc-head .nm small { font-weight: 500; font-size: 13px; color: var(--ink-faint); }
.tkc-head .nm .badge { margin-left: auto; }
.tkc-head .sub { font-size: 13px; color: var(--ink-soft); }
.tkc-sec { margin-bottom: 14px; }
.tkc-h { font-size: 12px; font-weight: 650; color: var(--ink-soft); margin-bottom: 6px; }
.tkc-rows { display: flex; flex-direction: column; gap: 5px; font-size: 14px; font-variant-numeric: tabular-nums; }
.tkc-row { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; }
.tkc-row.total { border-top: 1px dashed var(--line); padding-top: 6px; font-weight: 650; }
.tkc-row.voided { text-decoration: line-through; color: var(--ink-faint); }
.tkc-sub { font-size: 12px; color: var(--ink-faint); }
.tkc-form { background: var(--bg, #faf9f5); border: 1px solid var(--line-soft, #ebe6df); border-radius: var(--radius-lg); padding: 12px; margin-bottom: 0; }
#tkcOverlay .cfm-f { min-width: 0; }
#tkcOverlay .cfm-f input, #tkcOverlay .cfm-f select { width: 100%; min-width: 0; box-sizing: border-box; }
.tl-guide { font-size: 13px; color: var(--ink-soft); }
.tl-guide.wait { color: var(--warn); font-weight: 650; }
.tl-guide small { font-size: 11px; color: var(--ink-faint); }
.tkc-form.refund { background: var(--danger-soft); border-color: #eed6d2; }
#tkcSave.danger { background: var(--danger); }
/* 선수금(부채) — 미수(적색)와 구분되는 보라 계열: 받은 돈이지만 아직 우리 매출이 아닌 상태 */
.tl-df { color: #6d5bab; font-weight: 650; }
.tl-ticker .df { font-size: 13px; font-weight: 650; color: #6d5bab; white-space: nowrap; }
.tl-seat { font-variant-numeric: tabular-nums; }
.tl-seat small { font-size: 11px; }
.tkc-defer { background: #f3f0fa; border: 1px solid #e2dcf2; border-radius: var(--radius-btn); padding: 9px 11px; }
/* 미기록 입금 정리 배너 — 확인 안 된 자동기록 경고(월 장부 상단) */
.lg-auto { background: var(--warn-soft); border: 1px solid #efe2bd; border-radius: var(--radius-lg); padding: 12px 14px; margin-bottom: 12px; display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.lg-auto-main { flex: 1 1 320px; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.lg-auto-main .ttl { font-size: 15px; font-weight: 700; color: var(--ink); font-variant-numeric: tabular-nums; }
.lg-auto-main .sub { font-size: 13px; color: var(--ink-soft); }
.lg-auto-act { display: flex; gap: 8px; flex: none; }
.lg-auto-note { flex-basis: 100%; font-size: 12px; color: var(--ink-faint); }
/* 티켓 원장 표 — 헤더·본문 모두 가운데 정렬(대표 0829). 숫자는 tabular-nums로 자릿수는 유지 */
.tl-grid th, .tl-grid td, .tl-grid td.num, .tl-grid th.num { text-align: center; }
.tl-grid td { font-variant-numeric: tabular-nums; }
/* 앞쪽(날짜·회원·티켓·회차) 여백 축소 — 좌측이 헐렁해 시선이 늘어지던 문제(대표 0829) */
.tl-grid th, .tl-grid td { padding: 8px 7px; }
.tl-grid .tl-tight { padding-left: 6px; padding-right: 6px; }
.tl-grid .tl-seat { padding-left: 4px; padding-right: 4px; }
.tl-grid .tl-name { max-width: 230px; overflow: hidden; text-overflow: ellipsis; }
/* 입금 수단 칩 — 매개체 구분(계좌이체·카드·제로페이…) */
.tl-pm { display: inline-block; font-size: 12px; font-weight: 600; color: var(--ink-soft); background: var(--surface-card); border-radius: var(--radius-sm); padding: 1px 7px; margin: 0 2px; }
.tl-note { display: inline-block; max-width: 180px; overflow: hidden; text-overflow: ellipsis; vertical-align: bottom; font-size: 13px; color: var(--ink-soft); }
