# Comfort modes

Visualli is for visual learners — and that includes people with ADHD, dyslexia, low vision, color-vision differences and motion sensitivity. Comfort is a first-class setting, reached from the sliders icon in the Vault footer (`ComfortPanel`), remembered per account and applied before the first paint.

## The model: two choices and four switches
**Appearance** — Light · Dark · System.
**Palette** — one of four, each with a light and dark theme (8 themes in `tokens.json`):

| Palette | `data-theme` | What changes | For |
| --- | --- | --- | --- |
| Standard | `light` / `dark` | The full spectrum. | Everyone (default). |
| Focus | `focus-light` / `focus-dark` | Topic fills desaturate to ~45%; edges and canvas quieten; hovering (or, on touch, selecting) an idea dims all others to 40% (spotlight). | ADHD, anxiety, busy maps. |
| Color-safe | `colorsafe-light` / `colorsafe-dark` | Topics re-map to Okabe & Ito-derived pastels that stay distinct with any color vision; statuses leave the red–green axis (blue = done, vermillion = problem). | Deuteranopia, protanopia, tritanopia. |
| High contrast | `contrast-light` / `contrast-dark` | Pure white/black grounds, every text token ≥ 7:1, rings and control borders ≥ 3:1 (outer ring 4.5:1+), no shadows, 2px outlines on all chrome. Statuses are also color-safe. | Low vision, bright sunlight, projectors. |

**Switches** (independent of palette):
| Switch | Attribute | Effect |
| --- | --- | --- |
| Readable type | `data-type="readable"` | Kalam, Caveat and Haksen fall back to Atkinson Hyperlegible Next, bold, +0.02em tracking, no italics. Helps dyslexic readers. |
| Larger text | `data-scale="lg"` | UI text one step up (15→17px body), node labels ×1.15. |
| Reduce motion | `data-motion="reduced"` | No dives or blooms; 120ms fades only. Also honored automatically from `prefers-reduced-motion`. |
| Gradual reveal | `data-reveal="gradual"` / `"instant"` | On: ideas bloom one by one. Off: a layer appears whole. Some ADHD users prefer each; it is not tied to motion. |

## Rules
- Never encode anything in color alone — rings, labels, connector style, icons and words carry the meaning, so every palette is safe by construction.
- Statuses always pair icon + word + color.
- Every palette passes the same contrast audit: text 4.5:1 (7:1 in High contrast) on every surface its token note names; focus ring, control borders and connector strokes 3:1.
- Comfort settings are presented as *comfort*, never as "accessibility mode" or "disability settings". Copy describes the benefit ("Quieter colors, a spotlight on what you hover").
- `applyComfort(choice)` writes all five attributes on `<html>`; server-render them from the saved preference to avoid a flash.
