/* ============================================================
   AWARDS KIT — shared interaction layer for award-tier samples
   Dependency free. Every effect is disabled under reduced motion.
   Themes supply their own palette + type; this file only moves things.
   ============================================================ */

/* ---------- grain ---------- */
.aw-grain {
  position: fixed; inset: 0; z-index: 300; pointer-events: none;
  opacity: .32; mix-blend-mode: overlay;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)' opacity='.5'/%3E%3C/svg%3E");
  animation: awGrain 1.2s steps(3) infinite;
}
@keyframes awGrain {
  0%,100% { transform: translate(0,0) }
  33%     { transform: translate(-2%, 1%) }
  66%     { transform: translate(1%, -2%) }
}

/* ---------- preloader ---------- */
.aw-load {
  position: fixed; inset: 0; z-index: 400;
  display: grid; place-items: center;
  background: var(--aw-load-bg, #0B0B0B); color: var(--aw-load-fg, #fff);
  transition: transform 1.1s cubic-bezier(.76,0,.24,1);
}
.aw-load__n { font-size: clamp(3rem, 12vw, 9rem); line-height: 1; font-variant-numeric: tabular-nums; }
.aw-load__bar { position: absolute; left: 0; bottom: 0; height: 2px; width: 0; background: currentColor; }
body.aw-loaded .aw-load { transform: translateY(-101%); }

/* ---------- cursor ---------- */
.aw-cur, .aw-cur-dot { position: fixed; top: 0; left: 0; z-index: 350; pointer-events: none; border-radius: 50%; }
.aw-cur {
  width: 38px; height: 38px; margin: -19px 0 0 -19px;
  border: 1px solid var(--aw-cursor, currentColor);
  transition: width .35s cubic-bezier(.16,1,.3,1), height .35s cubic-bezier(.16,1,.3,1),
              margin .35s cubic-bezier(.16,1,.3,1), background-color .35s, opacity .3s;
}
.aw-cur-dot { width: 5px; height: 5px; margin: -2.5px 0 0 -2.5px; background: var(--aw-cursor, currentColor); }
body.aw-hover .aw-cur { width: 76px; height: 76px; margin: -38px 0 0 -38px; background: color-mix(in srgb, var(--aw-cursor, #fff) 12%, transparent); }
@media (hover: none), (max-width: 900px) { .aw-cur, .aw-cur-dot { display: none; } }

/* ---------- scroll progress ---------- */
.aw-prog { position: fixed; top: 0; left: 0; height: 2px; width: 100%; transform-origin: 0 50%; transform: scaleX(0); background: var(--aw-accent, #fff); z-index: 320; }

/* ---------- split text ---------- */
.aw-line { display: block; overflow: hidden; }
.aw-line > span { display: inline-block; transform: translateY(110%); transition: transform 1s cubic-bezier(.16,1,.3,1); transition-delay: var(--d, 0s); }
.in > .aw-line > span, .aw-line.in > span { transform: none; }

/* ---------- clip reveal ---------- */
[data-reveal] { overflow: hidden; clip-path: inset(0 0 100% 0); transition: clip-path 1.2s cubic-bezier(.76,0,.24,1); transition-delay: var(--d, 0s); }
[data-reveal].in { clip-path: inset(0 0 0 0); }
[data-reveal] img { transform: scale(1.18); transition: transform 1.6s cubic-bezier(.16,1,.3,1); transition-delay: var(--d, 0s); }
[data-reveal].in img { transform: scale(1); }

/* ---------- fade up ---------- */
[data-up] { opacity: 0; transform: translateY(26px); transition: opacity .9s cubic-bezier(.16,1,.3,1), transform .9s cubic-bezier(.16,1,.3,1); transition-delay: var(--d, 0s); }
[data-up].in { opacity: 1; transform: none; }

/* ---------- marquee ---------- */
.aw-marq { overflow: hidden; display: flex; }
.aw-marq__t { display: flex; flex: none; gap: var(--gap, 3rem); padding-right: var(--gap, 3rem); animation: awMarq var(--speed, 34s) linear infinite; }
.aw-marq:hover .aw-marq__t { animation-play-state: paused; }
@keyframes awMarq { to { transform: translateX(-100%); } }

/* ---------- pinned horizontal rail ---------- */
.aw-pin { position: relative; }
.aw-pin__stage { position: sticky; top: 0; height: 100svh; overflow: hidden; display: flex; align-items: center; }
.aw-pin__track { display: flex; gap: clamp(16px, 3vw, 48px); padding-inline: clamp(20px, 6vw, 90px); will-change: transform; }
@media (max-width: 860px) {
  .aw-pin { height: auto !important; }
  .aw-pin__stage { position: static; height: auto; padding-block: 40px; }
  .aw-pin__track { flex-direction: column; transform: none !important; }
}

/* ---------- page transition ---------- */
.aw-wipe { position: fixed; inset: 0; z-index: 380; background: var(--aw-load-bg, #0B0B0B); transform: translateY(100%); pointer-events: none; }
body.aw-leaving .aw-wipe { transform: translateY(0); transition: transform .6s cubic-bezier(.76,0,.24,1); }

/* ---------- reduced motion ---------- */
@media (prefers-reduced-motion: reduce) {
  .aw-grain, .aw-cur, .aw-cur-dot { display: none; }
  .aw-load { display: none; }
  *, *::before, *::after { animation-duration: .001ms !important; transition-duration: .001ms !important; }
  .aw-line > span { transform: none; }
  [data-reveal] { clip-path: none; }
  [data-reveal] img { transform: none; }
  [data-up] { opacity: 1; transform: none; }
  .aw-pin__stage { position: static; height: auto; }
  .aw-pin__track { transform: none !important; flex-direction: column; }
}
