/* ITDot — base partagée (reset léger, utilitaires, placeholders, switcher) */

*, *::before, *::after { box-sizing: border-box; }
* { margin: 0; padding: 0; }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } }
body { min-height: 100%; line-height: 1.5; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; }
img, svg, video, canvas { display: block; max-width: 100%; }
img { height: auto; }
a { color: inherit; text-decoration: none; }
button { font: inherit; color: inherit; background: none; border: none; cursor: pointer; }
ul, ol { list-style: none; }
:focus-visible { outline: 2px solid currentColor; outline-offset: 3px; }
body.nav-locked { overflow: hidden; }

/* ---------- Reveal ----------
   Default = VISIBLE. Hidden state applies only once <html> has `anim-on`
   (added by JS when the animation timeline actually advances). Guarantees
   static/offscreen/print renders always show content. */
html.anim-on [data-reveal] {
  opacity: 0;
  transform: translateY(26px);
  transition: opacity .8s cubic-bezier(.16,1,.3,1), transform .8s cubic-bezier(.16,1,.3,1);
  will-change: opacity, transform;
}
html.anim-on [data-reveal].is-in { opacity: 1; transform: none; will-change: auto; }
html.anim-on [data-reveal="fade"] { transform: none; }
html.anim-on [data-reveal="left"] { transform: translateX(-40px); }
html.anim-on [data-reveal="right"] { transform: translateX(40px); }
html.anim-on [data-reveal="scale"] { transform: scale(.94); }
html.anim-on [data-reveal="clip"] { clip-path: inset(0 100% 0 0); transform: none; transition: clip-path 1s cubic-bezier(.16,1,.3,1), opacity .6s ease; }
html.anim-on [data-reveal="clip"].is-in { clip-path: inset(0 0 0 0); }

/* ---------- Safety net : force everything visible if the timeline froze ---------- */
html.force-visible [data-reveal] { opacity: 1 !important; transform: none !important; clip-path: none !important; transition: none !important; }
html.force-visible .ln > span { transform: none !important; animation: none !important; opacity: 1 !important; }
html.force-visible .hero__sub,
html.force-visible .hero__cta,
html.force-visible .map__panel { opacity: 1 !important; transform: none !important; animation: none !important; }

/* utility */
.u-noscroll-x { overflow-x: clip; }
