.ui-modal__backdrop { position: fixed; inset: 0; z-index: var(--z-modal); display: flex; align-items: flex-start; justify-content: center; background-color: var(--color-scrim); /* 공용 확인 창(.ui-confirm)과 같이 뒤를 가림 */ } /* 위에서 고정 거리 — 최대 높이일 때 가운데 자리에 윗변을 붙이고 아래로만 늘고 줆(찾기 칸이 안 움직임). 큰 창은 max-height 대신 --modal-max 를 줌. */ .ui-modal { display: flex; flex-direction: column; gap: var(--spacing-8); width: min(720px, 92vw); max-height: var(--modal-max, 80vh); margin-top: calc((100dvh - var(--modal-max, 80vh)) / 2); padding: var(--spacing-16); border-radius: var(--radius-xl); border: 1px solid var(--color-border); background: var(--color-surface-raised); box-shadow: var(--shadow-lg); font-size: var(--text-body-sm); overflow: auto; } .ui-modal__top { display: flex; align-items: center; justify-content: space-between; gap: var(--spacing-8); } /* 머리 단추 자리(곁값 actions) — 제목이 남는 폭을 먹고 단추는 [닫기] 바로 왼쪽 · 긴 제목 = 한 줄 말줄임(전체 글 = title) · [닫기] · 머리 단추는 안 줄고 안 꺾임 */ .ui-modal__top > h3 { flex: 1 1 auto; min-width: 0; margin-right: auto; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .ui-modal__top > :not(h3) { flex: none; } .ui-modal__top > button, .ui-modal__top > .ui-modal__actions > button { white-space: nowrap; } .ui-modal__actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: var(--spacing-8); } /* 큰 창(곁값 wide) — 화면 거의 꽉 · 몸 넘침만 스크롤. 화면별 클래스보다 앞서게 두 클래스 */ .ui-modal.ui-modal--wide { width: 96vw; height: 94vh; --modal-max: 94vh; overflow: hidden; } .ui-modal--wide > .ui-modal__body { flex: 1; min-height: 0; overflow: auto; } .ui-modal__body { display: flex; flex-direction: column; gap: var(--spacing-8); } /* 모달 · 확인창(552-3) — 폭 단 · 확인창 제목 · 글 묻기 칸 */ .ui-modal[data-width="24rem"] { width: min(24rem, 92vw); } .ui-modal[data-width="40rem"] { width: min(40rem, 92vw); } .ui-modal[data-width="960px"] { width: min(960px, 92vw); } /* 넓은 중간 창(557-2) — wide 꼴 + 1100 × 680 · 몸 안 칸이 따로 스크롤 */ .ui-modal.ui-modal--wide[data-width="1100px"] { --modal-max: min(680px, 86vh); width: min(1100px, 94vw); height: var(--modal-max); } .ui-confirm__title { margin: 0 0 var(--spacing-8); font-size: var(--text-body); font-weight: 700; color: var(--color-text); } .ui-confirm__input { box-sizing: border-box; width: 100%; margin-bottom: var(--spacing-16); } /* 숨김 — display 가 [hidden] 을 덮지 않게(공용 기본 꼴이 안 실린 곳 · 페이지 꾸밈 위에서도) */ :is(.ui-modal, .ui-modal__actions, .ui-modal__backdrop, .ui-modal__body, .ui-modal__top)[hidden] { display: none !important; }