/* ARBEITSSCHIRM — Live-Wetter-Hero mit Modus-Umschalter */
(function () {
const { Button } = window.ABIndustrieServiceDesignSystem_89df89;
const { Icon } = window.ABIcons;
const { WeatherCanvas } = window.ABArbeit;
const MODES = [
{ key: 'wind', label: 'Wind', icon: 'wind', head: 'STEHT IM WIND.', sub: 'Bodenverankerung, die hält — auch wenn die Böe schiebt. Kein Wegfliegen, kein Nachjustieren.' },
{ key: 'regen', label: 'Regen', icon: 'cloud-rain', head: 'DACH ÜBER DER NAHT.', sub: 'Trockene Schweißnaht, trockener Schacht. Der Guss da oben interessiert Ihre Arbeit nicht mehr.' },
{ key: 'sturm', label: 'Sturm', icon: 'cloud-lightning', head: 'WENN ANDERE EINPACKEN.', sub: 'Sturmfest verankert. Während die Nachbarbaustelle Feierabend macht, läuft Ihre weiter.' },
{ key: 'schnee', label: 'Schnee', icon: 'snowflake', head: 'TRÄGT DIE SCHNEELAST.', sub: 'Stabiles Gestänge unter Schnee — kein Durchhängen, kein Einsturz, kein Stillstand.' },
{ key: 'sonne', label: 'Sonne', icon: 'sun', head: 'SCHATTEN STATT HITZE.', sub: 'UV-beständige Bespannung — Schatten für Mensch und Material, auch wenn die Sonne knallt.' },
];
// Hero-Bild-Slider — 14 Slots, sanfter Crossfade (kein harter Schnitt).
// Bilder kommen später per Drag & Drop in jeden Slot (eigene id je Slot).
const SLIDE_COUNT = 14;
const SLIDE_INTERVAL = 5000;
function arrowStyle(side) {
return {
position: 'absolute', top: '50%', [side]: 10, transform: 'translateY(-50%)', zIndex: 3,
width: 36, height: 36, display: 'inline-flex', alignItems: 'center', justifyContent: 'center',
background: 'rgba(17,16,11,0.55)', border: '1px solid rgba(255,255,255,0.18)', borderRadius: 'var(--radius-pill)',
cursor: 'pointer', color: '#fff', backdropFilter: 'blur(4px)', transition: 'background var(--dur-fast) var(--ease-out)',
};
}
function HeroSlider({ lang }) {
const tr = (s) => window.ABi18n.t(lang, s);
// Anzeige-Reihenfolge bei jedem Laden zufällig mischen (Fisher–Yates).
// Die Slot-IDs (und damit die Bilddateien) bleiben fix — nur die
// Abspielreihenfolge ist gemischt.
const [order] = React.useState(() => {
const a = Array.from({ length: SLIDE_COUNT }, (_, n) => n);
for (let k = a.length - 1; k > 0; k--) {
const j = Math.floor(Math.random() * (k + 1));
const t = a[k]; a[k] = a[j]; a[j] = t;
}
return a;
});
const [p, setP] = React.useState(0); // Position in der gemischten Reihenfolge
const hover = React.useRef(false);
React.useEffect(() => {
const reduce = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;
if (reduce) return; // kein Auto-Lauf bei reduzierter Bewegung
const id = setInterval(() => { if (!hover.current) setP((x) => (x + 1) % SLIDE_COUNT); }, SLIDE_INTERVAL);
return () => clearInterval(id);
}, []);
const go = (k) => setP((k + SLIDE_COUNT) % SLIDE_COUNT);
const active = order[p];
return (
{ hover.current = true; }}
onMouseLeave={() => { hover.current = false; }}
style={{ position: 'relative', zIndex: 1, width: '100%', height: 300, borderRadius: 14, overflow: 'hidden', boxShadow: 'var(--shadow-xl)', border: '1px solid rgba(255,255,255,0.14)' }}>
{Array.from({ length: SLIDE_COUNT }).map((_, n) => (
))}
{Array.from({ length: SLIDE_COUNT }).map((_, k) => (
);
}
function Hero({ onCta, onModelle, mode = 'sturm', onPick, lang = 'de' }) {
const tr = (s) => window.ABi18n.t(lang, s);
// 4 product names (rotating wordmark) — two forced lines = constant height
const WORDS = [
{ p: 'BAUSTELLEN', s: 'SCHIRM' },
{ p: 'ARBEITS', s: 'SCHIRM' },
{ p: 'SCHWEISSER', s: 'SCHIRM' },
{ p: 'WETTERSCHUTZ', s: 'SCHIRM' },
];
// 4 headlines (independent of the weather)
const HEADS = [
{ icon: 'wind', head: 'STEHT IM WIND.', sub: 'Bodenverankerung, die hält — auch wenn die Böe schiebt. Kein Wegfliegen, kein Nachjustieren.' },
{ icon: 'cloud-rain', head: 'DACH ÜBER DER NAHT.', sub: 'Trockene Schweißnaht, trockener Schacht. Der Guss da oben interessiert Ihre Arbeit nicht mehr.' },
{ icon: 'cloud-lightning', head: 'WENN ANDERE EINPACKEN.', sub: 'Sturmfest verankert. Während die Nachbarbaustelle Feierabend macht, läuft Ihre weiter.' },
{ icon: 'snowflake', head: 'TRÄGT DIE SCHNEELAST.', sub: 'Stabiles Gestänge unter Schnee — kein Durchhängen, kein Einsturz, kein Stillstand.' },
{ icon: 'sun', head: 'SCHATTEN STATT HITZE.', sub: 'UV-beständige Bespannung — Schatten für Mensch und Material, auch wenn die Sonne knallt.' },
];
// EINE Markenfarbe — Farbe trägt die Marke, nie Dekoration (DS: keine
// bunte Akzent-Rotation). Dash, Unterstrich und Headline-Icon = Akzent-Rot.
const accent = 'var(--accent)';
const [wi, setWi] = React.useState(0); // name
const [hi, setHi] = React.useState(0); // headline
React.useEffect(() => {
// bewusst unterschiedliche, ruhige Takte, damit Name & Headline durchwandern
const a = setInterval(() => setWi((i) => (i + 1) % WORDS.length), 7000);
const b = setInterval(() => setHi((i) => (i + 1) % HEADS.length), 9500);
return () => { clearInterval(a); clearInterval(b); };
}, []);
const word = WORDS[wi];
const head = HEADS[hi];
return (
{/* darken + vignette so storm never fights the type */}
{/* diagonal red slash motif */}
{tr('Wetterschutz für den Rohrleitungs-, Anlagen- und Kanalbau')}
{tr(word.p + word.s)}
{tr(head.head)}
{tr(head.sub)}
{/* WETTER-UMSCHALTER */}
{MODES.map((m) => {
const on = m.key === mode;
return (
);
})}
}>{tr('Angebot anfordern')}
{[
{ v: 'bis 100 km/h', l: 'Windfest im Einsatz' },
{ v: 'bis zu 36 Streben', l: 'Verstärktes Gestell' },
{ v: 'DIN 4102 B1', l: 'schwer entflammbar (Pipeliner)' },
{ v: 'Ø 2,5 · 3,0 m', l: 'Rund & Rechteck' },
{ v: 'UV-stabil', l: 'Fäulnishemmend' },
{ v: '5 Modelle', l: 'Worker · Pipeliner · Heavy …' },
].map((s) => (
))}
{/* DRY ZONE — Produktbild */}
{/* Tag-Cluster oben links gestapelt — hält Pfeile (Mitte) und Punkte (unten) frei */}
{tr("Hier bleibt's trocken")}
{/* Wetter-Ticker */}
{['Windstabil', 'Regendicht', 'Sturmfest verankert', 'Schneelast geprüft', 'UV-beständig'].map((t, i) => (
{i > 0 && ·}{tr(t)}
))}
);
}
window.ABArbeit = Object.assign(window.ABArbeit || {}, { Hero });
})();