diff --git a/TASKS.md b/TASKS.md index 78a9ff4..1e067e0 100644 --- a/TASKS.md +++ b/TASKS.md @@ -2,18 +2,18 @@ ## Current -### `feat/frontend-css-state-cleanup` +### `feat/frontend-performance-polish` Status: in_progress DoD: -- button and control state visuals move from inline `element.style` mutations into CSS classes -- wizard navigation and similar interactive UI use semantic state classes instead of manual style strings -- existing UI e2e coverage stays green after the CSS-state cleanup +- repeated O(n) filtering in hot render paths is removed +- tab counts and similar derived UI metrics use cached/derived snapshots instead of recomputing the same filters +- existing UI e2e coverage stays green after the performance polish ## Next -- `feat/frontend-performance-polish` +- `feat/frontend-observability-and-testability` ## Backlog diff --git a/apps/ui/css/pages.css b/apps/ui/css/pages.css index 22338dc..748f103 100644 --- a/apps/ui/css/pages.css +++ b/apps/ui/css/pages.css @@ -69,6 +69,19 @@ box-shadow: 0 0 0 3px var(--accent-ring); } +.btn-primary:disabled, +.btn-primary.is-disabled { + opacity: 0.5; + cursor: not-allowed; + box-shadow: none; +} + +.btn-primary:disabled:hover, +.btn-primary.is-disabled:hover { + background: var(--accent); + box-shadow: none; +} + .btn-secondary { display: inline-flex; align-items: center; diff --git a/apps/ui/css/wizard.css b/apps/ui/css/wizard.css index a074bd6..4657ac4 100644 --- a/apps/ui/css/wizard.css +++ b/apps/ui/css/wizard.css @@ -989,6 +989,17 @@ border-color: var(--bg-muted); } +.btn-back:disabled { + opacity: 0.35; + cursor: not-allowed; +} + +.btn-back:disabled:hover { + background: var(--bg-overlay); + color: var(--text-secondary); + border-color: var(--border); +} + .btn-save-draft { background: none; color: var(--text-muted); @@ -1044,6 +1055,20 @@ box-shadow: 0 1px 4px rgba(13, 148, 136, 0.3); } +.btn-continue.is-final-step { + background: #3fb950; + border-color: #2ea043; + box-shadow: 0 1px 4px rgba(63, 185, 80, 0.4); +} + +.btn-continue.is-final-step:hover { + background: #2ea043; + border-color: transparent; + box-shadow: + 0 2px 10px rgba(63, 185, 80, 0.45), + 0 0 0 3px rgba(63, 185, 80, 0.18); +} + /* ── Code editor ── */ .code-block { border: 1px solid var(--border); diff --git a/apps/ui/css/workspace-setup.css b/apps/ui/css/workspace-setup.css index 3638106..669ca11 100644 --- a/apps/ui/css/workspace-setup.css +++ b/apps/ui/css/workspace-setup.css @@ -203,6 +203,11 @@ gap: 10px; margin-top: 24px; } + +.ws-submit-btn { + padding: 9px 22px; + font-size: 13px; +} .ws-setup-footer-note { font-size: 12px; color: var(--text-muted); diff --git a/apps/ui/html/wizard/index.html b/apps/ui/html/wizard/index.html index f58d2ae..b1b9ef6 100644 --- a/apps/ui/html/wizard/index.html +++ b/apps/ui/html/wizard/index.html @@ -201,7 +201,7 @@