// Shared chrome — Nav + Footer + Logo + Bottle SVG // Exposed on window so other pages can use them. const Logo = ({ size = 28, color = "currentColor" }) => Aedu Beer Lab ; const Nav = ({ active }) => { const links = [ { id: "home", label: "Start", href: "index.html" }, { id: "biere", label: "Biere", href: "biere.html" }, { id: "ueber", label: "Über uns", href: "ueber.html" }, { id: "kontakt", label: "Kontakt", href: "kontakt.html" }, { id: "import", label: "Import", href: "import.html" }]; return ( ); }; const Footer = () => ; // SVG bottle — 0.33l longneck, used in carousels, hero, etc. const Bottle = ({ tone = "amber", label = "IPA", size = 1, glow = false }) => { const tones = { amber: { glass: "#5c3611", liquid: "#8f5316", ink: "#7a4a1c", accent: "#f6f2e8", cap: "#23201a" }, dark: { glass: "#1e1610", liquid: "#301d10", ink: "#2a1d12", accent: "#e8d9bd", cap: "#1c1a15" }, pale: { glass: "#75521a", liquid: "#ab8028", ink: "#8a6320", accent: "#f6f2e8", cap: "#23201a" }, sour: { glass: "#7a571a", liquid: "#b28629", ink: "#8a6520", accent: "#f6f2e8", cap: "#23201a" }, green: { glass: "#26311f", liquid: "#3a4a30", ink: "#2b3724", accent: "#f6f2e8", cap: "#1c1a15" } }; const t = tones[tone] || tones.amber; const w = 110 * size; const h = 300 * size; const uid = `b-${tone}`; const shape = "M37 22 L37 86 C37 106 22 112 20 140 L20 272 Q20 285 33 285 L77 285 Q90 285 90 272 L90 140 C88 112 73 106 73 86 L73 22 Z"; const lab = label.toUpperCase(); const labSize = lab.length <= 9 ? 7.5 : lab.length <= 13 ? 5.6 : lab.length <= 18 ? 4.4 : 3.8; const crimps = Array.from({ length: 17 }, (_, i) => 37.2 + i * 2.22); return ( {/* cast shadow */} {/* crown cap over the finish */} {crimps.map((x) => )} {/* glass: silhouette, liquid, cylindrical shading */} {/* finish ring + collar below the crown */} {/* specular streaks */} {/* heel + base thickness */} {/* paper label */} Aedu BEER LAB {lab} Rüfenacht ); }; // Reveal-on-scroll helper const useReveal = () => { React.useEffect(() => { const els = document.querySelectorAll(".reveal"); const io = new IntersectionObserver((entries) => { entries.forEach((e) => { if (e.isIntersecting) { e.target.classList.add("in"); io.unobserve(e.target); } }); }, { threshold: 0.12 }); els.forEach((el) => io.observe(el)); return () => io.disconnect(); }, []); }; Object.assign(window, { Logo, Nav, Footer, Bottle, useReveal });