/* Galloglass – motion layer (v2)
   Applies only when JS has run (html.js) AND the visitor hasn't asked for reduced motion.
   Delete this file and its <link> and the site is static but fully working.
   Variables written by js/main.js: --hy, --gy, --p, --accent, --d, --i */

.progress{position:absolute;z-index:4;left:0;right:0;bottom:0;height:2px;background:var(--accent,var(--paper));transform-origin:left;transform:scaleX(var(--p,0));transition:background .7s ease;pointer-events:none}
.nav ul a[aria-current="true"]{border-color:var(--paper)}

@media (prefers-reduced-motion:no-preference){

  /* age gate */
  .js .gate-inner{animation:gate-in 1s cubic-bezier(.2,.7,.2,1) both}
  .js .gate.hidden .gate-inner{transform:scale(.96) translateY(-.75rem);opacity:0;transition:transform .6s ease,opacity .5s ease}
  @keyframes gate-in{from{opacity:0;transform:translateY(1.25rem)}to{opacity:1;transform:none}}

  /* nav drops in after the gate */
  .js .nav{translate:0 -110%;transition:translate .9s cubic-bezier(.2,.7,.2,1) .5s,background .3s}
  .js body.entered .nav{translate:none}

  /* hero: settles from a slight zoom (no parallax, so nothing shows under the solid nav bar) */
  .js .hero img.bg{scale:1.12;transition:scale 3.2s cubic-bezier(.2,.7,.2,1)}
  .js body.entered .hero img.bg{scale:1}

  /* headline word reveal (hero waits for the gate, others wait for scroll) */
  .js [data-split] .w,.js [data-hero-split] .w{display:inline-block;overflow:hidden;vertical-align:top;padding-bottom:.14em;margin-bottom:-.14em}
  .js [data-split] .wi,.js [data-hero-split] .wi{display:inline-block;translate:0 115%;transition:translate 1.1s cubic-bezier(.2,.8,.2,1) calc(var(--i,0) * 55ms + var(--base,0ms))}
  .js [data-hero-split]{--base:500ms}
  .js [data-split].in .wi,.js body.entered [data-hero-split] .wi{translate:none}

  /* fade-and-rise reveals */
  .js [data-reveal]{opacity:0;translate:0 1.5rem;transition:opacity .9s ease var(--d,0ms),translate 1s cubic-bezier(.2,.7,.2,1) var(--d,0ms)}
  .js [data-reveal].in{opacity:1;translate:none}

  /* bottle fades up; ghost numeral drifts the other way on scroll */
  .js .bottle[data-reveal]{translate:0 2rem;transition:opacity 1.3s ease,translate 1.5s cubic-bezier(.2,.7,.2,1)}
  .js .bottle[data-reveal].in{translate:none}
  .sku .ghost{margin-top:var(--gy,0px)}

  /* photo bands: slow zoom as they arrive */
  .js .story img.bg,.js .find img.bg{scale:1.1;transition:scale 2.4s cubic-bezier(.2,.7,.2,1)}
  .js .story.in img.bg,.js .find.in img.bg{scale:1}

  /* spec / craft rules draw across */
  .js .spec,.js .craft-grid{position:relative;border-top-color:transparent}
  .js .spec::before,.js .craft-grid::before{content:"";position:absolute;top:-2px;left:0;right:0;height:2px;background:var(--c,var(--ink));transform-origin:left;transform:scaleX(0);transition:transform 1.3s cubic-bezier(.2,.7,.2,1)}
  .js .craft-grid::before{background:var(--paper)}
  .js .spec.in::before,.js .craft-grid.in::before{transform:scaleX(1)}

}
