/* ============================================================
   THE PURE MAN — premium interaction layer (Tier 1).
   Everything is scoped under html.fx so it is completely inert
   unless the visitor opts in via ?fx=1. Non-destructive.
   ============================================================ */

/* ---- Lenis smooth scroll plumbing ---- */
html.fx.lenis, html.fx.lenis body { height: auto; }
html.fx.lenis.lenis-smooth { scroll-behavior: auto !important; }
html.fx.lenis.lenis-smooth [data-lenis-prevent] { overscroll-behavior: contain; }
html.fx.lenis.lenis-stopped { overflow: hidden; }

/* ---- scroll progress bar ---- */
.fx .fx-progress {
  position: fixed; top: 0; left: 0; height: 2px; width: 0;
  background: linear-gradient(90deg, var(--color-laser-dark), var(--color-laser));
  z-index: 2000; will-change: width;
}

/* ---- nav: shrink + frost on scroll ---- */
html.fx .nav-bubble { transition: padding .35s var(--ease-out), background-color .35s ease, box-shadow .35s ease, border-color .35s ease; }
html.fx.nav-scrolled .nav-bubble {
  padding-top: 10px; padding-bottom: 10px;
  background: rgba(12, 12, 11, .82);
  -webkit-backdrop-filter: blur(16px) saturate(1.3); backdrop-filter: blur(16px) saturate(1.3);
  box-shadow: 0 10px 34px rgba(0, 0, 0, .45);
}
html.fx .nav-link { position: relative; }
html.fx .nav-link::after {
  content: ""; position: absolute; left: 0; bottom: -5px; height: 1px; width: 0;
  background: var(--color-laser); transition: width .3s var(--ease-out);
}
html.fx .nav-link:hover::after { width: 100%; }

/* ---- hero headline: line mask reveal ---- */
html.fx .hero h1 .ln { display: block; overflow: hidden; padding-bottom: .04em; }
html.fx .hero h1 .ln > span { display: block; transform: translateY(112%); transition: transform 1s var(--ease-out); }
html.fx .hero h1.in .ln > span { transform: translateY(0); }
/* sub + actions ease up after the lines */
html.fx .hero-content > p, html.fx .hero-actions, html.fx .hero .kicker {
  opacity: 0; transform: translateY(16px); transition: opacity .8s var(--ease-out), transform .8s var(--ease-out);
}
html.fx .hero.in .hero-content > p, html.fx .hero.in .hero-actions, html.fx .hero.in .kicker { opacity: 1; transform: none; }
html.fx .hero.in .hero-content > p { transition-delay: .5s; }
html.fx .hero.in .hero-actions { transition-delay: .62s; }

/* ---- buttons: arrow slide + fill wipe ---- */
html.fx .btn { position: relative; overflow: hidden; isolation: isolate; }
html.fx .btn svg { transition: transform .3s var(--ease-out); }
html.fx .btn:hover svg { transform: translateX(5px); }
html.fx .btn--secondary::before {
  content: ""; position: absolute; inset: 0; z-index: -1; background: var(--color-laser);
  transform: scaleX(0); transform-origin: left; transition: transform .4s var(--ease-out);
}
html.fx .btn--secondary { transition: color .3s ease, border-color .3s ease; }
html.fx .btn--secondary:hover { color: var(--color-neutral-darkest); border-color: var(--color-laser); }
html.fx .btn--secondary:hover::before { transform: scaleX(1); }
html.fx .btn--primary { transition: transform .25s var(--ease-out), box-shadow .25s var(--ease-out); }
html.fx .btn--primary:hover { transform: translateY(-2px); box-shadow: 0 12px 28px rgba(201, 169, 110, .28); }

/* ---- cards: lift + image zoom ---- */
html.fx .guide, html.fx .tcard, html.fx .q-item, html.fx .offer-card { transition: transform .45s var(--ease-out); }
html.fx .guide:hover { transform: translateY(-6px); }
html.fx .tcard:hover { transform: translateY(-4px); }
html.fx .guide .ph-img { overflow: hidden; }
html.fx .guide .ph-img img { transition: transform .7s var(--ease-out); }
html.fx .guide:hover .ph-img img { transform: scale(1.06); }

/* ---- image / media clip-path reveal ---- */
html.fx [data-fx-reveal] { clip-path: inset(0 0 100% 0); transition: clip-path 1.1s var(--ease-out); will-change: clip-path; }
html.fx [data-fx-reveal].in { clip-path: inset(0 0 0 0); }

/* ---- mobile menu (hamburger + full-screen sheet) ---- */
html.fx .fx-burger { display: none; }
html.fx .fx-menu { display: none; }
@media (max-width: 860px) {
  html.fx .nav-bubble .nav-links { display: none; }
  html.fx .nav-bubble > .btn { display: none; }
  html.fx .fx-burger {
    display: inline-flex; flex-direction: column; gap: 5px; justify-content: center;
    width: 42px; height: 42px; padding: 11px; background: none; border: 0; cursor: pointer; margin-left: auto;
  }
  html.fx .fx-burger span { display: block; height: 1.5px; width: 100%; background: var(--color-cream, #f6f3ea); transition: transform .35s var(--ease-out), opacity .25s; }
  html.fx.menu-open .fx-burger span:nth-child(1) { transform: translateY(6.5px) rotate(45deg); }
  html.fx.menu-open .fx-burger span:nth-child(2) { transform: translateY(-6.5px) rotate(-45deg); }
  html.fx .fx-menu {
    display: flex; position: fixed; inset: 0; z-index: 1500;
    background: rgba(10, 10, 9, .98); -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px);
    transform: translateY(-100%); transition: transform .5s var(--ease-out); will-change: transform;
  }
  html.fx.menu-open .fx-menu { transform: translateY(0); }
  html.fx .fx-menu-inner { margin: auto; display: flex; flex-direction: column; gap: 28px; text-align: center; padding: 32px; width: 100%; list-style: none; }
  html.fx .fx-menu-inner ul, html.fx .fx-menu-inner li { list-style: none; margin: 0; padding: 0; display: block; }
  html.fx .fx-menu-inner a:not(.btn) {
    font-family: var(--font-display); font-size: 2rem; color: var(--color-cream, #f6f3ea); text-decoration: none; letter-spacing: .01em;
  }
  html.fx .fx-menu-inner .btn { margin-top: 12px; align-self: center; }
  html.fx.menu-open { overflow: hidden; }
}

/* ============================================================
   TIER 2 — flow & choreography
   ============================================================ */

/* soft seams: blend the hard dark<->cream section cuts.
   Strict alternation means every cream section follows a dark one
   (fade from dark at its top) and every dark content section follows
   a cream one (fade from cream). The gradient sits in the top padding,
   above the text, so contrast is untouched. */
html.fx .section { position: relative; }
html.fx .section > * { position: relative; z-index: 1; }
html.fx .scheme-2.section::before,
html.fx .scheme-1.section:not(.hero)::before {
  content: ""; position: absolute; left: 0; right: 0; top: 0; height: 96px;
  pointer-events: none; z-index: 0;
}
html.fx .scheme-2.section::before { background: linear-gradient(to bottom, rgba(12, 12, 11, .5), rgba(12, 12, 11, 0)); }
html.fx .scheme-1.section:not(.hero)::before { background: linear-gradient(to bottom, rgba(246, 243, 234, .32), rgba(246, 243, 234, 0)); }

/* parallax-driven elements get GPU hints */
html.fx .hero-media, html.fx .hero-content, html.fx .oc-mark { will-change: transform; }

/* ---- respect reduced motion: kill transforms/transitions ---- */
@media (prefers-reduced-motion: reduce) {
  html.fx * , html.fx *::before, html.fx *::after { transition: none !important; animation: none !important; }
  html.fx .hero h1 .ln > span,
  html.fx .hero-content > p, html.fx .hero-actions, html.fx .hero .kicker { transform: none !important; opacity: 1 !important; }
  html.fx [data-fx-reveal] { clip-path: none !important; }
}
