freezmo/components
Martin Dvorak 190664c1a5 Lock the key gate while the on-screen keyboard is up
On phones the gate card (447px) is taller than the keyboard-reduced
viewport, so the browser panned the page to reveal the field and the user
could keep scrolling/dragging while typing the API key.

- Pin the gate to the visual viewport (height + offsetTop tracked from
  visualViewport resize/scroll), so the browser never needs to pan the
  page to reveal the focused field.
- When the keyboard is detected (visual viewport >120px shorter than
  innerHeight), lock the card: overflow hidden + touch-action none, and
  keep the field and Continue button in view by scrolling the wrapper
  programmatically. Re-aligns on resize and when the card grows (error
  message / busy state).
- Corner controls are now absolute within the pinned gate so they stay in
  the visual viewport.
- Don't auto-focus the field on touch devices (no forced keyboard on
  load); desktop still focuses.

Verified by shrinking the viewport to 330px: card locked (wheel/swipe
does nothing), field 182-230 and Continue 242-290 both visible, doc
scrollHeight == viewport; error state keeps Continue at 270-318.
key-gate 49/49, install sheet 64/64, final-ux 12/12, zoom 6/6.
2026-10-07 13:00:06 +00:00
..
activities Fix ordering giveaways, the stuck false label, add Regenerate deck 2026-10-07 11:25:22 +00:00
ApiKeyGate.tsx Lock the key gate while the on-screen keyboard is up 2026-10-07 13:00:06 +00:00
AppHeader.tsx Freezmo: self-hosted notes-to-activities study app 2026-10-06 20:56:55 +00:00
DeckCard.tsx Freezmo: self-hosted notes-to-activities study app 2026-10-06 20:56:55 +00:00
FolderBar.tsx Freezmo: self-hosted notes-to-activities study app 2026-10-06 20:56:55 +00:00
icons.tsx Fix the iOS install sheet: exact Safari flow, chips, iOS blue, layout 2026-10-07 08:49:32 +00:00
InstallSheet.tsx Fix the iOS install sheet: exact Safari flow, chips, iOS blue, layout 2026-10-07 08:49:32 +00:00
LibraryScreen.tsx Add full-screen API-key gate 2026-10-06 21:20:22 +00:00
ResultsScreen.tsx Fix ordering giveaways, the stuck false label, add Regenerate deck 2026-10-07 11:25:22 +00:00
ServiceWorkerRegistrar.tsx Freezmo: self-hosted notes-to-activities study app 2026-10-06 20:56:55 +00:00
SettingsDialog.tsx Add the Install the app bottom sheet for mobile browsers 2026-10-07 08:27:43 +00:00
Sidebar.tsx Freezmo: self-hosted notes-to-activities study app 2026-10-06 20:56:55 +00:00
StudyFeed.tsx Fix ordering giveaways, the stuck false label, add Regenerate deck 2026-10-07 11:25:22 +00:00
TabBar.tsx Freezmo: self-hosted notes-to-activities study app 2026-10-06 20:56:55 +00:00
ThemeToggle.tsx Freezmo: self-hosted notes-to-activities study app 2026-10-06 20:56:55 +00:00
ui.tsx Screens that already fit no longer scroll or rubber-band 2026-10-07 12:37:46 +00:00
UploadScreen.tsx Deck chrome: neutral surfaces, borders and text (no navy leftovers) 2026-10-07 09:06:18 +00:00