/* =====================================================================
   preloader — the first-paint overlay's non-critical rules (core track: js/preloader.js).
   The overlay's markup, its critical CSS (layout, monogram, hairline, the pre-JS sweep) and the three subset faces
   live INLINE in index.html (<style id="critical">) so they paint before this sheet exists. Here: what only matters
   once JS has taken over (GSAP owns the fill), the exit states and the no-GSAP / reduced-motion fallbacks.
   ===================================================================== */
#preload.js .pl-bar b { animation: none; width: 100%; transform-origin: 0 50%; transform: scaleX(0); }
#preload.js .pl-mono { will-change: transform, opacity; }

/* no GSAP (CDN failed): a plain fade once the milestones settle (js/preloader.js adds .out) */
#preload.out { opacity: 0; transition: opacity 0.5s ease; }
#preload.out .pl-mono { transform: translateY(-12px); transition: transform 0.5s var(--ease, ease); }

/* the desktop phone frame clips the overlay with its rounded corners (overflow: clip on .device) — nothing to do here */
