- Replace the design tokens in globals.css with the Living Codex system (parchment
light · candlelit dark, gilt accent), keeping every existing --app-*/utility name
so nothing breaks. Adds surface-2/panel-2/line-strong/ink-soft/faint/accent-deep/
accent-soft/accent-glow/verdigris + --app-accent-hue (one-number reskin) and
paper-grain/gilt-rule/smallcaps helpers.
- Self-host the type system via @fontsource (offline-safe, no CDN/CSP change):
Spectral (serif headings), Hanken Grotesk (UI), Spline Sans Mono (stats).
- Kept: dice/crit animations, print rule, reduced-motion, scrollbars.
223 unit + 34 e2e green; no console errors.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Drop the 300-row cap; show the true filtered count (e.g. '8,402 results')
- Virtualize the results list (@tanstack/react-virtual) so thousands of rows
render smoothly
- Sort dropdown: Name A-Z/Z-A plus a numeric axis per category (CR for monsters,
Level for spells/feats/PF2e categories)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>