# 12.3.17 — Smoother transitions and animations

Everything animated is transform/opacity only, durations are in ms (smooth at 60 Hz and 120/144 Hz), no per-frame JS.

## POS (`pos.js`, `pos.css`)
- Tiles and order lines are **updated in place** instead of rebuilt on every tap: no hover/press flicker, cost no longer grows with menu size.
- Count badge pops when an item is added; new order lines slide in; mobile order sheet and bottom bar rise in.
- Till buttons get a shared quick colour ease and pressed state.

## App-wide (`style.css`, `common.js`, `app.js`)
- Mobile menu slides with `transform` (was animating `left`) and is `visibility:hidden` while closed.
- Toasts and dynamically built dialogs (confirm, reason, restock, chart zoom) fade out; their promises still resolve immediately.
- Removed the animated backdrop blur behind modals (slightly darker dim instead).
- Press states, touch-action / tap-highlight cleanup, overscroll containment in dialogs, reduced-motion guards.

## Bug fix
- Escape used `document.querySelector('.modal-backdrop').remove()`, which deleted a hidden built-in modal (e.g. `#pos-done-modal`) from the page. It now closes the topmost open modal.

## Housekeeping
- Service-worker cache v49 -> v50; `?v=` strings bumped for style.css, pos.css, common.js, pos.js, app.js.
- No schema, server or data changes.
