freezmo/lib
Martin Dvorak 374752c59e Animation pass: one shared motion language for phones
Mobile only (<=639px / coarse pointers); desktop keeps its behaviour.

Foundation
- lib/motion.ts owns the spring presets (snappy/gentle/sheet), durations,
  easings and variants (screens, tabs, wizard steps, list stagger).
- Native-feel CSS: press feedback scales every button, card, chip, tab,
  row and summary to 0.96 with a spring-like cubic-bezier on transform
  (scoped to phones/coarse pointers), tap-highlight off, touch-action
  manipulation, chrome text non-selectable, reduced motion drops it.
- App shell fades in once on launch; the study feed fades in on phones.

Applied
- Tab bar: sliding active pill (shared layoutId) + icon bounce.
- Study Decks/Homework, language toggle, difficulty and size pickers:
  the same gliding highlight, gated so desktop keeps the old styling.
- Route content enters direction-aware (deeper = from the right, back =
  from the left, same-depth = crossfade) via RouteTransition on the
  library/create/homework content columns; library tab switches
  crossfade; wizard steps slide forward/backward (reduced motion safe).
- Library: cards fade up in a capped stagger on first load, glide with
  layout animations and shrink away on delete (AnimatePresence).
- Study feed: correct feedback pulses, wrong shakes, the progress bar
  settles with a spring curve, score and XP count up on the results.
- Settings sheet uses the sheet spring; the drawer now follows the
  finger and closes on release velocity, like the sheet.
- Generation progress: the stage message fades/slides between stages;
  the icon keeps its gentle wobble; the feed fades in on hand-off.

Skipped, on purpose: LazyMotion (the sliding highlights need layout
animations = domMax, same features the current import already has);
route exit animations (the App Router unmounts the outgoing page —
exits are handled by in-page AnimatePresence); replacing the study
feed's native scroll-snap with finger-follow drag (would fight the
platform scroller); finger-follow height animation for native <details>
expanders.

Verified: animation suite 8/8 (reduced motion + 4x-CPU-throttled trace:
no long tasks, CLS 0.0000), regression 74/74, mobile 52/52, declutter
116/116, i18n 25/25. Lint + build clean. SW freezmo-v21.
2026-10-10 11:01:29 +00:00
..
ai.ts Grade against the question: stop requiring details the question never asked for 2026-10-09 18:13:29 +00:00
client-api.ts Add “Make my homework”, and finish the mobile polish pass 2026-10-08 18:30:33 +00:00
clipboard.ts Add “Make my homework”, and finish the mobile polish pass 2026-10-08 18:30:33 +00:00
confetti.ts Freezmo: self-hosted notes-to-activities study app 2026-10-06 20:56:55 +00:00
config.ts Add “Make my homework”, and finish the mobile polish pass 2026-10-08 18:30:33 +00:00
deck-ops.ts Freezmo: self-hosted notes-to-activities study app 2026-10-06 20:56:55 +00:00
documents.ts Add an English/Czech interface language switch 2026-10-08 13:56:32 +00:00
folders.ts Add an English/Czech interface language switch 2026-10-08 13:56:32 +00:00
homework.ts Add “Make my homework”, and finish the mobile polish pass 2026-10-08 18:30:33 +00:00
http-guard.ts Add an English/Czech interface language switch 2026-10-08 13:56:32 +00:00
i18n-dict.ts Mobile declutter pass: step flows, compact cards, simplified settings 2026-10-10 10:43:32 +00:00
i18n.ts Add an English/Czech interface language switch 2026-10-08 13:56:32 +00:00
image.ts Add an English/Czech interface language switch 2026-10-08 13:56:32 +00:00
install.ts Add the Install the app bottom sheet for mobile browsers 2026-10-07 08:27:43 +00:00
language.ts Freezmo: self-hosted notes-to-activities study app 2026-10-06 20:56:55 +00:00
motion.ts Animation pass: one shared motion language for phones 2026-10-10 11:01:29 +00:00
nav.ts Freezmo: self-hosted notes-to-activities study app 2026-10-06 20:56:55 +00:00
ollama.ts Add an English/Czech interface language switch 2026-10-08 13:56:32 +00:00
prompts.ts Grade against the question: stop requiring details the question never asked for 2026-10-09 18:13:29 +00:00
rate-limit.ts Add an English/Czech interface language switch 2026-10-08 13:56:32 +00:00
schemas.ts Add “Make my homework”, and finish the mobile polish pass 2026-10-08 18:30:33 +00:00
settings.ts Add full-screen API-key gate 2026-10-06 21:20:22 +00:00
storage.ts Add an English/Czech interface language switch 2026-10-08 13:56:32 +00:00
ui-events.ts Freezmo: self-hosted notes-to-activities study app 2026-10-06 20:56:55 +00:00
use-health.ts Mobile UI pass: sheet swipe, ice-scene layering, contrast, touch targets 2026-10-08 17:37:51 +00:00
use-notes-intake.ts Add “Make my homework”, and finish the mobile polish pass 2026-10-08 18:30:33 +00:00
use-phone.ts Mobile declutter pass: step flows, compact cards, simplified settings 2026-10-10 10:43:32 +00:00
utils.ts Freezmo: self-hosted notes-to-activities study app 2026-10-06 20:56:55 +00:00
xp.ts Freezmo: self-hosted notes-to-activities study app 2026-10-06 20:56:55 +00:00