[Feature] Customize theming from palettes to full appearance controls #246

Closed
opened 2026-07-12 16:15:41 +02:00 by zemion · 1 comment
Owner

Objective

Add configurable theming beyond the built-in light/dark/system themes, starting with simple palette choices and growing toward full appearance customization.

Context

govoplan-core#224 establishes the shared token-based theming foundation. This issue tracks the next product layer: letting administrators or users shape the visual appearance without editing CSS.

Scope

  • Start with choosing a predefined color palette for the active theme.
  • Add safe custom accent/status/surface palette controls once the token contract is stable.
  • Define which controls are user-level, tenant-level, and system-level.
  • Provide previews and reset-to-default behavior before saving.
  • Validate contrast and accessibility before accepting custom palettes.
  • Eventually expose advanced controls for all relevant theme tokens, guarded by policy/permissions.

Acceptance Criteria

  • A basic palette selector can change the visual theme through the shared CSS token layer.
  • Customization does not require module CSS changes.
  • Invalid or inaccessible palette combinations are rejected or clearly warned before save.
  • The UI distinguishes built-in themes, palette presets, and advanced custom overrides.
  • Follow-up slices exist for tenant branding, import/export, and visual regression coverage if they are not completed here.

Relationship

Follow-up to govoplan-core#224. Not required for closing the base theming foundation.

## Objective Add configurable theming beyond the built-in light/dark/system themes, starting with simple palette choices and growing toward full appearance customization. ## Context `govoplan-core#224` establishes the shared token-based theming foundation. This issue tracks the next product layer: letting administrators or users shape the visual appearance without editing CSS. ## Scope - Start with choosing a predefined color palette for the active theme. - Add safe custom accent/status/surface palette controls once the token contract is stable. - Define which controls are user-level, tenant-level, and system-level. - Provide previews and reset-to-default behavior before saving. - Validate contrast and accessibility before accepting custom palettes. - Eventually expose advanced controls for all relevant theme tokens, guarded by policy/permissions. ## Acceptance Criteria - A basic palette selector can change the visual theme through the shared CSS token layer. - Customization does not require module CSS changes. - Invalid or inaccessible palette combinations are rejected or clearly warned before save. - The UI distinguishes built-in themes, palette presets, and advanced custom overrides. - Follow-up slices exist for tenant branding, import/export, and visual regression coverage if they are not completed here. ## Relationship Follow-up to `govoplan-core#224`. Not required for closing the base theming foundation.
zemion added the area/apicodex/readymodule/core
priority
p2
status
ready
type
feature
labels 2026-07-29 14:15:07 +02:00
Author
Owner

Implemented and pushed in 6643c8f. Added persisted user-level default/civic-blue/forest/plum palette presets to the profile contract, strict API validation with invalid palettes rejected, root data-palette application, shared-token-only cross-module styling, draft preview and reset-before-save behavior, English/German UI copy, and explicit advanced-override status. Theme contract now verifies all presets, root application, representative module token consumption, and WCAG AA accent foreground contrast; targeted profile persistence/rejection test, structural i18n, shared foundation/layout checks, TypeScript, full-product build, and bundle budget passed. Deferred governed work is tracked in #290 (tenant/system defaults and policy precedence) and #291 (accessible custom overrides, exchange, and visual regression).

Implemented and pushed in 6643c8f. Added persisted user-level default/civic-blue/forest/plum palette presets to the profile contract, strict API validation with invalid palettes rejected, root data-palette application, shared-token-only cross-module styling, draft preview and reset-before-save behavior, English/German UI copy, and explicit advanced-override status. Theme contract now verifies all presets, root application, representative module token consumption, and WCAG AA accent foreground contrast; targeted profile persistence/rejection test, structural i18n, shared foundation/layout checks, TypeScript, full-product build, and bundle budget passed. Deferred governed work is tracked in #290 (tenant/system defaults and policy precedence) and #291 (accessible custom overrides, exchange, and visual regression).
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: GovOPlaN/govoplan-core#246