iOS Safari ignores user-scalable=no, so zoom is blocked in three layers:
- viewport meta: maximum-scale=1, user-scalable=no on every page
(covers Android, home-screen apps and iOS focus zoom on inputs)
- CSS: touch-action: pan-x pan-y on html, so scrolling still works but
pinch and double-tap zoom do not
- JS (fluid.js): cancel Safari's gesture* events and two-finger touchmove
Double-tap is left to CSS rather than JS so rapid repeated taps on
buttons still register as clicks.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Replace the look of every page (key, lobby, create, table, range, review)
with light/dark semantic colors, translucent materials, iOS-style grouped
lists and system typography. Add fluid.js, a small spring engine with
interruptible, velocity-aware animations, and use it for draggable bottom
sheets, sliding segmented controls, a custom bet slider with rubber-banding,
swipe-to-delete in the lobby, and dealt/flipped cards. Seats and cards are
now reused between renders so animations are not cut off. Honors reduced
motion, reduced transparency and increased contrast.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Optional ADMIN_KEY (6 digits, distinct from ACCESS_KEY): entering it on the
key screen signs in as admin (role-specific HMAC cookie; member cookies
stay valid). Logged-in members can open /key?admin to enter it.
- /range (range chart + color/category quiz, ported from poker-hand and
restyled to the site design) and its files under admin/ are served only to
admins; everyone else gets 404. Card images cached privately for a day.
- Lobby shows a link to the page for admins only (GET /api/me).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Link /assets/favicon.ico from every page and serve /favicon.ico without
requiring the access key (browsers request it on their own).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>