/* global React */ const { useState, useEffect, useRef } = React; /* ================================================================= COPY — Italian, surf/skate hype tone ================================================================= */ const HERO_HEADLINES = { A: { line1: "Drop in.", line2: "Pinta su.", line3: "Marea alta." }, B: { line1: "Ride", line2: "the Drop!", line3: "" } }; const SLOGANS = [ "Da Fregene su una ruota", "Live Music", "Dj Set", "Cibo che spacca", "Vibes alte", "Fino a tarda notte", "HB MÜNCHEN", "ECB", "Burger spaziali", "Prendi l'onda"]; const ANTIPASTI = [ { n: "01", name: "Super Nachos", desc: "Cheddar · guacamole · chili con carne · jalapeños", price: "9" }, { n: "02", name: "Tagliere Drop's", desc: "Salumi · formaggi · bruschettine · per 2 persone", price: "15" }, { n: "03", name: "Drop's Chili", desc: "Chili con carne di manzo · cumino · coriandolo", price: "8", spicy: true }, { n: "04", name: "Olive Ascolane", desc: "Artigianali · porzione abbondante", price: "5" }]; const PRIMI = [ { n: "05", name: "Drop's Cheese Burger", desc: "Scottona 180g · Edam · bacon · salsa rosa", price: "14" }, { n: "06", name: "Big Kahuna", desc: "Scottona · salsa cheddar · pulled pork · bacon · cicoria", price: "18" }, { n: "07", name: "Los Lobos", desc: "Cotoletta crunchy di pollo · bacon · coleslaw · salsa ranch", price: "14" }, { n: "08", name: "Teahupo'o", desc: "Pulled pork · coleslaw · salsa BBQ al whiskey", price: "14" }]; const BOARD = [ { n: "09", name: "Surfing Ribs", desc: "Costine di maiale marinate cotte al forno · piccanti", price: "18" }, { n: "10", name: "Drop's Schnitzel", desc: "Cotoletta di vitello 300g · french fries · marmellata mirtilli", price: "18" }, { n: "11", name: "Galletto Kentucky", desc: "Al forno · erbe aromatiche · peperoncino · patate", price: "16", spicy: true }, { n: "12", name: "Bavarian Mix", desc: "Tris di wrustel · bratwrust, servelade, bauernwrust · crauti", price: "14" }]; const TAPS = [ { n: 1, name: "Hofbräu Original", style: "Lager · 5,1°", origin: "München", note: "La spina di ordinanza · maltata, pulita", big: "0,4 L · € 6", small: "0,25 L · € 4" }, { n: 2, name: "Hofbräu Keller", style: "Keller · 5,1°", origin: "München", note: "Non filtrata · rotonda · da bere", big: "0,4 L · € 6", small: "0,25 L · € 4" }, { n: 3, name: "Hofbräu Münchner Weisse", style: "Weisse · 5,1°", origin: "München", note: "Frumento · banana · chiodi di garofano", big: "0,4 L · € 6", small: "0,25 L · € 4" }, { n: 4, name: "ECB Lupa", style: "IPA · 6,2°", origin: "Italia", note: "Tropicale · luppoli americani", big: "0,5 L · € 8", small: "0,3 L · € 6" }, { n: 5, name: "ECB 30 Sacchi", style: "Double IPA · 7,8°", origin: "Italia", note: "Bomba luppolata · i gradi si sentono", big: "0,5 L · € 8", small: "0,3 L · € 6" }, { n: 6, name: "Guinness", style: "Dry Stout · 4,2°", origin: "Ireland", note: "Cacao · caffè · ovviamente perfetta", big: "0,5 L · € 8", small: "0,3 L · € 6" }]; const COCKTAILS = [ { name: "Drop's Spritz", price: "7", ing: "Venturo · prosecco · soda (segreto della casa)" }, { name: "Aperol Spritz", price: "7", ing: "Aperol · prosecco · soda" }, { name: "Whisky Sour", price: "8", ing: "Bulleit bourbon · limone · zucchero" }, { name: "Gin Basil Sour", price: "8", ing: "Tanqueray · basilico · limone" }, { name: "Cosmopolitan", price: "8", ing: "Vodka · triple sec · cranberry · lime" }, { name: "Barman Special", price: "12", ing: "Proposta del mese dai nostri bartender" }]; const EVENTS = [ { day: "VEN", date: "23 MAG", title: "Vinile Reggae Sunset", dj: "DJ Sandalo · solo 45 giri", hour: "19:00 → 24:00" }, { day: "SAB", date: "24 MAG", title: "Live · Mareggiata Trio", dj: "Surf-rock romano dal vivo", hour: "21:30 → tardi" }, { day: "DOM", date: "25 MAG", title: "Brunch & Surf Check", dj: "Forecast a colazione", hour: "10:00 → 14:00" }, { day: "MER", date: "28 MAG", title: "Skate Jam · Best Trick", dj: "Premi: birre a vita (quasi)", hour: "18:00 → 21:00" }]; const HOURS = [ { d: "Lunedì", h: "19:00 → 02:00" }, { d: "Martedì", h: "19:00 → 02:00" }, { d: "Mercoledì", h: "19:00 → 02:00" }, { d: "Giovedì", h: "19:00 → 02:00" }, { d: "Venerdì", h: "19:00 → 02:00" }, { d: "Sabato", h: "19:00 → 02:00" }, { d: "Domenica", h: "19:00 → 02:00" }]; /* ================================================================= Small reusable bits ================================================================= */ function Marquee({ items }) { const loop = [...items, ...items, ...items, ...items]; return (
{loop.map((t, i) => {t} )}
); } function WaveLine({ height = 60, opacity = 1, stroke = 2 }) { // long horizontal wave path, animated drift return ( ); } function StampMini({ children, rot = -8 }) { return {children}; } /* ================================================================= HERO SLIDER — rotating background images with Ken Burns ================================================================= */ function HeroSlider({ images, interval = 5500 }) { const [i, setI] = React.useState(0); React.useEffect(() => { const t = setInterval(() => setI((v) => (v + 1) % images.length), interval); return () => clearInterval(t); }, [images.length, interval]); return (