diff --git a/backend/internal/web/ui/app.css b/backend/internal/web/ui/app.css index e326167..e043484 100644 --- a/backend/internal/web/ui/app.css +++ b/backend/internal/web/ui/app.css @@ -448,3 +448,243 @@ gap: 0.5rem; margin-bottom: 1rem; } + +/* ============================================================ + Section 19 — Tasks section (kanban column container) + ============================================================ */ + +.tasks-section { + background: var(--color-surface-default); + border: 1px solid var(--color-border-subtle); + border-radius: 1rem; + overflow: hidden; +} + +.tasks-section-header { + align-items: center; + border-bottom: 1px solid var(--color-border-muted); + display: flex; + justify-content: space-between; + padding: 1.2rem 1rem; +} + +.tasks-add-button { + align-items: center; + background: var(--color-surface-default); + border: 1px solid var(--color-border-muted); + border-radius: 0.7rem; + color: var(--color-text-secondary); + cursor: pointer; + display: inline-flex; + font-weight: 500; + gap: 0.5rem; + min-height: 2.75rem; + padding: 0.7rem 1rem; +} + +.task-list { + display: flex; + flex-direction: column; +} + +.task-row { + align-items: center; + border-bottom: 1px solid var(--color-border-muted); + cursor: pointer; + display: flex; + gap: 0.75rem; + padding: 0.9rem 1rem; + transition: background-color 0.2s ease; +} + +.task-row:hover { + background: var(--color-surface-neutral-hover); +} + +.task-check { + align-items: center; + background: var(--color-surface-default); + border: 2px solid var(--color-border-strong); + border-radius: 999px; + color: var(--color-text-inverse); + cursor: pointer; + display: inline-flex; + flex-shrink: 0; + height: 2rem; + justify-content: center; + width: 2rem; +} + +.task-check.is-complete { + background: var(--color-text-brand-strong); + border-color: var(--color-text-brand-strong); +} + +.task-body { + flex: 1; + min-width: 0; +} + +.task-body p { + color: var(--color-surface-muted-inverse); + font-size: 0.95rem; + font-weight: 500; + margin: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.task-row.is-complete .task-body p { + color: var(--color-text-faint); + text-decoration: line-through; +} + +.task-meta { + align-items: center; + color: var(--color-text-muted); + display: flex; + flex-wrap: wrap; + font-size: 0.75rem; + gap: 0.45rem; + margin-top: 0.3rem; +} + +/* ============================================================ + Section 20 — Progress track and bar + ============================================================ */ + +.project-progress-track { + background: var(--color-surface-muted); + border-radius: 999px; + height: 0.5rem; + overflow: hidden; +} + +.project-progress-bar { + background: var(--project-color, var(--color-project-fallback)); + border-radius: 999px; + height: 100%; +} + +/* ============================================================ + Section 21 — Tab nav (tablo detail tab bar) + ============================================================ */ + +.tab-nav { + align-items: center; + border-bottom: 1px solid var(--color-border-muted); + display: flex; + gap: 1.5rem; + margin-bottom: 1.5rem; + overflow-x: auto; +} + +.tab-nav-item { + align-items: center; + border-bottom: 2px solid transparent; + color: var(--color-text-muted); + display: flex; + font-size: 0.875rem; + font-weight: 400; + gap: 0.5rem; + min-height: 44px; + padding-bottom: 0.75rem; + padding-inline: 0.25rem; + transition: color 0.15s ease, border-color 0.15s ease; +} + +.tab-nav-item.is-active { + border-bottom-color: var(--color-brand-primary); + color: var(--color-text-brand); + font-weight: 600; +} + +.tab-nav-item:hover:not(.is-active) { + color: var(--color-text-primary); +} + +/* ============================================================ + Section 22 — Tablo detail metadata row + ============================================================ */ + +.tablo-metadata-row { + align-items: center; + border-bottom: 1px solid var(--color-border-muted); + display: flex; + flex-wrap: wrap; + gap: 1rem; + margin-bottom: 1rem; + padding-bottom: 1rem; +} + +.tablo-metadata-date { + align-items: center; + color: var(--color-text-muted); + display: flex; + font-size: 0.875rem; + gap: 0.5rem; +} + +.tablo-metadata-date svg { + height: 1rem; + width: 1rem; +} + +/* ============================================================ + Section 23 — Kanban column wrapper + ============================================================ */ + +.kanban-column { + flex-shrink: 0; + width: 18rem; +} + +/* Scope column h3 to 1rem — base rule is 1.6rem (full-width views). + 18rem columns overflow at 1.6rem. Base rule left unchanged. */ +.kanban-column .tasks-section-header h3 { + font-size: 1rem; +} + +/* ============================================================ + Section 24 — Etape group sub-headings inside kanban columns + ============================================================ */ + +.etape-group-header { + align-items: center; + background: var(--color-surface-muted); + border-bottom: 1px solid var(--color-border-muted); + display: flex; + gap: 0.5rem; + padding: 0.5rem 1rem; +} + +.etape-group-color-dot { + background: var(--project-color, var(--color-project-fallback)); + border-radius: 999px; + flex-shrink: 0; + height: 0.5rem; + width: 0.5rem; +} + +.etape-group-label { + color: var(--color-text-secondary); + font-size: 0.875rem; + font-weight: 600; +} + +.etape-group-label.is-unassigned { + color: var(--color-text-muted); + font-weight: 400; +} + +/* ============================================================ + Section 25 — Empty task list placeholder + ============================================================ */ + +.task-list-empty { + color: var(--color-text-faint); + font-size: 0.875rem; + font-style: italic; + padding: 0.75rem 1rem; +}