feat: BLACK HEART DANCE HOUSE landing page

Landing page with Hero, About, Team, Classes, and Contact sections.
Light/dark mode, scroll reveal animations, Yandex Maps, responsive design.
Next.js 16 + Tailwind v4 + TypeScript.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-04 17:32:45 +03:00
parent 0588f3fd95
commit f263765597
35 changed files with 5542 additions and 96 deletions

View File

@@ -0,0 +1,45 @@
"use client";
import { useEffect, useRef, useState } from "react";
interface RevealProps {
children: React.ReactNode;
className?: string;
}
export function Reveal({ children, className = "" }: RevealProps) {
const ref = useRef<HTMLDivElement>(null);
const [visible, setVisible] = useState(false);
useEffect(() => {
const el = ref.current;
if (!el) return;
const observer = new IntersectionObserver(
([entry]) => {
if (entry.isIntersecting) {
setVisible(true);
observer.unobserve(el);
}
},
{ threshold: 0.1, rootMargin: "0px 0px -50px 0px" },
);
observer.observe(el);
return () => observer.disconnect();
}, []);
return (
<div
ref={ref}
className={className}
style={{
opacity: visible ? 1 : 0,
transform: visible ? "translateY(0)" : "translateY(30px)",
transition: "opacity 0.7s ease-out, transform 0.7s ease-out",
}}
>
{children}
</div>
);
}