/* Tier 1 — blur-to-sharpen reveal, wired via IntersectionObserver in main.js */
@media (prefers-reduced-motion: no-preference) {
  [data-reveal] {
    opacity: 0;
    filter: blur(14px);
    transition: opacity 700ms ease, filter 700ms ease;
  }

  [data-reveal].is-revealed {
    opacity: 1;
    filter: blur(0);
  }
}

@media (prefers-reduced-motion: reduce) {
  [data-reveal] {
    opacity: 1;
    filter: none;
  }
}

/* Tier 2 — quiet micro-interactions */
@media (prefers-reduced-motion: no-preference) {
  .edition-card {
    transition: transform var(--ease-base), box-shadow var(--ease-base);
  }

  .edition-card:hover {
    transform: translateY(-4px);
    box-shadow: var(--shadow-card-hover);
  }

  .btn,
  .btn-share {
    transition: transform var(--ease-hover), box-shadow var(--ease-hover), background-color var(--ease-hover);
  }

  .btn:hover,
  .btn-share:hover {
    transform: translateY(-1px);
    box-shadow: var(--shadow-card-hover);
  }

  .btn-primary:hover {
    background: var(--color-accent-hover);
  }

  .btn-share:hover {
    background: var(--color-accent-tint);
  }

  .btn:active,
  .btn-share:active {
    transform: translateY(2px);
  }

  .link-underline {
    transition: background-size 200ms ease;
  }

  .link-underline:hover {
    background-size: 100% 1px;
  }
}

@media (prefers-reduced-motion: reduce) {
  .edition-card,
  .btn,
  .btn-share,
  .link-underline {
    transition: none;
  }
}

/* Tier 3 — Quill's idle bob (homepage "about" block only) */
@media (prefers-reduced-motion: no-preference) {
  .quill-portrait--idle {
    animation: quill-bob 4.5s ease-in-out infinite;
  }

  @keyframes quill-bob {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(-6px); }
  }
}

@media (prefers-reduced-motion: reduce) {
  .quill-portrait--idle {
    animation: none;
  }
}
