refactor(M02): 항목 카드를 공용 한 벌로 — 자료 자리 창구 · 카드 셋 옮김 · 선택 입력 카드 뼈대 (PLAN 25-2d)

- ItemSource: 문서를 읽는 자리를 인자로(M02 = 지금 층 · 고르기 모달 = 프로젝트 복사본)
- ItemCards: Structure.ts 의 도면 · 면적산출 · 재료산출 카드 그리기를 옮김(DOM · 동작 그대로) + 덧붙는 카드 자리
- InputsCard: 선택 입력 카드 뼈대(로직마다 묶음 · view · value 모드 · link 는 25-2c)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EauA2ATmqNRbeV48s9CcBr
This commit is contained in:
2026-09-29 23:18:47 +09:00
co-authored by Claude Sonnet 5.5
parent fe30cdbbd8
commit 470d00a18c
6 changed files with 827 additions and 211 deletions
@@ -0,0 +1,93 @@
/* 「선택 입력」 카드 — 로직마다 묶은 입력 줄 · 값 칸 · 확인 표시. 카드 틀은 M02_MasterTemplete_Structure.css */
.m02-inputs__wrap {
display: flex;
flex-direction: column;
flex: 1 1 0;
min-height: var(--m02-struct-body-min, 16rem);
min-width: 0;
gap: var(--spacing-8);
}
.m02-inputs {
display: flex;
flex-direction: column;
gap: var(--spacing-12);
overflow: auto;
min-height: 0;
min-width: 0;
}
.m02-inputs__places,
.m02-inputs__missing {
margin: 0;
color: var(--color-text-muted);
font-size: var(--text-caption);
}
.m02-inputs__logic {
display: flex;
flex-direction: column;
gap: var(--spacing-4);
min-width: 0;
}
.m02-inputs__logic-name {
margin: 0;
color: var(--color-text);
font-size: var(--text-caption);
overflow-wrap: anywhere;
}
.m02-inputs__row {
display: grid;
grid-template-columns: minmax(6rem, 2fr) minmax(8rem, 3fr);
gap: var(--spacing-8);
align-items: center;
min-width: 0;
}
.m02-inputs__name {
color: var(--color-text);
font-size: var(--text-caption);
overflow-wrap: anywhere;
}
.m02-inputs__cell {
display: flex;
flex-wrap: wrap;
gap: var(--spacing-4) var(--spacing-8);
align-items: center;
min-width: 0;
}
.m02-inputs__control {
flex: 1 1 6rem;
min-width: 0;
}
/* 자동값 = 저장값이 아님 — 흐리게 */
.m02-inputs__value.is-auto,
.m02-inputs__control.is-auto {
color: var(--color-text-muted);
font-style: italic;
}
.m02-inputs__state {
color: var(--color-text-muted);
font-size: var(--text-caption);
white-space: nowrap;
}
.m02-inputs__state.is-confirmed {
color: var(--color-success, var(--color-text));
}
.m02-inputs__error {
flex: 1 0 100%;
color: var(--color-danger, var(--color-text));
font-size: var(--text-caption);
}
.m02-inputs__control[aria-invalid="true"] {
border-color: var(--color-danger, currentcolor);
}