Merge nucleic/keen-willow-panda-3uc2 into main
Mirrored from corpo ca1549a.
This commit is contained in:
+29
-2
@@ -144,7 +144,7 @@ const canonical = new URL('/', Astro.site);
|
|||||||
</section>
|
</section>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<footer class="footer">
|
<footer class="footer" data-footer>
|
||||||
<p>© 2026 Blakeslee Research</p>
|
<p>© 2026 Blakeslee Research</p>
|
||||||
<div class="footer-links">
|
<div class="footer-links">
|
||||||
<a href="mailto:[email protected]">Contact</a>
|
<a href="mailto:[email protected]">Contact</a>
|
||||||
@@ -823,8 +823,18 @@ const canonical = new URL('/', Astro.site);
|
|||||||
.footer {
|
.footer {
|
||||||
padding-top: 1rem;
|
padding-top: 1rem;
|
||||||
border-top: 1px solid var(--line);
|
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;
|
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 {
|
.footer p {
|
||||||
@@ -1095,6 +1105,7 @@ const canonical = new URL('/', Astro.site);
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
const technologyStack = document.querySelector<HTMLElement>('[data-technology-stack]');
|
const technologyStack = document.querySelector<HTMLElement>('[data-technology-stack]');
|
||||||
|
const footer = document.querySelector<HTMLElement>('[data-footer]');
|
||||||
const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)');
|
const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)');
|
||||||
|
|
||||||
if (technologyStack && 'IntersectionObserver' in window && !reducedMotion.matches) {
|
if (technologyStack && 'IntersectionObserver' in window && !reducedMotion.matches) {
|
||||||
@@ -1111,6 +1122,9 @@ const canonical = new URL('/', Astro.site);
|
|||||||
heroLead?.classList.add('has-scroll-stack');
|
heroLead?.classList.add('has-scroll-stack');
|
||||||
hero?.classList.add('has-scroll-story');
|
hero?.classList.add('has-scroll-story');
|
||||||
technologyStack.classList.add('is-scroll-stack');
|
technologyStack.classList.add('is-scroll-stack');
|
||||||
|
footer?.classList.add('is-awaiting-final-card');
|
||||||
|
footer?.setAttribute('aria-hidden', 'true');
|
||||||
|
footer?.setAttribute('inert', '');
|
||||||
|
|
||||||
let stackWrappedBelow = false;
|
let stackWrappedBelow = false;
|
||||||
|
|
||||||
@@ -1217,6 +1231,18 @@ const canonical = new URL('/', Astro.site);
|
|||||||
{ passive: true },
|
{ 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) => {
|
const activateTechnology = (index: number) => {
|
||||||
cards.forEach((card, cardIndex) => {
|
cards.forEach((card, cardIndex) => {
|
||||||
const isActive = cardIndex === index;
|
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 (progressCurrent) progressCurrent.textContent = String(index + 1).padStart(2, '0');
|
||||||
|
if (index === cards.length - 1) revealFooter();
|
||||||
};
|
};
|
||||||
|
|
||||||
activateTechnology(0);
|
activateTechnology(0);
|
||||||
|
|||||||
Reference in New Issue
Block a user