/* Scroll-triggered reveal animations. JS toggles .is-visible via
   IntersectionObserver in assets/js/main.js. Content is fully visible
   with no JS (progressive enhancement, good for SEO/crawlers). */

.reveal-up {
	opacity: 1;
	transform: none;
}
.js-ready .reveal-up {
	opacity: 0;
	transform: translateY(28px);
	transition: opacity 0.7s cubic-bezier(0.16, 1, 0.3, 1), transform 0.7s cubic-bezier(0.16, 1, 0.3, 1);
}
.js-ready .reveal-up.is-visible {
	opacity: 1;
	transform: none;
}

/* Hero entrance */
.js-ready .hero-content {
	opacity: 0;
	transform: translateY(20px);
	animation: bdl-hero-in 0.9s cubic-bezier(0.16, 1, 0.3, 1) 0.15s forwards;
}
@keyframes bdl-hero-in {
	to { opacity: 1; transform: none; }
}

/* Sticky nav shrink-on-scroll */
#site-nav {
	transition: padding 0.25s ease, background 0.25s ease, box-shadow 0.25s ease;
}
#site-nav.scrolled {
	padding-top: 8px;
	padding-bottom: 8px;
	background: rgba(16, 60, 47, 0.98);
	box-shadow: 0 8px 30px rgba(0, 0, 0, 0.18);
}

/* Card / row hover lift, respecting reduced motion via style.css override */
.card, .pipe-card, .pub-row {
	will-change: transform;
}

/* Button micro-interaction */
.btn-primary, .btn-secondary {
	position: relative;
	overflow: hidden;
}

@media (prefers-reduced-motion: reduce) {
	.js-ready .reveal-up,
	.js-ready .hero-content {
		opacity: 1 !important;
		transform: none !important;
		animation: none !important;
	}
}
