first commit

This commit is contained in:
“dongming”
2025-12-18 12:22:21 +08:00
commit b422c43928
69 changed files with 6247 additions and 0 deletions

View File

@@ -0,0 +1,59 @@
import React from "react";
import { Link } from "react-router-dom";
export default function WorkTogetherSlider() {
const ticker = "Let's 👋 Work Together · Let's 👋 Work Together ·";
return (
<section
className="max-w-full"
aria-labelledby="work-together-slider-heading"
>
<h2 id="work-together-slider-heading" className="sr-only">
Work Together Call-to-Action
</h2>
{/* Full-width clickable viewport */}
<Link
to="/contact"
className="group block"
aria-label="Contact me — Let's work together"
>
<div
className="relative h-16 overflow-hidden rounded-lg bg-[var(--card)]
border border-[var(--border)] text-[var(--text)]
focus:outline-none focus-visible:ring focus-visible:ring-blue-500"
tabIndex={-1}
aria-hidden="true" /* hide animated content; static label below */
>
{/* Absolutely positioned track so it can't expand layout width */}
<div className="marquee absolute inset-0 flex items-center will-change-transform group-hover:[animation-play-state:paused] group-focus-within:[animation-play-state:paused]">
<p className="px-4 text-3xl shrink-0">{ticker}</p>
{/* duplicate for seamless loop */}
<p className="px-4 text-3xl shrink-0" aria-hidden="true">
{ticker}
</p>
</div>
</div>
{/* Static equivalent for screen readers */}
<span className="sr-only">Lets work together contact me</span>
</Link>
{/* Local styles for the marquee */}
<style>{`
@keyframes marquee-x {
0% { transform: translateX(0); }
100% { transform: translateX(-50%); } /* slides past the first copy */
}
.marquee {
animation: marquee-x 18s linear infinite;
white-space: nowrap;
}
@media (prefers-reduced-motion: reduce) {
.marquee { animation: none !important; transform: none !important; }
}
`}</style>
</section>
);
}