import { useState, useEffect, useRef } from "react";
import { submitContactForm } from "./components/ui";
// ── Icone SVG inline semplici ─────────────────────────────────
function IcoInstagram() {
return (
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round">
<rect x="2" y="2" width="20" height="20" rx="5" />
<circle cx="12" cy="12" r="5" />
<circle cx="17.5" cy="6.5" r="0.8" fill="currentColor" stroke="none" />
</svg>
);
}
function IcoWhatsapp() {
return (
<svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor">
<path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347z"/>
<path d="M12 0C5.373 0 0 5.373 0 12c0 2.123.554 4.117 1.526 5.847L.057 23.485a.5.5 0 0 0 .612.612l5.638-1.469A11.945 11.945 0 0 0 12 24c6.627 0 12-5.373 12-12S18.627 0 12 0zm0 22c-1.885 0-3.655-.494-5.19-1.36l-.37-.214-3.857 1.005 1.029-3.752-.232-.376A9.96 9.96 0 0 1 2 12C2 6.477 6.477 2 12 2s10 4.477 10 10-4.477 10-10 10z"/>
</svg>
);
}
function IcoMail() {
return (
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round">
<rect x="2" y="4" width="20" height="16" rx="2" />
<polyline points="2,4 12,13 22,4" />
</svg>
);
}
function IcoStar({ filled = true }: { filled?: boolean }) {
return (
<svg width="16" height="16" viewBox="0 0 24 24" fill={filled ? "hsl(45,100%,51%)" : "none"} stroke="hsl(45,100%,51%)" strokeWidth="2">
<polygon points="12,2 15.09,8.26 22,9.27 17,14.14 18.18,21.02 12,17.77 5.82,21.02 7,14.14 2,9.27 8.91,8.26" />
</svg>
);
}
function IcoChevron({ dir = "down" }: { dir?: "down" | "up" }) {
return (
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" style={{ transform: dir === "up" ? "rotate(180deg)" : undefined }}>
<polyline points="6,9 12,15 18,9" />
</svg>
);
}
function IcoMapPin() {
return (
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="hsl(45,100%,51%)" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
<path d="M21 10c0 6-9 13-9 13S3 16 3 10a9 9 0 0 1 18 0z" />
<circle cx="12" cy="10" r="3" />
</svg>
);
}
function IcoClock() {
return (
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="hsl(45,100%,51%)" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
<circle cx="12" cy="12" r="10" />
<polyline points="12,6 12,12 16,14" />
</svg>
);
}
// ── Reveal al scroll ──────────────────────────────────────────
function Reveal({ children, className = "", delay = 0 }: { children: React.ReactNode; className?: string; delay?: number }) {
const ref = useRef<HTMLDivElement>(null);
const [vis, setVis] = useState(false);
useEffect(() => {
const el = ref.current;
if (!el) return;
const obs = new IntersectionObserver(([e]) => { if (e.isIntersecting) { setVis(true); obs.disconnect(); } }, { threshold: 0.12 });
obs.observe(el);
return () => obs.disconnect();
}, []);
return (
<div ref={ref} className={className} style={{ opacity: vis ? 1 : 0, transform: vis ? "translateY(0)" : "translateY(28px)", transition: `opacity 0.7s ease ${delay}s, transform 0.7s ease ${delay}s` }}>
{children}
</div>
);
}
// ── Nav ───────────────────────────────────────────────────────
function Nav() {
const [scrolled, setScrolled] = useState(false);
const [open, setOpen] = useState(false);
useEffect(() => {
const fn = () => setScrolled(window.scrollY > 40);
window.addEventListener("scroll", fn);
return () => window.removeEventListener("scroll", fn);
}, []);
const links = [
{ label: "Chi siamo", href: "#chi-siamo" },
{ label: "Corsi", href: "#corsi" },
{ label: "Eventi", href: "#eventi" },
{ label: "Team", href: "#team" },
{ label: "Contatti", href: "#contatti" },
];
return (
<nav className={`fixed top-0 left-0 right-0 z-50 transition-all duration-300 ${scrolled ? "bg-black/90 backdrop-blur-md shadow-lg" : "bg-transparent"}`}>
<div className="max-w-6xl mx-auto px-6 flex items-center justify-between h-16">
{/* Logo */}
<a href="#" className="flex items-center gap-3 group">
<img src="https://www.tangourbano.it/wp-content/uploads/2026/05/logo.png" alt="Tango Urbano Roma" className="h-10 w-auto object-contain" />
</a>
{/* Desktop links */}
<div className="hidden md:flex items-center gap-8">
{links.map(l => (
<a key={l.href} href={l.href} className="text-sm font-medium text-white/70 hover:text-[hsl(45,100%,51%)] transition-colors uppercase tracking-widest">
{l.label}
</a>
))}
<a href="#contatti" className="ml-4 px-5 py-2 bg-[hsl(45,100%,51%)] text-black text-sm font-bold uppercase tracking-widest hover:bg-[hsl(45,100%,62%)] transition-colors rounded-sm">
Prima lezione gratis
</a>
</div>
{/* Mobile hamburger */}
<button className="md:hidden text-white" onClick={() => setOpen(o => !o)} aria-label="Menu">
<div className="space-y-1.5">
<span className={`block h-0.5 bg-white transition-all ${open ? "rotate-45 translate-y-2" : ""}`} style={{ width: 24 }} />
<span className={`block h-0.5 bg-white transition-all ${open ? "opacity-0" : ""}`} style={{ width: 24 }} />
<span className={`block h-0.5 bg-white transition-all ${open ? "-rotate-45 -translate-y-2" : ""}`} style={{ width: 24 }} />
</div>
</button>
</div>
{/* Mobile drawer */}
{open && (
<div className="md:hidden bg-black/95 backdrop-blur-md px-6 pb-6 pt-2 space-y-4">
{links.map(l => (
<a key={l.href} href={l.href} onClick={() => setOpen(false)} className="block text-white/80 font-medium uppercase tracking-widest text-sm py-2 border-b border-white/10">
{l.label}
</a>
))}
<a href="#contatti" onClick={() => setOpen(false)} className="block text-center px-5 py-3 bg-[hsl(45,100%,51%)] text-black font-bold uppercase tracking-widest text-sm rounded-sm">
Prima lezione gratis
</a>
</div>
)}
</nav>
);
}
// ── Hero ──────────────────────────────────────────────────────
function Hero() {
return (
<section className="relative min-h-screen flex items-center overflow-hidden grain">
{/* BG image */}
<div className="absolute inset-0">
<img
src="https://pub-a4d6ad10dc1a4e1da401961c64a9749e.r2.dev/ig/4faf0c94c7ac55bf.jpg"
alt="Tango Urbano Roma"
className="w-full h-full object-cover object-center"
/>
{/* Gradient overlay */}
<div className="absolute inset-0 bg-gradient-to-r from-black/90 via-black/70 to-black/30" />
<div className="absolute inset-0 bg-gradient-to-t from-black/80 via-transparent to-black/20" />
</div>
{/* Decorative vertical line */}
<div className="absolute left-0 top-0 bottom-0 w-1 bg-[hsl(45,100%,51%)]" />
{/* Content */}
<div className="relative z-10 max-w-6xl mx-auto px-6 py-32">
<div className="max-w-2xl">
<div className="animate-fade-up animate-delay-1 flex items-center gap-3 mb-6">
<div className="w-10 h-px bg-[hsl(45,100%,51%)]" />
<span className="text-[hsl(45,100%,51%)] text-xs font-semibold uppercase tracking-[0.3em]">Roma · Dal cuore dell'Argentina</span>
</div>
<h1 className="animate-fade-up animate-delay-2 font-display text-7xl md:text-9xl leading-none mb-4 text-white">
TANGO<br />
<span className="shimmer-text">URBANO</span>
</h1>
<p className="animate-fade-up animate-delay-3 font-serif italic text-xl md:text-2xl text-white/80 mb-10 leading-relaxed">
Scuola di Tango Argentino a Roma.
Un viaggio nei sensi che trasforma il modo in cui ti muovi, ascolti e connetti.
</p>
<div className="animate-fade-up animate-delay-3 flex flex-col sm:flex-row gap-4">
<a href="#contatti" className="px-8 py-4 bg-[hsl(45,100%,51%)] text-black font-bold uppercase tracking-widest text-sm hover:bg-[hsl(45,100%,62%)] transition-all hover:scale-105 inline-block text-center rounded-sm">
Prima Lezione Gratuita
</a>
<a href="#corsi" className="px-8 py-4 border border-white/30 text-white font-medium uppercase tracking-widest text-sm hover:border-[hsl(45,100%,51%)] hover:text-[hsl(45,100%,51%)] transition-all inline-block text-center rounded-sm">
Scopri i Corsi
</a>
</div>
{/* Stats inline */}
<div className="animate-fade-up animate-delay-3 mt-14 flex gap-10">
{[
{ n: "3+", l: "Sedi a Roma" },
{ n: "5", l: "Maestri esperti" },
{ n: "★5.0", l: "Recensioni Google" },
].map(s => (
<div key={s.l}>
<div className="font-display text-3xl text-[hsl(45,100%,51%)]">{s.n}</div>
<div className="text-xs text-white/50 uppercase tracking-widest mt-1">{s.l}</div>
</div>
))}
</div>
</div>
</div>
{/* Scroll indicator */}
<div className="absolute bottom-8 left-1/2 -translate-x-1/2 z-10 flex flex-col items-center gap-2 text-white/30">
<span className="text-xs uppercase tracking-widest">Scorri</span>
<div className="w-px h-10 bg-white/20 relative overflow-hidden">
<div className="absolute top-0 left-0 w-full h-1/2 bg-[hsl(45,100%,51%)]" style={{ animation: "slideDown 1.5s ease infinite" }} />
</div>
</div>
<style>{`@keyframes slideDown { from{transform:translateY(-100%)} to{transform:translateY(300%)} }`}</style>
</section>
);
}
// ── Chi Siamo ─────────────────────────────────────────────────
function ChiSiamo() {
return (
<section id="chi-siamo" className="py-24 md:py-32">
<div className="max-w-6xl mx-auto px-6">
<div className="grid md:grid-cols-2 gap-16 items-center">
{/* Immagine */}
<Reveal>
<div className="relative">
<img
src="https://pub-a4d6ad10dc1a4e1da401961c64a9749e.r2.dev/ig/b01441727b24bb99.jpg"
alt="Comunità Tango Urbano Roma"
className="w-full aspect-[4/5] object-cover rounded-sm"
/>
{/* Citazione sovrapposta */}
<div className="absolute -bottom-8 -right-6 bg-[hsl(45,100%,51%)] text-black p-6 max-w-[240px] rounded-sm shadow-2xl">
<p className="font-serif italic text-base leading-snug font-semibold">
"Il centro del tango è nell'abbraccio. Da lì passa tutto."
</p>
<div className="mt-2 text-xs font-bold uppercase tracking-widest">— C. Gavito</div>
</div>
</div>
</Reveal>
{/* Testo */}
<Reveal delay={0.2} className="md:pl-4">
<div className="flex items-center gap-3 mb-6">
<div className="w-10 h-px bg-[hsl(45,100%,51%)]" />
<span className="text-[hsl(45,100%,51%)] text-xs font-semibold uppercase tracking-[0.25em]">Chi siamo</span>
</div>
<h2 className="font-display text-5xl md:text-6xl text-white leading-none mb-6">
PASSIONE,<br />CONNESSIONE,<br />
<span className="text-[hsl(45,100%,51%)]">TANGO.</span>
</h2>
<div className="space-y-4 text-white/70 leading-relaxed">
<p>
<strong className="text-white">Tango Urbano Roma</strong> è una scuola di Tango Argentino guidata dal Maestro <strong className="text-white">Santiago Castro</strong> e dal suo team di insegnanti appassionati. Siamo nati dall'amore per questa danza straordinaria e dalla voglia di condividerla con Roma.
</p>
<p>
Offriamo corsi per tutti i livelli — dai primissimi passi agli avanzati — lezioni private, praticas e serate milonga. Il tango non è solo danza: è <em className="text-white/90">ascolto, dialogo, emozione</em>.
</p>
<p>
Il nostro ambiente è accogliente e inclusivo. Pensi di essere un "ciocco di legno" e di non avere coordinazione? Siamo qui proprio per te.
</p>
</div>
<div className="mt-10 grid grid-cols-2 gap-4">
{[
{ icon: "💃", label: "Ogni livello, nessun limite" },
{ icon: "🤝", label: "Comunità accogliente" },
{ icon: "🎵", label: "Musicalità autentica" },
{ icon: "🌟", label: "Maestri certificati" },
].map(f => (
<div key={f.label} className="flex items-center gap-3 bg-white/5 px-4 py-3 rounded-sm border border-white/10">
<span className="text-xl">{f.icon}</span>
<span className="text-sm text-white/80 font-medium">{f.label}</span>
</div>
))}
</div>
</Reveal>
</div>
</div>
</section>
);
}
// ── Corsi ─────────────────────────────────────────────────────
function Corsi() {
const corsi = [
{
tag: "Per tutti",
titolo: "Primi Passi",
desc: "Hai sempre voluto ballare il tango ma non sai da dove cominciare? Questo corso è la tua porta d'ingresso. Nessuna esperienza richiesta.",
colore: "hsl(45,100%,51%)",
bg: "bg-[hsl(45,100%,51%)]",
dark: false,
},
{
tag: "Livello 1",
titolo: "Principianti",
desc: "Consolida la camminata, impara l'abbraccio e scopri il cuore musicale del tango. Un percorso strutturato per costruire basi solide.",
colore: "hsl(45,100%,51%)",
bg: "bg-white/5",
dark: true,
},
{
tag: "Livello 2",
titolo: "Intermedi",
desc: "Approfondisci giros, ochos, variazioni e musicalità avanzata. La tua danza inizia a prendere forma e personalità.",
colore: "hsl(45,100%,51%)",
bg: "bg-white/5",
dark: true,
},
{
tag: "Livello 3",
titolo: "Avanzati",
desc: "Per chi vuole affinare stile, improvvisazione e connessione profonda. Il tango come arte e filosofia.",
colore: "hsl(45,100%,51%)",
bg: "bg-white/5",
dark: true,
},
{
tag: "Su misura",
titolo: "Lezioni Private",
desc: "Attenzione individuale con il Maestro Santiago o il suo team. Il percorso più rapido per migliorare secondo i tuoi obiettivi personali.",
colore: "hsl(350,72%,45%)",
bg: "bg-[hsl(350,72%,12%)]",
dark: true,
},
];
return (
<section id="corsi" className="py-24 md:py-32 bg-[hsl(0,0%,6%)]">
<div className="max-w-6xl mx-auto px-6">
<Reveal className="text-center mb-16">
<div className="flex items-center justify-center gap-3 mb-4">
<div className="w-10 h-px bg-[hsl(45,100%,51%)]" />
<span className="text-[hsl(45,100%,51%)] text-xs font-semibold uppercase tracking-[0.25em]">I nostri corsi</span>
<div className="w-10 h-px bg-[hsl(45,100%,51%)]" />
</div>
<h2 className="font-display text-5xl md:text-7xl text-white leading-none mb-4">
IMPARA IL TANGO
</h2>
<p className="text-white/50 max-w-lg mx-auto text-base">
Dai primissimi passi all'arte avanzata. Un percorso chiaro, divertente, appassionante.
</p>
</Reveal>
<div className="grid md:grid-cols-3 gap-4">
{/* Primo corso in evidenza a tutta colonna */}
<Reveal delay={0.05} className="md:col-span-3">
<div className={`${corsi[0].bg} rounded-sm p-8 flex flex-col md:flex-row md:items-center justify-between gap-6`}>
<div>
<span className="text-xs font-bold uppercase tracking-widest text-black/60 block mb-2">{corsi[0].tag}</span>
<h3 className="font-display text-5xl text-black leading-none mb-3">{corsi[0].titolo}</h3>
<p className="text-black/70 max-w-lg">{corsi[0].desc}</p>
</div>
<a href="#contatti" className="flex-shrink-0 px-8 py-4 bg-black text-[hsl(45,100%,51%)] font-bold uppercase tracking-widest text-sm hover:bg-black/80 transition-all rounded-sm whitespace-nowrap">
Iscriviti ora
</a>
</div>
</Reveal>
{/* Altri corsi */}
{corsi.slice(1).map((c, i) => (
<Reveal key={c.titolo} delay={0.1 * (i + 1)}>
<div className={`${c.bg} border border-white/10 rounded-sm p-6 h-full flex flex-col card-hover`}>
<span className="text-xs font-bold uppercase tracking-widest mb-3 block" style={{ color: c.colore }}>{c.tag}</span>
<h3 className="font-display text-3xl text-white leading-none mb-3">{c.titolo}</h3>
<p className="text-white/60 text-sm leading-relaxed flex-1">{c.desc}</p>
<a href="#contatti" className="mt-6 text-xs font-bold uppercase tracking-widest hover:text-[hsl(45,100%,51%)] transition-colors" style={{ color: c.colore }}>
Prenota lezione prova in coppia →
</a>
</div>
</Reveal>
))}
</div>
{/* CTA prima lezione gratis */}
<Reveal delay={0.2} className="mt-12 text-center p-8 border border-[hsl(45,100%,51%)]/30 rounded-sm bg-[hsl(45,100%,51%)]/5">
<p className="font-display text-3xl md:text-4xl text-white mb-2">
La prima lezione è <span className="text-[hsl(45,100%,51%)]">GRATUITA</span>
</p>
<p className="text-white/50 mb-6 text-sm">Vieni a provare senza impegno. Ti aspettiamo!</p>
<a href="#contatti" className="inline-block px-10 py-4 bg-[hsl(45,100%,51%)] text-black font-bold uppercase tracking-widest text-sm hover:bg-[hsl(45,100%,62%)] transition-all rounded-sm">
Prenota ora
</a>
</Reveal>
</div>
</section>
);
}
// ── Orari / Sedi ──────────────────────────────────────────────
function Sedi() {
const sedi = [
{
giorno: "Martedì",
luogo: "Garbatella",
indirizzo: "Via M. Tamburini 18 — Roma Art Move",
orari: ["20:30 — Primi Passi / Principianti", "21:30 — Intermedi / Avanzati"],
},
{
giorno: "Mercoledì",
luogo: "San Giovanni",
indirizzo: "Via La Spezia 63 — Metro Lodi",
orari: ["20:30 — Primi Passi / Principianti", "21:30 — Intermedi / Avanzati"],
},
];
return (
<section className="py-20 border-y border-white/5">
<div className="max-w-6xl mx-auto px-6">
<Reveal className="mb-12">
<div className="flex items-center gap-3 mb-2">
<div className="w-10 h-px bg-[hsl(45,100%,51%)]" />
<span className="text-[hsl(45,100%,51%)] text-xs font-semibold uppercase tracking-[0.25em]">Calendario lezioni</span>
</div>
<h2 className="font-display text-4xl md:text-5xl text-white">2 SEDI A ROMA</h2>
</Reveal>
<div className="grid md:grid-cols-2 gap-6 max-w-3xl">
{sedi.map((s, i) => (
<Reveal key={s.luogo} delay={0.1 * i}>
<div className="bg-white/5 border border-white/10 rounded-sm p-6 card-hover">
<div className="text-[hsl(45,100%,51%)] font-display text-2xl mb-1">{s.giorno}</div>
<div className="text-white font-semibold text-lg mb-1">{s.luogo}</div>
<div className="flex items-start gap-2 text-white/50 text-sm mb-4">
<IcoMapPin />
<span className="leading-snug">{s.indirizzo}</span>
</div>
<div className="space-y-2">
{s.orari.map(o => (
<div key={o} className="flex items-center gap-2 text-sm text-white/70">
<IcoClock />
<span>{o}</span>
</div>
))}
</div>
</div>
</Reveal>
))}
</div>
</div>
</section>
);
}
// ── Team ──────────────────────────────────────────────────────
function Team() {
const maestri = [
{
nome: "Santiago Castro",
ruolo: "Maestro · Ballerino · Coreografo · TDJ · Organizzatore",
foto: "https://www.tangourbano.it/wp-content/uploads/2023/07/10373015_816650521707115_8757543601746706830_o-199x300.jpg",
desc: "Cuore e anima di Tango Urbano. Maestro, ballerino, coreografo, Tango DJ e organizzatore: Santiago porta il tango argentino autentico nel cuore di Roma.",
},
{
nome: "Serena Cacciola",
ruolo: "Maestra",
foto: "https://www.tangourbano.it/wp-content/uploads/2023/02/serena-2-300x300.jpg",
desc: "Porta leggerezza e precisione in ogni lezione. La sua passione per la danza trasforma ogni allievo.",
},
{
nome: "Lorenzo Camplone",
ruolo: "Maestro",
foto: "",
desc: "Tecnica e musicalità al servizio della connessione. Lorenzo guida gli allievi con cura e dedizione.",
},
{
nome: "Simona Di Giuseppe",
ruolo: "Maestra & Tango DJ",
foto: "https://www.tangourbano.it/wp-content/uploads/2023/11/347250365_1318516072036127_1866092586537305385_n-300x300.jpg",
desc: "Connessione, musica e cultura del tango. Maestra e anima musicale delle milonghe di Tango Urbano.",
},
{
nome: "Daniela Zaccagnini",
ruolo: "Maestra & Stilista di Tango",
foto: "https://www.tangourbano.it/wp-content/uploads/2023/02/dani-1-1-300x300.jpg",
desc: "Eleganza, stile e sensualità. Daniela cura l'estetica del movimento e consiglia look per la milonga.",
},
];
return (
<section id="team" className="py-24 md:py-32 bg-[hsl(0,0%,6%)]">
<div className="max-w-6xl mx-auto px-6">
<Reveal className="text-center mb-16">
<div className="flex items-center justify-center gap-3 mb-4">
<div className="w-10 h-px bg-[hsl(45,100%,51%)]" />
<span className="text-[hsl(45,100%,51%)] text-xs font-semibold uppercase tracking-[0.25em]">I nostri maestri</span>
<div className="w-10 h-px bg-[hsl(45,100%,51%)]" />
</div>
<h2 className="font-display text-5xl md:text-7xl text-white leading-none">
IL TEAM
</h2>
</Reveal>
<div className="grid md:grid-cols-4 gap-6">
{maestri.map((m, i) => (
<Reveal key={m.nome} delay={0.1 * i}>
<div className="group text-center card-hover">
<div className="relative mb-4 overflow-hidden rounded-sm aspect-square">
<img src={m.foto} alt={m.nome} className="w-full h-full object-cover object-top transition-transform duration-500 group-hover:scale-105" />
<div className="absolute inset-0 bg-gradient-to-t from-black/60 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300" />
</div>
<div className="text-[hsl(45,100%,51%)] text-xs font-semibold uppercase tracking-widest mb-1">{m.ruolo}</div>
<h3 className="text-white font-semibold text-lg mb-2">{m.nome}</h3>
<p className="text-white/50 text-sm leading-relaxed">{m.desc}</p>
</div>
</Reveal>
))}
</div>
</div>
</section>
);
}
// ── Galleria ──────────────────────────────────────────────────
function Galleria() {
return (
<section id="galleria" className="py-16">
<div className="max-w-6xl mx-auto px-6">
<Reveal className="mb-10">
<div className="flex items-center gap-3 mb-2">
<div className="w-10 h-px bg-[hsl(45,100%,51%)]" />
<span className="text-[hsl(45,100%,51%)] text-xs font-semibold uppercase tracking-[0.25em]">Atmosfera</span>
</div>
<h2 className="font-display text-4xl md:text-5xl text-white">LA NOSTRA SCUOLA</h2>
</Reveal>
<div className="grid grid-cols-2 md:grid-cols-3 gap-3">
<Reveal className="col-span-1 md:col-span-2 row-span-1">
<div className="overflow-hidden rounded-sm aspect-video">
<img src="https://pub-a4d6ad10dc1a4e1da401961c64a9749e.r2.dev/ig/a26fdf736c950c8d.jpg" alt="Lezione di tango" className="w-full h-full object-cover hover:scale-105 transition-transform duration-700" />
</div>
</Reveal>
<Reveal delay={0.1}>
<div className="overflow-hidden rounded-sm aspect-square">
<img src="https://pub-a4d6ad10dc1a4e1da401961c64a9749e.r2.dev/ig/4faf0c94c7ac55bf.jpg" alt="Coppia di tango" className="w-full h-full object-cover hover:scale-105 transition-transform duration-700" />
</div>
</Reveal>
<Reveal delay={0.15}>
<div className="overflow-hidden rounded-sm aspect-square">
<img src="https://pub-a4d6ad10dc1a4e1da401961c64a9749e.r2.dev/ig/b01441727b24bb99.jpg" alt="Gruppo Tango Urbano" className="w-full h-full object-cover hover:scale-105 transition-transform duration-700" />
</div>
</Reveal>
<Reveal delay={0.2} className="col-span-1 md:col-span-2">
<div className="overflow-hidden rounded-sm aspect-video">
<img src="https://www.tangourbano.it/wp-content/uploads/2024/12/1-1024x721.png" alt="Milonga Roma" className="w-full h-full object-cover object-center hover:scale-105 transition-transform duration-700" />
</div>
</Reveal>
</div>
<Reveal delay={0.2} className="mt-6 text-center">
<a href="https://www.instagram.com/tango.urbano/" target="_blank" rel="noopener noreferrer" className="inline-flex items-center gap-3 px-6 py-3 border border-white/20 text-white/70 hover:border-[hsl(45,100%,51%)] hover:text-[hsl(45,100%,51%)] transition-all text-sm font-medium rounded-sm">
<IcoInstagram />
Seguici su Instagram @tango.urbano
</a>
</Reveal>
</div>
</section>
);
}
// ── Eventi ────────────────────────────────────────────────────
function Eventi() {
return (
<section id="eventi" className="py-24 md:py-32 bg-[hsl(0,0%,6%)]">
<div className="max-w-6xl mx-auto px-6">
<div className="grid md:grid-cols-2 gap-16 items-center">
<Reveal>
<div className="flex items-center gap-3 mb-6">
<div className="w-10 h-px bg-[hsl(45,100%,51%)]" />
<span className="text-[hsl(45,100%,51%)] text-xs font-semibold uppercase tracking-[0.25em]">Oltre le lezioni</span>
</div>
<h2 className="font-display text-5xl md:text-6xl text-white leading-none mb-8">
EVENTI &<br /><span className="text-[hsl(45,100%,51%)]">MILONGHE</span>
</h2>
<div className="space-y-6">
<div className="border-l-2 border-[hsl(45,100%,51%)] pl-6">
<div className="font-display text-2xl text-white mb-1">LA BOMBA</div>
<div className="text-[hsl(45,100%,51%)] text-xs font-bold uppercase tracking-widest mb-2">Milonga Roma</div>
<p className="text-white/60 text-sm leading-relaxed">
La nostra milonga è uno spazio per ballare, incontrarsi e vivere il tango in libertà. Un'esperienza autentica nel cuore di Roma.
</p>
</div>
<div className="border-l-2 border-[hsl(350,72%,45%)] pl-6">
<div className="font-display text-2xl text-white mb-1">SHOW DI TANGO</div>
<div className="text-[hsl(350,72%,45%)] text-xs font-bold uppercase tracking-widest mb-2">Spettacoli & Performance</div>
<p className="text-white/60 text-sm leading-relaxed">
Il team Tango Urbano porta sul palco spettacoli emozionanti di tango argentino per eventi privati, aziendali e teatrali.
</p>
</div>
<div className="border-l-2 border-white/20 pl-6">
<div className="font-display text-2xl text-white mb-1">PRACTICAS & STAGES</div>
<div className="text-white/40 text-xs font-bold uppercase tracking-widest mb-2">Approfondimenti</div>
<p className="text-white/60 text-sm leading-relaxed">
Praticas settimanali per allenare la danza e workshops intensivi con ospiti speciali dall'Argentina e dal mondo.
</p>
</div>
</div>
</Reveal>
<Reveal delay={0.2}>
<div className="relative">
<img
src="https://www.tangourbano.it/wp-content/uploads/2026/01/Corsi-di-Tango-2026-orizzontal.png"
alt="Corsi Tango 2026"
className="w-full rounded-sm object-cover"
/>
<div className="absolute -top-4 -left-4 bg-[hsl(45,100%,51%)] text-black px-4 py-2 rounded-sm">
<div className="font-display text-2xl">2025/26</div>
<div className="text-xs font-bold uppercase tracking-widest">Stagione in corso</div>
</div>
</div>
</Reveal>
</div>
</div>
</section>
);
}
// ── Recensioni ────────────────────────────────────────────────
function Recensioni() {
const reviews = [
{
nome: "Valeria M.",
testo: "Il Tango argentino insegnato in maniera eccelsa, tecnicamente ma divertendosi. Il clima è accogliente e informale, e gli insegnanti molto preparati hanno tanto da trasferire. Lo consiglio vivamente!",
stelle: 5,
},
{
nome: "Marco R.",
testo: "Consiglio a tutti la scuola Tango Urbano di Santiago Castro. Il maestro riesce a scomporre i passi più difficili e a renderli facili da imparare e divertenti. L'ambiente è accogliente e rilassato.",
stelle: 5,
},
{
nome: "Alessandra T.",
testo: "Una scuola d'eccellenza. Il Maestro Santiago Castro coniuga competenza, passione, umanità e accoglienza. Il suo sorriso vi trascinerà nel mondo del tango autentico, attraverso un caloroso abbraccio.",
stelle: 5,
},
];
return (
<section className="py-24 relative overflow-hidden">
{/* BG decorativo */}
<div className="absolute inset-0 bg-gradient-to-br from-[hsl(45,100%,51%)]/5 via-transparent to-[hsl(350,72%,45%)]/5" />
<div className="relative max-w-6xl mx-auto px-6">
<Reveal className="text-center mb-16">
<div className="flex items-center justify-center gap-3 mb-4">
<div className="w-10 h-px bg-[hsl(45,100%,51%)]" />
<span className="text-[hsl(45,100%,51%)] text-xs font-semibold uppercase tracking-[0.25em]">Cosa dicono gli allievi</span>
<div className="w-10 h-px bg-[hsl(45,100%,51%)]" />
</div>
<h2 className="font-display text-5xl md:text-6xl text-white leading-none">
LE PERSONE DICONO
</h2>
</Reveal>
<div className="grid md:grid-cols-3 gap-6">
{reviews.map((r, i) => (
<Reveal key={r.nome} delay={0.1 * i}>
<div className="bg-white/5 border border-white/10 rounded-sm p-6 flex flex-col card-hover">
<div className="flex gap-1 mb-4">
{Array.from({ length: r.stelle }).map((_, j) => <IcoStar key={j} />)}
</div>
<p className="font-serif italic text-white/80 text-base leading-relaxed flex-1 mb-6">
"{r.testo}"
</p>
<div className="flex items-center gap-3 pt-4 border-t border-white/10">
<div className="w-8 h-8 rounded-full bg-[hsl(45,100%,51%)] flex items-center justify-center text-black font-bold text-sm">
{r.nome[0]}
</div>
<div className="font-semibold text-white text-sm">{r.nome}</div>
</div>
</div>
</Reveal>
))}
</div>
</div>
</section>
);
}
// ── Contatti ──────────────────────────────────────────────────
function Contatti() {
const [status, setStatus] = useState<"idle" | "sending" | "sent" | "error" | "preview">("idle");
const [errMsg, setErrMsg] = useState("");
async function onSubmit(e: React.FormEvent<HTMLFormElement>) {
e.preventDefault();
setStatus("sending");
const fd = new FormData(e.currentTarget);
const data = Object.fromEntries(fd) as Record<string, string>;
const r = await submitContactForm(data);
if (r.ok) { setStatus("sent"); return; }
if (r.reason === "preview") { setStatus("preview"); return; }
setErrMsg(r.message || "Errore"); setStatus("error");
}
return (
<section id="contatti" className="py-24 md:py-32 bg-[hsl(0,0%,4%)]">
<div className="max-w-6xl mx-auto px-6">
<div className="grid md:grid-cols-2 gap-16">
{/* Info */}
<Reveal>
<div className="flex items-center gap-3 mb-6">
<div className="w-10 h-px bg-[hsl(45,100%,51%)]" />
<span className="text-[hsl(45,100%,51%)] text-xs font-semibold uppercase tracking-[0.25em]">Contattaci</span>
</div>
<h2 className="font-display text-5xl md:text-6xl text-white leading-none mb-6">
VIENI A<br /><span className="text-[hsl(45,100%,51%)]">BALLARE</span>
</h2>
<p className="text-white/60 leading-relaxed mb-10">
La tua prima lezione è GRATUITA e senza impegno se vieni in coppia. Scrivici, chiamaci o mandaci un messaggio su WhatsApp: ti risponderemo subito.
</p>
<div className="space-y-5">
<a href="https://wa.me/393931078263?text=Ciao,%20vorrei%20informazioni%20sui%20corsi%20di%20Tango!" target="_blank" rel="noopener noreferrer" className="flex items-center gap-4 group">
<div className="w-12 h-12 rounded-sm bg-[#25D366]/10 flex items-center justify-center text-[#25D366] flex-shrink-0 group-hover:bg-[#25D366]/20 transition-colors">
<IcoWhatsapp />
</div>
<div>
<div className="text-xs text-white/40 uppercase tracking-widest mb-0.5">WhatsApp</div>
<div className="text-white font-semibold group-hover:text-[hsl(45,100%,51%)] transition-colors">+39 393 107 8263</div>
</div>
</a>
<a href="mailto:info@tangourbano.it" className="flex items-center gap-4 group">
<div className="w-12 h-12 rounded-sm bg-[hsl(45,100%,51%)]/10 flex items-center justify-center text-[hsl(45,100%,51%)] flex-shrink-0 group-hover:bg-[hsl(45,100%,51%)]/20 transition-colors">
<IcoMail />
</div>
<div>
<div className="text-xs text-white/40 uppercase tracking-widest mb-0.5">Email</div>
<div className="text-white font-semibold group-hover:text-[hsl(45,100%,51%)] transition-colors">infotangourbano@gmail.com</div>
</div>
</a>
<a href="https://www.instagram.com/tango.urbano/" target="_blank" rel="noopener noreferrer" className="flex items-center gap-4 group">
<div className="w-12 h-12 rounded-sm bg-purple-500/10 flex items-center justify-center text-purple-400 flex-shrink-0 group-hover:bg-purple-500/20 transition-colors">
<IcoInstagram />
</div>
<div>
<div className="text-xs text-white/40 uppercase tracking-widest mb-0.5">Instagram</div>
<div className="text-white font-semibold group-hover:text-[hsl(45,100%,51%)] transition-colors">@tango.urbano</div>
</div>
</a>
</div>
{/* Mappa placeholder creativa */}
<div className="mt-10 p-4 bg-white/5 border border-white/10 rounded-sm">
<div className="flex items-start gap-3">
<IcoMapPin />
<div>
<div className="text-white font-semibold text-sm mb-1">Sede principale</div>
<div className="text-white/50 text-sm">Via La Spezia 63, San Giovanni — Roma</div>
<div className="text-white/30 text-xs mt-1">Metro Lodi · Mercoledì 20:30</div>
</div>
</div>
</div>
</Reveal>
{/* Form */}
<Reveal delay={0.2}>
<div className="bg-white/5 border border-white/10 rounded-sm p-8">
<h3 className="font-display text-3xl text-white mb-2">PRENOTA LA TUA</h3>
<p className="text-[hsl(45,100%,51%)] font-bold text-sm uppercase tracking-widest mb-8">Prima Lezione GRATUITA in coppia</p>
{status === "sent" ? (
<div className="text-center py-12">
<div className="text-4xl mb-4">💃</div>
<div className="font-display text-2xl text-[hsl(45,100%,51%)] mb-2">PERFETTO!</div>
<p className="text-white/60">Grazie per il tuo messaggio! Ti ricontattiamo presto per organizzare la tua prima lezione.</p>
</div>
) : (
<form onSubmit={onSubmit} className="space-y-5">
<input type="text" name="_hp" tabIndex={-1} autoComplete="off" className="hidden" aria-hidden />
<div>
<label className="block text-white/50 text-xs uppercase tracking-widest mb-2">Nome e Cognome</label>
<input name="name" required className="w-full bg-white/10 border border-white/20 rounded-sm px-4 py-3 text-white placeholder-white/30 text-sm focus:outline-none focus:border-[hsl(45,100%,51%)] transition-colors" placeholder="Mario Rossi" />
</div>
<div>
<label className="block text-white/50 text-xs uppercase tracking-widest mb-2">Email</label>
<input name="email" type="email" required className="w-full bg-white/10 border border-white/20 rounded-sm px-4 py-3 text-white placeholder-white/30 text-sm focus:outline-none focus:border-[hsl(45,100%,51%)] transition-colors" placeholder="mario@email.it" />
</div>
<div>
<label className="block text-white/50 text-xs uppercase tracking-widest mb-2">Telefono (opzionale)</label>
<input name="phone" type="tel" className="w-full bg-white/10 border border-white/20 rounded-sm px-4 py-3 text-white placeholder-white/30 text-sm focus:outline-none focus:border-[hsl(45,100%,51%)] transition-colors" placeholder="+39 333 123 4567" />
</div>
<div>
<label className="block text-white/50 text-xs uppercase tracking-widest mb-2">Livello</label>
<select name="message" className="w-full bg-white/10 border border-white/20 rounded-sm px-4 py-3 text-white text-sm focus:outline-none focus:border-[hsl(45,100%,51%)] transition-colors appearance-none" style={{ background: "hsl(0,0%,15%)" }}>
<option value="Principiante assoluto">Principiante assoluto</option>
<option value="Ho qualche base">Ho qualche base</option>
<option value="Livello intermedio">Livello intermedio</option>
<option value="Avanzato">Avanzato</option>
</select>
</div>
<button type="submit" disabled={status === "sending"} className="w-full py-4 bg-[hsl(45,100%,51%)] text-black font-bold uppercase tracking-widest text-sm hover:bg-[hsl(45,100%,62%)] disabled:opacity-60 transition-all rounded-sm">
{status === "sending" ? "Invio in corso..." : "Prenota la lezione gratuita"}
</button>
<p className="text-center text-white/30 text-xs">
Inviando accetti di essere ricontattato dalla scuola.
</p>
{status === "preview" && <p className="text-sm text-white/50 text-center">Pubblica il sito per ricevere i messaggi davvero.</p>}
{status === "error" && <p className="text-sm text-red-400 text-center">{errMsg}</p>}
</form>
)}
</div>
</Reveal>
</div>
</div>
</section>
);
}
// ── Footer ────────────────────────────────────────────────────
function Footer() {
return (
<footer className="bg-black border-t border-white/10 py-10">
<div className="max-w-6xl mx-auto px-6 flex flex-col md:flex-row items-center justify-between gap-6">
<div className="flex items-center gap-3">
<img src="https://www.tangourbano.it/wp-content/uploads/2026/05/logo.png" alt="Tango Urbano Roma" className="h-8 w-auto object-contain" />
<div className="text-white/30 text-xs uppercase tracking-widest">Scuola di Tango Argentino Roma</div>
</div>
<div className="flex items-center gap-6 text-white/40 text-xs uppercase tracking-widest">
<a href="https://www.instagram.com/tango.urbano/" target="_blank" rel="noopener noreferrer" className="hover:text-[hsl(45,100%,51%)] transition-colors flex items-center gap-2">
<IcoInstagram /> Instagram
</a>
<a href="mailto:info@tangourbano.it" className="hover:text-[hsl(45,100%,51%)] transition-colors">info@tangourbano.it</a>
<a href="https://wa.me/393931078263" target="_blank" rel="noopener noreferrer" className="hover:text-[hsl(45,100%,51%)] transition-colors">WhatsApp</a>
</div>
<div className="text-white/20 text-xs">
© {new Date().getFullYear()} Tango Urbano Roma
</div>
</div>
</footer>
);
}
// ── App ───────────────────────────────────────────────────────
export default function App() {
return (
<div className="min-h-screen bg-[hsl(0,0%,4%)]">
<Nav />
<Hero />
<ChiSiamo />
<Corsi />
<Sedi />
<Team />
<Galleria />
<Eventi />
<Recensioni />
<Contatti />
<Footer />
</div>
);
}