.ui-general-layout { min-height: calc(100vh - var(--spacing-64)); padding: var(--spacing-40) var(--spacing-24) var(--spacing-48); background: var(--color-bg); } .ui-general-layout__inner { width: 100%; max-width: var(--page-max-width); margin: 0 auto; } .ui-general-layout__header { display: flex; flex-direction: column; gap: var(--spacing-8); margin-bottom: var(--spacing-24); } .ui-general-layout__title { color: var(--color-text); font-family: var(--font-display); font-size: var(--text-heading-sm); } .ui-general-layout__subtitle { color: var(--color-text-muted); font-size: var(--text-body-sm); } .ui-general-layout__content { display: flex; flex-direction: column; gap: var(--spacing-24); } .ui-general-block__section-header { display: flex; align-items: center; justify-content: space-between; gap: var(--spacing-16); margin-bottom: var(--spacing-16); } .ui-general-block__actions { display: flex; align-items: center; gap: var(--spacing-8); } .ui-general-block__table-wrap { overflow-x: auto; } /* 목록이 길어져도 컨테이너는 정해진 행 수만큼만 차지한다 — 나머지는 안쪽 스크롤. max-height는 limitVisibleRows()가 실제 행 높이를 재서 넣는다(CSS에 상수를 박지 않는다). */ .ui-general-block__scroll-limit { overflow-y: auto; } /* 스크롤 중에도 어느 열인지 알아야 하므로 머리행을 위에 붙인다. */ .ui-general-block__table-wrap--sticky-head .ui-general-block__table thead th { position: sticky; top: 0; z-index: 1; /* 아래 행이 비쳐 보이지 않게 불투명 배경이 필요하다. */ background: var(--color-surface); } .ui-general-block__table { width: 100%; border-collapse: collapse; } .ui-general-block__table th, .ui-general-block__table td { padding: var(--spacing-12, var(--spacing-8)) var(--spacing-16); border-bottom: 1px solid var(--color-border); text-align: left; } .ui-general-block__empty { color: var(--color-text-muted); font-size: var(--text-body-sm); } @media (max-width: 720px) { .ui-general-layout { padding: var(--spacing-24) var(--spacing-16) var(--spacing-40); } }