Five questions stored under flashcc:v3:prefs, and why a custom ground can never produce an unreadable deck.
Five questions, stored under flashcc:v3:prefs.
| Question | Field | Effect |
|---|---|---|
| Light or dark? | ground (+customBg) | theme.bg/fg/muted |
| Pick an accent | accent | Rules, numerals, quote bar, CTA block |
| How should headings read? | displayFont | theme.displayFont |
| Do you use photos? | images | Reserve an image band or not |
| Lines and accents? | decor | 0 / 1 / 1.8 |
Ten grounds, eight accent swatches, plus a freeform colour picker. A custom ground derives its text colours through colour.textFor, so one decision cannot produce an unreadable deck.
Every storage access is try/caught, and in private mode hasOnboarded() returns true — never nag someone whose browser cannot remember the answer.
REPLAY_IN_DEV = true in onboarding.ts forces onboarding on every dev load. The returning-user path is unreachable in dev without flipping it.