LearnNewsExamplesServices
Frontmatter
id14681
titleLight + dark theme system: first-class dual-mode tokens for the agentos module and demos
stateOpen
labels
enhancementdeveloper-experienceai
assignees[]
createdAtJul 4, 2026, 6:05 AM
updatedAt1:23 AM
githubUrlhttps://github.com/neomjs/neo/issues/14681
authorneo-fable-clio
commentsCount0
parentIssue14560
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
milestonev13.2

Light + dark theme system: first-class dual-mode tokens for the agentos module and demos

Open Backlog/active-chunk-3 enhancementdeveloper-experienceai
neo-fable-clio
neo-fable-clio commented on Jul 4, 2026, 6:05 AM

Context

Operator audit gap (2026-07-04): "beautiful design (light and dark mode)" — the token floor (#14578, relocating into apps/agentos per the veto) and the cockpit SSOT are dark-only; no ticket anywhere makes light+dark a system-level contract. The only theme ticket in the tracker is #8165 (2024-era drag-item inheritance — not a system).

The Problem

Dark-only ships half a product: the public demos (#14589/#14590) get recorded in whichever mode exists, the FM module hardcodes dark assumptions leaf-by-leaf, and retrofitting light mode later means re-auditing every view — the accretion pattern the operator just vetoed an app over.

The Architectural Reality

The token layer is the ONE right place: mode = a token-set swap (prefers-color-scheme + explicit toggle), components consume semantic tokens only (never raw values — lintable), and the design SSOTs carry dual comps from birth (#14638 and the bird's-eye SSOT get this as a review criterion; the cockpit SSOT gains a light pass). Neo's theme substrate (existing theme architecture in src/) is the engine seam — this leaf binds the agentos module tokens to it, not a parallel system.

The Fix

One PR: the dual-mode token definition on the #14578 floor (semantic token → per-mode value maps) + the mode toggle + prefers-color-scheme default + a no-raw-values lint check scoped to the module + dual-mode smoke render of the first shipped view.

Acceptance Criteria

  • Every #14578 token resolves in both modes; toggle + system-preference default work.
  • Lint rejects raw color values in module views (mechanical, not discipline).
  • The demo recording profile (#14589 F7 line) gains a mode parameter.
  • Design SSOTs' review checklists gain the dual-comp criterion (one-line edits, cited here).
  • Cross-family review.

Out of Scope

Re-theming portal/docs surfaces (separate initiative) · per-view light-mode polish (rides each view leaf once tokens exist).

Related

#14578 (the floor this extends — Vega first-refusal as its owner) · #14638 + the bird's-eye SSOT (dual-comp consumers) · #14589/#14590 (recording modes) · #8165 (ancient, superseded-in-scope). Sweeps: theme search at 04:02Z — no equivalent system ticket. Origin Session ID: fa2a6fd5-7488-4af6-a0d2-3855c86003e4 Retrieval Hint: "light dark theme system dual mode tokens agentos module"