/* ═══════════════════════════════════════════════════════════════════════════
   GRANDS ÉCRANS (> 16 pouces) — même rendu que sur un portable 14/16".

   Le site est dessiné en pixels pour des viewports de portable (1512 px sur
   un MacBook 14", 1728 px sur un 16"). Au-delà, plutôt que d'étirer les
   mises en page, on met TOUT à l'échelle avec `zoom` : le layout se calcule
   comme sur un portable (largeur effective ≈ 1490–1740 px) puis est agrandi
   d'un facteur constant — l'équivalent exact du zoom navigateur, mais côté
   site. Les unités vh/vw et les media queries restent calées sur le viewport
   RÉEL, donc le deck 100vh des pages produit reste plein écran.

   Le zoom est posé sur BODY, pas sur :root : les overlays que le JS appende
   à <html> (canvas WebGL de la home, hors snapshot Turbo) restent ainsi en
   pixels réels, alignés sur getBoundingClientRect/innerWidth — leurs calculs
   restent justes sans modification.

   `zoom` est standardisé (module CSS Viewport) : Chrome/Edge/Safari de
   longue date, Firefox ≥ 126. Un navigateur qui l'ignore garde simplement
   le rendu actuel.

   Le garde-fou min-height écarte les fenêtres larges mais très basses
   (fenêtre redimensionnée à la main) où l'agrandissement manquerait de
   hauteur ; tous les moniteurs réels passent largement.

   largeur réelle → zoom → largeur effective (repères matériels)
      1800–2079   → 1.20 → 1500–1733    24" 1920×1080/1200 → 1600
      2080–2239   → 1.35 → 1541–1659    MacBook 16" « Plus d'espace » 2056
      2240–2879   → 1.50 → 1493–1919    iMac 24" 2240 → 1493 · 27" QHD 2560 → 1707
      2880–3399   → 1.75 → 1646–1942    30–32" 3008 → 1719
      3400–3839   → 2.00 → 1700–1919    ultrawide 3440 → 1720
      ≥ 3840      → 2.25 → 1707+        4K à l'échelle native
   ═══════════════════════════════════════════════════════════════════════ */

/* ⚠ CONTRAT — unités viewport sous zoom. Le zoom standardisé multiplie AUSSI
   les longueurs vh/vw/vmin/vmax (vérifié sur Chrome 148 : un 100vh dans un
   body zoom:1.2 rend 120 % de l'écran). Toute unité viewport des surfaces
   publiques doit donc s'écrire  calc(Nvh / var(--sz, 1))  — la variable
   ci-dessous suit le zoom, et le repli 1 rend l'écriture inerte partout
   ailleurs (portables, admin). Les templates publics et
   build/legacy/css-app.css (patché sur le serveur, lien en ?v=3) sont déjà
   convertis ; toute NOUVELLE feuille publique doit suivre ce contrat.
   ⚠ Les navigateurs ne sont PAS d'accord entre eux : Safari (et les
   navigateurs sans zoom) gardent les vh calées au viewport — la sonde
   shared/_screens_xl_probe.html.twig, incluse en tête de body par les
   layouts publics, neutralise --sz (inline, prioritaire) sur ces moteurs. */
@media (min-width: 1800px) and (min-height: 700px) { body { zoom: 1.2;  --sz: 1.2; } }
@media (min-width: 2080px) and (min-height: 700px) { body { zoom: 1.35; --sz: 1.35; } }
@media (min-width: 2240px) and (min-height: 700px) { body { zoom: 1.5;  --sz: 1.5; } }
@media (min-width: 2880px) and (min-height: 700px) { body { zoom: 1.75; --sz: 1.75; } }
@media (min-width: 3400px) and (min-height: 700px) { body { zoom: 2;    --sz: 2; } }
@media (min-width: 3840px) and (min-height: 700px) { body { zoom: 2.25; --sz: 2.25; } }
