Files
Aislo/B01_Dashboard/B01_Dashboard_UI_Style_Home.css
T
eomsangdonandClaude Opus 5.5 729f4c75b8 feat(B01): 대시보드 홈 — 진행 중 수에 따라 꼴이 저절로(1 큰 카드 · 2~3 중간 · 4~8 한 줄 · 9 넘음 요약) (PLAN 547-2)
- 등록부 home 줄 = mountHome · 썸네일 선 · 단계 점 · 「다음: 지금 단계」 · [이어서 하기] = 그 단계 화면 · [자세히] = 상세
- 4~8 = 팀원별 · 단계 분포 · 14 일 넘게 그대로 표시 · 9 넘음 = 요약 숫자 · 회사별 막대 · 종류 원(인라인 SVG)
- 오른쪽 = 처리할 일 · 임시 보관함 · 회사(회사 관리자) · 예정노선(산림청) · 처음 = 세 걸음 · 꼴 고정(자동 · 작게 · 크게) 기억
- 홈 역할 차례 = 셸 roleOf 와 같게(회사 관리자가 산림청 앞)
- test_546 등록부 시험 — import 한 mount 이름을 빈 함수로 저절로(페이지 줄 갈아 끼워도 그대로)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 18:20:21 +09:00

501 lines
8.7 KiB
CSS

/* 대시보드 홈(PLAN 547-2) — 색 · 간격 = 셸 변수(--b01-*) · 종류 색 = 테마 차트 변수 */
.b01-home {
--b01-home-road: var(--b01-accent);
--b01-home-plan: var(--color-chart-0);
--b01-home-stab: var(--color-chart-2);
--b01-home-warn: var(--color-warning);
display: flex;
flex-direction: column;
gap: var(--spacing-16);
color: var(--b01-text);
}
.b01-home__head {
display: flex;
align-items: center;
gap: var(--spacing-12);
flex-wrap: wrap;
}
.b01-home__head h2 {
margin: 0;
font-size: 19px;
}
.b01-home__push {
margin-left: auto;
}
.b01-home__muted {
color: var(--b01-muted);
font-size: 12px;
}
.b01-home__stale {
color: var(--b01-home-warn);
font-size: 12px;
font-weight: 600;
}
.b01-home__alert {
color: var(--b01-alert);
}
.b01-home__seg {
display: inline-flex;
border: 1px solid var(--b01-line);
border-radius: 8px;
overflow: hidden;
}
.b01-home__seg button {
border: 0;
background: var(--b01-card);
color: var(--b01-text);
padding: var(--spacing-4) var(--spacing-12);
font: inherit;
font-size: 12px;
cursor: pointer;
}
.b01-home__seg button.on {
background: var(--b01-accent);
color: var(--b01-accent-text);
}
.b01-home__body {
display: grid;
grid-template-columns: minmax(0, 1fr) 260px;
gap: var(--spacing-16);
align-items: start;
}
.b01-home__main,
.b01-home__side {
display: flex;
flex-direction: column;
gap: var(--spacing-12);
min-width: 0;
}
.b01-home__pane {
background: var(--b01-card);
border: 1px solid var(--b01-line);
border-radius: var(--b01-radius);
padding: var(--spacing-12) var(--spacing-16);
display: flex;
flex-direction: column;
gap: var(--spacing-8);
}
.b01-home__pane > .ui-btn {
align-self: flex-start;
}
.b01-home__pane-title {
margin: 0;
font-size: 13px;
}
.b01-home__actions {
display: flex;
gap: var(--spacing-8);
flex-wrap: wrap;
}
/* 종류 배지 · 썸네일 · 단계 점 */
.b01-home__kind--road {
--kind: var(--b01-home-road);
}
.b01-home__kind--plan {
--kind: var(--b01-home-plan);
}
.b01-home__kind--stability {
--kind: var(--b01-home-stab);
}
.b01-home__kind--erosion {
--kind: var(--b01-muted);
}
.b01-home__badge {
display: inline-block;
font-size: 11px;
font-weight: 600;
border-radius: 5px;
padding: 0 6px;
white-space: nowrap;
color: var(--kind);
border: 1px solid var(--kind);
}
.b01-home__title {
display: flex;
align-items: center;
gap: var(--spacing-8);
min-width: 0;
}
.b01-home__title b {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.b01-home__thumb {
display: block;
width: 100%;
background: var(--b01-accent-soft);
}
.b01-home__thumb polyline {
fill: none;
stroke: var(--kind);
stroke-width: 3;
stroke-linejoin: round;
stroke-linecap: round;
}
.b01-home__thumb--big {
height: 210px;
}
.b01-home__thumb--mid {
height: 100px;
}
.b01-home__thumb--row {
width: 80px;
height: 44px;
border-radius: 6px;
}
.b01-home__thumb--row polyline {
stroke-width: 2;
}
.b01-home__pips {
display: flex;
gap: 4px;
}
.b01-home__pips i {
flex: 1;
height: 7px;
border-radius: 4px;
background: var(--b01-line);
box-sizing: border-box;
}
.b01-home__pips i.ok {
background: var(--kind);
}
.b01-home__pips i.cur {
background: var(--b01-card);
border: 2px solid var(--kind);
}
.b01-home__next {
border: 1px solid var(--b01-home-warn);
border-radius: 8px;
padding: var(--spacing-4) var(--spacing-8);
font-size: 12.5px;
}
/* 1 — 큰 카드 */
.b01-home__big {
padding: 0;
overflow: hidden;
gap: 0;
}
.b01-home__big-top {
display: grid;
grid-template-columns: 1.1fr 1fr;
}
.b01-home__big-info {
padding: var(--spacing-12) var(--spacing-16);
display: flex;
flex-direction: column;
gap: var(--spacing-8);
}
.b01-home__big-info .b01-home__title b {
font-size: 17px;
}
.b01-home__metrics {
display: grid;
grid-auto-flow: column;
grid-auto-columns: 1fr;
border-top: 1px solid var(--b01-line);
}
.b01-home__metrics div {
padding: var(--spacing-8) var(--spacing-12);
border-left: 1px solid var(--b01-line);
}
.b01-home__metrics div:first-child {
border-left: 0;
}
.b01-home__metrics b {
display: block;
font-size: 15px;
font-variant-numeric: tabular-nums;
}
.b01-home__metrics span {
color: var(--b01-muted);
font-size: 11.5px;
}
/* 2~3 — 중간 카드 */
.b01-home__mids {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
gap: var(--spacing-12);
}
.b01-home__mid {
background: var(--b01-card);
border: 1px solid var(--b01-line);
border-radius: var(--b01-radius);
overflow: hidden;
}
.b01-home__mid--first {
border-color: var(--b01-accent);
}
.b01-home__mid-body {
padding: var(--spacing-8) var(--spacing-12) var(--spacing-12);
display: flex;
flex-direction: column;
gap: var(--spacing-4);
}
/* 4~8 — 한 줄 목록 */
.b01-home__split {
display: grid;
grid-template-columns: 1.3fr 1fr;
gap: var(--spacing-12);
align-items: start;
}
.b01-home__split--list {
grid-template-columns: minmax(0, 1fr) 220px;
}
.b01-home__split--list > div {
display: flex;
flex-direction: column;
gap: var(--spacing-8);
min-width: 0;
}
.b01-home__rows {
background: var(--b01-card);
border: 1px solid var(--b01-line);
border-radius: var(--b01-radius);
overflow: hidden;
}
.b01-home__row {
display: grid;
grid-template-columns: 80px minmax(0, 1.2fr) minmax(0, 1fr) auto;
gap: var(--spacing-12);
align-items: center;
padding: var(--spacing-8) var(--spacing-12);
border-top: 1px solid var(--b01-line);
cursor: pointer;
}
.b01-home__row:first-child {
border-top: 0;
}
.b01-home__row:hover,
.b01-home__row:focus-visible {
background: var(--b01-hover);
outline: none;
}
.b01-home__row--stale {
box-shadow: inset 3px 0 0 var(--b01-home-warn);
}
.b01-home__member {
display: flex;
align-items: center;
gap: var(--spacing-8);
font-size: 12.5px;
}
.b01-home__avatar {
width: 22px;
height: 22px;
border-radius: 50%;
display: grid;
place-items: center;
font-size: 10px;
font-weight: 700;
background: var(--b01-accent-soft);
color: var(--b01-accent);
}
.b01-home__stack {
display: flex;
height: 10px;
border-radius: 6px;
overflow: hidden;
background: var(--b01-line);
}
.b01-home__stack i {
display: block;
height: 100%;
}
.b01-home__stack--start {
background: var(--b01-accent-soft);
}
.b01-home__stack--working {
background: var(--b01-accent);
}
.b01-home__stack--last {
background: var(--b01-home-warn);
}
/* 9 넘음 — 요약 숫자 · 그래프 */
.b01-home__many {
display: flex;
flex-direction: column;
gap: var(--spacing-12);
}
.b01-home__kpis {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(130px, 1fr));
gap: var(--spacing-12);
}
.b01-home__kpi {
background: var(--b01-card);
border: 1px solid var(--b01-line);
border-radius: var(--b01-radius);
padding: var(--spacing-8) var(--spacing-12);
}
.b01-home__kpi b {
display: block;
font-size: 22px;
font-variant-numeric: tabular-nums;
}
.b01-home__bars text {
font-size: 10px;
fill: var(--b01-text);
}
.b01-home__bars rect {
fill: var(--b01-accent);
}
.b01-home__bars rect.rest {
fill: var(--b01-accent-soft);
}
.b01-home__donut-row {
display: flex;
align-items: center;
gap: var(--spacing-16);
}
.b01-home__donut circle {
fill: none;
stroke: var(--kind);
stroke-width: 6;
}
.b01-home__donut text {
font-size: 8px;
font-weight: 700;
fill: var(--b01-text);
}
.b01-home__legend {
display: grid;
gap: var(--spacing-4);
font-size: 12px;
}
.b01-home__legend span {
display: flex;
align-items: center;
gap: var(--spacing-4);
}
.b01-home__swatch {
width: 9px;
height: 9px;
border-radius: 3px;
background: var(--kind);
}
/* 오른쪽 — 처리할 일 · 처음 세 걸음 */
.b01-home__todo,
.b01-home__step {
display: grid;
grid-template-columns: auto minmax(0, 1fr) auto;
gap: var(--spacing-8);
align-items: center;
font-size: 12.5px;
}
.b01-home__dot {
width: 7px;
height: 7px;
border-radius: 50%;
}
.b01-home__dot--plan {
background: var(--b01-home-plan);
}
.b01-home__dot--warn {
background: var(--b01-home-warn);
}
.b01-home__dot--alert {
background: var(--b01-alert);
}
.b01-home__step-no {
width: 22px;
height: 22px;
border-radius: 50%;
display: grid;
place-items: center;
font-weight: 700;
border: 2px solid var(--b01-accent);
color: var(--b01-accent);
}
.b01-home__step--done .b01-home__step-no {
background: var(--b01-accent);
color: var(--b01-accent-text);
}
@media (max-width: 900px) {
.b01-home__body,
.b01-home__split,
.b01-home__split--list,
.b01-home__big-top {
grid-template-columns: 1fr;
}
.b01-home__row {
grid-template-columns: 60px minmax(0, 1fr) auto;
}
.b01-home__row-stage {
display: none;
}
}