330 lines
6.7 KiB
CSS
330 lines
6.7 KiB
CSS
/* =============================================================================
|
|
* B06_wf3_ProfileCross_UI_Style.css
|
|
* 3차 워크플로우(종·횡단 생성) 페이지 전용 스타일.
|
|
*
|
|
* 원칙(frontend.md §1): 하드코딩 색상 금지. theme.css 변수(var(--...))만 참조.
|
|
* 공통 컴포넌트 스타일은 ui_template_elements.ts가 주입하므로 여기서는
|
|
* B06 고유 레이아웃(옵션 그룹/결과 메트릭)만 정의한다.
|
|
* ========================================================================== */
|
|
|
|
/* --- 좌측 입력 폼 --- */
|
|
.b06-profile-layout {
|
|
height: calc(100vh - var(--spacing-64));
|
|
height: calc(100dvh - var(--spacing-64));
|
|
min-height: 0;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.b06-profile-layout .ui-workflow-layout__body,
|
|
.b06-profile-layout .ui-workflow-layout__main {
|
|
height: 100%;
|
|
min-height: 0;
|
|
}
|
|
|
|
.b06-profile-layout .ui-workflow-layout__main {
|
|
overflow: auto;
|
|
}
|
|
|
|
.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 {
|
|
box-sizing: border-box;
|
|
padding-inline: var(--spacing-24);
|
|
}
|
|
|
|
.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 {
|
|
position: sticky;
|
|
z-index: 2;
|
|
top: 0;
|
|
}
|
|
|
|
.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;
|
|
max-width: none;
|
|
}
|
|
|
|
.b06-cross-card > .b06-section__chart {
|
|
width: 100%;
|
|
}
|
|
|
|
.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(auto-fill, minmax(min(480px, 100%), 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-hit {
|
|
stroke: transparent;
|
|
stroke-width: 14;
|
|
pointer-events: stroke;
|
|
}
|
|
|
|
.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);
|
|
}
|