Files
Aislo/B06_wf3_ProfileCross/B06_wf3_ProfileCross_UI_Style.css
T

300 lines
6.2 KiB
CSS

/* =============================================================================
* B06_wf3_ProfileCross_UI_Style.css
* 3차 워크플로우(종·횡단 생성) 페이지 전용 스타일.
*
* 원칙(frontend.md §1): 하드코딩 색상 금지. theme.css 변수(var(--...))만 참조.
* 공통 컴포넌트 스타일은 ui_template_elements.ts가 주입하므로 여기서는
* B06 고유 레이아웃(옵션 그룹/결과 메트릭)만 정의한다.
* ========================================================================== */
/* --- 좌측 입력 폼 --- */
.b06-profile__form {
display: flex;
flex-direction: column;
gap: var(--spacing-16);
}
.b06-profile__group {
display: flex;
flex-direction: column;
gap: var(--spacing-16);
margin: 0;
padding: var(--spacing-16);
border: 1px solid var(--color-border);
border-radius: var(--radius-cards);
background-color: var(--color-surface-raised);
}
.b06-profile__group-legend {
padding: 0 var(--spacing-8);
font-size: var(--text-caption);
font-weight: var(--font-weight-medium);
color: var(--color-text-secondary);
}
/* --- 읽기 전용 경로 컨텍스트 --- */
.b06-profile__info-line {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--spacing-8);
font-size: var(--text-body-sm);
color: var(--color-text-body);
}
.b06-profile__info-line span {
color: var(--color-text-secondary);
}
.b06-profile__info-line strong {
font-family: var(--font-mono);
text-align: right;
}
/* --- 액션 버튼 행 --- */
.b06-profile__actions {
display: flex;
gap: var(--spacing-8);
}
/* --- 우측 결과 --- */
.b06-profile__result {
display: flex;
flex-direction: column;
gap: var(--spacing-16);
padding: var(--spacing-24);
}
.b06-profile__result-title {
font-size: var(--text-subheading);
color: var(--color-text);
}
.b06-profile__empty {
color: var(--color-text-muted);
font-size: var(--text-body-sm);
}
.b06-profile__result-body {
display: flex;
flex-direction: column;
gap: var(--spacing-8);
max-width: 480px;
}
.b06-profile__metric {
display: flex;
align-items: baseline;
justify-content: space-between;
gap: var(--spacing-16);
padding: var(--spacing-8) var(--spacing-16);
border-radius: var(--radius-inputs);
background-color: var(--color-surface);
}
.b06-profile__metric-key {
font-size: var(--text-caption);
color: var(--color-text-secondary);
}
.b06-profile__metric-val {
font-family: var(--font-mono);
font-size: var(--text-body-sm);
color: var(--color-text-body);
word-break: break-all;
text-align: right;
}
/* --- 종·횡단 도면 --- */
.b06-profile__main,
.b06-section {
display: flex;
flex-direction: column;
gap: var(--spacing-24);
min-width: 0;
}
.b06-section__panel,
.b06-cross-card {
overflow: hidden;
border: 1px solid var(--color-border);
border-radius: var(--radius-cards);
background: var(--color-surface-raised);
}
.b06-section__panel > header,
.b06-cross-card > header,
.b06-cross-card > footer {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--spacing-8);
padding: var(--spacing-8) var(--spacing-16);
background: var(--color-surface);
color: var(--color-text-secondary);
font-size: var(--text-caption);
}
.b06-section__panel > header {
border-bottom: 1px solid var(--color-border);
}
.b06-section__panel > header h3,
.b06-section__heading h3 {
font-size: var(--text-body);
}
.b06-section__chart-wrap {
width: 100%;
overflow-x: auto;
}
.b06-section__chart {
display: block;
width: 100%;
min-width: 520px;
height: auto;
}
.b06-section__heading {
display: flex;
align-items: end;
justify-content: space-between;
gap: var(--spacing-16);
color: var(--color-text-secondary);
font-size: var(--text-caption);
}
.b06-section__grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: var(--spacing-16);
}
.b06-cross-card {
cursor: pointer;
transition:
border-color var(--transition-fast),
box-shadow var(--transition-fast);
}
.b06-cross-card:hover {
border-color: var(--color-text-muted);
box-shadow: var(--shadow-sm);
}
.b06-cross-card--selected {
border-color: var(--color-danger);
box-shadow: 0 0 0 2px var(--color-danger);
}
.b06-cross-card > header {
border-bottom: 1px solid var(--color-border);
}
.b06-cross-card > header div {
display: flex;
align-items: baseline;
gap: var(--spacing-8);
}
.b06-cross-card > header strong {
color: var(--color-text);
font-size: var(--text-body-sm);
}
.b06-cross-card > footer {
border-top: 1px solid var(--color-border);
}
.b06-section__empty {
display: flex;
min-height: 180px;
align-items: center;
justify-content: center;
padding: var(--spacing-24);
border: 1px dashed var(--color-text-muted);
color: var(--color-text-muted);
background: var(--color-surface);
}
/* SVG 차트 색상은 테마 토큰만 사용한다. */
.b06-chart__bg {
fill: var(--color-surface-raised);
}
.b06-chart__grid {
stroke: var(--color-border);
stroke-width: 1;
}
.b06-chart__axis {
stroke: var(--color-text-secondary);
stroke-width: 1;
}
.b06-chart__tick,
.b06-chart__station-label,
.b06-chart__axis-label {
fill: var(--color-text-secondary);
font-family: var(--font-body);
}
.b06-chart__tick,
.b06-chart__station-label {
font-size: 10px;
}
.b06-chart__axis-label {
fill: var(--color-text-body);
font-size: var(--text-caption);
font-weight: var(--font-weight-medium);
}
.b06-chart__profile {
fill: none;
stroke: var(--color-chart-0);
stroke-width: 2.5;
}
.b06-chart__cross-profile {
fill: none;
stroke: var(--color-chart-1);
stroke-width: 2.4;
}
.b06-chart__station {
cursor: pointer;
}
.b06-chart__station-line {
stroke-width: 1.2;
}
.b06-chart__station-line--bp,
.b06-chart__station-line--regular {
stroke: var(--color-warning);
}
.b06-chart__station-line--ep {
stroke: var(--color-accent);
stroke-dasharray: 4 3;
}
.b06-chart__station-line--selected,
.b06-chart__center-marker {
stroke: var(--color-danger);
stroke-width: 2.5;
}
.b06-chart__station--selected .b06-chart__station-label {
fill: var(--color-danger);
font-weight: var(--font-weight-bold);
}
@media (max-width: 900px) {
.b06-section__grid {
grid-template-columns: 1fr;
}
}