Files
Aislo/B07_DesignDetail/B07_DesignDetail_UI_Style.css
T
eomsangdonandClaude Opus 5.5 a504f561ad feat(B07): 횡단면도 장 배치 장마다 열 × 행 칸 가운데 · 도각 고정 그림칸(140-3)
- 쌓기 · 최소 장수 함수 지움 · grid_slots(n, 열, 행) 칸 가운데(좌하단 → 위 → 오른쪽) · 1/100 그대로
- 저장 B07_DesignDetail/cross_layout.json {default [4,4], sheets {장 번호: [열, 행]}} · GET · PUT cross-layout
- 배치 바꾸면 담긴 측점이 바뀐 확정 장 풂 · 그 측점 설계 잠정 · CROSS_SHEET_LAYOUT = 3
- 장 나눔이 설계 · 덧그림과 무관 — 목록 · 확정 · 수정에서 덧그림 재기 빠짐
- 좌측 정보 칸 「배치 열 × 행 [적용] · [모든 장 기본]」 → 다시 세워 같은 장 번호 엶

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TNMXVCZXMpHpVvqmFkeChL
2026-10-09 14:56:34 +09:00

455 lines
11 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* =============================================================================
* B07_DesignDetail_UI_Style.css
* 상세 설계(독립형 2D CAD) 화면 스타일 — theme.css 변수만 사용
* ========================================================================== */
/* 워크플로우 레이아웃 높이 (B06 패턴 준수) */
.b07-design-layout {
height: calc(100vh - var(--spacing-64));
height: calc(100dvh - var(--spacing-64));
min-height: 0;
}
.b07-design-layout .ui-workflow-layout__body,
.b07-design-layout .ui-workflow-layout__main {
height: 100%;
min-height: 0;
}
/* B06 확정 산출물 도면 목록 */
.b07-drawing-list {
display: flex;
flex-direction: column;
gap: var(--spacing-12);
height: 100%;
min-height: 0;
overflow-y: auto;
}
.b07-drawing-list__heading {
display: flex;
align-items: center;
justify-content: space-between;
padding-bottom: var(--spacing-12);
border-bottom: 1px solid var(--color-border);
}
.b07-drawing-list__heading span,
.b07-drawing-list__empty {
color: var(--color-text-muted);
font-size: var(--text-body-sm);
}
.b07-drawing-group {
display: flex;
flex-direction: column;
gap: var(--spacing-4);
/* 테두리 색·두께는 공통 ui-sidebar-section이 준다 — 여기선 형태(라운드·안쪽 여백)만. */
border-radius: var(--radius-lg);
padding: var(--spacing-8);
}
/* 횡단도는 2열 배치 — 단, **칸이 좁아지면 1열로 접는다**(2026-09-08).
좌측 패널이 320 고정이던 동안은 2열이 늘 128.8px 라 문제가 없었으나, 공용
오버레이가 좁은 폭에서 패널을 280·227·182 로 물리면서 칸이 108.8 → 82.4 → 60px
까지 줄었다. 실측: 폭 560 에서 이름 31개 중 **16개**, 폭 500 에서 **19개**가
말줄임으로 잘려 「9장 (No.26+14.0)」이 「9장 …」이 됐다. 넘침 수치는 0 이라
안 잡히는 자리다 — 잘린 것은 `overflow: hidden` 안이라서.
가장 긴 이름이 107px, 단추 안여백·테두리가 20px 이므로 120px 를 접는 문턱으로 둔다. */
.b07-drawing-group[data-kind="cross"] {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
gap: var(--spacing-4);
}
.b07-drawing-group h3 {
margin: var(--spacing-8) 0 var(--spacing-4);
color: var(--color-text-muted);
font-size: var(--text-caption);
font-weight: 600;
}
/* 아직 내용이 없는 도면 — 눌리기는 하고 도각만 나온다(2026-09-01). 옅게 두되
못 누르는 것처럼 보이지 않게 커서는 그대로 둔다. */
.b07-drawing-button[data-pending="true"] {
opacity: 0.72;
}
.b07-drawing-button[data-pending="true"]:disabled {
opacity: 0.5;
cursor: not-allowed;
}
/* 그리드 제목 · 표준 횡단면도는 두 열을 가로지른다 */
.b07-drawing-group[data-kind="cross"] h3,
.b07-drawing-group[data-kind="cross"] [data-drawing-id="cross_standard"] {
grid-column: 1 / -1;
}
.b07-drawing-button {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
/* 격자 칸의 기본 최소폭은 글자 길이라, 이름이 길면 칸이 패널을 밀어내 단추가
오른쪽으로 튀어나갔다(2026-09-04 실측 14px). 0으로 풀면 이름이 `…`로 잘린다. */
min-width: 0;
min-height: 34px;
padding: var(--spacing-4) var(--spacing-8);
/* 경계가 뚜렷하도록 배경색과 유사하지만 조금 짙은 톤 + 은은한 테두리 */
border: 1px solid color-mix(in srgb, var(--color-border) 55%, transparent);
/* 확정 여부를 나타내는 좌측 색 띠 (미확정: 투명) */
border-left: 3px solid transparent;
border-radius: var(--radius-buttons);
background: color-mix(in srgb, var(--color-surface) 84%, #000);
color: var(--color-text);
cursor: pointer;
text-align: center;
}
.b07-drawing-button__name {
overflow: hidden;
font-size: var(--text-body-sm);
white-space: nowrap;
text-overflow: ellipsis;
}
.b07-drawing-button:hover,
.b07-drawing-button[data-active="true"] {
border-color: var(--color-border);
background: var(--color-mist-violet);
}
.b07-drawing-button[data-active="true"] {
color: var(--color-primary);
}
/* 확정: 좌측 띠 + 측점 글자색을 함께 성공색으로 반영 */
.b07-drawing-button[data-confirmed="true"] {
border-color: color-mix(in srgb, var(--color-success) 35%, var(--color-border));
border-left-color: var(--color-success);
}
.b07-drawing-button[data-confirmed="true"] .b07-drawing-button__name {
color: var(--color-success);
}
/* 하단 고정·배경·상단 구분선은 공용 ui-sidebar-actions가 맡는다(2026-08-18 통합).
여기서는 B07 고유 여백만 남긴다. */
/* 액션 칸은 세로 두 줄 — 1행 도각 편집 띠, 2행 [도각 편집]·[현재 도면 확정].
공용 .ui-sidebar-actions는 가로 한 줄이라 방향과 늘어남을 여기서 되돌린다. */
.b07-drawing-actions {
flex-direction: column;
padding-top: var(--spacing-12);
}
.b07-drawing-actions > * {
flex: none;
}
.b07-drawing-actions__row {
display: flex;
gap: var(--spacing-8);
}
.b07-drawing-actions__row > button {
flex: 1 1 0;
min-width: 0;
width: 100%;
}
/* 선택 횡단도의 지반정보/계획정보 (잠정치) */
.b07-info-host:empty {
display: none;
}
.b07-info {
margin-top: var(--spacing-16);
padding-top: var(--spacing-16);
border-top: 1px solid var(--color-border);
display: flex;
flex-direction: column;
gap: var(--spacing-8);
}
.b07-info__heading {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--spacing-8);
}
.b07-info__badge {
padding: 1px 6px;
font-size: 10px;
color: var(--color-primary);
background: var(--color-mist-violet);
border-radius: var(--radius-buttons);
}
.b07-info__badge--confirmed {
color: var(--color-surface);
background: var(--color-success);
}
.b07-info__block {
display: flex;
flex-direction: column;
gap: 2px;
}
.b07-info__block h4 {
margin: var(--spacing-8) 0 2px;
font-size: 0.78rem;
color: var(--color-text-muted);
}
.b07-info__row {
display: flex;
justify-content: space-between;
gap: var(--spacing-8);
font-size: 0.76rem;
}
.b07-info__key {
color: var(--color-text-muted);
}
.b07-info__val {
color: var(--color-text);
font-variant-numeric: tabular-nums;
}
.b07-info__empty {
font-size: 0.76rem;
color: var(--color-text-muted);
}
/* 횡단 장 배치(140-3) — 배치 열 [4] × 행 [4] [적용] [모든 장 기본] */
.b07-info__layout {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: var(--spacing-4);
color: var(--color-text-muted);
font-size: var(--text-caption);
}
.b07-info__layout input {
width: 44px;
}
/* 확정을 건너뛴 개발 상태 알림 — 눈에 띄되 도면 목록을 밀어내지 않게 한 줄만. */
.b07-drawing-list__bypass {
margin: var(--spacing-4) 0 0;
padding: var(--spacing-4) var(--spacing-8);
border-left: 3px solid var(--color-warning, #d9a441);
color: var(--color-text-muted);
font-size: var(--text-caption);
}
/* 표준도 제원 입력 모양은 B08 로 이관(2026-09-13) — `B08_Quantity_UI_StructureSheet_Spec.ts` 가 스스로 넣음. */
/* 계획평면도 묶음 — 종류별 이름 줄 + 장 단추, 아래 [평면도 관리](PLAN 60 · 67 · 130장) */
.b07-plan-kind {
display: flex;
flex-direction: column;
gap: var(--spacing-4);
}
.b07-plan-kind__head,
.b07-plan-tools__mark,
.b07-plan-tools__actions {
display: flex;
align-items: center;
gap: var(--spacing-4);
}
.b07-plan-kind__name {
flex: 1;
color: var(--color-text-muted);
font-size: var(--text-caption);
}
.b07-plan-manage-open {
margin-top: var(--spacing-4);
}
/* [평면도 관리] 모달(130-1) — 왼쪽 종류 · 자리 · 장 목록 / 오른쪽 미리보기 · 공용 모달에 자기 class 로 큰 창 */
.ui-modal.b07-plan-manage {
width: min(1320px, 96vw);
--modal-max: 94vh;
}
.b07-plan-manage__grid {
display: grid;
grid-template-columns: minmax(280px, 360px) minmax(0, 1fr);
gap: var(--spacing-16);
height: calc(94vh - 96px);
min-height: 0;
}
.b07-plan-manage__side {
display: flex;
flex-direction: column;
gap: var(--spacing-8);
min-height: 0;
overflow-y: auto;
}
.b07-plan-manage__view {
display: flex;
flex-direction: column;
gap: var(--spacing-8);
min-height: 0;
}
.b07-plan-manage__view > .cad-host {
flex: 1 1 0;
height: auto;
}
.b07-plan-manage__head {
display: flex;
align-items: center;
gap: var(--spacing-8);
}
.b07-plan-manage__badge {
color: var(--color-text-muted);
font-size: var(--text-caption);
}
.b07-plan-manage__badge[data-confirmed="true"] {
color: var(--color-success);
}
/* 「평면도 장」 한 블록(140-2) — 종류마다 한 줄 [≡] 이름 [1][2] · 줄 끌어 놓기 = 종류 순서 */
.b07-plan-manage__row {
padding: 2px var(--spacing-4);
border: 1px solid transparent;
border-radius: var(--radius-buttons);
}
.b07-plan-manage__row[data-active="true"] {
border-color: var(--color-border);
background: var(--color-mist-violet);
}
.b07-plan-manage__row[data-drop="before"] {
box-shadow: inset 0 2px 0 var(--color-primary);
}
.b07-plan-manage__row[data-drop="after"] {
box-shadow: inset 0 -2px 0 var(--color-primary);
}
.b07-plan-manage__grip {
color: var(--color-text-muted);
cursor: grab;
}
.b07-plan-manage__sheet {
min-width: 26px;
padding: 2px var(--spacing-4);
border: 1px solid var(--color-border);
border-left: 3px solid transparent;
border-radius: var(--radius-buttons);
background: var(--color-surface);
color: var(--color-text);
font-size: var(--text-caption);
cursor: pointer;
}
.b07-plan-manage__sheet.b07-plan-kind__name {
text-align: left;
}
.b07-plan-manage__sheet[data-confirmed="true"] {
border-left-color: var(--color-success);
}
.b07-plan-manage__sheet[data-active="true"] {
color: var(--color-primary);
border-color: var(--color-primary);
}
.b07-plan-tools__block {
display: flex;
flex-direction: column;
gap: var(--spacing-4);
margin-top: var(--spacing-8);
}
.b07-plan-tools__pieces {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(110px, 1fr));
}
.b07-plan-tools__pieces[hidden] {
display: none;
}
.b07-plan-tools__name {
min-width: 0;
}
.b07-plan-tools__hint {
margin: 0;
color: var(--color-text-muted);
font-size: var(--text-caption);
}
/* 측점 NO + 거리 두 칸(B05 stationFields) — 한 줄: [측점][NO][+m] */
.b07-plan-tools__mark .b05-route__field {
display: flex;
flex: 1;
align-items: center;
gap: var(--spacing-4);
min-width: 0;
color: var(--color-text-muted);
font-size: var(--text-caption);
}
.b07-plan-tools__mark .b05-structure__station-pair {
display: flex;
gap: var(--spacing-4);
min-width: 0;
}
.b07-plan-tools__mark .b05-structure__station-pair input {
width: 52px;
min-width: 0;
}
.b07-plan-tools__mark input.is-invalid {
border-color: var(--color-danger);
}
.b07-plan-tools__button,
.b07-plan-tools__remove {
padding: var(--spacing-4) var(--spacing-8);
border: 1px solid var(--color-border);
border-radius: var(--radius-buttons);
background: var(--color-surface);
color: var(--color-text);
cursor: pointer;
}
.b07-plan-tools__remove {
padding: 0 var(--spacing-8);
}
/* 목록에서 연 도면 탭 줄 + CAD(82-4) */
.b07-cad-stack {
display: flex;
flex-direction: column;
height: 100%;
min-height: 0;
}
.b07-cad-stack > .cad-host {
flex: 1 1 0;
height: auto;
}