/* Atmospheric motion. Every rule is opt-in through prefers-reduced-motion:no-preference.
   Scroll reveal hides content only under html.motion-ready (added by motion.js), so pages stay readable without JS. */
@media (prefers-reduced-motion:no-preference){
 /* Hero: slow drift on the art (individual translate/scale), parallax on transform via --hero-py from motion.js */
 .home-hero-art{inset:-28px 0;transform:translate3d(0,var(--hero-py,0px),0);animation:hero-drift 24s cubic-bezier(.45,0,.55,1) infinite alternate}
 @keyframes hero-drift{from{scale:1.03;translate:0 0}to{scale:1.05;translate:-10px -6px}}
 .home-hero-art.is-offscreen,.home-hero-art.is-offscreen:before,.home-hero-art.is-offscreen:after{animation-play-state:paused}
 /* Embers: two tiled gradient-dot layers rising slowly over the lit side of the art */
 .home-hero-art:before,.home-hero-art:after{content:'';position:absolute;inset:0 0 -420px;pointer-events:none;mix-blend-mode:screen;-webkit-mask-image:linear-gradient(90deg,transparent 38%,#000 72%);mask-image:linear-gradient(90deg,transparent 38%,#000 72%)}
 .home-hero-art:before{opacity:.5;background-image:radial-gradient(circle at 18% 22%,#ffd58a 0 1.4px,transparent 2.4px),radial-gradient(circle at 64% 58%,#f4b45f 0 1px,transparent 2px),radial-gradient(circle at 84% 12%,#ffe2a6 0 1.2px,transparent 2.2px),radial-gradient(circle at 40% 86%,#f0a855 0 1.6px,transparent 2.8px);background-size:340px 420px;animation:ember-rise 46s linear infinite}
 .home-hero-art:after{opacity:.32;background-image:radial-gradient(circle at 30% 40%,#ffe7b8 0 1px,transparent 1.8px),radial-gradient(circle at 76% 78%,#f6c06e 0 1.2px,transparent 2.2px),radial-gradient(circle at 52% 8%,#ffd58a 0 .9px,transparent 1.7px);background-size:230px 280px;animation:ember-rise-near 31s linear infinite,ember-flicker 7s ease-in-out infinite alternate}
 @keyframes ember-rise{to{translate:-24px -420px}}
 @keyframes ember-rise-near{to{translate:18px -280px}}
 @keyframes ember-flicker{from{opacity:.2}to{opacity:.4}}

 /* Hero copy: one authored entrance, CSS only so it never waits on script */
 .home-hero-copy>h1,.home-promise,.home-intro,.home-actions,.home-launch-note{animation:hero-copy-in .65s cubic-bezier(.16,1,.3,1) backwards}
 .home-promise{animation-delay:75ms}.home-intro{animation-delay:150ms}.home-actions{animation-delay:225ms}.home-launch-note{animation-delay:300ms}
 @keyframes hero-copy-in{from{opacity:0;translate:0 10px}}

 /* Scroll reveal: motion.js marks below-the-fold targets .reveal-pending, then .is-revealed on entry */
 .motion-ready .reveal-pending{opacity:0}
 .motion-ready .is-revealed{animation:reveal-in .7s cubic-bezier(.16,1,.3,1) backwards}
 .motion-ready .is-revealed:nth-child(2){animation-delay:70ms}
 .motion-ready .is-revealed:nth-child(3){animation-delay:140ms}
 .motion-ready .is-revealed:nth-child(n+4){animation-delay:210ms}
 @keyframes reveal-in{from{opacity:0;translate:0 14px}}

 /* Tiles and article rows: lift and warm the edge */
 .class-tile,.zone-tile,.article-link{transition:transform .2s cubic-bezier(.16,1,.3,1),border-color .2s,background .2s,box-shadow .2s}
 .class-tile:hover,.class-tile:focus-visible{transform:translateY(-2px);box-shadow:0 8px 16px -10px #000b}
 .zone-tile:hover,.zone-tile:focus-visible{transform:translateY(-2px);box-shadow:0 8px 16px -10px #000b}
 .article-link:hover,.article-link:focus-visible{transform:translateY(-2px);border-bottom-color:#8a7445}

 /* Gold buttons: a single light sweep per hover */
 .button{position:relative;isolation:isolate;overflow:hidden}
 .button:after{content:'';position:absolute;inset:0;z-index:-1;pointer-events:none;background:linear-gradient(105deg,transparent 30%,#fff6dc8c 50%,transparent 70%);transform:translateX(-110%)}
 .button:hover:after,.button:focus-visible:after{transform:translateX(110%);transition:transform .75s cubic-bezier(.16,1,.3,1)}
}
