/* Good Ground motion. Small and quick; the premium feel is restraint. Load after components.css. */

/* Reveal on scroll: add data-reveal to a section, card or heading. motion.js flips it to is-in. */
[data-reveal] { opacity: 0; transform: translateY(10%); transition: opacity 500ms ease-out, transform 500ms ease-out; }
[data-reveal].is-in { opacity: 1; transform: none; }

/* Stagger children: data-reveal="stagger" on a list or grid; each child arrives 80ms after the last. */
[data-reveal="stagger"] > * { opacity: 0; transform: translateY(10%); transition: opacity 500ms ease-out, transform 500ms ease-out; }
[data-reveal="stagger"].is-in > * { opacity: 1; transform: none; }
[data-reveal="stagger"].is-in > :nth-child(2) { transition-delay: 80ms; }
[data-reveal="stagger"].is-in > :nth-child(3) { transition-delay: 160ms; }
[data-reveal="stagger"].is-in > :nth-child(4) { transition-delay: 240ms; }
[data-reveal="stagger"].is-in > :nth-child(5) { transition-delay: 320ms; }
[data-reveal="stagger"].is-in > :nth-child(n+6) { transition-delay: 400ms; }

/* Lift on hover: cards and primary buttons rise 2px. */
.gg-card, .gg-btn-primary { transition: transform 150ms ease-out, background-color 120ms ease-out, border-color 120ms ease-out; }
.gg-card:hover, .gg-btn-primary:hover { transform: translateY(-2px); }

/* The hero never waits: content inside the first band is visible at once. */
.gg-band:first-of-type [data-reveal], header.gg-band [data-reveal] { opacity: 1; transform: none; transition: none; }

/* Reduced motion: everything is simply there. */
@media (prefers-reduced-motion: reduce) {
  [data-reveal], [data-reveal="stagger"] > * { opacity: 1; transform: none; transition: none; }
  .gg-card, .gg-btn-primary { transition: none; }
  .gg-card:hover, .gg-btn-primary:hover { transform: none; }
}
