- 줄 누름 = 그 줄 아래 하위 행(같은 표 · 같은 칸 · 이름 앞 ▸/▾ · 한 줄만 · 다시 누름 = 닫힘) - 단가산출 · 승격 = 그 로직 재료 · 노무 · 경비 줄 · 사전조합 = 안 줄 · 금액 칸 = 기준 / 반영 두 줄 꼴 - 서버 승격 줄 = 1 단위로 나눔(하위 합 = 위 줄 기준) - 50-4 M01 시험계산 상자 · 안 쓰는 글 걷어냄 - 시험: 승격 줄 합 = 기준 · ui_checks 51-2 시나리오 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MgChuAcyBqUkhHMTXomQC7
405 lines
9.1 KiB
CSS
405 lines
9.1 KiB
CSS
/* 일위대가 화면 — 표는 칸 폭을 채움 ·
|
|
흐린 안내 글은 보조 글색(뮤트 글색은 밝은 테마에서 대비 3.1 로 모자람) */
|
|
.m01-combo .m01-master__grid {
|
|
width: 100%;
|
|
}
|
|
|
|
.m01-combo .m01-logic__muted {
|
|
color: var(--color-text-secondary);
|
|
}
|
|
|
|
/* 일위대가 상세(39-3) — 담은 로직 · 자재목록 표 · 금액 칸 두 줄(위 기준 작게 · 아래 반영) */
|
|
.m02-labrow {
|
|
width: 100%;
|
|
}
|
|
|
|
.m02-labrow__row.is-open {
|
|
cursor: pointer;
|
|
}
|
|
|
|
.m02-labrow__row.is-open:hover {
|
|
background: var(--color-mist-violet);
|
|
}
|
|
|
|
/* 이름 칸(45-7) — 칸은 표 칸 그대로(flex 면 칸 선이 끊김) · 코드 · 이름 · 설명은 글마다 한 줄 말줄임(전체 = title) */
|
|
.m02-labrow__name {
|
|
min-width: 12rem;
|
|
}
|
|
|
|
.m02-labrow__name > * {
|
|
display: block;
|
|
max-width: 20rem;
|
|
overflow: hidden;
|
|
white-space: nowrap;
|
|
text-overflow: ellipsis;
|
|
}
|
|
|
|
.m02-labrow th,
|
|
.m02-labrow__code,
|
|
.m02-labrow__spec {
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.m02-labrow__key,
|
|
.m02-labrow__note,
|
|
.m02-labrow__muted {
|
|
color: var(--color-text-secondary);
|
|
font-size: var(--text-caption);
|
|
overflow-wrap: anywhere;
|
|
}
|
|
|
|
.m02-labrow__empty {
|
|
color: var(--color-danger);
|
|
font-size: var(--text-caption);
|
|
}
|
|
|
|
.m02-labrow__money,
|
|
.m02-labrow__num {
|
|
text-align: right;
|
|
white-space: nowrap;
|
|
font-variant-numeric: tabular-nums;
|
|
}
|
|
|
|
.m02-labrow__money {
|
|
vertical-align: top;
|
|
}
|
|
|
|
.m02-labrow__base {
|
|
display: block;
|
|
color: var(--color-text-secondary);
|
|
font-size: var(--text-caption);
|
|
}
|
|
|
|
/* 자재 가격 다섯 — 기준단가가 된 칸(43-3) */
|
|
.m02-labrow__price.is-base-price {
|
|
color: var(--color-accent);
|
|
font-weight: 700;
|
|
box-shadow: inset 0 -2px 0 var(--color-accent);
|
|
}
|
|
|
|
.m02-labrow__applied {
|
|
display: block;
|
|
}
|
|
|
|
.m02-labrow__sum td {
|
|
font-weight: 600;
|
|
border-top: 2px solid var(--color-border);
|
|
}
|
|
|
|
.m02-labrow__move {
|
|
white-space: nowrap;
|
|
}
|
|
|
|
/* 옵션 값 줄(44-6) — 이름 ~ 합계에 걸친 한 줄 말줄임(max-width 0 = 표 폭을 안 늘림) · 위 줄과 한 덩이 */
|
|
.m02-labrow .m02-labrow__optrow td {
|
|
padding-top: 0;
|
|
padding-bottom: var(--spacing-4);
|
|
font-size: var(--text-caption);
|
|
line-height: 1.5;
|
|
}
|
|
|
|
.m02-labrow__opt {
|
|
max-width: 0;
|
|
overflow: hidden;
|
|
color: var(--color-text-secondary);
|
|
white-space: nowrap;
|
|
text-overflow: ellipsis;
|
|
}
|
|
|
|
.m02-labrow__row:has(+ .m02-labrow__optrow) td {
|
|
border-bottom: 0;
|
|
}
|
|
|
|
.m02-labrow__optrow.is-open {
|
|
cursor: pointer;
|
|
}
|
|
|
|
.m02-labrow__optrow.is-open:hover,
|
|
.m02-labrow__row.is-open:hover + .m02-labrow__optrow {
|
|
background: var(--color-mist-violet);
|
|
}
|
|
|
|
/* 고른 줄(47-5) — 옵션 값 줄까지 한 덩이 · 왼쪽 띠 */
|
|
.m02-labrow .m02-labrow__row.is-selected,
|
|
.m02-labrow .m02-labrow__optrow.is-selected {
|
|
background: var(--color-mist-violet);
|
|
}
|
|
|
|
.m02-labrow__row.is-selected > td:first-child,
|
|
.m02-labrow__optrow.is-selected > td:first-child {
|
|
box-shadow: inset 3px 0 0 var(--color-primary);
|
|
}
|
|
|
|
/* 구분 칸(50-4) — 넉 자 · 흐린 글 */
|
|
.m02-labrow__kind {
|
|
white-space: nowrap;
|
|
color: var(--color-text-secondary);
|
|
}
|
|
|
|
/* 줄 접고 폄 표(51-2) · 고른 줄 하위 행 — 이름 들여쓰기 · 흐린 바탕 */
|
|
.m02-labrow__fold {
|
|
margin-right: var(--spacing-4);
|
|
color: var(--color-text-secondary);
|
|
}
|
|
|
|
.m02-labrow__sub td {
|
|
background: var(--color-bg);
|
|
font-size: var(--text-caption);
|
|
}
|
|
|
|
.m02-labrow__sub .m02-labrow__subname {
|
|
padding-left: var(--spacing-24);
|
|
color: var(--color-text-secondary);
|
|
}
|
|
|
|
/* 별칭 칸(44-6) — 칸 안 글상자 · 누르면 바로 고침 */
|
|
.m02-labrow__alias {
|
|
min-width: 7rem;
|
|
}
|
|
|
|
.m02-labrow__aliasin {
|
|
width: 100%;
|
|
min-width: 6rem;
|
|
padding: 2px var(--spacing-4);
|
|
border: 1px dashed var(--color-border);
|
|
border-radius: var(--radius-sm, 4px);
|
|
background: transparent;
|
|
color: inherit;
|
|
font: inherit;
|
|
}
|
|
|
|
.m02-labrow__aliasin:hover,
|
|
.m02-labrow__aliasin:focus {
|
|
border-color: var(--color-primary);
|
|
border-style: solid;
|
|
}
|
|
|
|
/* 총합계 줄 전체 합계 칸(44-6) — 테두리 · 색 · 테두리는 안쪽 그림자(칸 선 굵기 안 바꿈 · 45-7) */
|
|
.m02-labrow__sum .m02-labrow__total {
|
|
box-shadow: inset 0 0 0 2px var(--color-primary);
|
|
background: var(--color-mist-violet);
|
|
color: var(--color-primary);
|
|
}
|
|
|
|
/* 입력 모달 */
|
|
.m02-labin {
|
|
width: min(40rem, calc(100vw - 32px));
|
|
}
|
|
|
|
.m02-labin__qty {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: var(--spacing-4);
|
|
padding-top: var(--spacing-8);
|
|
border-top: 1px solid var(--color-border);
|
|
}
|
|
|
|
.m02-labin__qty-line {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
align-items: center;
|
|
gap: var(--spacing-8);
|
|
font-size: var(--text-body-sm);
|
|
}
|
|
|
|
.m02-labin__muted {
|
|
color: var(--color-text-secondary);
|
|
font-size: var(--text-caption);
|
|
}
|
|
|
|
.m02-labin__lost {
|
|
margin: 0;
|
|
color: var(--color-danger);
|
|
font-size: var(--text-caption);
|
|
}
|
|
|
|
.m02-labin__foot {
|
|
display: flex;
|
|
justify-content: flex-end;
|
|
gap: var(--spacing-8);
|
|
margin-top: var(--spacing-12);
|
|
}
|
|
|
|
/* 보기 갈래(면적산출 오른쪽 패널 · 일위대가 카드) */
|
|
.m02-labview {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: var(--spacing-8);
|
|
min-width: 0;
|
|
}
|
|
|
|
.m02-labview__title {
|
|
margin: 0;
|
|
font-size: var(--text-body-sm);
|
|
}
|
|
|
|
/* 보기 갈래가 좁으면(면적산출 오른쪽 패널 등) 표를 줄마다 카드로 — 가로 스크롤 없이.
|
|
줄 = 이름 한 줄(차례 · 단위 곁) → 금액 넷 한 줄(칸 이름은 `data-label` · 합계만 굵게) ·
|
|
자재 = 코드 · 이름 · 규격 한 줄 → 단위 · 수량 · 기준 단가 · 반영 금액 한 줄. 넓은 상세는 그대로 */
|
|
.m02-labview {
|
|
container: m02-labview / inline-size;
|
|
}
|
|
|
|
@container m02-labview (max-width: 640px) {
|
|
.m02-labrow,
|
|
.m02-labrow tbody,
|
|
.m02-labrow tfoot {
|
|
display: block;
|
|
width: 100%;
|
|
}
|
|
|
|
.m02-labrow thead {
|
|
display: none;
|
|
}
|
|
|
|
.m02-labrow tr {
|
|
display: grid;
|
|
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
gap: 2px var(--spacing-8);
|
|
padding: var(--spacing-8) 0;
|
|
border-bottom: 1px solid var(--color-border);
|
|
}
|
|
|
|
.m02-labrow td {
|
|
display: block;
|
|
min-width: 0;
|
|
padding: 0;
|
|
border: 0;
|
|
overflow-wrap: anywhere;
|
|
}
|
|
|
|
/* 이름 줄 — 차례 · 이름 · 결과 단위(자재 = 코드 · 이름 · 규격) */
|
|
.m02-labrow .m02-labrow__name {
|
|
display: flex;
|
|
flex-direction: column;
|
|
grid-column: 1 / -1;
|
|
order: 1;
|
|
min-width: 0;
|
|
}
|
|
|
|
.m02-labrow .m02-labrow__name > * {
|
|
max-width: none;
|
|
}
|
|
|
|
.m02-labrow .m02-labrow__kind {
|
|
grid-column: 1 / -1;
|
|
order: 1;
|
|
font-size: var(--text-caption);
|
|
}
|
|
|
|
.m02-labrow .m02-labrow__no,
|
|
.m02-labrow .m02-labrow__unit:not([data-label]),
|
|
.m02-labrow .m02-labrow__code,
|
|
.m02-labrow .m02-labrow__spec {
|
|
grid-column: span 2;
|
|
color: var(--color-text-secondary);
|
|
font-size: var(--text-caption);
|
|
}
|
|
|
|
.m02-labrow .m02-labrow__unit:not([data-label]),
|
|
.m02-labrow .m02-labrow__spec {
|
|
text-align: right;
|
|
}
|
|
|
|
/* 수량산출 칸 — 윗줄에(차례 · 단위와 한 줄) · 칸 이름 없이 */
|
|
.m02-labrow:not(.m02-labline) tr:has(.m02-labrow__qty) .m02-labrow__no,
|
|
.m02-labrow tr:has(.m02-labrow__qty) .m02-labrow__unit:not([data-label]) {
|
|
grid-column: span 1;
|
|
}
|
|
|
|
.m02-labrow .m02-labrow__qty {
|
|
order: 0;
|
|
grid-column: span 2;
|
|
text-align: left;
|
|
}
|
|
|
|
.m02-labrow .m02-labrow__qty::before {
|
|
content: none;
|
|
}
|
|
|
|
.m02-labrow__sum .m02-labrow__qty,
|
|
.m02-labrow__sum .m02-labrow__no,
|
|
.m02-labrow__sum .m02-labrow__unit {
|
|
display: none;
|
|
}
|
|
|
|
/* 금액 · 수 칸 — 칸 이름을 위에 작게 */
|
|
.m02-labrow [data-label] {
|
|
order: 2;
|
|
text-align: right;
|
|
white-space: normal;
|
|
font-size: var(--text-caption);
|
|
}
|
|
|
|
.m02-labrow [data-label]::before {
|
|
content: attr(data-label);
|
|
display: block;
|
|
color: var(--color-text-secondary);
|
|
font-size: var(--text-caption);
|
|
}
|
|
|
|
.m02-labrow .m02-labrow__money:last-of-type .m02-labrow__applied {
|
|
font-weight: 700;
|
|
}
|
|
|
|
.m02-labrow__move {
|
|
grid-column: 1 / -1;
|
|
order: 3;
|
|
text-align: right;
|
|
}
|
|
|
|
/* 옵션 값 줄 — 한 줄 통째 */
|
|
.m02-labrow__optrow .m02-labrow__no,
|
|
.m02-labrow__sum .m02-labrow__kind,
|
|
.m02-labrow__sum .m02-labrow__alias {
|
|
display: none;
|
|
}
|
|
|
|
.m02-labrow .m02-labrow__opt {
|
|
grid-column: 1 / -1;
|
|
max-width: none;
|
|
}
|
|
}
|
|
|
|
/* 수량산출 칸(40-1) — 위 결과단위 기준 수량 · 아래 지금 수량 · 누르면 손 입력 · 엑셀에서 고르기 */
|
|
.m02-labrow__qty {
|
|
white-space: nowrap;
|
|
vertical-align: top;
|
|
}
|
|
|
|
.m02-labrow__qtybtn {
|
|
display: block;
|
|
width: 100%;
|
|
padding: 2px var(--spacing-4);
|
|
border: 1px dashed var(--color-border);
|
|
border-radius: var(--radius-sm, 4px);
|
|
background: transparent;
|
|
color: inherit;
|
|
font: inherit;
|
|
text-align: left;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.m02-labrow__qtybtn:hover {
|
|
border-color: var(--color-primary);
|
|
background: var(--color-mist-violet);
|
|
}
|
|
|
|
/* 수량산출 모달(43-1) — 위 지금 수량 · 손 입력 · [연결 풀기] / 아래 면적산출 시트(읽기만) */
|
|
.m02-labqty {
|
|
width: min(960px, 94vw);
|
|
}
|
|
|
|
.m02-labqty__head {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
align-items: center;
|
|
gap: var(--spacing-8) var(--spacing-12);
|
|
margin-bottom: var(--spacing-4);
|
|
}
|
|
|
|
.m02-labqty__now {
|
|
font-weight: 600;
|
|
font-variant-numeric: tabular-nums;
|
|
}
|