/* ==========================================================================
   Lattice Energy — site enhancements
   Loaded only on the Lattice pages (body.lattice-page) by
   wp-content/novamira-sandbox/lattice-site.php.
   Covers what Elementor's free atomic styles cannot express: keyframe
   animations, parent-hover effects on children, pseudo-element layers,
   slideshow / accordion states, blog listing and a few text properties.
   Colours reference the Elementor global variables (--color-*).
   ========================================================================== */

html:has(body.lattice-page) { scroll-behavior: smooth; }

body.lattice-page {
	--lt-ease: cubic-bezier(.2, .7, .2, 1);
	--lt-ease-out: cubic-bezier(.16, 1, .3, 1);
}

body.lattice-page :where(.lt-site) :where(a, button):focus-visible {
	outline: 2px solid var(--color-purple);
	outline-offset: 3px;
}

/* ---------- Text details ---------- */
body.lattice-page :is(.lt-title, .lt-hero-title, .lt-page-title) { text-wrap: balance; }
body.lattice-page :is(.lt-button, .lt-ribbon, .lt-ribbon-item, .lt-contact-link, .lt-bidec-watermark) { white-space: nowrap; }
body.lattice-page .lt-hero-index { align-items: baseline; font-variant-numeric: tabular-nums; }
body.lattice-page .lt-title-row { align-items: baseline; }
body.lattice-page .lt-media-index { text-shadow: 0 1px 9px var(--color-ink); }
body.lattice-page :is(.lt-media-overlay, .lt-media-overlay-end) { pointer-events: none; }
body.lattice-page .lt-media-overlay-end .lt-media-badge { pointer-events: auto; }
@media (max-width: 767px) {
	body.lattice-page :is(.lt-panel-head, .lt-panel-foot) { white-space: nowrap; }
}

/* ---------- Buttons rendered as <button> (Astra styles reset) ---------- */
body.lattice-page :is(button.lt-hero-arrow, button.lt-hero-dot, button.lt-accordion-summary) { font: inherit; line-height: inherit; box-shadow: none; text-transform: none; letter-spacing: inherit; }
body.lattice-page button.lt-hero-arrow { line-height: 1; }
body.lattice-page button.lt-hero-arrow:focus:not(:hover) { background-color: var(--color-white-06); border-color: var(--color-white-35); color: var(--color-paper); }
body.lattice-page :is(button.lt-hero-dot, button.lt-hero-dot:hover, button.lt-hero-dot:focus) { background-color: transparent; border: 0; box-shadow: none; }
body.lattice-page :is(button.lt-accordion-summary, button.lt-accordion-summary:hover, button.lt-accordion-summary:focus) {
	background-color: transparent;
	color: var(--color-ink);
	border: 0;
	font-family: var(--font-display);
	font-weight: 500;
	font-size: 17px;
	line-height: 1.35;
}

/* ---------- Home hero: load animation ---------- */
body.lattice-page .lt-hero-line > * { animation: lt-line-up 1s var(--lt-ease-out) both; }
body.lattice-page .lt-hero .lt-hero-line:nth-child(2) > * { animation-delay: .08s; }
body.lattice-page .lt-hero .lt-hero-line:nth-child(3) > * { animation-delay: .16s; }
body.lattice-page .lt-hero .lt-hero-line:nth-child(4) > * { animation-delay: .24s; }
body.lattice-page .lt-hero-lead { animation: lt-fade-up .9s .45s var(--lt-ease-out) both; }
body.lattice-page .lt-hero-actions { animation: lt-fade-up .9s .6s var(--lt-ease-out) both; }

/* ---------- Inner page hero ---------- */
body.lattice-page .lt-page-hero .lt-hero-line:nth-child(2) > * { animation-delay: .1s; }
body.lattice-page .lt-page-hero-photo { animation: lt-kenburns 14s ease-out both; will-change: transform; }
body.lattice-page .lt-breadcrumbs { animation: lt-fade-up .9s .05s var(--lt-ease-out) both; }
body.lattice-page .lt-page-lead { animation: lt-fade-up .9s .35s var(--lt-ease-out) both; }
body.lattice-page :is(.lt-page-hero-actions, .lt-page-hero-meta) { animation: lt-fade-up .9s .45s var(--lt-ease-out) both; }

/* ---------- Grid lines and drifting glow ---------- */
body.lattice-page :is(.lt-hero-content, .lt-page-hero-content)::before,
body.lattice-page .lt-error-page::before {
	content: "";
	position: absolute;
	inset: 0;
	z-index: -1;
	pointer-events: none;
	opacity: .21;
	background-image:
		linear-gradient(90deg, transparent calc(25% - .5px), rgba(255, 255, 255, .21) 25%, transparent calc(25% + .5px), transparent calc(50% - .5px), rgba(255, 255, 255, .19) 50%, transparent calc(50% + .5px), transparent calc(75% - .5px), rgba(255, 255, 255, .17) 75%, transparent calc(75% + .5px)),
		linear-gradient(rgba(255, 255, 255, .06) 1px, transparent 1px);
	background-size: 100% 100%, 100% 82px;
	-webkit-mask-image: linear-gradient(90deg, #000, transparent 88%);
	mask-image: linear-gradient(90deg, #000, transparent 88%);
}
body.lattice-page .lt-error-page::before { z-index: 0; }
body.lattice-page .lt-hero-content::after,
body.lattice-page .lt-error-page::after {
	content: "";
	position: absolute;
	z-index: -1;
	top: -160px;
	left: -180px;
	width: 620px;
	height: 620px;
	border-radius: 50%;
	pointer-events: none;
	background: radial-gradient(circle, rgba(219, 18, 24, .22), transparent 65%);
	filter: blur(10px);
	animation: lt-glow-drift 14s ease-in-out infinite alternate;
}
body.lattice-page .lt-error-page::after { z-index: 0; }

/* ---------- Home hero slideshow ---------- */
body.lattice-page .lt-hero-slide { opacity: 0; scale: 1.08; transition: opacity 1.4s ease, scale 1.4s ease; }
body.lattice-page .lt-hero-slide.lt-hero-photo { opacity: 1; scale: 1; }
body.lattice-page .lt-hero.is-ready .lt-hero-slide { opacity: 0; scale: 1.08; }
body.lattice-page .lt-hero.is-ready .lt-hero-slide.is-active { opacity: 1; scale: 1; animation: lt-kenburns 7.5s linear forwards; }
body.lattice-page .lt-hero-dot:hover .lt-hero-dot-track { background-color: var(--color-white-45); }
body.lattice-page .lt-hero-dot-fill { transform: scaleX(0); transform-origin: left; }
body.lattice-page .lt-hero-dot.is-done .lt-hero-dot-fill { transform: scaleX(1); }
body.lattice-page .lt-hero-dot.is-active .lt-hero-dot-fill { animation: lt-dot-fill 6.5s linear forwards; }
body.lattice-page .lt-hero-dot.is-active.is-run-b .lt-hero-dot-fill { animation-name: lt-dot-fill-b; }
body.lattice-page .lt-hero.is-paused .lt-hero-dot.is-active .lt-hero-dot-fill { animation-play-state: paused; }

/* ---------- Pulse dots, scroll cue, marquee, spinning marks ---------- */
body.lattice-page .lt-pulse-dot { animation: lt-pulse 2s ease-out infinite; }
body.lattice-page .lt-scroll-cue-mouse svg rect:last-child { transform-box: fill-box; animation: lt-wheel 1.8s ease-in-out infinite; }
body.lattice-page .lt-ribbon-track { animation: lt-marquee 38s linear infinite; will-change: transform; }
body.lattice-page .lt-intro-icon { animation: lt-spin 24s linear infinite; }
body.lattice-page .lt-partner-mark { animation: lt-spin 8s linear infinite; }

/* ---------- Home intro: running vertical rule ---------- */
body.lattice-page .lt-vertical-rule {
	background: var(--color-line-2) linear-gradient(180deg, var(--color-purple), var(--color-red)) no-repeat;
	background-size: 100% 40%;
	animation: lt-rule-y 3.2s ease-in-out infinite;
}
@media (max-width: 1024px) {
	body.lattice-page .lt-vertical-rule {
		background-image: linear-gradient(90deg, var(--color-purple), var(--color-red));
		background-size: 40% 100%;
		animation-name: lt-rule-x;
	}
}

/* ---------- Media cards: hover zoom and reveal wipe ---------- */
body.lattice-page .lt-media-card .lt-media-img { transition: transform .9s var(--lt-ease); }
body.lattice-page .lt-media-card:hover .lt-media-img { transform: scale(1.045); }
body.lattice-page .lt-media-card::after {
	content: "";
	position: absolute;
	inset: 0;
	z-index: 2;
	background: var(--color-soft);
	transform: scaleX(0);
	transform-origin: right;
	pointer-events: none;
}
html.lt-reveal-ready body.lattice-page .lt-media-card.lt-reveal:not(.is-visible)::after { transform: scaleX(1); }
html.lt-reveal-ready body.lattice-page .lt-media-card.is-visible::after { animation: lt-wipe 1.1s var(--lt-ease-out) both; }

/* ---------- Cards with pointer spotlight ---------- */
@property --lt-spot { syntax: "<number>"; inherits: false; initial-value: 0; }
body.lattice-page :is(.lt-card-feature, .lt-card-sustain) {
	background-image: radial-gradient(380px circle at var(--mx, 50%) var(--my, -30%), rgb(110 88 161 / var(--lt-spot)), transparent 45%);
	transition: transform .35s var(--lt-ease), box-shadow .35s, --lt-spot .35s;
}
body.lattice-page :is(.lt-card-feature, .lt-card-sustain):hover { --lt-spot: .12; }
body.lattice-page .lt-card-business {
	background-image:
		linear-gradient(90deg, var(--color-purple), var(--color-red)),
		radial-gradient(380px circle at var(--mx, 50%) var(--my, -30%), rgb(110 88 161 / var(--lt-spot)), transparent 45%);
	background-repeat: no-repeat;
	background-size: 0 3px, 100% 100%;
	background-position: left top, left top;
	transition: transform .35s var(--lt-ease), box-shadow .35s, background-size .5s var(--lt-ease), --lt-spot .35s;
}
body.lattice-page .lt-card-business:hover { background-size: 100% 3px, 100% 100%; --lt-spot: .12; }
body.lattice-page .lt-card-icon { transition: background-color .3s, color .3s, transform .4s var(--lt-ease); }
body.lattice-page :is(.lt-card-business, .lt-card-feature):hover .lt-card-icon {
	background-color: var(--color-purple);
	color: var(--color-paper);
	transform: rotate(-6deg) scale(1.05);
}
body.lattice-page .lt-card-link-icon { transition: transform .3s var(--lt-ease); }
body.lattice-page .lt-card-business:hover .lt-card-link-icon,
body.lattice-page .lt-card-link:hover .lt-card-link-icon { transform: translateX(5px); }
body.lattice-page .lt-card-sustain:hover .lt-sustain-symbol { transform: rotate(360deg); background-color: var(--color-purple); color: var(--color-paper); }

/* ---------- Mobile swipe rows ---------- */
@media (max-width: 767px) {
	body.lattice-page :is(.lt-card-row, .lt-industry-cards) {
		overflow-y: hidden;
		scroll-snap-type: x mandatory;
		scroll-padding-inline: 6%;
		scrollbar-width: none;
	}
	body.lattice-page :is(.lt-card-row, .lt-industry-cards)::-webkit-scrollbar { display: none; }
	body.lattice-page :is(.lt-card-row, .lt-industry-cards) > * { scroll-snap-align: start; }
}

/* ---------- Buttons and links ---------- */
body.lattice-page .lt-button {
	background-image: linear-gradient(110deg, transparent 30%, rgba(255, 255, 255, .28) 50%, transparent 70%);
	background-size: 250% 100%;
	background-position: 100% 0;
	background-repeat: no-repeat;
	transition: transform .22s, background-color .22s, background-position .7s var(--lt-ease), color .22s, border-color .22s, box-shadow .22s;
}
body.lattice-page .lt-button:hover { background-position: 0 0; }
body.lattice-page .lt-button-icon { transition: transform .3s var(--lt-ease); }
body.lattice-page .lt-button:hover .lt-button-icon { transform: translateX(4px); }
body.lattice-page .lt-under-link {
	background-image: linear-gradient(var(--color-purple), var(--color-purple));
	background-repeat: no-repeat;
	background-size: 0 1px;
	background-position: left bottom;
	transition: background-size .45s var(--lt-ease);
}
body.lattice-page .lt-under-link:hover { background-size: 100% 1px; }
body.lattice-page .lt-under-link-icon { transition: transform .3s var(--lt-ease); }
body.lattice-page .lt-under-link:hover .lt-under-link-icon { transform: translateX(5px); }
body.lattice-page .lt-map-card-icon { transition: transform .3s var(--lt-ease); }
body.lattice-page .lt-map-card-link:hover .lt-map-card-icon { transform: translate(3px, -3px); }

/* ---------- Home products band ---------- */
body.lattice-page .lt-band-layer::before {
	content: "";
	position: absolute;
	inset: 0;
	z-index: -1;
	pointer-events: none;
	background-image:
		linear-gradient(90deg, transparent 50%, rgba(224, 231, 255, .04) 50.1%, transparent 50.2%),
		linear-gradient(0deg, transparent 49%, rgba(255, 255, 255, .04) 49.1%, transparent 49.2%);
	background-size: 80px 80px;
	animation: lt-grid-pan 30s linear infinite;
}
body.lattice-page .lt-product-row {
	background-image: linear-gradient(90deg, var(--color-red), var(--color-red));
	background-repeat: no-repeat;
	background-size: 2px 0;
	background-position: left center;
	transition: padding .3s var(--lt-ease), background-color .3s, background-size .3s var(--lt-ease);
}
body.lattice-page .lt-product-row:hover { background-size: 2px 100%; }
body.lattice-page .lt-product-arrow { transition: transform .3s var(--lt-ease); }
body.lattice-page .lt-product-row:hover .lt-product-arrow { transform: translateX(4px); }
body.lattice-page .lt-industry-link:hover .lt-industry-link-icon { opacity: 1; transform: none; }

/* ---------- Parallax bleed (offset is set by the script) ---------- */
body.lattice-page .lt-partner > .lt-media-img { inset-block-start: -64px; height: calc(100% + 128px); will-change: transform; }

/* ---------- About ---------- */
body.lattice-page .lt-feature-mark { filter: grayscale(1) brightness(2); animation: lt-spin 60s linear infinite; }
body.lattice-page .lt-principle-row {
	background-image: linear-gradient(var(--color-purple), var(--color-purple));
	background-repeat: no-repeat;
	background-size: 0 1px;
	background-position: left bottom;
	transition: padding .3s var(--lt-ease), background-size .5s var(--lt-ease);
}
body.lattice-page .lt-principle-row:hover { background-size: 100% 1px; }
body.lattice-page .lt-principle-row:hover .lt-principle-icon { transform: rotate(45deg); }

/* ---------- Our Business ---------- */
body.lattice-page .lt-bidec-media::after {
	content: "";
	position: absolute;
	inset: 0;
	z-index: 1;
	pointer-events: none;
	background: linear-gradient(90deg, rgba(17, 24, 39, .15), rgba(17, 24, 39, .3));
}
body.lattice-page .lt-chain-node { animation: lt-node-in .45s var(--lt-ease) both; }
body.lattice-page .lt-chain-line-fill { transform-origin: left; animation: lt-chain-grow 1.8s var(--lt-ease) both; }
body.lattice-page .lt-chain-body { animation: lt-chain-rise .45s var(--lt-ease) both; }
body.lattice-page .lt-chain-step:nth-child(2) :is(.lt-chain-node, .lt-chain-line-fill) { animation-delay: .13s; }
body.lattice-page .lt-chain-step:nth-child(3) :is(.lt-chain-node, .lt-chain-line-fill) { animation-delay: .26s; }
body.lattice-page .lt-chain-step:nth-child(4) :is(.lt-chain-node, .lt-chain-line-fill) { animation-delay: .39s; }
body.lattice-page .lt-chain-step:nth-child(5) :is(.lt-chain-node, .lt-chain-line-fill) { animation-delay: .52s; }
body.lattice-page .lt-chain-step:nth-child(6) .lt-chain-node { animation-delay: .65s; }
body.lattice-page .lt-chain-step:nth-child(1) .lt-chain-body { animation-delay: .35s; }
body.lattice-page .lt-chain-step:nth-child(2) .lt-chain-body { animation-delay: .48s; }
body.lattice-page .lt-chain-step:nth-child(3) .lt-chain-body { animation-delay: .61s; }
body.lattice-page .lt-chain-step:nth-child(4) .lt-chain-body { animation-delay: .74s; }
body.lattice-page .lt-chain-step:nth-child(5) .lt-chain-body { animation-delay: .87s; }
body.lattice-page .lt-chain-step:nth-child(6) .lt-chain-body { animation-delay: 1s; }
html.lt-reveal-ready body.lattice-page .lt-chain-track:not(.is-visible) :is(.lt-chain-node, .lt-chain-line-fill, .lt-chain-body) { animation-play-state: paused; }
body.lattice-page .lt-chain-step:hover .lt-chain-node { background-color: var(--color-purple); border-color: var(--color-purple); color: var(--color-paper); transform: scale(1.08); }
body.lattice-page .lt-chain-step:hover .lt-chain-title { color: var(--color-purple); }
@media (max-width: 767px) {
	body.lattice-page .lt-chain-line-fill { transform-origin: top; animation-name: lt-chain-grow-y; }
}

/* ---------- Products ---------- */
body.lattice-page .lt-product-detail {
	background-image: linear-gradient(90deg, var(--color-purple), var(--color-red));
	background-repeat: no-repeat;
	background-size: 18% 2px;
	background-position: left top;
	transition: background-size .9s var(--lt-ease);
}
body.lattice-page .lt-product-detail:hover { background-size: 100% 2px; }

/* ---------- Accordion ---------- */
html.lt-js body.lattice-page .lt-accordion-item:not(.is-open) .lt-accordion-panel { display: none; }
body.lattice-page .lt-accordion-item.is-open { box-shadow: 0 0 0 1px rgba(17, 24, 39, .06), 0 8px 30px rgba(17, 24, 39, .045); border-color: var(--color-line-2); }
body.lattice-page .lt-accordion-item.is-open .lt-accordion-toggle { transform: rotate(45deg); background-color: var(--color-purple); color: var(--color-paper); }

/* ---------- Industries ---------- */
body.lattice-page .lt-card-industry-photo { transition: scale 1s var(--lt-ease); }
body.lattice-page .lt-card-industry:is(:hover, :focus-within) .lt-card-industry-photo { scale: 1.07; }
body.lattice-page .lt-card-industry-body::before {
	content: "";
	position: absolute;
	inset: 0;
	z-index: -1;
	pointer-events: none;
	opacity: 0;
	background: linear-gradient(0deg, rgba(65, 25, 124, .95) 10%, rgba(38, 23, 50, .6) 60%, rgba(13, 18, 32, .25));
	transition: opacity .4s;
}
body.lattice-page .lt-card-industry:is(:hover, :focus-within) .lt-card-industry-body::before { opacity: 1; }
html.lt-js body.lattice-page .lt-card-industry-text {
	max-height: 0;
	opacity: 0;
	overflow: hidden;
	transition: max-height .5s var(--lt-ease), opacity .4s;
}
html.lt-js body.lattice-page .lt-card-industry:is(:hover, :focus-within) .lt-card-industry-text { max-height: 120px; opacity: 1; }
@media (max-width: 767px) {
	html.lt-js body.lattice-page .lt-card-industry-text { max-height: none; opacity: 1; }
}

/* ---------- Contact ---------- */
body.lattice-page .lt-contact-group:hover .lt-contact-icon { background-color: var(--color-purple); color: var(--color-paper); }
body.lattice-page .lt-map-canvas::before {
	content: "";
	position: absolute;
	inset: 0;
	z-index: 0;
	pointer-events: none;
	background-image: linear-gradient(90deg, rgba(65, 25, 124, .07) 1px, transparent 1px), linear-gradient(rgba(65, 25, 124, .07) 1px, transparent 1px);
	background-size: 48px 48px;
}
body.lattice-page .lt-map-canvas > * { position: relative; z-index: 1; }
body.lattice-page .lt-map-pin { animation: lt-pulse-soft 2s ease-out infinite; }

/* ---------- 404 ---------- */
body.lattice-page .lt-error-code { animation: lt-fade-up 1s var(--lt-ease-out) both; }

/* ---------- News / 404 templates: one full-width column inside Astra's flex container ---------- */
.lt-template-wrap { width: 100%; flex: 1 1 100%; min-width: 0; }

/* ---------- News: blog listing (rendered by the theme template) ---------- */
body.lattice-page.lt-has-posts #news-empty { display: none; }
.lt-posts { font-family: var(--font-body); font-weight: 300; font-size: 14px; line-height: 1.65; color: var(--color-ink); background: var(--color-paper); padding: 116px 0 120px; }
.lt-posts-shell { width: 100%; max-width: 1240px; margin: 0 auto; padding: 0 38px; }
.lt-posts-grid { display: flex; flex-wrap: wrap; gap: 14px; }
.lt-post-card {
	flex: 0 1 calc((100% - 28px) / 3);
	min-width: 0;
	display: flex;
	flex-direction: column;
	background-color: var(--color-white-82);
	border: 1px solid var(--color-paper);
	border-radius: 6px;
	box-shadow: 0 0 0 1px rgba(17, 24, 39, .06), 0 8px 30px rgba(17, 24, 39, .045);
	overflow: hidden;
	transition: transform .35s var(--lt-ease), box-shadow .35s;
}
.lt-post-card:hover { transform: translateY(-6px); box-shadow: 0 12px 30px rgba(17, 24, 39, .11); }
.lt-post-media { display: block; aspect-ratio: 16 / 10; overflow: hidden; background: var(--color-line); }
.lt-post-media img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .9s var(--lt-ease); }
.lt-post-card:hover .lt-post-media img { transform: scale(1.045); }
.lt-post-body { display: flex; flex-direction: column; flex: 1; padding: 22px 22px 20px; }
.lt-post-date { font-size: 12px; letter-spacing: .15em; font-weight: 600; text-transform: uppercase; color: var(--color-muted); }
.lt-post-title { font-family: var(--font-display); font-weight: 500; font-size: 22px; line-height: 1.15; letter-spacing: -.03em; margin: 10px 0 10px; color: var(--color-ink); }
.lt-post-title a { color: var(--color-ink); text-decoration: none; }
.lt-post-title a:hover { color: var(--color-purple); }
.lt-post-excerpt { margin: 0 0 17px; color: var(--color-muted); font-size: 14px; line-height: 1.7; }
.lt-post-excerpt p { margin: 0; }
.lt-post-link {
	display: flex;
	justify-content: space-between;
	align-items: center;
	margin-top: auto;
	padding-top: 12px;
	border-top: 1px solid var(--color-line);
	font-size: 13px;
	font-weight: 600;
	letter-spacing: .09em;
	text-transform: uppercase;
	color: var(--color-ink);
	text-decoration: none;
}
.lt-post-link:hover { color: var(--color-ink); }
.lt-post-link svg { width: 16px; height: 16px; color: var(--color-purple); transition: transform .3s var(--lt-ease); }
.lt-post-card:hover .lt-post-link svg { transform: translateX(5px); }
.lt-posts-pagination { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 46px; }
.lt-posts-pagination .page-numbers {
	min-width: 42px;
	height: 42px;
	padding: 0 14px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	border-radius: 999px;
	border: 1px solid var(--color-line-2);
	color: var(--color-ink);
	text-decoration: none;
	font-weight: 600;
}
.lt-posts-pagination .page-numbers.current,
.lt-posts-pagination a.page-numbers:hover { background: var(--color-ink); border-color: var(--color-ink); color: var(--color-paper); }
@media (max-width: 1024px) {
	.lt-posts-shell { padding: 0 28px; }
	.lt-post-card { flex-basis: calc(50% - 7px); }
}
@media (max-width: 767px) {
	.lt-posts { padding: 80px 0 84px; }
	.lt-posts-shell { padding: 0 6%; }
	.lt-post-card { flex-basis: 100%; }
}

/* ---------- Scroll reveals (classes added by the script on the live page only) ---------- */
html.lt-reveal-ready body.lattice-page :is(.lt-reveal, .lt-reveal-left, .lt-reveal-right, .lt-reveal-zoom):not(.is-visible) { opacity: 0; }
html.lt-reveal-ready body.lattice-page .lt-reveal.is-visible { animation: lt-reveal-up .9s var(--lt-ease) both; animation-delay: var(--lt-stagger, 0s); }
html.lt-reveal-ready body.lattice-page .lt-reveal-left.is-visible { animation: lt-reveal-left .9s var(--lt-ease) both; animation-delay: var(--lt-stagger, 0s); }
html.lt-reveal-ready body.lattice-page .lt-reveal-right.is-visible { animation: lt-reveal-right .9s var(--lt-ease) both; animation-delay: var(--lt-stagger, 0s); }
html.lt-reveal-ready body.lattice-page .lt-reveal-zoom.is-visible { animation: lt-reveal-zoom .9s var(--lt-ease) both; animation-delay: var(--lt-stagger, 0s); }

/* ---------- Keyframes ---------- */
@keyframes lt-line-up { from { translate: 0 105%; } to { translate: none; } }
@keyframes lt-fade-up { from { opacity: 0; translate: 0 16px; } to { opacity: 1; translate: none; } }
@keyframes lt-reveal-up { from { opacity: 0; translate: 0 24px; } to { opacity: 1; translate: none; } }
@keyframes lt-reveal-left { from { opacity: 0; translate: -30px 0; } to { opacity: 1; translate: none; } }
@keyframes lt-reveal-right { from { opacity: 0; translate: 30px 0; } to { opacity: 1; translate: none; } }
@keyframes lt-reveal-zoom { from { opacity: 0; scale: .96; } to { opacity: 1; scale: 1; } }
@keyframes lt-wipe { from { transform: scaleX(1); } to { transform: scaleX(0); } }
@keyframes lt-kenburns { from { scale: 1; } to { scale: 1.1; } }
@keyframes lt-dot-fill { from { transform: scaleX(0); } to { transform: scaleX(1); } }
@keyframes lt-dot-fill-b { from { transform: scaleX(0); } to { transform: scaleX(1); } }
@keyframes lt-glow-drift { from { translate: 0 0; } to { translate: 120px 80px; } }
@keyframes lt-pulse { from { box-shadow: 0 0 0 0 rgba(219, 18, 24, .7); } to { box-shadow: 0 0 0 9px rgba(219, 18, 24, 0); } }
@keyframes lt-pulse-soft { from { box-shadow: 0 18px 40px rgba(13, 18, 32, .2), 0 0 0 0 rgba(219, 18, 24, .7); } to { box-shadow: 0 18px 40px rgba(13, 18, 32, .2), 0 0 0 9px rgba(219, 18, 24, 0); } }
@keyframes lt-wheel { 0% { opacity: 0; translate: 0 0; } 30% { opacity: 1; } 100% { opacity: 0; translate: 0 12px; } }
@keyframes lt-marquee { to { transform: translateX(-100%); } }
@keyframes lt-spin { to { rotate: 360deg; } }
@keyframes lt-rule-y { from { background-position: 0 -37px; } to { background-position: 0 93px; } }
@keyframes lt-rule-x { from { background-position: -37px 0; } to { background-position: 93px 0; } }
@keyframes lt-grid-pan { to { background-position: 80px 80px; } }
@keyframes lt-node-in { from { opacity: .72; scale: .88; } to { opacity: 1; scale: 1; } }
@keyframes lt-chain-grow { from { transform: scaleX(0); } to { transform: scaleX(1); } }
@keyframes lt-chain-grow-y { from { transform: scaleY(0); } to { transform: scaleY(1); } }
@keyframes lt-chain-rise { from { opacity: 0; translate: 0 7px; } to { opacity: 1; translate: none; } }

/* ---------- Reduced motion ---------- */
@media (prefers-reduced-motion: reduce) {
	html:has(body.lattice-page) { scroll-behavior: auto; }
	body.lattice-page .lt-site *,
	body.lattice-page .lt-site *::before,
	body.lattice-page .lt-site *::after,
	body.lattice-page .lt-site::before,
	body.lattice-page .lt-site::after {
		animation-duration: .01ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: .01ms !important;
	}
	body.lattice-page :is(.lt-ribbon-track, .lt-hero-slide.is-active, .lt-vertical-rule, .lt-page-hero-photo) { animation: none !important; }
}
