/* =====================================================================
   FilmParty — pinch-zoom spring-back guard (zoom-lock)
   ---------------------------------------------------------------------
   Why: the glass UI stacks position:fixed + backdrop-filter layers (topbar,
   modals) and a full-bleed html::before gradient. On iOS Safari a pinch-zoom
   re-rasterizes those layers at the new scale and, past the compositor's tile
   budget, drops them to solid white = the "white screen" bug. The paired
   zoom-lock.js springs any stray zoom back to scale 1 (iOS's own animation),
   so the page is never left in the broken zoomed state.

   This file only:
   - touch-action: pan-x pan-y  → browser handles scrolling only, never
     double-tap-zoom (and Android pinch). Touch events still reach JS, so
     custom-pinch widgets (avatar cropper, scenes) keep working.

   No transforms on <body> here: scaling body would turn it into the
   containing block for the fixed topbar/modals and cause its own flash.

   Loaded globally (app + auth + admin layouts). Isolated: only `.fp-zoom-*`
   root class + component opt-outs, so nothing else is affected.
   ===================================================================== */

html.fp-zoom-lock {
    touch-action: pan-x pan-y;
    -ms-touch-action: pan-x pan-y;
}

/* Opt-out zones — components that drive their OWN pinch/zoom via JS touch
   handlers. They need full gesture control so cropping/scene-zoom still
   pinch (and the page never pans underneath them mid-gesture). */
html.fp-zoom-lock #avatarCropModal,
html.fp-zoom-lock #avatarCropStage,
html.fp-zoom-lock .avatar-crop-stage,
html.fp-zoom-lock .scenes-stage,
html.fp-zoom-lock .scene-reel,
html.fp-zoom-lock [data-fp-allow-pinch] {
    touch-action: none;
    -ms-touch-action: none;
}
