Semantic roles Role Token Hex belonging accentSecondary#a5b4fctension accentDanger#f97373reframe accentPrimary#7dd3fcaction accentPrimary#7dd3fccontinuation accentSecondary#a5b4fcouterPressure accentSecondary#a5b4fcdepthLink textMuted#9ca5c5alarm accentDanger#f97373
WCAG contrast cache (computed 2026-05-17) Pair Ratio Level textMain_on_background18.00:1 AAA textMuted_on_background7.81:1 AAA textSoft_on_background5.12:1 AA-normal, AAA-large accentPrimary_on_background11.20:1 AAA accentSecondary_on_background9.48:1 AAA accentDanger_on_background6.99:1 AAA-large, AA-normal textMain_on_surface16.10:1 AAA
Typography scale headlineXl — 40px / 28px mobile
The quick brown fox jumps over the lazy dog
headlineLg — 32px / 24px mobile
The quick brown fox jumps over the lazy dog
mantra — 22px / 20px mobile
The quick brown fox jumps over the lazy dog
prompt — 20px / 18px mobile
The quick brown fox jumps over the lazy dog
body — 18px / 17px mobile
The quick brown fox jumps over the lazy dog
small — 15px / 14px mobile
The quick brown fox jumps over the lazy dog
Slide order + accent binding Slide 1
Belonging
accent: belonging
layout: centered
Slide 2
Tension
accent: tension
layout: top-left
Slide 3
Reframe
accent: reframe
layout: top-left
Slide 4
Action
accent: action
layout: top-left
Slide 5
Continuation
accent: continuation
layout: centered
Forbidden patterns (machine-detectable) brand-red-as-chrome (block) Element background or border uses accent-danger AND role is not in [alarm, error, kill-signal, slide-2-tension]
glass-morphism-hero (block) backdrop-filter: blur(*) on element matching hero|card|prompt
text-below-min-size (block) Computed font-size < 14px (mobile) / 15px (desktop) on any rendered text element
film-grain-on-body (block) Noise overlay opacity > 0.04 on any body slide
single-face-showcase (block) PromptDeckShowcase rendered without secondary face
always-on-3d-tilt (block) Element binds --pd-tilt-x or --pd-tilt-y to pointer without prefers-reduced-motion: no-preference media query gate
more-than-three-accents-visible (warn) More than 3 distinct accent color tokens visible in the viewport
Generic-test verdict (live) Re-run scoreGenericTest() Proving Ground — every state per part Each card renders the full PromptDeckShowcase in one named state. Captain dogfoods this page on every Vercel preview before merging changes that touch src/components/prompt-deck/. Verdict from scoreGenericTest() must be PASS — see audit-loop .
Full-Showcase states 01 — Default (ink theme, 5+5 slides, speech on, hints on)
Canonical render. Both faces with 5 slides each, all features enabled.
← → y o u a r e n o t a l o n e
This is about you, today. What if the next quarter felt different?
Describe one moment this week when the work felt true. What was different?⎘ Copy prompt Name the moment. Name the difference. Decide what to repeat. → Read the pattern02 — Minimal (1 slide per face)
Edge case: minimum viable face — single slide. Nav pills should still render.
Prompt Deck minimal Minimal Minimal B
← → y o u a r e n o t a l o n e
This is about you, today. What if the next quarter felt different?
Describe one moment this week when the work felt true. What was different?⎘ Copy prompt Name the moment. Name the difference. Decide what to repeat. → Read the pattern03 — Speech disabled (enableSpeech=false)
No ▶ Hear button on prompt cards. Hints row drops the speech hint.
← → y o u a r e n o t a l o n e
This is about you, today. What if the next quarter felt different?
Describe one moment this week when the work felt true. What was different?⎘ Copy prompt Name the moment. Name the difference. Decide what to repeat. → Read the pattern← → y o u a r e n o t a l o n e
This is about you, today. What if the next quarter felt different?
Describe one moment this week when the work felt true. What was different?⎘ Copy prompt Name the moment. Name the difference. Decide what to repeat. → Read the pattern05 — Paper theme on secondary face
Toggle to Paper face — backdrop swaps to light, accent goes calm teal, alarm red preserved.
← → y o u a r e n o t a l o n e
This is about you, today. What if the next quarter felt different?
Describe one moment this week when the work felt true. What was different?⎘ Copy prompt Name the moment. Name the difference. Decide what to repeat. → Read the pattern06 — No siblings (currentHref + siblings omitted)
SiblingPager block hidden. Used when this deck is the only journey page.
← → y o u a r e n o t a l o n e
This is about you, today. What if the next quarter felt different?
Describe one moment this week when the work felt true. What was different?⎘ Copy prompt Name the moment. Name the difference. Decide what to repeat. → Read the pattern07 — Reduced-motion preference
Detected: no-preference. Set OS-level prefers-reduced-motion to validate mantra char fade-in disables.
← → y o u a r e n o t a l o n e
This is about you, today. What if the next quarter felt different?
Describe one moment this week when the work felt true. What was different?⎘ Copy prompt Name the moment. Name the difference. Decide what to repeat. → Read the pattern08 — Single-face anti-pattern (secondary === primary)
⚠ ANTI-PATTERN — design.md forbidden-pattern id: single-face-showcase (severity: block). PromptDeckShowcase rendered without a distinct secondary face violates the two-perspectives doctrine. Reproduced here for visual baseline of the rubric, not as a shippable state.
← → y o u a r e n o t a l o n e
This is about you, today. What if the next quarter felt different?
Describe one moment this week when the work felt true. What was different?⎘ Copy prompt Name the moment. Name the difference. Decide what to repeat. → Read the patternPart isolation Each part rendered alone with fixtures. Confirms each unit is internally consistent and does not require the Showcase wrapper to behave.
MantraReveal — reducedMotion=false
v i s i b l e s t r u c t u r e i s t h e l e v e r a g e
DeckHero — full strip (with pills row)
DeckPills — top-of-hero subtle row (PR 5 nav)
01 Belonging I 02 Tension P 03 Reframe 04 Action 05 Continuation
DeckArrows — edge-anchored prev/next (PR 5 nav)
← → Hover the box edges to reveal the arrows. Active index: 1
SlideStage — single slide, speech on
y o u a r e n o t a l o n e
This is about you, today. What if the next quarter felt different?
Describe one moment this week when the work felt true. What was different?⎘ Copy prompt Name the moment. Name the difference. Decide what to repeat. → Read the patternDeckNav — 5 pills, prev/next handlers wired locally
← 01 Belonging I 02 Tension P 03 Reframe 04 Action 05 Continuation
→ DeckHints — speech hint visible when API supported
← → slideF flip perspective
SpeechButton — hasSpeech=false (button below renders only when true)
Speech Synthesis API not available in this browser.