Merge nucleic/keen-willow-panda-3uc2 into main

Mirrored from corpo ca1549a.
This commit is contained in:
2026-08-10 22:07:48 -07:00
parent bfb3c05362
commit 58e451a7eb
+29 -2
View File
@@ -144,7 +144,7 @@ const canonical = new URL('/', Astro.site);
</section>
</main>
<footer class="footer">
<footer class="footer" data-footer>
<p>© 2026 Blakeslee Research</p>
<div class="footer-links">
<a href="mailto:[email protected]">Contact</a>
@@ -823,8 +823,18 @@ const canonical = new URL('/', Astro.site);
.footer {
padding-top: 1rem;
border-top: 1px solid var(--line);
}
/* The stack is the journey to the site's closing information. Enhancement adds
this class before first paint; until its final card is active the footer cannot
visually signal that the page has already ended. */
.footer.is-awaiting-final-card {
opacity: 0;
animation: fade-in 700ms 1.1s ease-out forwards;
pointer-events: none;
}
.footer.is-footer-revealed {
animation: fade-in 500ms ease-out forwards;
}
.footer p {
@@ -1095,6 +1105,7 @@ const canonical = new URL('/', Astro.site);
<script>
const technologyStack = document.querySelector<HTMLElement>('[data-technology-stack]');
const footer = document.querySelector<HTMLElement>('[data-footer]');
const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)');
if (technologyStack && 'IntersectionObserver' in window && !reducedMotion.matches) {
@@ -1111,6 +1122,9 @@ const canonical = new URL('/', Astro.site);
heroLead?.classList.add('has-scroll-stack');
hero?.classList.add('has-scroll-story');
technologyStack.classList.add('is-scroll-stack');
footer?.classList.add('is-awaiting-final-card');
footer?.setAttribute('aria-hidden', 'true');
footer?.setAttribute('inert', '');
let stackWrappedBelow = false;
@@ -1217,6 +1231,18 @@ const canonical = new URL('/', Astro.site);
{ passive: true },
);
let footerRevealed = false;
const revealFooter = () => {
if (!footer || footerRevealed) return;
footerRevealed = true;
footer.classList.remove('is-awaiting-final-card');
footer.classList.add('is-footer-revealed');
footer.removeAttribute('aria-hidden');
footer.removeAttribute('inert');
};
const activateTechnology = (index: number) => {
cards.forEach((card, cardIndex) => {
const isActive = cardIndex === index;
@@ -1226,6 +1252,7 @@ const canonical = new URL('/', Astro.site);
});
if (progressCurrent) progressCurrent.textContent = String(index + 1).padStart(2, '0');
if (index === cards.length - 1) revealFooter();
};
activateTechnology(0);