/* 줄 쌓기 탭(804-2) — 위 옵션 · 가운데 왼쪽 편집 | 오른쪽 산출근거 · 맨 아래 합계 상자 · 색은 공통 값만 * 글꼴 = 화면이 정함(M01 · M02 · 일위대가 모달 같음 · 요구 701-2 · 부모 상속 안 받음) */ .lstk { font-size: var(--text-body-sm); display: flex; flex-direction: column; gap: var(--spacing-12); min-width: 0; container-type: inline-size; } .lstk__head { display: flex; flex-direction: column; gap: var(--spacing-8); } .lstk__bar, .lstk__badges, .lstk__tools { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--spacing-8); } .lstk__areas { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 6fr); gap: var(--spacing-12); align-items: start; } .lstk:not([data-edit="1"]) .lstk__areas { grid-template-columns: minmax(0, 1fr); } .lstk:not([data-edit="1"]) .lstk__left { display: none; } /* 합계 상자(요구 687-3) — 스크롤해도 화면 아래 고정 */ .lstk__foot { position: sticky; inset-block-end: 0; z-index: 2; padding-block: var(--spacing-8); background: var(--color-surface); border-block-start: 1px solid var(--color-border); } .lstk__foot:empty { display: none; } /* 산출근거(요구 683) — 왼쪽을 내려도 화면에 고정 · 길면 자기 스크롤(높이 = 스크롤 영역 − 합계 상자 · fit()) */ .lstk[data-edit="1"] .lstk__right { position: sticky; inset-block-start: 0; max-height: var(--lstk-view, 100vh); overflow: auto; } /* 탭 폭이 좁으면(1366 화면 등) 편집 위 · 산출근거 아래(고정 없음) */ @container (max-width: 1040px) { .lstk__areas { grid-template-columns: minmax(0, 1fr); } .lstk[data-edit="1"] .lstk__right { position: static; max-height: none; overflow: visible; } } /* ── 왼쪽 편집 ── */ .lstk-edit { display: flex; flex-direction: column; gap: var(--spacing-16); } /* 항목(804-5) — 머리 띠(바탕 · 왼쪽 굵은 띠 · 번호) · 줄 = 들여쓰기 + 왼쪽 세로 선 · 가나다 = 한 단 더 들여씀 */ .lstk-item { display: flex; flex-direction: column; gap: var(--spacing-8); } .lstk-item.is-sub { margin-inline-start: var(--spacing-24); } .lstk-item + .lstk-item.is-sub { margin-block-start: calc(-1 * var(--spacing-8)); } /* 그룹 머리 한 줄(요구 687-6 · 688) — 이름 칸이 늘고 줄어 [+] · X 는 늘 오른쪽 끝(접어도 그대로) */ .lstk-ihead { flex-wrap: nowrap; align-items: center; padding: var(--spacing-4) var(--spacing-8); border-inline-start: 4px solid var(--color-accent); border-radius: var(--radius-sm); background: var(--color-surface-sunken); } .lstk-item.is-sub > .lstk-ihead { border-inline-start-color: var(--color-border-strong); } .lstk-ihead > .lstk-f-l { flex: 1 1 auto; min-width: 4em; } .lstk-count { flex: none; white-space: nowrap; } .lstk-no { flex: none; min-width: 1.5em; font-weight: var(--font-weight-bold); color: var(--color-text); } .lstk-lines { display: flex; flex-direction: column; gap: var(--spacing-4); margin-inline-start: var(--spacing-12); padding-inline-start: var(--spacing-12); border-inline-start: 2px solid var(--color-border-strong); } .lstk-ihead, .lstk-fhead, .lstk-frow, .lstk-find { display: flex; flex-wrap: wrap; align-items: center; gap: var(--spacing-4) var(--spacing-8); min-width: 0; } .lstk-frow { align-items: center; } /* 줄 카드 — 금액 · 글 = 한 줄(요구 687-7 · [손잡이][종류][이름][수량][단위][비목][X] · 좁으면 접힘) · 공식 = 머리 줄 + 식 줄 */ .lstk-line { display: flex; flex-wrap: wrap; align-items: center; gap: var(--spacing-4) var(--spacing-8); padding: var(--spacing-4) var(--spacing-8); border: 1px solid var(--color-border); border-radius: var(--radius-sm); background: var(--color-surface-raised); } /* 공식 묶음 = 폭만큼 여러 열(요구 692-3 · 자동 채움) · 머리 · 식 글 줄 · 고치는 줄 = 열 합침 · 긴 이름 = 줄임표 */ .lstk-line.k-공식 { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 19rem), 1fr)); align-items: center; column-gap: var(--spacing-16); position: relative; padding-inline-start: var(--spacing-24); } .lstk-line.k-공식 > .lstk-fhead, .lstk-line.k-공식 > .lstk-frow:is(.is-open, :has(> .lstk-expr)) { grid-column: 1 / -1; } .lstk-line.k-공식 > .lstk-frow:not(.is-open, :has(> .lstk-expr)) { flex-wrap: nowrap; } .lstk-line.k-공식 > .lstk-frow:not(.is-open) > .lstk-f-m { width: 6em; } .lstk-frow > .lstk-sym { flex: none; max-width: 50%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .lstk-frow > .lstk-f-m, .lstk-frow > .lstk-unit, .lstk-rtools { flex: none; } .lstk-rtools { display: inline-flex; gap: var(--spacing-4); } .lstk-frow > .lstk-tag { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .lstk-line > .lstk-x, .lstk-fhead > .lstk-x { margin-inline-start: auto; } .lstk-line > .lstk-f-l, .lstk-line > .lstk-qty { flex: 1 1 8em; min-width: 6em; } .lstk-line > .lstk-f-m { flex: 1 1 7em; min-width: 6em; width: auto; } .lstk-line .lstk-kind { flex: none; min-width: 2.5em; } .lstk-wide { flex-basis: 100%; } /* 수량 = 식 글 칸 + 출처 꼬리표(요구 701-1) — 꼬리표는 줄어 줄임표 */ .lstk-qty { display: flex; align-items: center; gap: var(--spacing-4); } .lstk-qty > :first-child { flex: 1 1 6em; min-width: 4em; } .lstk-qty > .lstk-tag, .lstk-qty > .ui-btn { flex: 0 1 auto; min-width: 0; max-width: 60%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .lstk-upick { flex: none; } /* 보이는 글을 눌러 고침(요구 687-14) */ .lstk-tap { cursor: text; border-radius: var(--radius-sm); } .lstk-tap:hover, .lstk-tap:focus-visible { background: var(--color-surface-sunken); text-decoration: underline dotted; } /* 끌기(804-5) — 손잡이 · 끄는 것 반투명 · 놓을 자리 = 위 · 아래 선 · 빈 항목 = 점선 */ .lstk-grip { touch-action: none; } .lstk-line > .lstk-grip { flex: none; } .lstk-line.k-공식 > .lstk-grip { position: absolute; inset-block-start: var(--spacing-8); inset-inline-start: var(--spacing-4); } .lstk-edit[data-dragging] { cursor: grabbing; user-select: none; } .is-dragging { opacity: 0.45; } .lstk-line[data-drop="before"], .lstk-item[data-drop="before"] { box-shadow: 0 -3px 0 0 var(--color-accent); } .lstk-line[data-drop="after"], .lstk-item[data-drop="after"] { box-shadow: 0 3px 0 0 var(--color-accent); } .lstk-item[data-drop="in"] .lstk-empty { outline: 2px dashed var(--color-accent); outline-offset: 2px; } .lstk-res { flex: 0 1 auto; min-width: 0; max-width: 100%; } .lstk-kind { font-size: var(--text-caption); font-weight: var(--font-weight-medium); color: var(--color-text-secondary); } .lstk-fhead[data-tpl="changed"] .lstk-kind { color: var(--color-accent); } .lstk-f-s { width: 6em; } .lstk-f-m { width: 9em; } .lstk-f-l { flex: 1 1 12em; min-width: 10em; } .lstk-sym { font-weight: var(--font-weight-medium); } .lstk-val, .lstk-unit, .lstk-tag, .lstk-hint { font-size: var(--text-body-sm); color: var(--color-text-secondary); } .lstk-tag { padding: 0 var(--spacing-4); border: 1px solid var(--color-border); border-radius: var(--radius-sm); } .lstk-empty { font-size: var(--text-body-sm); color: var(--color-text-muted); } .lstk-miss, .lstk-tex .lstk-miss { color: var(--color-danger); } /* ── 오른쪽 산출근거 ── */ .lstk-out .lstk-h { display: flex; flex-wrap: wrap; align-items: center; gap: 0 var(--spacing-4); padding-inline-start: calc(var(--lstk-depth, 0) * var(--spacing-16)); white-space: normal; } .lstk-out tr.head, .lstk-out tr.item, .lstk-out tr.total { font-weight: var(--font-weight-medium); } .lstk-out tr.subsum, .lstk-out tr.total { background: var(--color-surface-sunken); } .lstk-out tr.is-sub .lstk-h { color: var(--color-text-secondary); } /* 펼친 문서 제목 = 보통 글(링크 꼴 없음 · 요구 687-11) */ .lstk-out tr.subhead .lstk-h { font-weight: var(--font-weight-medium); color: var(--color-text); } .lstk-ftitle { cursor: pointer; } .lstk-gap { display: inline-block; width: var(--spacing-24); } .lstk-pack { display: inline-flex; align-items: center; gap: var(--spacing-4); } .lstk-tex .katex { font-size: 1.05em; } /* 짝 강조(679 · 684) — 왼쪽 카드 · 그룹 머리 · 오른쪽 줄 = 같은 바탕 채우기 */ .lstk-line.is-pair, .lstk-item.is-pair > .lstk-ihead, .lstk-out tr.is-pair > td { background: var(--color-accent-soft); } .lstk-out tr[data-loc] { cursor: pointer; } .lstk-tpick { display: flex; flex-direction: column; gap: var(--spacing-8); } /* 옵션 가로(옛 수식 문서 CSS 에서 옮김 · 804-6) */ .fdoc__options { display: flex; flex-wrap: wrap; gap: var(--spacing-8) var(--spacing-12); align-items: flex-end; } .fdoc__options > * { width: auto; min-width: 8em; } /* 가져온 식 값 · 추정 칸(810-3) — 칸 + 꼬리표 */ .lstk-src { display: flex; align-items: flex-end; gap: var(--spacing-4); } .lstk-src > .ui-field { width: 7em; } .lstk-src > [data-guess] { width: auto; min-width: 18em; } .lstk-src > [data-guess] input { min-width: 18em; } .lstk-src > .ui-badge { margin-bottom: var(--spacing-4); }