More-Theme-Stuff #5

Merged
brianfertig merged 3 commits from More-Theme-Stuff into main 2026-08-30 04:08:19 +00:00

3 Commits

Author SHA1 Message Date
Brian Fertig f66c7731d1 Add per-project theme assignment with scoped theming
- Extract theme constants (THEMES, THEME_CLASSES, DARK_SURFACES) into a new
  framework-free lib/themes.ts so server and client code share one source of
  truth; re-export from theme-provider for backward compatibility.
- Add nullable `theme` column to Project (Prisma migration + schema), plus
  ProjectThemeSchema validation and a setProjectTheme server action.
- Introduce a ThemeScope context in the provider: a subtree can temporarily
  override the global preference via useThemeScope().setScope(name); the
  scoped theme wins for resolvedTheme/DOM while active, then lifts on cleanup.
- Render an inline no-FOUC script (themeSwitchScript) on project pages that
  applies the theme class before first paint and leaves a data-project-theme
  marker the provider reads at hydration.
- Add ProjectThemeScope component that sets/clears the scope from live
  ProjectsContext state, so picking a new theme updates instantly without
  waiting for the server re-render.
- Add ProjectThemePicker dropdown (Default + light/dark options) rendered
  beside the project title in the kanban board header.
- Wire optimistic setProjectTheme into ProjectsContext with rollback and
  error toast on failure.
- Update use-dark-theme hooks to read resolvedTheme from context instead of
  resolving locally, so they reflect scoped themes correctly.
2026-08-29 22:07:10 -06:00
Brian Fertig fed65f86e0 Fix blueprint theme contrast for paper surfaces and sidebar buttons
- Dialogs, popovers, and dropdown menus were rendering ghost/outline
  buttons and editor text as white-on-white because they inherited the
  board-level cobalt tokens; restore card (paper) semantics locally.
- Sidebar/rail ghost button hover, focus, and expanded states washed out
  to white-on-white; retarget them to the sidebar accent pair.
2026-08-29 18:55:30 -06:00
Brian Fertig fca66959c2 Fix vaporwave glitch band clipping the progress pie badge
- Move overflow:hidden off the group card onto a dedicated .vw-glitch-clip
  overlay so the card can stay overflow-visible and the corner progress
  pie is no longer cropped by the card or its rounded corner.
- Add overflow-x-clip to CategoryLane so badges that poke past the card's
  right edge are discarded instead of spawning a stray horizontal scrollbar.
- Nudge TodoProgressPie to -right-2.5 and give the "N/N done" label pr-2.5
  so both clear each other within the lane's 10px margin without spilling.
2026-08-29 18:29:10 -06:00