/* global React, NereusIcons */
const { useState, useEffect, useRef } = React;
const I = NereusIcons;
/* ── Web3Forms ───────────────────────────────────────────
Beküldés a Web3Forms endpointjára. A kinézet 100% sajat;
ez csak a háttér-küldés. Access key cseréje: 1 hely. */
const WEB3FORMS_KEY = 'f3b39fe4-c1eb-4315-89fa-8395c97fcf51';
async function submitToWeb3Forms(fields, subject) {
const payload = {
access_key: WEB3FORMS_KEY,
subject: subject || 'Új kapcsolatfelvétel — nereuslab.hu',
from_name: 'Nereus Lab weboldal',
...fields,
};
const res = await fetch('https://api.web3forms.com/submit', {
method: 'POST',
headers: { 'Content-Type': 'application/json', Accept: 'application/json' },
body: JSON.stringify(payload),
});
const data = await res.json();
if (!data.success) throw new Error(data.message || 'A küldés nem sikerült.');
return data;
}
window.submitToWeb3Forms = submitToWeb3Forms;
/* Top notification strip */
function TopStrip() {
return (
Új
Cyber Hygiene Quiz — mérd fel a cyber tudatosságodat 3 perc alatt.
Kipróbálom
);
}
/* Main site header w/ Services mega menu */
function NereusHeader({ current }) {
const [open, setOpen] = useState(null); // 'svc' | 'kb' | null
const [menu, setMenu] = useState(false);
const ref = useRef(null);
useEffect(() => {
const onDoc = (e) => {
if (ref.current && !ref.current.contains(e.target)) setOpen(null);
};
document.addEventListener('mousedown', onDoc);
return () => document.removeEventListener('mousedown', onDoc);
}, []);
const isCurrent = (k) => current === k;
return (
{menu &&
}
);
}
/* Footer */
function NereusFooter() {
const year = new Date().getFullYear();
return (
);
}
/* Section head */
function SectionHead({ eyebrow, title, lead, center, onDark, em }) {
const renderTitle = () => {
if (!em) return title;
const parts = title.split(em);
return (
<>
{parts[0]}
{em}
{parts[1]}
>);
};
return (
{eyebrow &&
{eyebrow}
}
{renderTitle()}
{lead &&
{lead}
}
);
}
/* Reveal-on-scroll wrapper (lightweight IntersectionObserver) */
function useReveal() {
useEffect(() => {
const els = document.querySelectorAll('.nl-reveal');
if (!('IntersectionObserver' in window)) {
els.forEach((el) => el.classList.add('is-in'));
return;
}
const io = new IntersectionObserver((entries) => {
entries.forEach((e) => {if (e.isIntersecting) {e.target.classList.add('is-in');io.unobserve(e.target);}});
}, { threshold: 0.12, rootMargin: '0px 0px -10% 0px' });
els.forEach((el) => io.observe(el));
return () => io.disconnect();
}, []);
}
/* Animated water hero background — SVG wave layers + radial caustics */
function WaveHero({ variant = 'tide' }) {
return (
{variant === 'tide' &&
<>
>
}
{variant === 'depth' &&
}
{variant === 'lab' &&
}
);
}
/* Hero animated shield + rings */
function HeroOrb() {
return (
);
}
/* Cross-promo banner — links the two defenzív services together */
function CrossPromo({ eyebrow, title, copy, href, ctaText, Icon }) {
return (
);
}
Object.assign(window, {
TopStrip, NereusHeader, NereusFooter, SectionHead, useReveal, WaveHero, HeroOrb, CrossPromo
});