Import source: web/src/components/Boot
Import the existing local project snapshot. This commit organizes existing files; it does not represent newly developed functionality.
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
import { motion } from "motion/react";
|
||||
import { useUI } from "../lib/ui";
|
||||
|
||||
/**
|
||||
* The loading sequence: a single instrument ring draws itself around the
|
||||
* wordmark, then the whole veil lifts and hands off to the staggered
|
||||
* ring grid behind it.
|
||||
*/
|
||||
export function Boot() {
|
||||
const { t, reduced } = useUI();
|
||||
|
||||
return (
|
||||
<motion.div
|
||||
className="fixed inset-0 z-40 flex flex-col items-center justify-center bg-ink-950"
|
||||
exit={
|
||||
reduced
|
||||
? { opacity: 0, transition: { duration: 0.1 } }
|
||||
: { opacity: 0, scale: 1.04, transition: { duration: 0.7, ease: [0.22, 1, 0.36, 1] } }
|
||||
}
|
||||
>
|
||||
<div className="relative flex items-center justify-center">
|
||||
<svg viewBox="0 0 200 200" width={220} height={220} aria-hidden>
|
||||
<motion.circle
|
||||
cx={100}
|
||||
cy={100}
|
||||
r={88}
|
||||
fill="none"
|
||||
stroke="var(--color-brass)"
|
||||
strokeWidth={1}
|
||||
initial={{ pathLength: 0, rotate: -90, opacity: 0.4 }}
|
||||
animate={{ pathLength: 1, rotate: 0, opacity: 1 }}
|
||||
transition={
|
||||
reduced
|
||||
? { duration: 0 }
|
||||
: { duration: 1.5, ease: [0.65, 0, 0.35, 1] }
|
||||
}
|
||||
style={{ transformOrigin: "100px 100px" }}
|
||||
/>
|
||||
<motion.circle
|
||||
cx={100}
|
||||
cy={100}
|
||||
r={78}
|
||||
fill="none"
|
||||
stroke="var(--color-ink-700)"
|
||||
strokeWidth={0.5}
|
||||
initial={{ pathLength: 0, rotate: 90 }}
|
||||
animate={{ pathLength: 1, rotate: 0 }}
|
||||
transition={
|
||||
reduced
|
||||
? { duration: 0 }
|
||||
: { duration: 1.5, delay: 0.15, ease: [0.65, 0, 0.35, 1] }
|
||||
}
|
||||
style={{ transformOrigin: "100px 100px" }}
|
||||
/>
|
||||
</svg>
|
||||
<motion.span
|
||||
className="absolute text-[44px] text-paper"
|
||||
style={{ fontFamily: "var(--font-display)" }}
|
||||
initial={reduced ? false : { opacity: 0, y: 6 }}
|
||||
animate={{ opacity: 1, y: 0 }}
|
||||
transition={reduced ? { duration: 0 } : { duration: 0.8, delay: 0.5 }}
|
||||
>
|
||||
Dash
|
||||
</motion.span>
|
||||
</div>
|
||||
<motion.span
|
||||
className="microlabel mt-2"
|
||||
initial={reduced ? false : { opacity: 0 }}
|
||||
animate={{ opacity: 1 }}
|
||||
transition={reduced ? { duration: 0 } : { duration: 0.8, delay: 0.9 }}
|
||||
>
|
||||
{t.tagline}
|
||||
</motion.span>
|
||||
</motion.div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user