- M01 단가산출 기초 · M02 단가산출 상세 보기 = 수식(줄 쌓기 · 기본) · 단가산출 상세 둘 - 줄 쌓기에 M02 사본 [단가 갱신] · [재생성](미리 셈 → 알림 → 저장 · 고침 있으면 막음) · 판 바뀜(409) 문서 그대로면 새 판으로 다시 저장 옮김 - 옛 수식 문서 화면 걷음(formula_doc_screen · defs · edit · lines · math · math_model · rows · sub · formula_doc.css) · 이미 안 부르던 796-2 수식 나무 화면(LogicLab_Equation · Defs · Var · css · M01_Logic_Equation_Model · sheet_formula_cell · ui_template_equation_defs · edit) 걷음 — 18 파일 4,860 줄 - formula_doc_render = 줄 쌓기가 쓰는 reach 만 · 옵션 가로 CSS 는 line_stack.css 로 - 남김 = 계산기 common_util_formula_doc* · 서버 길 · 옵션 · 사본 표지 · 합계 상자 · KaTeX · 시험 페이지 tools/line-stack-test - 시험: test_796_2 지움(걷은 화면 원본 검사뿐) · 799_1 · 800_2 걷은 화면 줄만 뺌 · 799_2 · 802_4b2 · 804_2 보기 · 화면 파일 대상 바꿈 · test_804_6 새로(걷은 파일 · 부르는 곳 없음 · 첫 탭 · 사본 할일) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
315 lines
6.1 KiB
CSS
315 lines
6.1 KiB
CSS
/* 줄 쌓기 탭(804-2) — 위 옵션 · 가운데 왼쪽 편집 | 오른쪽 산출근거 · 맨 아래 합계 상자 · 색은 공통 값만 */
|
|
.lstk {
|
|
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;
|
|
}
|
|
|
|
/* 산출근거(요구 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));
|
|
}
|
|
|
|
.lstk-ihead {
|
|
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-no {
|
|
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-row,
|
|
.lstk-fhead,
|
|
.lstk-frow,
|
|
.lstk-find,
|
|
.lstk-ltools {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
align-items: flex-end;
|
|
gap: var(--spacing-4) var(--spacing-8);
|
|
min-width: 0;
|
|
}
|
|
|
|
.lstk-frow {
|
|
align-items: center;
|
|
}
|
|
|
|
.lstk-line {
|
|
position: relative;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: var(--spacing-4);
|
|
padding: var(--spacing-8);
|
|
padding-inline: var(--spacing-24) var(--spacing-32);
|
|
border: 1px solid var(--color-border);
|
|
border-radius: var(--radius-sm);
|
|
background: var(--color-surface-raised);
|
|
}
|
|
|
|
/* 글 · 근거 칸 = 한 줄 높이(세로 묶음에서 늘지 않게) */
|
|
.lstk-line > .lstk-f-l {
|
|
flex: none;
|
|
}
|
|
|
|
.lstk-ltools {
|
|
position: absolute;
|
|
inset-block-start: var(--spacing-4);
|
|
inset-inline-end: var(--spacing-4);
|
|
gap: 0;
|
|
}
|
|
|
|
/* 끌기(804-5) — 손잡이 · 끄는 것 반투명 · 놓을 자리 = 위 · 아래 선 · 빈 항목 = 점선 */
|
|
.lstk-grip {
|
|
touch-action: none;
|
|
}
|
|
|
|
.lstk-line > .lstk-grip {
|
|
position: absolute;
|
|
inset-block-start: var(--spacing-12);
|
|
inset-inline-start: var(--spacing-8);
|
|
}
|
|
|
|
.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 {
|
|
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);
|
|
}
|
|
|
|
.lstk-out tr.subhead .lstk-h {
|
|
color: var(--color-accent);
|
|
}
|
|
|
|
.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;
|
|
}
|