Files
Aislo/ui_template/ui_template_data_table.css
T
eomsangdonandClaude Opus 5.5 e1d83398d4 feat(B09): 원가 바탕 단가 — 뼈대 · 노무 · 경비 · 환율 · 자재 대비 · 중기 탭(144-1~4)
- 탭 = 기번3 공통 엑셀 보이는 탭 차례(목차 · 안내 = 연결 점검) · 탭 하나 = 공용 표 하나 · 호표 칸 누름 = 그 탭 그 줄로 이동
- 저장 = 프로젝트 B09_Estimation/v1(사용자 값 · 굳힌 단가 한 벌) · 결과는 GET 때 서버 셈 · [저장] · [단가 갱신] 길
- 줄 = 수요 따라(연결된 사본 원천 자리 · 기계 → 운전사 · 연료 · B08 총괄 자재) · 연결 없으면 빈칸 + 연결 점검 목록
- 셈 = 파이썬 · TS 짝 + 거울(운전사 시간 노임 · 자재 최저 자동 + 사용자 고침 · 관급 · 별도 · 중기 손료 + 운전사 + 연료 + 잡품 · 엑셀 끝수)
- 공용 표 = 칸 누름 · 줄로 이동(강조) 더함
- 시험 = test_144_b09_skeleton · test_144_b09_base_calc(엑셀 중기 126,000 · 76,436 · 96,829 · 40,659 · 운전사 55,700 · 47,231 · 33,571)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015KYZ2HWWdUwZWYnn3tQz7X
2026-10-09 15:01:27 +09:00

168 lines
4.2 KiB
CSS

/* =============================================================================
* ui_template_data_table.css — 많은 자료용 읽기 표(`ui_template_data_table.ts`)
* 색은 테마 토큰만 · 칸 배경은 불투명(고정 칸 아래로 비치지 않게)
* ========================================================================== */
.ui-data-table {
--dt-row-h: 24px;
--dt-zebra: var(--color-surface);
--dt-hover: color-mix(in srgb, var(--color-accent) 14%, var(--color-canvas));
--dt-head: color-mix(in srgb, var(--color-accent) 6%, var(--color-surface));
--dt-line: var(--color-border);
--dt-edge: color-mix(in srgb, var(--color-text-secondary) 45%, var(--color-border));
width: fit-content; /* 표가 좁으면 틀도 표만큼 */
max-width: 100%;
max-height: calc(100vh - 260px);
overflow: auto;
border: 1px solid var(--dt-line);
border-radius: var(--radius-lg);
background: var(--color-canvas);
outline: none;
overflow-anchor: none; /* 줄을 갈아 그릴 때 브라우저가 스크롤을 옮기지 않게 */
}
.ui-data-table:focus-visible {
box-shadow: 0 0 0 2px var(--color-focus-ring);
}
.ui-data-table__table {
table-layout: fixed;
border-collapse: separate;
border-spacing: 0;
color: var(--color-text-body);
font-size: var(--text-caption);
line-height: 1.3;
}
.ui-data-table__table caption {
position: absolute;
width: 1px;
height: 1px;
overflow: hidden;
clip-path: inset(50%);
}
.ui-data-table__table th,
.ui-data-table__table td {
height: var(--dt-row-h);
padding: 0 var(--spacing-8);
overflow: hidden;
border-right: 1px solid var(--dt-line);
border-bottom: 1px solid var(--dt-line);
background: var(--color-canvas);
text-overflow: ellipsis;
white-space: nowrap;
}
/* 숫자 — 오른쪽 맞춤 · 자리 폭 같게 */
.ui-data-table__table [data-num] {
text-align: right;
font-variant-numeric: tabular-nums;
}
.ui-data-table__table td.is-empty {
color: var(--color-text-secondary); /* muted 는 작은 글에 대비 3:1 — 모자람 */
text-align: center;
}
/* 머리 — 스크롤해도 위에 붙음 */
.ui-data-table__table thead {
position: sticky;
top: 0;
z-index: 2;
}
.ui-data-table__table thead th {
background: var(--dt-head);
color: var(--color-text);
font-weight: var(--font-weight-medium);
text-align: center;
}
/* 머리 칸 상태 — 원본에 없는 항목 */
.ui-data-table__table thead th.is-missing {
color: var(--color-danger);
}
.ui-data-table__table thead tr:last-child th,
.ui-data-table__table thead th[rowspan] {
border-bottom-color: var(--dt-edge);
}
/* 줄 번갈아 색 · 올린 줄 강조 */
.ui-data-table__table tbody tr.is-alt td {
background: var(--dt-zebra);
}
.ui-data-table__table tbody tr:hover td {
background: var(--dt-hover);
}
/* 안 그린 줄 자리 */
.ui-data-table__table tbody tr.ui-data-table__pad td {
height: auto;
padding: 0;
border: 0;
background: none;
}
/* 앞 고정 열 — left 는 칸마다 글에 들어 있음 */
.ui-data-table__table .is-frozen {
position: sticky;
z-index: 1;
}
.ui-data-table__table thead .is-frozen {
z-index: 3;
}
.ui-data-table__table .is-edge {
border-right-color: var(--dt-edge);
}
/* 합계 줄 — 맨 아래 붙음 · 굵게 */
.ui-data-table__table tfoot {
position: sticky;
bottom: 0;
z-index: 2;
}
.ui-data-table__table tfoot td {
border-top: 1px solid var(--dt-edge);
background: var(--dt-head);
color: var(--color-text);
font-weight: var(--font-weight-bold);
}
.ui-data-table__table tbody tr.is-clickable {
cursor: pointer;
}
/* 이동해 온 줄(PLAN 144 · focusRow) */
.ui-data-table__table tbody tr.is-focus td {
background: var(--dt-hover);
box-shadow: inset 0 -2px 0 var(--color-accent);
}
/* 고칠 칸(PLAN 121) — 칸 가득 글 상자 · 숫자 오른쪽 맞춤 */
.ui-data-table__table td.is-edit {
padding: 0;
}
.ui-data-table__input {
width: 100%;
height: var(--dt-row-h);
padding: 0 var(--spacing-8);
border: 0;
background: color-mix(in srgb, var(--color-accent) 5%, var(--color-canvas));
color: inherit;
font: inherit;
font-variant-numeric: tabular-nums;
text-align: right;
}
.ui-data-table__input:focus {
outline: 2px solid var(--color-focus-ring);
outline-offset: -2px;
}