/*
 * NSFW Legacy — smooth animations layer (added 2026-10-27).
 * Works on top of all-min.css. Remove this file + its <link>/<script> in index.html to roll back.
 * Hidden "before" states apply only when JS adds .anim-ready to <html>,
 * and only for visitors who have not asked for reduced motion.
 */

:root {
  --ease-out: cubic-bezier(.16, 1, .3, 1);
  --ease-soft: cubic-bezier(.33, 1, .68, 1);
}

/* Keep slide-ins from causing a horizontal scrollbar. */
.main { overflow-x: clip; }

/* ---------- Hover / focus micro-interactions (always on, cheap) ---------- */

.categories-list__item:not(:first-child) {
  transition: color .45s var(--ease-soft), padding-left .55s var(--ease-out);
}
@media (hover: hover) {
  .categories-list__item:not(:first-child):hover {
    color: var(--orange);
    padding-left: 14px;
  }
}

.platform-list__item { transition: color .35s var(--ease-soft); }
@media (hover: hover) {
  .platform-list__item:hover { color: var(--orange); }
}

.winner__img {
  transition: scale .6s var(--ease-out), filter .6s var(--ease-out);
}
@media (hover: hover) {
  .winner__link:hover .winner__img {
    scale: 1.08;
    filter: drop-shadow(0 10px 30px rgba(255, 69, 0, .45));
  }
}

.partners-list__item {
  transition: translate .45s var(--ease-out), box-shadow .45s var(--ease-out);
}
.partners-list__img { transition: scale .5s var(--ease-out); }
@media (hover: hover) {
  .partners-list__item:hover {
    translate: 0 -6px;
    box-shadow: 0 14px 30px -12px rgba(255, 69, 0, .55);
  }
  .partners-list__item:hover .partners-list__img { scale: 1.05; }
}

.form__fieldset { transition: border-top-color .45s var(--ease-soft); }
.form__fieldset:focus-within { border-top-color: var(--orange); }

.form-btn-arrow { transition: translate .45s var(--ease-out); }
@media (hover: hover) {
  .form__btn:hover .form-btn-arrow { translate: 8px 0; }
}

/* ---------- Scroll / load reveals ---------- */

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

  /* Hold the first screen's content until animations.js has tagged it (no flash). */
  .anim-ready:not(.anim-booted) .hero-wrapper { opacity: 0; }

  .anim-ready [data-reveal] {
    opacity: 0;
    transform: translate3d(0, 40px, 0);
    transition:
      opacity .9s var(--ease-soft) var(--d, 0s),
      transform 1.1s var(--ease-out) var(--d, 0s);
  }
  .anim-ready [data-reveal="down"]  { transform: translate3d(0, -24px, 0); }
  .anim-ready [data-reveal="left"]  { transform: translate3d(-48px, 0, 0); }
  .anim-ready [data-reveal="right"] { transform: translate3d(48px, 0, 0); }
  .anim-ready [data-reveal="scale"] { transform: scale(.8); }
  .anim-ready [data-reveal="fade"]  { transform: none; }
  .anim-ready [data-reveal="grow"] {
    transform: scaleY(.35);
    transform-origin: 50% 50%;
    transition:
      opacity 1s var(--ease-soft) var(--d, 0s),
      transform 1.4s var(--ease-out) var(--d, 0s);
  }

  .anim-ready [data-reveal].is-in {
    opacity: 1;
    transform: none;
  }

  /* Partner cards keep their hover lift working alongside the reveal. */
  .anim-ready .partners-list__item[data-reveal] {
    transition:
      opacity .8s var(--ease-soft) var(--d, 0s),
      transform 1s var(--ease-out) var(--d, 0s),
      translate .45s var(--ease-out),
      box-shadow .45s var(--ease-out);
  }

  /* Category rows: reveal plus the hover colour/indent. */
  .anim-ready .categories-list__item[data-reveal]:not(:first-child) {
    transition:
      opacity .9s var(--ease-soft) var(--d, 0s),
      transform 1.1s var(--ease-out) var(--d, 0s),
      color .45s var(--ease-soft),
      padding-left .55s var(--ease-out);
  }

  /* Big footer word: letters rise one after another. */
  .anim-ready .footer__text-up .char {
    opacity: 0;
    transform: translate3d(0, 60%, 0) rotate(4deg);
    transition:
      opacity .8s var(--ease-soft) calc(var(--i) * .045s),
      transform 1.1s var(--ease-out) calc(var(--i) * .045s);
  }
  .anim-ready .footer__text-up.is-in .char {
    opacity: 1;
    transform: none;
  }

  /* Winner icon floats gently once it is on screen. */
  .anim-ready .winner__link.is-in .winner__img {
    animation: nl-float 5s ease-in-out 1.4s infinite;
  }
  @keyframes nl-float {
    0%, 100% { transform: translate3d(0, 0, 0); }
    50%      { transform: translate3d(0, -8px, 0); }
  }
}

/* Split helpers (created by animations.js). */
.footer__text-up .char { display: inline-block; white-space: pre; }
.nl-lines, .nl-line { display: block; }
