/* Powermieter Landingpage — content data + small building-block components */ /* ---- 6-step process (the rail) ---- */ const LP_STEPS = [ { n: 1, label: 'Informieren', icon: 'info' }, { n: 2, label: 'Interesse', icon: 'spark' }, { n: 3, label: 'Registrierung', icon: 'user' }, { n: 4, label: 'Vertrag prüfen', icon: 'doc' }, { n: 5, label: 'Aktivierung', icon: 'checkBold' }, { n: 6, label: 'Portal nutzen', icon: 'chart' }, ]; const LP_HOW = [ { t: 'Solarstrom entsteht auf dem Dach', d: 'Die Photovoltaik-Anlage auf Ihrem Gebäude erzeugt Strom direkt vor Ort — sauber und lokal.' }, { t: 'Strom wird im Gebäude genutzt', d: 'Der Strom wird zuerst im Haus verbraucht: in den Wohnungen, für Allgemeinstrom oder die Wärmepumpe.' }, { t: 'Reststrom ergänzt automatisch', d: 'Reicht der lokale Strom nicht aus, wird nahtlos Strom aus dem Netz ergänzt — ohne dass Sie etwas merken.' }, { t: 'Powermieter rechnet transparent ab', d: 'Ihr Verbrauch wird digital erfasst und monatlich nachvollziehbar abgerechnet.' }, ]; const LP_BENEFITS = [ { ic: 'wallet', t: 'Günstiger Stromtarif', d: 'Sie profitieren von einem attraktiven Stromangebot für Ihr Gebäude — meist günstiger als die Grundversorgung.', tag: 'Sparen' }, { ic: 'sun2', t: 'Lokaler Solarstrom', d: 'Ein Teil Ihres Stroms kommt direkt vom Dach Ihres Hauses. Kurze Wege, echte regionale Energie.' }, { ic: 'home', t: 'Keine Umbauten', d: 'In Ihrer Wohnung müssen Sie nichts ändern. Die Technik sitzt im Gebäude am Zählerplatz.' }, { ic: 'shield', t: 'Sichere Versorgung', d: 'Ihre Stromversorgung bleibt jederzeit zuverlässig — unterbrechungsfrei, rund um die Uhr.' }, { ic: 'receipt', t: 'Transparente Abrechnung', d: 'Sie sehen jederzeit klar, was Sie verbrauchen und was berechnet wird — vollständig digital.' }, { ic: 'building',t: 'Gut für das Gebäude', d: 'Je mehr Bewohner teilnehmen, desto besser kann der lokal erzeugte Strom genutzt werden.' }, ]; const LP_PAULA_BULLETS = [ 'Erklärt Ihren Stromtarif verständlich — ohne Fachsprache.', 'Hilft bei Fragen rund um Registrierung und Vertrag.', 'Erinnert freundlich an noch fehlende Angaben.', 'Erklärt später Ihre Rechnungen und Ihren Verbrauch.', 'Gibt persönliche Tipps zum Stromsparen.', ]; const LP_TIMELINE = [ { ic: 'spark', t: 'Interesse anmelden', d: 'Sie tragen Ihre Kontaktdaten ein — unverbindlich und in wenigen Minuten.' }, { ic: 'user', t: 'Daten vervollständigen', d: 'Wir benötigen Angaben zu Ihrer Wohnung und zum Stromzähler.' }, { ic: 'doc', t: 'Vertrag prüfen', d: 'Sie sehen Tarif, Preisblatt und Vertragsunterlagen transparent — vor dem Abschluss.' }, { ic: 'signature', t: 'Digital bestätigen', d: 'Erst mit Ihrer digitalen Bestätigung wird der Vertrag verbindlich.' }, { ic: 'meter', t: 'Aktivierung vorbereiten', d: 'Wir prüfen die Zählerdaten und stimmen den Lieferbeginn ab.' }, { ic: 'chart', t: 'Portal nutzen', d: 'Nach der Aktivierung sehen Sie Verbrauch, Abrechnung und Stromanteile digital.' }, ]; const LP_APP = { mieter: { kpis: [ { v: '76', u: '%', l: 'Eigenverbrauchsanteil' }, { v: '−18', u: '%', l: 'Stromkosten vs. Vormonat' }, { v: '12,6', u: 'kg', l: 'CO₂ gespart / Monat' } ], title: 'Für Mieter', icon: 'home', points: ['Aktuellen Verbrauch live sehen', 'PV-Anteil und Autarkie verstehen', 'Rechnungen jederzeit einsehen', 'Persönliche Spartipps erhalten', 'Eigene Kosten besser einschätzen'], }, vermieter: { kpis: [ { v: '58', u: '%', l: 'Autarkiegrad Gebäude' }, { v: '18,6', u: 'kW', l: 'PV-Erzeugung aktuell' }, { v: '+21', u: '%', l: 'Ersparnis vs. Vorjahr' } ], title: 'Für Vermieter & Hausverwaltung', icon: 'building', points: ['Gebäudeverbrauch im Überblick', 'PV-Erzeugung analysieren', 'Teilnahmequote verfolgen', 'Verbrauchsgruppen verstehen', 'Energiekonzept transparent kommunizieren'], }, }; const LP_FAQ = [ { q: 'Muss ich teilnehmen?', a: 'Nein. Die Teilnahme ist vollständig freiwillig. Wenn Sie sich nicht anmelden, ändert sich für Sie nichts — Ihre bisherige Stromversorgung bleibt bestehen.' }, { q: 'Habe ich immer Strom?', a: 'Ja. Wenn gerade nicht genug Solarstrom verfügbar ist, wird automatisch Strom aus dem Netz ergänzt — unterbrechungsfrei und ohne Ihr Zutun.' }, { q: 'Muss in meiner Wohnung etwas umgebaut werden?', a: 'In der Regel nicht. Die Technik befindet sich im Gebäude bzw. am Zählerplatz. In Ihrer Wohnung ändert sich nichts.' }, { q: 'Wird mein Vertrag sofort verbindlich?', a: 'Nein. Erst wenn Sie die Vertragsunterlagen geprüft und digital bestätigt haben, wird der Vertrag verbindlich.' }, { q: 'Was brauche ich für die Registrierung?', a: 'Ihre Kontaktdaten, Angaben zur Wohnung und möglichst Ihre Zählernummer oder ein Foto des Stromzählers.' }, { q: 'Wer erstellt die Abrechnung?', a: 'Die Abrechnung erfolgt vollständig digital über Powermieter / PowerHouse360 — nachvollziehbar und monatlich.' }, { q: 'Was sehe ich später im Portal?', a: 'Ihren Verbrauch, Abrechnungen, den PV-Anteil, die Kostenentwicklung und hilfreiche Tipps zum Energiesparen.' }, ]; const LP_CHAT_QA = [ { q: 'Muss ich teilnehmen?', a: 'Nein 🙂 Die Teilnahme ist völlig freiwillig. Wenn Sie nicht möchten, bleibt Ihre bisherige Stromversorgung einfach bestehen.' }, { q: 'Wo finde ich meine Zählernummer?', a: 'Sie steht direkt auf Ihrem Stromzähler, meist als „Zählernummer" oder als Barcode. Alternativ genügt für den Start ein Foto — den Rest übernehme ich.' }, { q: 'Was passiert bei schlechtem Wetter?', a: 'Kein Problem: Erzeugt das Dach gerade zu wenig, wird automatisch Reststrom aus dem Netz ergänzt. Sie haben jederzeit Strom.' }, { q: 'Wann beginnt mein Vertrag?', a: 'Erst wenn Sie alle Unterlagen geprüft und digital bestätigt haben. Vorher entsteht keinerlei Verpflichtung.' }, ]; /* ------------------------------------------------------------------ */ /* Reveal-on-scroll wrapper */ const { useState: useLS, useEffect: useLE, useRef: useLR } = React; function Reveal({ children, delay, tag = 'div', className = '', style, id }) { const ref = useLR(null); const [seen, setSeen] = useLS(false); useLE(() => { const el = ref.current; if (!el) return; if (!('IntersectionObserver' in window)) { setSeen(true); return; } const io = new IntersectionObserver(([e]) => { if (e.isIntersecting) { setSeen(true); io.disconnect(); } }, { threshold: 0.12, rootMargin: '0px 0px -8% 0px' }); io.observe(el); return () => io.disconnect(); }, []); const Tag = tag; return {children}; } /* Count-up number (triggers when scrolled into view) */ function CountUp({ value, decimals = 0, prefix = '', suffix = '', dur = 1400 }) { const ref = useLR(null); const [disp, setDisp] = useLS(prefix + (0).toFixed(decimals) + suffix); const done = useLR(false); useLE(() => { const el = ref.current; if (!el) return; const neg = value < 0; const target = Math.abs(value); const run = () => { if (done.current) return; done.current = true; const t0 = performance.now(); const tick = (t) => { const p = Math.min(1, (t - t0) / dur); const e = 1 - Math.pow(1 - p, 3); const cur = target * e; setDisp(prefix + (neg ? '−' : '') + cur.toLocaleString('de-DE', { minimumFractionDigits: decimals, maximumFractionDigits: decimals }) + suffix); if (p < 1) requestAnimationFrame(tick); }; requestAnimationFrame(tick); }; if (!('IntersectionObserver' in window)) { run(); return; } const io = new IntersectionObserver(([en]) => { if (en.isIntersecting) run(); }, { threshold: 0.5 }); io.observe(el); return () => io.disconnect(); }, [value]); return {disp}; } /* Resolves an asset URL: blob URL from the offline bundle if present, else the path. */ function lpAsset(id, path) { return (window.__resources && window.__resources[id]) || path; } Object.assign(window, { LP_STEPS, LP_HOW, LP_BENEFITS, LP_PAULA_BULLETS, LP_TIMELINE, LP_APP, LP_FAQ, LP_CHAT_QA, Reveal, CountUp, lpAsset });