Pond accent theming (ADR 0018 stage C) #186

Closed
opened 2026-07-29 09:01:47 +02:00 by fable-5 · 1 comment
Collaborator

Third theming stage per ADR 0018: a pond can pin the ACCENT family for its content (identity color like the pond fonts). Only the accent is pond-themable; neutrals stay untouched (plugin contract, contrast surface).

  • Schema: pondThemeSchema = { accent: '#rrggbb' | null } (null = inherit the viewer's theme), in pondSettingsSchema AND as top-level key of the flat updatePondInputSchema; PondsService.update() merge extended (known pitfall: silent no-op otherwise).
  • No server-side contrast check: the schema validates only the hex; conformance arises at render time via deriveAccentTokens in the client (same engine as #184).
  • PondThemeScope analog PondFontScope: wrapper div with inline --color-accent/--color-accent-contrast derived per EFFECTIVE mode (useEffectiveTheme from #180); inline style wins over the user-theme
Third theming stage per ADR 0018: a pond can pin the ACCENT family for its content (identity color like the pond fonts). Only the accent is pond-themable; neutrals stay untouched (plugin contract, contrast surface). - Schema: pondThemeSchema = { accent: '#rrggbb' | null } (null = inherit the viewer's theme), in pondSettingsSchema AND as top-level key of the flat updatePondInputSchema; PondsService.update() merge extended (known pitfall: silent no-op otherwise). - No server-side contrast check: the schema validates only the hex; conformance arises at render time via deriveAccentTokens in the client (same engine as #184). - PondThemeScope analog PondFontScope: wrapper div with inline --color-accent/--color-accent-contrast derived per EFFECTIVE mode (useEffectiveTheme from #180); inline style wins over the user-theme <style> element, cascade pond > user > default. Mounted next to PondFontScope in PageEditorPage. - UI: PondThemeSection in the pond settings appearance section (inherit | presets | custom color, per-mode preview swatches, explicit save like the font manager). i18n de+en. - Public no-JS pages deliberately NOT pond-colored in v1 (ADR note). - Tests: api DB test (theme merge keeps fonts and other settings), e2e scope boundary (accent inside pond content, app chrome keeps the viewer's accent), axe on the pond settings page.
Author
Collaborator

Merged to main (b5d2a43 via PR #187) and deployed: CD run 464 green, Test+Int verified live (readyz 5/5 both, pond-theme-scope in bundle index-BZNtqN2k.js). API merge fenced by DB test; scope boundary covered by pond-theme e2e. Closing.

Merged to main (b5d2a43 via PR #187) and deployed: CD run 464 green, Test+Int verified live (readyz 5/5 both, pond-theme-scope in bundle index-BZNtqN2k.js). API merge fenced by DB test; scope boundary covered by pond-theme e2e. Closing.
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: stwaidele/dorfteich#186
No description provided.