/* global React */
const { useState, useEffect, useRef } = React;
// Curated safe imagery — only sky/clouds/sunset and abstract scenes.
// All other slots use a styled SVG placeholder via getPlaceholder() until
// the client provides real photography from eclair.aero.
const SKY = 'https://images.unsplash.com/photo-1469854523086-cc02fe5d8800?w=2400&q=85&auto=format&fit=crop';
const SUNSET = 'https://images.unsplash.com/photo-1488229297570-58520851e868?w=2000&q=85&auto=format&fit=crop';
const CLOUDS = 'https://images.unsplash.com/photo-1534088568595-a066f410bcda?w=2400&q=85&auto=format&fit=crop';
const PRAGUE = 'https://images.unsplash.com/photo-1519677100203-a0e668c92439?w=1600&q=85&auto=format&fit=crop';
// Inline SVG placeholder factory — branded, monospace label, no external fetch.
function getPlaceholder(label, w = 1600, h = 1000) {
const svg = `
${label}
`;
return 'data:image/svg+xml;utf8,' + svg.replace(/\n\s+/g, ' ');
}
const IMG = {
hero: SKY,
heroAlt: CLOUDS,
clouds: CLOUDS,
sunset: SUNSET,
prague: PRAGUE,
// Service tiles — branded placeholders
cabin1: 'images/aircraft-management.jpg',
vipLounge: 'images/aircraft-management.jpg',
tarmac: 'images/aircraft-management.jpg',
meeting: 'images/aircraft-management.jpg',
dispatch: 'images/aircraft-management.jpg',
hangar: 'images/aircraft-management.jpg',
cargo: 'images/aircraft-management.jpg',
// Fleet
global: 'images/ok-mbs.jpg',
g280: 'images/ok-mbs.jpg',
challenger: 'images/ok-mbs.jpg',
learjet: 'images/ok-mbs.jpg',
g200: 'images/ok-mbs.jpg',
cockpit: getPlaceholder('COCKPIT'),
cabin2: getPlaceholder('CABIN INTERIOR'),
cabin3: getPlaceholder('CABIN INTERIOR'),
exterior: getPlaceholder('EXTERIOR'),
};
window.IMG = IMG;
/* ============================================================
ECLAIR LOGO
============================================================ */
function EclairLogo() {
return (
);
}
/* ============================================================
NAV — variant V2 always-dark on hero, flips on scroll
============================================================ */
function NavV2({ active = 'home', theme, onThemeToggle, transparent = true }) {
const [scrolled, setScrolled] = useState(false);
const [menuOpen, setMenuOpen] = useState(false);
useEffect(() => {
const onScroll = () => setScrolled(window.scrollY > 60);
window.addEventListener('scroll', onScroll, { passive: true });
onScroll();
return () => window.removeEventListener('scroll', onScroll);
}, []);
// Zamknout scroll při otevřeném menu
useEffect(() => {
document.body.style.overflow = menuOpen ? 'hidden' : '';
return () => { document.body.style.overflow = ''; };
}, [menuOpen]);
const isOnDarkHero = transparent && !scrolled && !menuOpen;
const NAV_LINKS = [
['services', 'Services'], ['fleet', 'Fleet'],
['empty-legs', 'Empty Legs'], ['about', 'About'], ['contact', 'Contact'],
];
return (
<>
{/* Desktop center links */}
{NAV_LINKS.map(([id, l]) => (
{l}
))}
{/* Desktop: OPS status */}
OPS · 24/7
{/* Theme toggle — vždy viditelný */}
{theme === 'dark' ? (
) : (
)}
{/* Desktop: CTA */}
Request a quote
{/* Mobile: hamburger */}
setMenuOpen(o => !o)}
aria-label={menuOpen ? 'Close menu' : 'Open menu'}
style={{
width: 32, height: 32, display: 'none', flexDirection: 'column',
justifyContent: 'center', alignItems: 'center', gap: 5,
color: isOnDarkHero ? '#fff' : 'var(--text)',
}}>
{/* Mobile drawer */}
{NAV_LINKS.map(([id, l], i) => (
setMenuOpen(false)}
style={{
display: 'flex', alignItems: 'center', justifyContent: 'space-between',
padding: '18px 0',
borderBottom: '1px solid var(--line)',
fontSize: 28, fontFamily: 'var(--font-display)',
fontWeight: 500, letterSpacing: '-0.03em',
color: 'var(--text)',
opacity: 0, animation: menuOpen ? `fadeSlideIn 300ms ${i * 50 + 100}ms forwards` : 'none',
}}>
{l}
0{i + 1}
))}
{/* Drawer footer */}
>
);
}
/* ============================================================
HERO V2 — full-bleed video with parallax overlay
============================================================ */
function HeroVideoV2({ heroStyle = 'video' }) {
return (
{/* Background media */}
{heroStyle === 'video' ? (
) : (
)}
{/* Dark gradient veil */}
{/* Content */}
Private aviation · Est. 2008 · Prague
Feel the
difference
in the sky.
A Czech-flagged operator running five business jets out of Prague — from super-light Learjets
to ultra-long-range Globals. Quoted in minutes, wheels-up in hours.
{/* Live stats card */}
{[
{ v: '5', l: 'Aircraft' }, { v: '11.1k', l: 'km range' },
{ v: '< 4h', l: 'Avg. response' }, { v: '24/7', l: 'Dispatch' },
].map(s => (
))}
{/* Marker bar */}
LKPR · 50.1008°N · 14.2632°E
Wind 240° / 8kt · QNH 1018
Visibility 10km+
OAT 14°C
{/* Scroll hint */}
Scroll
);
}
/* ============================================================
FOOTER
============================================================ */
function FooterV2() {
return (
Hand-picked aviation professionals and a state-of-the-art fleet — the difference you feel in the sky.
EBAA Member
ACA Stage 2
IS-BAO Reg.
{[
{ title: 'Services', items: ['Aircraft Charter', 'VIP Lounge Prague', 'Aircraft Management', 'Flight Planning', 'Aircraft Sales', 'Cargo'] },
{ title: 'Fleet', items: ['Global 6000', 'Challenger 605', 'Gulfstream G280', 'Gulfstream G200', 'Learjet 75'] },
{ title: 'Company', items: ['About', 'Sustainability', 'History', 'Certificates', 'Career', 'News'] },
].map(col => (
{col.title}
{col.items.map(i => (
{i}
))}
))}
© 2026 ECLAIR AVIATION s.r.o. · DĚDINSKÁ 29, PRAGUE 6
+420 778 403 535 · INFO@ECLAIR.AERO
);
}
Object.assign(window, { EclairLogo, NavV2, HeroVideoV2, FooterV2 });