/*
 * 공용 부품 (PLAN 261005-2). 기준은 마켓플레이스·어셋이고, 이 디자인을 전체 페이지로 넓힌다.
 * 부품 클래스는 ui- 로 시작하고, 색은 --ui-* 만 쓴다.
 *
 * --ui-* 기본값은 마켓플레이스의 회색 값이다. 공용 --color-* 는 라이트에서 선·글자가 푸른 계열이라
 * 쓰지 않는다(원장 261002). 어셋·릴리스 노트도 이 값을 그대로 쓴다(261006).
 *
 * 선택자는 클래스 둘(0,2,0)로 쓴다. 다크 전역 규칙 `body[data-theme="dark"] input`·`button`(0,1,2)이
 * 부품 색을 덮지 않게 하려는 것이다.
 */

:root {
    --ui-surface: #ffffff;
    --ui-surface-2: #f3f4f6;
    --ui-border: #e6e7ea;
    --ui-border-2: #d3d5da;
    --ui-text: #1f2328;
    --ui-muted: #565b62;
    --ui-soft: #8a8f96;
    --ui-hover: #f3f4f6;
    --ui-func: #5b4bc4;
    --ui-func-bg: #efecfc;
    --ui-data: #0f6e56;
    --ui-data-bg: #e1f5ee;
    --ui-warn: #92600c;
    --ui-warn-bg: #faeeda;
    --ui-info: #185fa5;
    --ui-info-bg: #e6f1fb;
    --ui-danger: #c24747;
    --ui-danger-bg: #fff4f4;
    --ui-switch-off: #d1d1d6;
    --ui-switch-on: #34c759;
    --ui-segment-thumb: #ffffff;
    /* 변경 상자(추가 +·삭제 −) — GitHub 변경 보기 색(원장 261007) */
    --ui-add: #1a7f37;
    --ui-add-bg: #e6ffec;
    --ui-add-sign-bg: #ccffd8;
    --ui-del: #cf222e;
    --ui-del-bg: #ffebe9;
    --ui-del-sign-bg: #ffd7d5;
}

html[data-theme="dark"],
body[data-theme="dark"] {
    --ui-surface: #171717;
    --ui-surface-2: #1d1d1d;
    --ui-border: #2a2a2a;
    --ui-border-2: #3a3a3a;
    --ui-text: #edf0f3;
    --ui-muted: #aeb6c1;
    --ui-soft: #7c828c;
    --ui-hover: #1d1d1d;
    --ui-func: #b3a4f5;
    --ui-func-bg: #241f3a;
    --ui-data: #5dcaa5;
    --ui-data-bg: #0e3528;
    --ui-warn: #efb45a;
    --ui-warn-bg: #34290f;
    --ui-info: #60a5fa;
    --ui-info-bg: #15263e;
    --ui-danger: #e39c9c;
    --ui-danger-bg: #261a1a;
    --ui-switch-off: #3a3a3a;
    --ui-switch-on: #34c759;
    --ui-segment-thumb: #2a2a2a;
    --ui-add: #3fb950;
    --ui-add-bg: rgba(46, 160, 67, .15);
    --ui-add-sign-bg: rgba(63, 185, 80, .3);
    --ui-del: #f85149;
    --ui-del-bg: rgba(248, 81, 73, .1);
    --ui-del-sign-bg: rgba(248, 81, 73, .3);
}

/* ── 검색 ─────────────────────────────────────────────────────────────── */

/* 높이 36px·모서리 9px — 옆에 서는 도구 줄 단추(.ui-tool-button)와 같다(원장 261008, 42px 에서 낮춤) */
.ui-search {
    position: relative;
    margin-bottom: 0.9rem;
}

.ui-search > i {
    position: absolute;
    left: 14px;
    top: 50%;
    transform: translateY(-50%);
    font-size: 1.1rem;
    color: var(--ui-soft);
    pointer-events: none;
}

.ui-search .ui-search-input {
    width: 100%;
    box-sizing: border-box;
    height: 36px;
    padding: 0 1rem 0 2.5rem;
    background: var(--ui-surface);
    border: 1px solid var(--ui-border);
    border-radius: 9px;
    color: var(--ui-text);
    font-size: 0.95rem;
    outline: none;
    transition: border-color 0.15s ease;
}

.ui-search .ui-search-input::placeholder { color: var(--ui-soft); }
.ui-search .ui-search-input:focus { border-color: var(--ui-border-2); }
.ui-search .ui-search-input::-webkit-search-cancel-button { -webkit-appearance: none; }
/* 휴대폰 폭은 16px. 아이폰 사파리는 16px 미만 입력란을 누르면 화면을 확대한다(원장 261016) */
@media (max-width: 640px) { .ui-search .ui-search-input { font-size: 16px; } }

/* ── 걸러 보기 칩 ─────────────────────────────────────────────────────── */

.ui-chips {
    display: flex;
    gap: 0.5rem;
    flex-wrap: wrap;
}

.ui-chips > .ui-chip {
    font-size: 0.85rem;
    padding: 0.4rem 0.95rem;
    border-radius: 99px;
    border: 1px solid var(--ui-border);
    background: transparent;
    color: var(--ui-muted);
    cursor: pointer;
    transition: all 0.15s ease;
}

.ui-chips > .ui-chip:hover { border-color: var(--ui-border-2); color: var(--ui-text); }

.ui-chips > .ui-chip[aria-pressed="true"] {
    background: var(--ui-surface-2);
    border-color: var(--ui-border-2);
    color: var(--ui-text);
}

/* ── 갈래 이름표 ──────────────────────────────────────────────────────── */

.ui-section-label {
    font-size: 0.72rem;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--ui-soft);
    margin: 0 0 0.9rem;
}

/* ── 카드 ─────────────────────────────────────────────────────────────── */

.ui-card {
    display: flex;
    flex-direction: column;
    background: var(--ui-surface);
    border: 1px solid var(--ui-border);
    border-radius: 14px;
    padding: 1.1rem 1.15rem;
    transition: border-color 0.15s ease;
}

/* Hover 는 테두리 색만. 위로 이동하는 효과는 없앴다(원장 261006, 예전 .is-flat 이 기본이 됐다) */
.ui-card:hover { border-color: var(--ui-border-2); }

.ui-card .ui-card-top {
    display: flex;
    align-items: center;
    gap: 0.65rem;
    margin-bottom: 0.7rem;
}

.ui-card .ui-card-id { min-width: 0; flex: 1; }
.ui-card .ui-card-id h3 {
    font-size: 0.98rem;
    font-weight: 600;
    color: var(--ui-text);
    margin: 0;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.ui-card .ui-card-id span { font-size: 0.78rem; color: var(--ui-soft); }

.ui-card .ui-card-desc {
    font-size: 0.85rem;
    color: var(--ui-muted);
    line-height: 1.55;
    margin: 0 0 0.85rem;
    flex: 1;
}

/* ── 아이콘 상자 ──────────────────────────────────────────────────────── */

.ui-icon-box {
    width: 42px;
    height: 42px;
    flex-shrink: 0;
    border-radius: 10px;
    background: var(--ui-surface-2);
    border: 1px solid var(--ui-border);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1.3rem;
    color: var(--ui-muted);
}

/* 색 바탕 상자(is-tone): 종류별 색 바탕이라 테두리 없이 36px. 기준은 어셋 패널 머리(원장 261006 지금 모양 유지).
 * 색은 is-herb·is-formula·is-acupoint·is-noncovered·is-material 중 하나를 함께 붙인다. 라이트·다크 값은 짝으로 둔다. */
.ui-icon-box.is-tone { width: 36px; height: 36px; border: 0; font-size: 15px; }
.ui-icon-box.is-herb       { background: #edf7f0; color: #2d6a4f; }
.ui-icon-box.is-formula    { background: #f4f0fb; color: #6d4aa8; }
.ui-icon-box.is-acupoint   { background: #eef4fc; color: #2f5fa8; }
.ui-icon-box.is-noncovered { background: #fdf1e7; color: #a15c25; }
.ui-icon-box.is-material   { background: #eef6f7; color: #2c6e78; }
.ui-icon-box.is-danger     { background: var(--ui-danger-bg); color: var(--ui-danger); }
body[data-theme="dark"] .ui-icon-box.is-herb       { background: #16301f; color: #8fd6a8; }
body[data-theme="dark"] .ui-icon-box.is-formula    { background: #2a2140; color: #c9b6f5; }
body[data-theme="dark"] .ui-icon-box.is-acupoint   { background: #152a3d; color: #8fc0e8; }
body[data-theme="dark"] .ui-icon-box.is-noncovered { background: #3a2515; color: #e2ab79; }
body[data-theme="dark"] .ui-icon-box.is-material   { background: #16302f; color: #7cc4c9; }

/* ── 배지(종류·상태) ──────────────────────────────────────────────────── */

.ui-badges {
    display: flex;
    gap: 0.4rem;
    flex-wrap: wrap;
    margin-bottom: 0.9rem;
}

.ui-badge {
    font-size: 0.72rem;
    padding: 0.15rem 0.55rem;
    border-radius: 99px;
    display: inline-flex;
    align-items: center;
    gap: 0.25rem;
}

.ui-badge i { font-size: 0.78rem; }
.ui-badge.is-func { background: var(--ui-func-bg); color: var(--ui-func); }
.ui-badge.is-data { background: var(--ui-data-bg); color: var(--ui-data); }
.ui-badge.is-neutral { background: var(--ui-surface-2); color: var(--ui-soft); }
.ui-badge.is-warn { background: var(--ui-warn-bg); color: var(--ui-warn); }
.ui-badge.is-strong { font-weight: 600; }

/* ── 새 글 표시(커뮤니티 목록, 원장 261019) ──────────────────────────────
 * 제목 옆 「N」: 다음 카페처럼 채운 빨간 네모·흰 글자. 다크 테마의 오류 색은 연한 분홍이라 흰 글자가 묻혀
 * 두 테마 모두 라이트 값으로 채운다. 게시판 이름 옆 점도 같은 색. */
.ui-new-mark {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: none;
    width: 14px;
    height: 14px;
    margin-left: 0.35rem;
    border-radius: 3px;
    background: var(--color-danger-light);
    color: #fff;
    font-size: 9px;
    font-weight: 700;
    line-height: 1;
    vertical-align: 2px;
}

.ui-new-dot {
    display: inline-block;
    width: 6px;
    height: 6px;
    margin-left: 0.4rem;
    border-radius: 50%;
    background: var(--color-danger-light);
    /* middle 은 영문 소문자 높이 절반이라 한글 획 중심보다 낮다. 점 중심을 기준선 위 0.36em(한글 획 중심)에 둔다 */
    vertical-align: calc(0.36em - 3px);
}

/* ── 이름표(목록 행 끝의 출처·종류) ──────────────────────────────────── */

.ui-tag {
    padding: 2px 8px;
    border-radius: 999px;
    font-size: 11.5px;
    white-space: nowrap;
    background: var(--ui-surface-2);
    color: var(--ui-muted);
    border: 1px solid var(--ui-border-2);
}

/* 상태 이름표: 누르지 않는 상태 표시, 설명은 title. 모서리 4px 는 차트 진료비 옆 칩 기준(261006) */
.ui-tag.is-square { border-radius: 4px; }
.ui-tag i { margin-right: 4px; font-size: 10px; }
/* 뒤에 붙는 아이콘(「공개 반려 ⓘ」) — 앞 아이콘의 오른쪽 여백이 배지 끝에 남지 않게 왼쪽으로 옮긴다(좌우 9px 대칭, 261008) */
.ui-tag i.is-end { margin: 0 0 0 4px; }
/* 누르면 창이 열리는 이름표(반려 사유 등). 모양은 이름표 그대로 */
button.ui-tag { font-family: inherit; line-height: inherit; cursor: pointer; }
.ui-tag.is-warn { background: var(--ui-warn-bg); color: var(--ui-warn); border-color: transparent; font-weight: 600; }
.ui-tag.is-danger { background: var(--ui-danger-bg); color: var(--ui-danger); border-color: transparent; font-weight: 600; }
.ui-tag.is-info { background: var(--ui-info-bg); color: var(--ui-info); border-color: transparent; font-weight: 600; }
.ui-tag.is-data { background: var(--ui-data-bg); color: var(--ui-data); border-color: transparent; font-weight: 600; }

/* ── 경고 표시 ────────────────────────────────────────────────────────────
 * ⚠ 하나, 이유는 title. 주의는 --ui-warn, 청구 반려 같은 차단은 .is-danger(261006). */

.ui-warn-mark { display: inline-block; margin-left: .25em; color: var(--ui-warn); font-size: .95em; line-height: 1; cursor: help; }
.ui-warn-mark.is-danger { color: var(--ui-danger); }

/* ── 카드 동작 버튼 ───────────────────────────────────────────────────────
 * 테두리 있는 보조 버튼(채운 주 버튼은 쓰지 않는다). 기본은 너비 100%, 나란히 서면 .ui-actions-row 로 반씩.
 */

.ui-action.ui-action {
    width: 100%;
    box-sizing: border-box;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 0.45rem;
    padding: 0.6rem 1rem;
    border-radius: 9px;
    font-size: 0.88rem;
    font-weight: 600;
    cursor: pointer;
    background: var(--ui-surface-2);
    color: var(--ui-text);
    border: 1px solid var(--ui-border-2);
    transition: all 0.15s ease;
    text-decoration: none;
}

.ui-action.ui-action:hover { background: var(--ui-border); border-color: var(--ui-soft); }
.ui-action .ui-action-sub { opacity: 0.5; font-weight: 400; }
.ui-action.is-done { background: transparent; color: var(--ui-data); border-color: var(--ui-data-bg); cursor: default; }
.ui-action.is-done:hover { background: transparent; border-color: var(--ui-data-bg); }
.ui-action.is-ghost { background: transparent; border-color: var(--ui-border); color: var(--ui-soft); }
.ui-action.is-ghost:hover:not(:disabled) { background: var(--ui-surface-2); border-color: var(--ui-border-2); color: var(--ui-text); }
/* 비활성 버튼은 hover 반응 자체를 없앤다. 눌릴 것처럼 보이면 안 된다 */
/* 누를 수 없는 버튼은 클래스와 관계없이 흐린 버튼 모양 하나로(원장 261006: 「포크 · 준비중」과 「설치 · 준비중」 색이 달랐다) */
.ui-action.ui-action:disabled { background: transparent; border-color: var(--ui-border); color: var(--ui-soft); opacity: 0.5; cursor: not-allowed; pointer-events: none; }
.ui-action-note { margin: 0.4rem 0 0; font-size: 0.72rem; color: var(--ui-soft); text-align: center; }
.ui-actions-row { display: flex; align-items: stretch; gap: 0.5rem; }
.ui-actions-row > .ui-action { flex: 1 1 0; min-width: 0; }

/* ── 진행 막대 ────────────────────────────────────────────────────────── */

.ui-progress { display: none; flex-direction: column; gap: 0.4rem; margin-top: 0.2rem; }
.ui-progress.is-visible { display: flex; }
.ui-progress .ui-progress-track { width: 100%; height: 4px; background: var(--ui-surface-2); border-radius: 99px; overflow: hidden; }
.ui-progress .ui-progress-fill { height: 100%; width: 0%; background: var(--color-primary); border-radius: 99px; transition: width 0.2s ease; }
.ui-progress .ui-progress-label { font-size: 0.74rem; color: var(--ui-soft); text-align: center; }

/* ── 글자 버튼 ────────────────────────────────────────────────────────────
 * 테두리 없이 글자만, 호버는 바탕. 같은 줄에서 앞세울 하나만 .is-outlined(테두리)로 위계를 둔다.
 */

.ui-text-button.ui-text-button {
    font: inherit;
    font-size: .85rem;
    line-height: 1.4;
    height: auto;
    padding: .4rem .95rem;
    border-radius: 99px;
    border: 1px solid transparent;
    background: transparent;
    color: var(--ui-muted);
    cursor: pointer;
    text-decoration: none;
    display: inline-flex;
    align-items: center;
    gap: 7px;
    transition: background-color .15s ease, border-color .15s ease, color .15s ease;
}

.ui-text-button.ui-text-button:hover { background: var(--ui-hover); color: var(--ui-text); }
.ui-text-button.is-outlined { border-color: var(--ui-border-2); color: var(--ui-text); }
/* 되돌리기 어려운 동작(구독 해지 등)은 평소에는 같은 글자 버튼, 호버만 빨간 계열(원장 261006) */
.ui-text-button.is-danger:hover { background: var(--ui-danger-bg); color: var(--ui-danger); }
/* 아이콘만 있는 둥근 단추(번들 머리 ⋮) — 옆 알약 단추와 같은 높이의 정원 */
.ui-text-button.ui-text-button.is-icon { width: 34px; height: 34px; padding: 0; justify-content: center; }
/* 머리에 혼자 서는 「새 …」 추가 동작은 .is-outlined.is-main — 두 테마 모두 글자색 채움(원장 261007 다크, 261009 라이트도).
   어셋 「새로 만들기」·새 코드셋·새 선택지 목록·처방·침구 「새 번들」이 같은 값을 페이지마다 덮어 쓰던 것을 모았다(261008).
   호버도 글자색을 지정한다 — 위 공용 호버의 글자색(--ui-text)이 채움색과 같아 글씨가 사라진다. */
.ui-text-button.ui-text-button.is-main { background: var(--ui-text); border-color: var(--ui-text); color: var(--ui-surface); font-weight: 600; }
.ui-text-button.ui-text-button.is-main:hover { background: var(--ui-text); border-color: var(--ui-text); color: var(--ui-surface); opacity: .88; }

/* ── 도구 줄 단추 ─────────────────────────────────────────────────────────
 * 검색창(.ui-search) 옆에 나란히 서는 사각 단추. 높이·모서리를 검색 입력란에 맞춘다(36px·9px, 원장 261008 42px 에서 낮춤).
 * 혼자 머리에 서는 단추는 .ui-text-button(알약)이다. 주 동작 하나만 .is-filled(글자색 채움),
 * 휴지통처럼 되돌리기 어려운 쪽으로 들어가는 단추는 .is-danger — 평소 테두리, 호버만 빨간 계열(원장 261008).
 */

.ui-tool-button.ui-tool-button {
    box-sizing: border-box; flex-shrink: 0; display: inline-flex; align-items: center; gap: 6px;
    height: 36px; padding: 0 12px; margin: 0; border-radius: 9px;
    border: 1px solid var(--ui-border-2); background: var(--ui-surface); color: var(--ui-text);
    font: inherit; font-size: .85rem; font-weight: 600; cursor: pointer;
    transition: background-color .15s ease, border-color .15s ease, color .15s ease;
}
.ui-tool-button[hidden] { display: none; }
.ui-tool-button.ui-tool-button:hover { background: var(--ui-hover); border-color: var(--ui-soft); }
.ui-tool-button .ui-tool-count, .ui-tool-button .ct-toggle-count { color: var(--ui-soft); font-weight: 500; }
.ui-tool-button.is-filled.is-filled { background: var(--ui-text); border-color: var(--ui-text); color: var(--ui-surface); }
.ui-tool-button.is-filled.is-filled:hover { background: var(--ui-text); opacity: .88; }
.ui-tool-button.is-danger.is-danger:hover { background: var(--ui-danger-bg); border-color: color-mix(in srgb, var(--ui-danger) 40%, transparent); color: var(--ui-danger); }
.ui-tool-button.is-danger:hover .ui-tool-count, .ui-tool-button.is-danger:hover .ct-toggle-count { color: inherit; opacity: .75; }
/* 되돌릴 수 없는 동작 하나(휴지통 「완전 삭제」)는 빨간 채움 — 위험 확인 창 주 버튼(.ui-modal-main.is-danger)과 같은 색(원장 261009) */
.ui-tool-button.is-danger.is-filled.is-filled { background: var(--color-danger-light); border-color: var(--color-danger-light); color: #fff; }
.ui-tool-button.is-danger.is-filled.is-filled:hover { background: color-mix(in srgb, var(--color-danger-light) 88%, #000); border-color: color-mix(in srgb, var(--color-danger-light) 88%, #000); color: #fff; opacity: 1; }
.ui-tool-button.ui-tool-button:disabled { opacity: .45; cursor: default; pointer-events: none; }

/* ── 브레드크럼 ───────────────────────────────────────────────────────────
 * 화면 맨 위 위치 표시. 화면마다 따로 만들던 것(.board-·.post-·.cv-·.cs-·.cd-·.crf-·.crl-·.dr-breadcrumb 등)을
 * 하나로 합쳤다(원장 261012 「공식 컴포넌트를 써야지」). 커뮤니티·고전·연구가 먼저 쓴다. 병원 관리 화면은 다음 차례.
 *   <nav class="ui-breadcrumb" aria-label="위치">
 *     <a href="/">홈</a><i class="fa-solid fa-chevron-right" aria-hidden="true"></i><span aria-current="page">커뮤니티</span>
 *   </nav>
 * 링크는 회색, 현재 위치는 본문 글자색. 호버 신호는 색으로만 낸다(밑줄 없음).
 * 링크 선택자 `> a:any-link`(0,2,1)·`:hover`(0,3,1)는 다크 전역 `body[data-theme="dark"] a`(0,1,2)·`a:hover`(0,2,2)를 이긴다.
 * 아래 간격은 기본 .75rem. 한 행 안에 놓여 간격이 필요 없는 자리(글 화면 수정·삭제 행 등)는 그 화면이 margin 만 0 으로 둔다.
 */

.ui-breadcrumb { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; margin: 0 0 .75rem; font-size: .85rem; font-weight: 500; line-height: 1.4; color: var(--ui-muted); }
.ui-breadcrumb > a:any-link { color: var(--ui-muted); text-decoration: none; }
.ui-breadcrumb > a:any-link:hover { color: var(--ui-text); }
.ui-breadcrumb > i { font-size: .65rem; color: var(--ui-soft); }
.ui-breadcrumb > [aria-current="page"] { color: var(--ui-text); font-weight: 600; }

/* ── 쪽 번호 ──────────────────────────────────────────────────────────────
 * 디자인 레퍼런스 Numbered Pagination(dr-page-btn, PLAN 261005-4 — 쓰는 화면이 나오면 공용으로 올린다)을 그대로 옮겼다.
 * 처음 쓰는 화면은 휴지통(원장 261009 「페이지네이션 디자인이 공식이 아니네」).
 */

.ui-pager { display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: .38rem; padding: 16px 0 4px; }
.ui-pager[hidden] { display: none; }
.ui-pager button {
    border: 1px solid var(--ui-border); border-radius: 9px; background: var(--ui-surface); color: var(--ui-muted);
    height: 34px; min-width: 34px; padding: 0 .62rem; font: inherit; font-size: .83rem; font-weight: 500; cursor: pointer;
    transition: all .2s ease;
}
.ui-pager button:hover:not(:disabled) { border-color: var(--ui-border-2); background: var(--ui-hover); color: var(--ui-text); }
.ui-pager button.is-active { border-color: var(--color-primary); background: var(--color-primary); color: #fff; font-weight: 600; }
.ui-pager button:disabled { opacity: .4; cursor: default; }
.ui-pager .ui-pager-gap { color: var(--ui-soft); font-weight: 700; letter-spacing: .08em; padding: 0 .12rem; }

/* ── 스위치 ───────────────────────────────────────────────────────────────
 * 켜고 끄는 설정 하나. label.ui-switch 안에 input[type=checkbox] 와 span. 모양은 운영 설정 스위치(44×26) 그대로(261006 코드셋).
 */

.ui-switch { position: relative; display: inline-block; width: 44px; height: 26px; flex-shrink: 0; }
.ui-switch input { position: absolute; width: 0; height: 0; opacity: 0; }
.ui-switch span { position: absolute; inset: 0; border-radius: 26px; background: var(--ui-switch-off); cursor: pointer; transition: background .2s; }
.ui-switch span::before {
    content: '';
    position: absolute;
    top: 3px;
    left: 3px;
    width: 20px;
    height: 20px;
    border-radius: 50%;
    background: #fff;
    box-shadow: 0 1px 4px rgba(0, 0, 0, .22);
    transition: transform .2s;
}
.ui-switch input:checked + span { background: var(--ui-switch-on); }
.ui-switch input:checked + span::before { transform: translateX(18px); }
.ui-switch input:focus-visible + span { outline: 2px solid var(--color-primary); outline-offset: 2px; }
.ui-switch input:disabled + span { opacity: .45; cursor: not-allowed; }

/* ── 펼침 메뉴 ────────────────────────────────────────────────────────────
 * .ui-menu-wrap 안의 버튼 아래에 붙는다. 모달로 뜨는 항목은 button, 화면으로 가는 항목은 a 다.
 */

.ui-menu-wrap { position: relative; }

.ui-menu {
    position: absolute;
    right: 0;
    top: calc(100% + 6px);
    z-index: 20;
    min-width: 200px;
    padding: 6px;
    background: var(--ui-surface);
    border: 1px solid var(--ui-border-2);
    border-radius: 12px;
    box-shadow: 0 10px 28px rgba(0, 0, 0, .18);
}

.ui-menu[hidden] { display: none; }

.ui-menu .ui-menu-item {
    display: flex;
    align-items: center;
    gap: 10px;
    width: 100%;
    padding: 9px 10px;
    border: 0;
    border-radius: 8px;
    background: transparent;
    font: inherit;
    font-size: .88rem;
    color: var(--ui-text);
    text-align: left;
    text-decoration: none;
    cursor: pointer;
}

/* 쓸 수 없는 항목은 hidden 으로 뺀다 — 위 display:flex 가 hidden 을 이기므로 다시 건다(글 보기 「다른 앱으로 공유」, 261009) */
.ui-menu .ui-menu-item[hidden] { display: none; }
.ui-menu .ui-menu-item:hover { background: var(--ui-hover); }
.ui-menu .ui-menu-item i { width: 16px; text-align: center; color: var(--ui-soft); }
/* 되돌리기 어려운 항목(구독 해지·삭제)은 .is-danger — 평소 그대로, 호버만 빨간 계열(원장 261009, 「반려」 단추와 같다) */
.ui-menu .ui-menu-item.is-danger:hover { background: var(--ui-danger-bg); color: var(--ui-danger); }
/* 아래 공간이 모자라면 위로 펼친다 — 화면 맨 아래 줄의 메뉴가 하단 탭 막대에 가려 스크롤로도 볼 수 없었다(원장 261009). 판단은 placeMenu(uiMenu.js) */
.ui-menu.is-up { top: auto; bottom: calc(100% + 6px); }

/* ── 하단 시트(휴대폰 펼침 메뉴) ──────────────────────────────────────────
 * 휴대폰 폭(720px 이하)에서 .ui-menu.is-sheet 는 화면 아래에서 올라오는 시트가 된다(원장 261026 「모바일에서는 하단에서 올라오는 패널」).
 * 크기는 Material 3 바텀 시트·Apple HIG: 위 모서리 28px, 손잡이 32×4(위아래 22px, 누르는 자리 48px), 제목 17px, 본문 16px, 누르는 자리 48px 이상, 좌우 16px.
 * 손잡이 수치는 M3 Bottom sheets specs 원문(drag handle 32×4dp, padding top/bottom 22dp)대로(원장 261026 「손잡이도 M3 수치로」, 원문 docs/99_Assets/모바일 시트 디자인 지침 원문 261026).
 * 닫기 단추 없음. 뒷막·Esc·손잡이 끌기 모두 시트가 내려간 뒤 닫힌다. 여닫기는 components/uiSheet.js(UiSheet.attach).
 * 넓은 폭은 펼침 메뉴 그대로이고 손잡이·시트 머리는 숨는다. 시트 안에서 스크롤하는 목록 하나만 flex: 1 1 auto; min-height: 0 을 준다.
 */

.ui-sheet-handle,
.ui-sheet-head,
.ui-sheet-scrim { display: none; }

@media (max-width: 720px) {
    .ui-menu.is-sheet {
        position: fixed;
        left: 0;
        right: 0;
        top: auto;
        bottom: 0;
        z-index: 1001;
        display: flex;
        flex-direction: column;
        gap: 0;
        width: auto;
        min-width: 0;
        max-height: 85vh;
        overflow: auto;
        margin: 0;
        padding: 0 16px max(16px, env(safe-area-inset-bottom));
        border: 0;
        border-radius: 28px 28px 0 0;
        box-shadow: 0 -4px 16px rgba(0, 0, 0, .25);
        animation: ui-sheet-up .22s cubic-bezier(.2, .8, .2, 1);
    }
    .ui-menu.is-sheet[hidden] { display: none; }
    .ui-menu.is-sheet > * { flex-shrink: 0; }
    .ui-menu.is-sheet .ui-sheet-handle { display: block; height: 48px; margin: 0 -16px; cursor: grab; touch-action: none; }
    .ui-menu.is-sheet .ui-sheet-handle::before {
        content: '';
        display: block;
        width: 32px;
        height: 4px;
        margin: 22px auto 0;
        border-radius: 2px;
        background: var(--ui-border-2);
    }
    .ui-menu.is-sheet .ui-sheet-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 48px; margin: 0 0 4px; }
    .ui-menu.is-sheet .ui-sheet-title { font-size: 17px; font-weight: 600; color: var(--ui-text); }
    .ui-menu.is-sheet .ui-sheet-head .ui-text-button { min-height: 44px; margin-right: -12px; padding: 0 12px; border: 0; font-size: 15px; color: var(--ui-muted); }
    /* 항목 행은 시트 끝까지 차고 글자는 안쪽 16px 에 맞춘다 */
    .ui-menu.is-sheet .ui-menu-item { width: auto; min-height: 52px; margin: 0 -16px; padding: 0 16px; border-radius: 0; font-size: 16px; }
    .ui-sheet-scrim.is-open { display: block; position: fixed; inset: 0; z-index: 1000; background: var(--color-overlay-dark); animation: ui-sheet-scrim-in .22s ease; }
}

@keyframes ui-sheet-up { from { transform: translateY(100%); } to { transform: none; } }
@keyframes ui-sheet-scrim-in { from { opacity: 0; } to { opacity: 1; } }

/* ── 묶음 패널과 목록 행 ──────────────────────────────────────────────────
 * 패널 머리(아이콘 상자·제목·설명·개수) 아래에 행. 행은 이름·설명·개수·이름표·화살표로 짠다.
 */

.ui-panel {
    background: var(--ui-surface);
    border: 1px solid var(--ui-border);
    border-radius: 14px;
    padding: 18px 18px 8px;
}

.ui-panel[hidden] { display: none; }

.ui-panel .ui-panel-head {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-bottom: 6px;
}

.ui-panel .ui-panel-title {
    margin: 0;
    font-size: 16px;
    font-weight: 700;
    color: var(--ui-text);
}

.ui-panel .ui-panel-sub {
    margin: 2px 0 0;
    font-size: 12.5px;
    color: var(--ui-soft);
}

.ui-panel .ui-panel-count {
    margin-left: auto;
    white-space: nowrap;
    font-size: 13px;
    color: var(--ui-soft);
    font-variant-numeric: tabular-nums;
}

.ui-rows { margin-top: 6px; }

.ui-rows .ui-row,
.ui-rows .ui-row-more {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 11px 4px;
    border-top: 1px solid var(--ui-border);
    color: var(--ui-text);
    text-decoration: none;
}

.ui-rows .ui-row:hover,
.ui-rows .ui-row-more:hover { background: var(--ui-hover); }

.ui-rows .ui-row[hidden] { display: none; }

/* 누르면 이동하는 div 행 — 줄 끝에 단추가 있어 a 로 감쌀 수 없을 때(구독 번들 줄) */
.ui-rows .ui-row[data-row-href] { cursor: pointer; }

/* 누를 수 없는 행 */
.ui-rows .ui-row.is-static { cursor: default; }
.ui-rows .ui-row.is-static:hover { background: none; }

.ui-rows .ui-row-more {
    justify-content: center;
    gap: 6px;
    font-size: 13px;
    color: var(--ui-muted);
}

/* 「전체 N개 보기」가 모달을 여는 버튼일 때 */
.ui-rows button.ui-row-more {
    width: 100%;
    background: none;
    border-width: 1px 0 0;
    border-style: solid;
    border-color: var(--ui-border);
    font-family: inherit;
    color: var(--ui-muted);
    cursor: pointer;
}
.ui-rows button.ui-row-more:hover { background: var(--ui-hover); }

.ui-row .ui-row-name {
    flex: 1;
    min-width: 0;
    font-size: 14px;
    font-weight: 500;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.ui-row .ui-row-desc {
    margin-left: 8px;
    font-size: 12px;
    font-weight: 400;
    color: var(--ui-soft);
}

.ui-row .ui-row-count {
    font-size: 14px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
}

.ui-row .ui-row-unit {
    margin-left: 2px;
    font-size: 12px;
    font-weight: 400;
    color: var(--ui-soft);
}

/* 행 끝 동작 — 주 동작 글자 버튼 하나 + ⋮ 메뉴. 너비를 고정해 「v10으로 업데이트」가 한 줄에 든다(선택지 목록 화면 .olm-act 와 같은 값, 원장 261009 번들 「구독 중」 미리보기 승인) */
.ui-row .ui-row-act { display: flex; align-items: center; justify-content: flex-end; gap: 2px; width: 168px; flex-shrink: 0; margin-left: auto; }
.ui-row .ui-row-act > .ui-text-button { padding: .25rem .6rem; font-size: 12.5px; white-space: nowrap; }
.ui-row .ui-row-act .ui-menu-wrap > .ui-text-button { padding: .25rem .5rem; }

.ui-row .ui-row-go {
    width: 14px;
    text-align: right;
    font-size: 12px;
    color: var(--ui-soft);
}

.ui-rows .ui-row-empty {
    padding: 14px 4px;
    border-top: 1px solid var(--ui-border);
    font-size: 13px;
    color: var(--ui-soft);
}

/* ── 분할 선택 ────────────────────────────────────────────────────────────
 * 선택지 2~4개를 한 묶음 버튼으로 고른다. 고른 버튼은 aria-pressed="true".
 * 틀은 테두리 없이 배경만, 선택 표시(.ui-segment-thumb)는 틀 안쪽 1px 에서 고른 버튼으로 미끄러진다(PLAN 261007-3, Claude 분할 선택).
 * 선택 표시는 /assets/js/components/ui-segment.js 가 넣고 옮긴다 — .ui-segment 를 쓰는 페이지는 이 스크립트를 읽어야 한다.
 * 곡률은 바깥 10px, 선택 표시 9px(바깥 − 여백 1px). 선택 표시 바탕은 라이트 흰색·다크 #2a2a2a — 라이트에서 --ui-border 를 쓰면 틀보다 어두워 눌린 것처럼 보인다.
 * 움직임은 리포의 미끄러지는 분할 선택과 같은 0.28s cubic-bezier(0.4, 0, 0.2, 1).
 * 높이는 정수로 둔다(버튼 30px, 틀 32px). 소수점이면 선택 표시 위아래 1px 이 픽셀에 맞춰지며 서로 달라진다(마켓 41.4px 에서 위 3px·아래 3.5px). */

.ui-segment.ui-segment {
    position: relative;
    display: inline-flex;
    padding: 1px;
    border: 0;
    border-radius: 10px;
    background: var(--ui-surface-2);
}

.ui-segment.ui-segment > .ui-segment-thumb {
    position: absolute;
    top: 1px;
    bottom: 1px;
    left: 0;
    box-sizing: border-box;
    border: 1px solid var(--ui-border-2);
    border-radius: 9px;
    background: var(--ui-segment-thumb);
    pointer-events: none;
    transition: transform .28s cubic-bezier(0.4, 0, 0.2, 1), width .28s cubic-bezier(0.4, 0, 0.2, 1);
}
.ui-segment.ui-segment > .ui-segment-thumb.is-instant { transition: none; }

.ui-segment.ui-segment > button {
    position: relative;
    z-index: 1;
    padding: 5px 10px;
    border: 0;
    border-radius: 9px;
    background: transparent;
    color: var(--ui-muted);
    font: inherit;
    font-size: .76rem;
    font-weight: 600;
    line-height: 20px;
    cursor: pointer;
    transition: color .28s;
}
.ui-segment.ui-segment > button:hover { color: var(--ui-text); }
.ui-segment.ui-segment > button[aria-pressed="true"] { color: var(--ui-text); }
@media (prefers-reduced-motion: reduce) {
    .ui-segment.ui-segment > .ui-segment-thumb,
    .ui-segment.ui-segment > button { transition: none; }
}

/* ── 선택 카드 ────────────────────────────────────────────────────────────
 * 선택지마다 이름과 설명 한 문장을 두고 하나를 고른다. 고른 카드는 aria-checked="true", 오른쪽에 체크 원이 그려진다.
 * 모양과 체크 움직임은 회원가입 회원 구분 카드(register.html .mv-card)와 같다. 회원가입은 유리 바탕이라 자체 규칙을 쓴다.
 * 첫 적용: 직원 초대 직책·한의원 합류 직책 선택(PLAN 261016-2, 원장 261016 미리보기 승인).
 * .is-grid 는 두 열(좁은 화면 한 열). .is-inset 은 선택 고리를 카드 안쪽에 그린다. 옆으로 넘기는 단계 모달 등
 * 넘친 부분이 잘리는 틀 안에서 사용한다. */

.ui-choice-cards { display: flex; flex-direction: column; gap: 8px; }
.ui-choice-cards.is-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
@media (max-width: 640px) { .ui-choice-cards.is-grid { grid-template-columns: 1fr; } }

.ui-choice-card.ui-choice-card {
    position: relative;
    display: block;
    width: 100%;
    box-sizing: border-box;
    padding: 14px 44px 14px 14px;
    border: 1px solid var(--ui-border-2);
    border-radius: 10px;
    background: var(--ui-surface-2);
    font: inherit;
    color: inherit;
    text-align: left;
    cursor: pointer;
    transition: border-color .28s ease, background-color .28s ease, box-shadow .28s ease;
}
.ui-choice-card.ui-choice-card:hover { background: var(--ui-hover); }
.ui-choice-card b { display: block; font-size: .9rem; font-weight: 600; color: var(--ui-text); }
.ui-choice-card small { display: block; margin-top: 3px; font-size: .8rem; line-height: 1.5; color: var(--ui-muted); }
.ui-choice-card.ui-choice-card[aria-checked="true"] {
    border-color: var(--color-primary);
    background: color-mix(in srgb, var(--color-primary) 7%, var(--ui-surface-2));
    box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-primary) 14%, transparent);
}
.ui-choice-cards.is-inset .ui-choice-card[aria-checked="true"] { box-shadow: inset 0 0 0 1px var(--color-primary); }
.ui-choice-card:focus-visible { outline: 2px solid var(--color-primary); outline-offset: 2px; }
.ui-choice-card .ui-choice-check { position: absolute; right: 14px; top: 50%; width: 20px; height: 20px; margin-top: -10px; }
.ui-choice-check circle { fill: var(--color-primary); transform-origin: 10px 10px; transform: scale(.4); opacity: 0; transition: transform .32s cubic-bezier(.3, 1.5, .5, 1), opacity .2s ease; }
.ui-choice-check path { fill: none; stroke: #fff; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 12; stroke-dashoffset: 12; transition: stroke-dashoffset .12s ease; }
.ui-choice-card[aria-checked="true"] .ui-choice-check circle { transform: none; opacity: 1; }
.ui-choice-card[aria-checked="true"] .ui-choice-check path { stroke-dashoffset: 0; transition: stroke-dashoffset .34s cubic-bezier(.65, 0, .35, 1) .22s; }
/* 다크의 고른 카드·체크 원은 흰색(회원가입 다크 카드와 동일, 원장 261015 다크 주 버튼 흰색) */
:is(html, body)[data-theme="dark"] .ui-choice-card.ui-choice-card[aria-checked="true"] { border-color: rgba(237, 240, 243, .7); background: rgba(255, 255, 255, .09); box-shadow: 0 0 0 3px rgba(237, 240, 243, .12); }
:is(html, body)[data-theme="dark"] .ui-choice-cards.is-inset .ui-choice-card[aria-checked="true"] { box-shadow: inset 0 0 0 1px rgba(237, 240, 243, .7); }
:is(html, body)[data-theme="dark"] .ui-choice-check circle { fill: #edf0f3; }
:is(html, body)[data-theme="dark"] .ui-choice-check path { stroke: #141414; }
@media (prefers-reduced-motion: reduce) {
    .ui-choice-card.ui-choice-card, .ui-choice-check circle, .ui-choice-check path { transition: none; }
}

/* ── 정의 목록 ────────────────────────────────────────────────────────────
 * <dl class="ui-deflist"> 안에 <div><dt>이름</dt><dd>값</dd></div>. 이름 열 너비는 --ui-deflist-label. 기준은 API Reference. */

.ui-deflist {
    display: grid;
    gap: 0;
    margin: 0;
    border-top: 1px solid var(--ui-border);
}

.ui-deflist > div {
    display: grid;
    grid-template-columns: var(--ui-deflist-label, 92px) minmax(0, 1fr);
    gap: .75rem;
    padding: .55rem 0;
    border-bottom: 1px solid var(--ui-border);
}

.ui-deflist dt { color: var(--ui-soft); font-size: .78rem; }
.ui-deflist dd { margin: 0; color: var(--ui-muted); font-size: .8rem; line-height: 1.5; }

/* 좁은 목록(is-compact): 좁은 카드 안에서 간격·글자를 작게. 기준은 개발자 문서 인증 방식 카드(원장 261006 지금 모양 유지). */
.ui-deflist.is-compact > div { gap: .6rem; padding: .45rem 0; }
.ui-deflist.is-compact dt { font-size: .76rem; }
.ui-deflist.is-compact dd { font-size: .78rem; }

/* ── 안내 상자 ────────────────────────────────────────────────────────────
 * 앞에 아이콘 하나, 바탕 채움. 기준은 API Reference. 어셋 목록 모달 안내도 이 상자다(261006). */

.ui-note {
    display: flex;
    gap: .55rem;
    padding: .8rem .9rem;
    background: var(--ui-surface-2);
    color: var(--ui-muted);
    font-size: .8rem;
    line-height: 1.55;
}
.ui-note i { margin-top: .15rem; color: var(--ui-soft); }
.ui-note code { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
.ui-note.is-warn { background: var(--ui-warn-bg); color: var(--ui-warn); }
.ui-note.is-danger { background: var(--ui-danger-bg); color: var(--ui-danger); }
.ui-note.is-warn i,
.ui-note.is-danger i { color: inherit; }

/* 쇼케이스 파일 액자가 다른 주소로 이동했을 때 액자 자리의 안내(showcase-frame-guard.js). 글 화면·새 창·관리자 검토·업로드 미리보기 공용 */
.ui-frame-notice { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px; padding: 56px 20px; text-align: center; color: var(--ui-muted); font-size: .88rem; box-sizing: border-box; }
.ui-frame-notice > i { font-size: 1.4rem; color: var(--ui-soft); }
.ui-frame-notice p { margin: 0; line-height: 1.6; }

/* ── 접고 펴기 ────────────────────────────────────────────────────────────
 * 버튼(.ui-collapse-toggle, aria-expanded) 바로 뒤의 .ui-collapse 에 is-open 을 붙이고 뗀다. 기준은 릴리스 노트.
 * 높이는 격자 행 0fr → 1fr 로 편다. 내용의 자연 높이까지 늘어나므로 max-height 를 어림잡지 않는다.
 * 속싸개(.ui-collapse-inner)의 min-height: 0 이 있어야 실제로 줄어든다. */

.ui-collapse-toggle.ui-collapse-toggle {
    justify-self: start;
    display: inline-flex;
    align-items: center;
    gap: .38rem;
    padding: .15rem 0;
    border: 0;
    background: none;
    color: var(--ui-muted);
    font-size: .8rem;
    font-family: inherit;
    cursor: pointer;
    transition: color .15s ease;
}
.ui-collapse-toggle.ui-collapse-toggle:hover { color: var(--ui-text); }
.ui-collapse-toggle i { font-size: .72rem; transition: transform .25s cubic-bezier(.2, 0, 0, 1); }
.ui-collapse-toggle[aria-expanded="true"] i { transform: rotate(180deg); }

.ui-collapse {
    display: grid;
    grid-template-rows: 0fr;
    opacity: 0;
    transition: grid-template-rows .3s cubic-bezier(.2, 0, 0, 1), opacity .22s ease;
}
.ui-collapse.is-open { grid-template-rows: 1fr; opacity: 1; }
.ui-collapse > .ui-collapse-inner { min-height: 0; overflow: hidden; }

@media (prefers-reduced-motion: reduce) {
    .ui-collapse,
    .ui-collapse-toggle i { transition: none; }
}

/* ── 코드 상자 ────────────────────────────────────────────────────────────
 * 머리(.ui-code-bar: 분할 선택·복사 버튼), 파일 이름(.ui-code-file), 본문 <pre>. 기준은 개발자 문서 설정 예시. */

.ui-code-box { border: 1px solid var(--ui-border); border-radius: 10px; overflow: hidden; }

.ui-code-box .ui-code-bar {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: .5rem;
    padding: .55rem .8rem;
    border-bottom: 1px solid var(--ui-border);
}
.ui-code-box .ui-code-bar > span { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; }

.ui-code-box .ui-code-copy {
    padding: .3rem .5rem;
    border: 0;
    border-radius: 6px;
    background: transparent;
    color: var(--ui-muted);
    font: inherit;
    font-size: .78rem;
    cursor: pointer;
}
.ui-code-box .ui-code-copy:hover { background: var(--ui-surface-2); color: var(--ui-text); }

.ui-code-box .ui-code-file {
    padding: .5rem .9rem 0;
    color: var(--ui-soft);
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: .7rem;
}

.ui-code-box pre {
    margin: 0;
    padding: .6rem .9rem .9rem;
    overflow-x: auto;
    color: var(--ui-muted);
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: .76rem;
    line-height: 1.6;
    white-space: pre;
}

/* ── 편집 표 ──────────────────────────────────────────────────────────────
 * 행마다 입력란을 두고 행을 추가·삭제하는 표. 기준은 원내 처방 모달의 구성 약재 표(formula-add-modal.css, 261006).
 * 열 너비는 페이지가 --ui-edit-cols 로 정한다. 입력란은 테두리 없이 두고 Hover·포커스에서만 테두리를 표시한다.
 * 포커스 색은 모달 입력란과 같은 --color-primary. */

.ui-edit-table {
    --ui-edit-cols: 28px minmax(0, 1fr) 96px 128px 32px;
    border: 1px solid var(--ui-border);
    border-radius: 10px;
    color: var(--ui-text);
}
.ui-edit-table .ui-edit-head,
.ui-edit-table .ui-edit-row {
    display: grid;
    grid-template-columns: var(--ui-edit-cols);
    align-items: center;
    column-gap: 8px;
    padding: 0 8px 0 4px;
}
.ui-edit-table .ui-edit-head { height: 32px; border-bottom: 1px solid var(--ui-border); font-size: .72rem; font-weight: 600; color: var(--ui-soft); }
.ui-edit-table .ui-edit-head .is-right { text-align: right; padding-right: 8px; }
.ui-edit-table .ui-edit-row { height: 40px; border-bottom: 1px solid var(--ui-border); }
.ui-edit-table .ui-edit-num { font-size: .75rem; color: var(--ui-soft); text-align: right; }
.ui-edit-table .ui-edit-cell.ui-edit-cell {
    width: 100%; height: 30px; box-sizing: border-box; padding: 0 8px;
    border: 1px solid transparent; border-radius: 7px; background: transparent;
    color: var(--ui-text); font: inherit; font-size: .86rem;
}
.ui-edit-table .ui-edit-cell:hover:not(:disabled) { border-color: var(--ui-border); }
.ui-edit-table .ui-edit-cell:focus { outline: none; border-color: var(--color-primary); }
.ui-edit-table .ui-edit-cell::placeholder { color: var(--ui-soft); }
.ui-edit-table .ui-edit-cell:disabled { cursor: default; }
.ui-edit-table .ui-edit-pick,
.ui-edit-table .ui-edit-unit { position: relative; }
.ui-edit-table .ui-edit-unit .ui-edit-cell { padding-right: 22px; text-align: right; }
.ui-edit-table .ui-edit-unit span { position: absolute; right: 8px; top: 50%; transform: translateY(-50%); font-size: .86rem; color: var(--ui-muted); pointer-events: none; }
.ui-edit-table .ui-edit-cell.is-select { display: flex; align-items: center; justify-content: space-between; gap: 6px; text-align: left; cursor: pointer; }
.ui-edit-table .ui-edit-cell.is-select.is-empty { color: var(--ui-soft); }
.ui-edit-table .ui-edit-cell.is-select i { font-size: .7rem; color: var(--ui-soft); transition: transform .15s; }
.ui-edit-table .ui-edit-cell.is-select[aria-expanded="true"] { border-color: var(--color-primary); }
.ui-edit-table .ui-edit-cell.is-select[aria-expanded="true"] i { transform: rotate(180deg); }
.ui-edit-table .ui-edit-del.ui-edit-del {
    display: inline-flex; align-items: center; justify-content: center; width: 30px; height: 30px; padding: 0;
    border: 0; border-radius: 8px; background: transparent; color: var(--ui-soft); cursor: pointer;
}
.ui-edit-table .ui-edit-del.ui-edit-del:hover:not(:disabled) { color: var(--ui-danger); background: var(--ui-danger-bg); }
.ui-edit-table .ui-edit-del:disabled { visibility: hidden; }
.ui-edit-table .ui-edit-add.ui-edit-add {
    display: grid; grid-template-columns: 28px 1fr; column-gap: 8px; align-items: center;
    width: 100%; height: 38px; padding: 0 8px 0 4px; border: 0; border-radius: 0 0 9px 9px;
    background: color-mix(in srgb, var(--ui-text) 4%, transparent);
    color: var(--ui-muted); font: inherit; font-size: .78rem; font-weight: 500; line-height: 1; cursor: pointer;
}
.ui-edit-table .ui-edit-add.ui-edit-add:hover { background: color-mix(in srgb, var(--ui-text) 8%, transparent); color: var(--ui-text); }
.ui-edit-table .ui-edit-add i { display: block; text-align: right; font-size: .7rem; }
.ui-edit-table .ui-edit-add span { display: block; text-align: left; padding-left: 9px; }
.ui-edit-table .ui-edit-add[hidden] { display: none; }

/* ── 펼친 검색 결과·선택 목록 ─────────────────────────────────────────────
 * 입력란 아래에 펼친다. 기본은 감싼 요소 기준 absolute. 모달 본문처럼 스크롤 상자 안이면 잘리므로 .is-fixed 를 붙이고
 * 페이지 스크립트가 left·top·width 를 준다(원내 처방 모달 placeDrop 과 같은 방식). */

.ui-drop {
    position: absolute; left: 0; right: 0; top: calc(100% + 4px); z-index: 30;
    box-sizing: border-box; max-height: 260px; overflow-y: auto; padding: 4px;
    background: var(--ui-surface); border: 1px solid var(--ui-border-2); border-radius: 10px;
    box-shadow: 0 10px 28px rgba(0, 0, 0, .18);
}
.ui-drop[hidden] { display: none; }
.ui-drop.is-fixed { position: fixed; right: auto; z-index: 3000; }
.ui-drop .ui-drop-empty { padding: 8px 10px; font-size: .8rem; color: var(--ui-soft); }
.ui-drop .ui-drop-item.ui-drop-item,
.ui-drop .ui-drop-act.ui-drop-act {
    display: flex; align-items: center; gap: 8px; width: 100%; box-sizing: border-box;
    padding: 8px 10px; border: 0; border-radius: 7px; background: transparent;
    color: var(--ui-text); font: inherit; font-size: .86rem; text-align: left; cursor: pointer;
}
.ui-drop .ui-drop-item:hover,
.ui-drop .ui-drop-act:hover { background: var(--ui-hover); }
.ui-drop .ui-drop-item.is-sel { font-weight: 600; }
.ui-drop .ui-drop-item .ui-drop-ck { width: 12px; font-size: .72rem; color: var(--color-primary); }
.ui-drop .ui-drop-item small { margin-left: auto; font-size: .75rem; color: var(--ui-soft); }
.ui-drop .ui-drop-act.ui-drop-act { color: var(--ui-muted); }
.ui-drop .ui-drop-act i { font-size: .75rem; }
.ui-drop mark { background: color-mix(in srgb, var(--ui-warn) 30%, transparent); color: inherit; border-radius: 2px; }

/* ── 모달 틀 ──────────────────────────────────────────────────────────────
 * 규칙: docs/30_Architecture/모달 단계 흐름과 하단 버튼. 단계 표시·가로 트랙·하단 버튼(주 버튼 채움, 보조는 글자만).
 * 새로 만들기 모달 다섯 개(원내 처방·약재·침구 처방·선택지 목록·코드셋)가 접두사만 바꿔 복사하던 틀을 옮겼다.
 * 모달 안 고유 부분(약재 잠금, 처방 고르기, 혈위 그룹 등)은 각 모달 CSS 에 #id 아래로 남는다.
 * 색은 --ui-* 다(261006 원장). 주 버튼 채움·포커스·선택 표시만 --color-primary. 입력란·파일 테두리는 진한 선 --ui-border-2.
 */

.ui-modal { position: fixed; inset: 0; z-index: 1200; display: flex; align-items: center; justify-content: center; padding: 20px; }
.ui-modal[hidden] { display: none; }
/* 뒷막은 무채색 토큰 하나(261021 원장 「모달 배경에 푸른끼」. 라이트가 남색 rgba(15,23,42) 였다) */
.ui-modal .ui-modal-backdrop { position: absolute; inset: 0; background: var(--color-overlay-dark); }

.ui-modal .ui-modal-card {
    position: relative; display: flex; flex-direction: column;
    width: 560px; max-width: calc(100vw - 32px); max-height: 92vh; overflow: hidden;
    background: var(--ui-surface); border: 1px solid var(--ui-border); border-radius: 16px;
}
.ui-modal .ui-modal-card.is-closing { opacity: 0; transform: translateY(6px); transition: opacity .22s ease, transform .22s ease; }

.ui-modal .ui-modal-head { display: flex; align-items: center; justify-content: space-between; padding: 20px 24px 4px; }
.ui-modal .ui-modal-title { margin: 0; font-size: 1rem; font-weight: 700; color: var(--ui-text); }
/* 창 머리 아이콘 — 행에서 누른 이름표의 색·아이콘을 창 머리로 잇는다(공개 반려, 원장 261008). 상자 왼쪽 끝은 본문 왼쪽 끝과 같다 */
.ui-modal .ui-modal-title:has(> .ui-icon-box) { display: flex; align-items: center; gap: 10px; }
.ui-modal .ui-modal-title > .ui-icon-box.is-tone { width: 28px; height: 28px; border-radius: 8px; font-size: 13px; }
.ui-modal .ui-modal-close.ui-modal-close {
    width: 30px; height: 30px; border: 0; border-radius: 8px; background: transparent;
    color: var(--ui-soft); cursor: pointer;
}
.ui-modal .ui-modal-close.ui-modal-close:hover { background: color-mix(in srgb, currentColor 12%, transparent); color: var(--ui-text); }

/* 단계 표시: 가운데, 지금 단계 강조색 굵게, 뒤 단계 흐리게, 끝난 단계 체크(원 0.25초, 이어서 체크 0.15초) */
.ui-modal .ui-modal-steps { display: flex; justify-content: center; align-items: center; gap: 6px; padding: 6px 24px 4px; font-size: 12px; color: var(--ui-text); }
.ui-modal .ui-modal-step { display: inline-flex; align-items: center; gap: 5px; }
.ui-modal .ui-modal-step.is-current { color: var(--primary-color); font-weight: 700; }
.ui-modal .ui-modal-step.is-upcoming { opacity: .45; }
.ui-modal .ui-modal-step-sep { opacity: .35; }
.ui-modal .ui-modal-step-num {
    width: 18px; height: 18px; box-sizing: border-box; border: 1px solid currentColor; border-radius: 50%;
    display: inline-flex; align-items: center; justify-content: center; font-size: 11px;
}
.ui-modal .ui-modal-step-check { width: 18px; height: 18px; flex: 0 0 18px; }
.ui-modal .ui-modal-step-check circle { fill: none; stroke: currentColor; stroke-width: 1.5; stroke-dasharray: 51; transform: rotate(-90deg); transform-origin: 50% 50%; }
.ui-modal .ui-modal-step-check path { fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 12; }
.ui-modal .ui-modal-step-check.is-play circle { animation: uiModalCircle .25s ease-out both; }
.ui-modal .ui-modal-step-check.is-play path { animation: uiModalTick .15s ease-out .25s both; }
@keyframes uiModalCircle { from { stroke-dashoffset: 51; } to { stroke-dashoffset: 0; } }
@keyframes uiModalTick { from { stroke-dashoffset: 12; } to { stroke-dashoffset: 0; } }

/* 단계가 있으면 가로 트랙(viewport·track·pane), 없으면 body 하나 */
.ui-modal .ui-modal-viewport { overflow: hidden; transition: height .28s ease; }
.ui-modal .ui-modal-track { display: flex; align-items: flex-start; transition: transform .28s ease; }
.ui-modal .ui-modal-pane { flex: 0 0 100%; min-width: 0; box-sizing: border-box; padding: 12px 24px 8px; }
.ui-modal .ui-modal-body { overflow-y: auto; padding: 12px 24px 8px; }

/* 입력란을 감싼 <label> 도 블록 — 인라인이면 칸 사이 간격이 먹지 않는다(마켓 「사본 이름」 0px, 261009) */
.ui-modal .ui-modal-field { display: block; }
.ui-modal .ui-modal-field + .ui-modal-field { margin-top: 12px; }
.ui-modal .ui-modal-field[hidden] { display: none; }
.ui-modal .ui-modal-label { display: block; margin-bottom: 5px; font-size: .75rem; font-weight: 600; color: var(--ui-muted); }
.ui-modal .ui-modal-optional { font-weight: 400; color: var(--ui-soft); }
.ui-modal .ui-modal-input {
    width: 100%; height: 42px; box-sizing: border-box; padding: 0 12px;
    border: 1.5px solid var(--ui-border-2); border-radius: 10px;
    background: var(--ui-surface); color: var(--ui-text); font: inherit; font-size: .88rem;
}
.ui-modal .ui-modal-input::placeholder { color: var(--ui-soft); }
.ui-modal .ui-modal-input:focus { outline: none; border-color: var(--color-primary); box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-primary) 14%, transparent); }
/* 바꿀 수 없는 값은 입력란에서도 보여야 한다 */
.ui-modal .ui-modal-input:disabled { background: var(--ui-surface-2); color: var(--ui-soft); cursor: not-allowed; }
/* 고르는 입력란 — 버튼이 고른 값을 그리고, 목록은 .ui-drop 으로 펼친다(Editable Table 의 .ui-edit-cell.is-select 와 같은 모양) */
.ui-modal .ui-modal-input.is-select { display: flex; align-items: center; justify-content: space-between; gap: 6px; text-align: left; cursor: pointer; }
.ui-modal .ui-modal-input.is-select i { font-size: .7rem; color: var(--ui-soft); transition: transform .15s; }
.ui-modal .ui-modal-input.is-select[aria-expanded="true"] { border-color: var(--color-primary); }
.ui-modal .ui-modal-input.is-select[aria-expanded="true"] i { transform: rotate(180deg); }
/* 휴대폰 폭은 16px. 아이폰 사파리는 16px 미만 입력란을 누르면 화면을 확대한다(원장 261016, 확대 금지 viewport 대신 글자 크기로) */
@media (max-width: 640px) { .ui-modal .ui-modal-input { font-size: 16px; } }
.ui-modal .ui-modal-hint { display: block; margin-top: 6px; font-size: .75rem; line-height: 1.5; color: var(--ui-soft); }
.ui-modal .ui-modal-hint[hidden] { display: none; }
.ui-modal .ui-modal-note { font-size: .8rem; line-height: 1.5; color: var(--ui-muted); }
/* 창의 핵심 문장(반려 사유 등) — 안내(.ui-modal-note)보다 크고 진하게, 뒤 안내는 보조 줄 */
.ui-modal .ui-modal-lead { margin: 0; font-size: .95rem; line-height: 1.6; color: var(--ui-text); }
.ui-modal .ui-modal-lead + .ui-modal-note { margin-top: 10px; }
.ui-modal .ui-modal-note[hidden] { display: none; }

/* 선택지 2~3개는 라디오 */
.ui-modal .ui-modal-seg { display: flex; gap: 16px; font-size: .84rem; color: var(--ui-text); }
.ui-modal .ui-modal-seg label { display: inline-flex; align-items: center; gap: 6px; cursor: pointer; }
.ui-modal .ui-modal-seg input { margin: 0; accent-color: var(--color-primary); }

.ui-modal .ui-modal-file {
    display: inline-flex; align-items: center; gap: 8px; padding: 9px 14px; border-radius: 10px; cursor: pointer;
    border: 1.5px dashed var(--ui-border-2); color: var(--ui-text); font-size: .84rem;
}
.ui-modal .ui-modal-file:hover { background: color-mix(in srgb, var(--ui-text) 6%, transparent); }
.ui-modal .ui-modal-file i { color: var(--ui-soft); }

/* 하단: 실패하면 닫지 않고 서버 문장을 버튼 위에. 주 버튼은 테두리 없는 채움, 보조는 글자만.
   버튼만 있는 줄은 두 버튼을 같은 너비로(긴 쪽, 최소 88px, 오른쪽, 원장 261009 「취소 버튼이랑 공개 중단 버튼의 크기는 같아야」).
   위험한 동작(폐기·삭제·구독 해지·공개 중단)은 주 버튼 .is-danger + 제목 앞 경고 아이콘(ui-icon-box is-tone is-danger, 원장 261009).
   빨강은 재고 확인 창·선택지 목록 편집 창 확인(261003)과 같은 --color-danger-light — 다크 --ui-danger 는 흰 글자 대비가 낮다. */
.ui-modal .ui-modal-error { margin: 0 24px; font-size: .84rem; color: var(--ui-danger); }
.ui-modal .ui-modal-error:empty { display: none; }
.ui-modal .ui-modal-foot { display: flex; justify-content: flex-end; align-items: center; gap: 8px; padding: 14px 24px 18px; }
.ui-modal .ui-modal-foot:not(:has(> :not(button))) { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(88px, 1fr); width: max-content; margin-left: auto; }
.ui-modal .ui-modal-back.ui-modal-back,
.ui-modal .ui-modal-main.ui-modal-main {
    padding: 7px 18px; border: 0; border-radius: 6px; font: inherit; font-size: 13px; font-weight: 600; line-height: 1.4; cursor: pointer;
}
.ui-modal .ui-modal-back.ui-modal-back { background: transparent; color: color-mix(in srgb, var(--ui-text) 70%, transparent); }
.ui-modal .ui-modal-back.ui-modal-back:hover { color: var(--ui-text); }
.ui-modal .ui-modal-main.ui-modal-main { background: var(--color-primary); color: #fff; }
.ui-modal .ui-modal-main.ui-modal-main:hover:not(:disabled) { background: var(--color-primary-hover); }
.ui-modal .ui-modal-main.ui-modal-main.is-danger { background: var(--color-danger-light); }
.ui-modal .ui-modal-main.ui-modal-main.is-danger:hover:not(:disabled) { background: color-mix(in srgb, var(--color-danger-light) 88%, #000); }
.ui-modal .ui-modal-main:disabled,
.ui-modal .ui-modal-back:disabled { cursor: default; opacity: .6; }

@media (prefers-reduced-motion: reduce) {
    .ui-modal .ui-modal-viewport,
    .ui-modal .ui-modal-track { transition: none; }
    .ui-modal .ui-modal-step-check.is-play circle,
    .ui-modal .ui-modal-step-check.is-play path { animation: none; }
    .ui-modal .ui-modal-card.is-closing { transition: none; }
}

/* 휴대폰 폭(720px 이하) 하단 시트 창: .ui-modal.is-sheet(UiSheet.attachModal, 원장 261026 「모바일에서는 하단 패널」, 직원 관리 권한 창).
 * 치수는 하단 시트 메뉴(.ui-menu.is-sheet)와 동일한 원문(Material 3 Bottom sheets·Lists, Apple HIG Typography·Accessibility,
 * 원문 docs/99_Assets/모바일 시트 디자인 지침 원문 261026): 위 여백 72px, 위 모서리 28px, 손잡이 32×4(위아래 22px·누르는 자리 48px),
 * 제목 17px, 안내 14/20, 좌우 16px, 버튼 48px·사이 12px. 버튼 모서리 12px 는 시트 28px − 좌우 여백 16px(동심 곡선).
 * 닫기 단추 없음, 보조 버튼은 회색 바탕(주 버튼과 동일한 모양으로 보이게). 버튼 위 구분선 없음. */
@media (max-width: 720px) {
    .ui-modal.is-sheet { align-items: flex-end; padding: 0; }
    .ui-modal.is-sheet .ui-modal-card {
        width: 100%; max-width: none; max-height: calc(100dvh - 72px);
        border: 0; border-radius: 28px 28px 0 0; box-shadow: 0 -4px 16px rgba(0, 0, 0, .25);
        animation: ui-sheet-up .22s cubic-bezier(.2, .8, .2, 1);
    }
    .ui-modal.is-sheet .ui-sheet-handle { display: block; flex-shrink: 0; height: 48px; cursor: grab; touch-action: none; }
    .ui-modal.is-sheet .ui-sheet-handle::before {
        content: ''; display: block; width: 32px; height: 4px; margin: 22px auto 0; border-radius: 2px; background: var(--ui-border-2);
    }
    .ui-modal.is-sheet .ui-modal-head { min-height: 48px; padding: 0 16px 4px; }
    .ui-modal.is-sheet .ui-modal-title { font-size: 17px; font-weight: 600; }
    .ui-modal.is-sheet .ui-modal-close { display: none; }
    .ui-modal.is-sheet .ui-modal-body { flex: 1 1 auto; min-height: 0; max-height: none; padding: 4px 16px 8px; }
    .ui-modal.is-sheet .ui-modal-note { font-size: 14px; line-height: 20px; }
    .ui-modal.is-sheet .ui-modal-error { margin: 0 16px; }
    .ui-modal.is-sheet .ui-modal-foot.ui-modal-foot {
        display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; column-gap: 12px;
        width: auto; margin: 0; padding: 12px 16px max(16px, env(safe-area-inset-bottom));
    }
    .ui-modal.is-sheet .ui-modal-foot > button { min-height: 48px; border-radius: 12px; font-size: 16px; }
    .ui-modal.is-sheet .ui-modal-foot > .ui-modal-back { background: var(--ui-surface-2); color: var(--ui-text); }
}

/* ── 변경 상자 ─────────────────────────────────────────────────────────
 * 두 버전 사이의 추가(초록 +)·삭제(빨강 −) 항목. 선택지 목록 업데이트·이 버전 사용·새 버전 승인이 쓴다(PLAN 261007-5 W2-2).
 * 수정(노랑 ~, .is-mod)은 같은 항목의 내용이 바뀐 번들 줄이다(PLAN 261008 §3.4.1, 원장 261009).
 * <div class="ui-diff"><div class="ui-diff-head">v2 → v3 변경<span class="ui-diff-n is-add">+2</span>…</div>
 *   <div class="ui-diff-lines"><div class="ui-diff-line is-add"><span class="ui-diff-sign">+</span><span class="ui-diff-text">…</span></div></div></div> */
.ui-diff { border: 1px solid var(--ui-border); border-radius: 8px; overflow: hidden; }
.ui-diff-head { display: flex; align-items: center; gap: 8px; padding: 8px 12px; background: var(--ui-surface-2); border-bottom: 1px solid var(--ui-border); font-size: .84rem; font-weight: 600; color: var(--ui-text); }
.ui-diff-n.is-add { color: var(--ui-add); }
.ui-diff-n.is-mod { color: var(--ui-warn); }
.ui-diff-n.is-del { color: var(--ui-del); }
.ui-diff-lines { max-height: 200px; overflow-y: auto; }
.ui-diff-empty { padding: 8px 12px; font-size: .84rem; color: var(--ui-muted); }
.ui-diff-line { display: flex; align-items: stretch; font-size: .84rem; line-height: 1.6; color: var(--ui-text); }
.ui-diff-sign { flex: 0 0 28px; text-align: center; font-weight: 600; }
.ui-diff-text { padding: 3px 12px 3px 8px; overflow-wrap: anywhere; }
.ui-diff-line.is-add { background: var(--ui-add-bg); }
.ui-diff-line.is-add .ui-diff-sign { background: var(--ui-add-sign-bg); color: var(--ui-add); }
.ui-diff-line.is-mod { background: var(--ui-warn-bg); }
.ui-diff-line.is-mod .ui-diff-sign { color: var(--ui-warn); }
.ui-diff-line.is-del { background: var(--ui-del-bg); }
.ui-diff-line.is-del .ui-diff-sign { background: var(--ui-del-sign-bg); color: var(--ui-del); }
/* 번들 줄은 이름 한 줄 + 구성 요약 줄(수정은 「v3: 새 구성」 / 「v2: 앞 구성」 두 줄) */
.ui-diff-label { display: block; }
.ui-diff-detail { display: block; color: var(--ui-soft); font-size: .78rem; }

/* ── 월 선택기 ────────────────────────────────────────────────────────────
 * ‹ 월 ▾ › 를 테두리 하나로 묶고, 가운데를 누르면 연도와 12개월 격자가 선택기 가운데 아래에 열린다.
 * 모양은 청구 관리 .claims-monthpick·심평원 송수신 .tx-month(원장 260929 승인)를 옮겼다. 처음 쓰는 화면은 지도 한의사(261016).
 *   <div class="ui-monthpick">
 *     <button class="ui-monthpick-step" aria-label="이전 달">‹</button>
 *     <button class="ui-monthpick-value" aria-haspopup="dialog" aria-expanded="false"><span>2026년 10월</span><i class="fa-solid fa-chevron-down"></i></button>
 *     <button class="ui-monthpick-step" aria-label="다음 달">›</button>
 *     <div class="ui-monthpick-panel" role="dialog" hidden>
 *       <div class="ui-monthpick-year">‹ <strong>2026년</strong> ›</div>
 *       <div class="ui-monthpick-grid"><button class="ui-monthpick-cell is-selected">10월</button>…</div>
 *     </div>
 *   </div>
 */

.ui-monthpick { position: relative; display: inline-flex; align-items: center; padding: 2px; border: 1px solid var(--ui-border); border-radius: 10px; background: var(--ui-surface); }
.ui-monthpick .ui-monthpick-step.ui-monthpick-step {
    display: inline-grid; place-items: center; width: 32px; height: 36px; padding: 0; border: 0; border-radius: 8px;
    background: none; color: var(--ui-muted); font-size: .82rem; cursor: pointer; transition: background .15s, color .15s;
}
.ui-monthpick .ui-monthpick-step.ui-monthpick-step:hover { background: var(--ui-hover); color: var(--ui-text); }
.ui-monthpick .ui-monthpick-value.ui-monthpick-value {
    display: inline-flex; align-items: center; gap: 8px; padding: 6px 10px; border: 0; border-radius: 8px;
    background: none; color: var(--ui-text); font: inherit; font-size: .93rem; font-weight: 600; cursor: pointer;
    font-variant-numeric: tabular-nums; transition: background .15s;
}
.ui-monthpick .ui-monthpick-value.ui-monthpick-value:hover { background: var(--ui-hover); }
.ui-monthpick .ui-monthpick-value i { font-size: .7rem; color: var(--ui-muted); }
.ui-monthpick .ui-monthpick-panel {
    position: absolute; top: calc(100% + 6px); left: 50%; transform: translateX(-50%); z-index: 40;
    width: 252px; box-sizing: border-box; padding: 12px;
    border: 1px solid var(--ui-border-2); border-radius: 12px; background: var(--ui-surface); box-shadow: 0 10px 28px rgba(0, 0, 0, .18);
}
.ui-monthpick .ui-monthpick-panel[hidden] { display: none; }
.ui-monthpick .ui-monthpick-year { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; }
.ui-monthpick .ui-monthpick-year strong { font-size: .95rem; color: var(--ui-text); }
.ui-monthpick .ui-monthpick-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; }
.ui-monthpick .ui-monthpick-cell.ui-monthpick-cell {
    padding: 9px 0; border: 1px solid transparent; border-radius: 8px; background: var(--ui-surface-2); color: var(--ui-text);
    font: inherit; font-size: .87rem; cursor: pointer; transition: background .15s, border-color .15s;
}
.ui-monthpick .ui-monthpick-cell.ui-monthpick-cell:hover { background: var(--ui-hover); }
.ui-monthpick .ui-monthpick-cell.is-current { border-color: var(--ui-border-2); }
.ui-monthpick .ui-monthpick-cell.is-selected.is-selected { background: var(--color-success-soft); border-color: var(--color-success); color: var(--color-success); font-weight: 700; }

/* ── 월 달력 ──────────────────────────────────────────────────────────────
 * 일~토 7열 격자. 모양은 캘린더·예약 화면 내원 보기(reception-calendar.css .rcal-*)를 ui 토큰으로 옮겼다. 처음 쓰는 화면은 지도 한의사(261016).
 * 머리 .ui-calendar-head 는 왼쪽·가운데(월 선택기)·오른쪽 세 영역. 날짜 셀은 .ui-calendar-day, 앞뒤 빈 셀은 .is-empty,
 * 누르는 셀은 button.ui-calendar-day. 셀 내용은 화면마다 다르다.
 */

.ui-calendar-head { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 8px; margin-bottom: 14px; }
.ui-calendar-head > .ui-calendar-head-end { justify-self: end; display: flex; align-items: center; gap: 8px; }
.ui-calendar { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); border: 1px solid var(--ui-border); border-radius: 12px; background: var(--ui-surface); }
.ui-calendar .ui-calendar-dow {
    padding: .6rem .4rem; text-align: center; font-size: .76rem; font-weight: 700; color: var(--ui-muted);
    background: var(--ui-surface-2); border-right: 1px solid var(--ui-border); border-bottom: 1px solid var(--ui-border);
}
.ui-calendar .ui-calendar-dow:first-child { border-top-left-radius: 11px; color: var(--ui-danger); }
.ui-calendar .ui-calendar-dow:nth-child(7) { border-right: 0; border-top-right-radius: 11px; color: var(--color-primary); }
.ui-calendar .ui-calendar-day {
    position: relative; box-sizing: border-box; min-width: 0; min-height: 86px; padding: 10px 11px 9px;
    display: flex; flex-direction: column; gap: .28rem;
    border: 0; border-right: 1px solid var(--ui-border); border-bottom: 1px solid var(--ui-border); border-radius: 0;
    background: transparent; color: inherit; font: inherit; text-align: left;
}
.ui-calendar .ui-calendar-day:nth-child(7n) { border-right: 0; }
.ui-calendar > .ui-calendar-day:nth-last-child(-n+7) { border-bottom: 0; }
.ui-calendar > .ui-calendar-day:nth-last-child(7) { border-bottom-left-radius: 11px; }
.ui-calendar > .ui-calendar-day:last-child { border-bottom-right-radius: 11px; }
.ui-calendar .ui-calendar-day.is-empty { background: color-mix(in srgb, var(--ui-text) 2%, transparent); }
.ui-calendar .ui-calendar-day.is-today { background: color-mix(in srgb, var(--color-primary) 6%, transparent); }
.ui-calendar button.ui-calendar-day { cursor: pointer; appearance: none; }
.ui-calendar button.ui-calendar-day:hover::after { content: ''; position: absolute; inset: 3px; border: 2px solid var(--ui-border-2); border-radius: 7px; pointer-events: none; }
/* 날짜 숫자 높이를 오늘 원(24px)과 동일하게 두어 오늘 셀만 아래 내용이 밀리지 않는다(내원 보기와 동일) */
.ui-calendar .ui-calendar-num { display: flex; align-items: center; height: 24px; font-size: .84rem; font-weight: 700; line-height: 1; color: var(--ui-text); }
.ui-calendar .ui-calendar-day.is-sunday .ui-calendar-num { color: var(--ui-danger); }
.ui-calendar .ui-calendar-day.is-saturday .ui-calendar-num { color: var(--color-primary); }
/* #fff 는 강조색 위 글자다(내원 보기와 동일한 이유, 토큰에 on-primary 가 없다) */
.ui-calendar .ui-calendar-day.is-today .ui-calendar-num { width: 24px; justify-content: center; border-radius: 50%; background: var(--color-primary); color: #fff; }
@media (max-width: 640px) {
    .ui-calendar .ui-calendar-day { min-height: 58px; padding: 6px; }
}

/* ── 얇은 스크롤 막대 ─────────────────────────────────────────────────────
 * 모달 안 목록 등 좁은 스크롤 상자. 폭 6px(원장 261016 「스크롤은 얇게」). 브라우저 기본 thin 은 11px 이라 쓰지 않는다.
 */

.ui-scroll-thin::-webkit-scrollbar { width: 6px; height: 6px; }
.ui-scroll-thin::-webkit-scrollbar-track { background: transparent; }
.ui-scroll-thin::-webkit-scrollbar-thumb { background: var(--ui-border-2); border-radius: 3px; }
.ui-scroll-thin::-webkit-scrollbar-thumb:hover { background: var(--ui-soft); }
