/* ==========================================================================
   Motion: scroll reveal (assets/js/motion.js) and small hover details.
   Quiet by design — one short movement per block, once, never on the first screen
   (heroes have their own load sequence in hero.css). prefers-reduced-motion: none of it.
   The hidden state applies instantly; only the way in (.is-in) is animated.
   ========================================================================== */
:root {
	--reveal-dur: 750ms;
	--reveal-ease: cubic-bezier(0.2, 0.7, 0.2, 1);
	--reveal-shift: 1.25rem;
	--reveal-step: 70ms;
}

/* Fade: short rise. */
.reveal--fade:not(.is-in) { opacity: 0; transform: translateY(var(--reveal-shift)); }
.reveal--fade.is-in {
	transition: opacity var(--reveal-dur) var(--reveal-ease), transform var(--reveal-dur) var(--reveal-ease);
}

/* Draw: blocks behind the gold line open top → bottom, the way the hero line is drawn. */
.reveal--draw:not(.is-in) { clip-path: inset(0 0 100% 0); opacity: 0; }
.reveal--draw.is-in {
	clip-path: inset(0 0 0 0);
	transition: clip-path 1000ms var(--reveal-ease), opacity 600ms var(--reveal-ease);
}

/* Stagger: list items one after another. */
.reveal--stagger:not(.is-in) > * { opacity: 0; transform: translateY(var(--reveal-shift)); }
.reveal--stagger.is-in > * {
	transition: opacity var(--reveal-dur) var(--reveal-ease), transform var(--reveal-dur) var(--reveal-ease);
	transition-delay: calc(var(--reveal-i, 0) * var(--reveal-step));
}

/* Media: framed photos fade in and settle from a slight zoom. */
.reveal--media:not(.is-in) { opacity: 0; }
.reveal--media:not(.is-in) .msa-img { transform: scale(1.06); }
.reveal--media.is-in { transition: opacity 900ms var(--reveal-ease); }
.reveal--media.is-in .msa-img { transition: transform 1400ms var(--reveal-ease); }

@media (prefers-reduced-motion: reduce) {
	.reveal,
	.reveal > * { opacity: 1 !important; transform: none !important; clip-path: none !important; }
}
@media print {
	.reveal,
	.reveal > *,
	.reveal .msa-img { opacity: 1 !important; transform: none !important; clip-path: none !important; }
}

/* Hover: framed card photos lean in a little. */
@media (hover: hover) {
	.news-card__media .msa-img,
	.news-featured__media .msa-img { transition: transform 900ms var(--reveal-ease); }
	.news-card:hover .news-card__media .msa-img,
	.news-featured:hover .news-featured__media .msa-img { transform: scale(1.035); }
}
