lab · exploring

Dynamic tone

tone="dynamic" end to end: a ColorPicker seed recolors a subtree of cards, badges, stamps, an avatar, an alert, progress and a checkbox live with the generator's diagnostics and a contrast table of every text pair, server-rendered tenant cards each scope their own seed with no script, and an unset scope falls back to neutral.

frameworksastro
Exploringcardbadgestampavataralertprogresscheckboxkbdcolor-picker
scenarioSeed picker recolors a subtree

Every part inside the scope follows the picked seed in both modes; text stays readable on every surface; the diagnostics list what the generator had to clamp.

Seed
oklch(0.62 0.17 300)
Kind
chromatic
Clamped (light)
text.contrast.bold
Clamped (dark)
text.contrast.bold

Autumn reading club

14 members · meets Thursdays

This week: chapters 4–6. Bring one passage you would cut and one you would read aloud.

Book club Weekly Hybrid
62%

Host this week

RA

Rosa picks the next title.

Reminder

RSVP closes Wednesday at noon. Press R on the event to reply.
scenarioContrast pairs for the seed

Every text token of the picked seed, on the weakest surface step it sits on (contrast text on the accent fill), in both modes — nothing may fall below AA; a clamped token shows as AA only.

Text contrast of the dynamic family, graded against the generator's targets

Text contrast of the dynamic family, graded against the generator's targets
ModeText tokenOn (weakest step)WCAGAPCA LcTargetResult
lighttextsurface.ground7.63:1767:1 · Lc 75✓ target
lighttext.boldsurface.ground16.60:19010:1 · Lc 90✓ target
lighttext.mutedsurface.ground4.60:1644.5:1 · Lc 55✓ target
lighttext.accentsurface.ground4.61:1634.5:1 · Lc 60✓ target
lighttext.contrastaccent.surface.peak4.59:1684.5:1 · Lc 60✓ target
lighttext.contrast.boldaccent.surface.peak5.58:1837:1 · Lc 75AA only (clamped)
lighttext.contrast.mutedaccent.surface.peak4.59:1684.5:1 · Lc 50✓ target
lighttext.contrast.accentaccent.surface.peak4.58:1684.5:1 · Lc 50✓ target
darktextsurface.peak12.91:1817:1 · Lc 75✓ target
darktext.boldsurface.peak16.12:19610:1 · Lc 90✓ target
darktext.mutedsurface.peak8.94:1604.5:1 · Lc 55✓ target
darktext.accentsurface.peak9.89:1664.5:1 · Lc 60✓ target
darktext.contrastaccent.surface.peak4.59:1654.5:1 · Lc 60✓ target
darktext.contrast.boldaccent.surface.peak6.12:1857:1 · Lc 75AA only (clamped)
darktext.contrast.mutedaccent.surface.peak4.59:1654.5:1 · Lc 50✓ target
darktext.contrast.accentaccent.surface.peak4.62:1654.5:1 · Lc 50✓ target
scenarioOne seed per tenant, rendered on the server

Each card wears its tenant's color with no script; the near-gray seed becomes a tinted neutral, the yellow one keeps readable text, and the invalid seed falls back to neutral.

Harbor Coffee

Growth plan

chromatic#b45309

Northwind Clinic

Care plan

chromatic#0f766e

Lumen Studio

Studio plan

chromatic#db2777

Atlas Freight

Fleet plan

chromatic#1d4ed8

Quarry Books

Starter plan

neutral#78716c

Citrine Labs

Research plan

chromatic#facc15

Unknown tenant

Seed is not a color

neutral fallbacknot-a-color
scenarioNo scope: dynamic renders as neutral

Without a toneStyle()/applyTone() ancestor, tone="dynamic" matches tone="neutral" exactly.

tone="dynamic"

Label Label

tone="neutral"

Label Label