boas.dev / dual-mode showcase

2026-04-27 · functional equivalence · supersession active

1 · Core palette

Fleet-wide cascade tokens. Both modes share the same token names; only values swap. Every component below resolves color through these tokens — no hardcoded literals.

2 · Status palette

Semantic colors for state (warning/danger/info/accent). Cold-pair (--c-accent) provides viz contrast without introducing a third hue family.

3 · Viz ladder

Four-token ladder for data series. Hard cap at four — beyond that, switch primitives.

4 · Typography

Type scale resolves identically in both modes. Inter for headlines/display; JetBrains Mono for body, code, labels.

display
Signal at rest.
headline
Cascade vocabulary keeps surfaces honest.
subheading
Mode is a paint-only attribute flip.
body
Same DOM, same animations, same timings — only --c-* tokens swap. The cascade does the work; authors do not fork stylesheets per mode.
label
section · pattern · viz
caps-label
Operational discipline
code
html[data-mode="amber"] { --c-primary: #b45309; }

5 · Elevation

Four tiers. Dark uses neutral shadows; amber uses warm-tinted shadows. Token swap only — same z-axis hierarchy.

elev-0
Flush, on-surface — no lift.
elev-1
Hairline cards, labels.
elev-2
Hover/active card states.
elev-3
Modal-tier surface.

6 · Buttons

Three variants × three states. Hover transitions identical in both modes.

7 · Form controls

Geometry-stable across modes per constellation-apollo-027 carve-out. Color carries feedback, not size.

chip chip · active badge badge · active warning danger info accent pill pill · active

8 · Table

Hairline borders, hover highlight, tabular-nums for values.

ComponentSource ruleTokensMode parity
Stacked Oscilloscopeviz-primitives.md § 1--c-primary, --c-border100%
Compact Card Rowsection-patterns.md--c-bg, --c-border100%
Triad Modalnarrative-patterns.md--c-bg-raised, --elev-3100%
Growing Graphviz-primitives.md § 5--c-primary, --c-primary-glow100%
Tab Navnarrative-patterns.md--c-bg-raised, --c-primary100%

9 · Section pattern · Compact Card Row

Default boas.dev section. Dense, scannable, hairline-divided.

tokens
42
cascade variables
primitives
5
viz / motion
patterns
5
section + narrative
parity
100%
dual-mode

10 · Section pattern · Section Expand

Disclosure-style expansion. Summary bar visible always; body opens on toggle.

Mode mechanic
Mode is a runtime data-mode attribute on <html>. CSS custom-property cascade does the rest. No JS re-render, no flash-of-unstyled-mode (init script reads localStorage["boas-mode"] before first paint).
Functional equivalence rule
Per supersession 2026-04-27, every component renders identically functionally in both modes. Animation timings, motion structure, layout geometry, interactive behavior — all identical. Only paint values (color, glow, elevation tint) swap via --c-* token cascade.
Aesthetic re-imagination pending
Current amber palette (#b45309 ochre + #f5f0e8 cream) is placeholder. The actual amber aesthetic will be re-designed — paper conceit was a fabricated framing and is removed.

11 · Narrative · Tab Nav

CSS-radio navigation. No JS. Static HTML compatible.

42 cascade tokens. Cores (--c-bg, --c-primary), status (--c-warning, --c-danger, --c-info, --c-accent), viz ladder (--viz-1..4), motion (--t-fast, --tempo-scale), elevation (--elev-0..3).
5 patterns: Compact Card Row, Section Expand, Triad Modal, Tab Nav, Inline Details Expand. Each ships with dual-mode-tested CSS.
5 viz primitives: Stacked Oscilloscope, Thinking Carousel, Slot Rotator, SMIL Morph Blob, Growing Graph. All run motion identically in both modes.

12 · Narrative · Triad Modal

Three primary stories per surface. Each opens a focused modal with --elev-3 surface. CSS-radio mechanic — no JS.

Story 1 · Tokens

The cascade vocabulary is the contract. Components consume --c-* tokens; modes provide values. No component knows what mode it's in — and that's the point.

Story 2 · Mechanics

Mode mechanic is a single data-mode attribute on <html>. localStorage persistence + prefers-color-scheme initial resolution. Toggle flips live without reload.

Story 3 · Identity

Dark = phosphor terminal, amber = ochre placeholder pending re-imagination. Both honor the same component contract — paint-only difference.

13 · Narrative · Inline Details Expand

Lightweight per-row disclosure. Multiple can be open simultaneously.

What survives supersession
Token cascade vocabulary, mode-switching mechanic (data-mode + localStorage), UI-controls geometry-stability carve-out, never-white-background rule, never-#22c55e-in-amber rule.
What was removed
Hard rules 3-5 (L4-5 ban, max-2-anim ceiling, max-2-primitives ceiling), composition-ceiling enforcement, primitive degradation matrix, --tempo-scale=1.2 amber slowdown, paper-rooted bans.
What is deprecated pending re-imagination
Paper aesthetic framing in light-mode.md § Philosophy, paper-mechanics section (grain/vignette as paper substitute), no-directional-shadows rule, sepia-photo + scanlines-as-period-piece bans.

14 · Viz · Stacked Oscilloscope

Animated cursor sweeps left-to-right; spikes ignite as cursor crosses. 8s period. Identical timing in both modes.

activity · 24h window
L1 L2 L3

15 · Viz · SMIL Morph Blob

Continuous rotation + pulsing core. Both modes run identical motion.

16 · Viz · Slot Rotator

Four parallel rows of swappable labels on staggered timers. Active flash uses --c-primary.

Interface
CLAUDE CODE
Protocol
MCP
Model
OPUS 4.7
Storage
SUPABASE

17 · Viz · Growing Graph

Progressive node + edge reveal with hub pulse. Same animation in both modes.

18 · Glitch primitives

Each primitive at L3 in both modes. Cells use the dual-mode glitch token cascade (--glitch-*).

scanlines
CRT beam structure overlay.
hex grid
Section-scoped substrate.
channel split
SIGNAL
phosphor glow
hot accent
L5
vignette
Edge falloff hotspot.

19 · Parity statement

Toggle between dark and amber above. Every component on this page renders functionally identical — same DOM, same animations, same timing, same structure. Only paint (color, glow, elevation tint) swaps via --c-* token cascade.

If a component shows behavioral drift between modes, that is a bug to fix in the cascade — not an intended difference.

Aesthetic re-imagination pending. Current amber palette is placeholder per operator directive 2026-04-27 — paper conceit removed; new amber identity to be designed.