<html lang="de"> <head> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-KMP9MMS');</script> SMS-Alert – Glückskette *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } :root { --bg: #ffffff; --surface: #f4f2ee; --border: rgba(170,165,155,0.45); --text: #0b0c0d; --text-muted: rgba(11,12,13,0.60); --text-dim: rgba(11,12,13,0.38); --accent: #e82340; } html { scroll-behavior: smooth; overflow-y: auto; } body { background: var(--bg); color: var(--text); font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', Arial, sans-serif; -webkit-font-smoothing: antialiased; overflow-x: hidden; } /* ── Layout ── */ .page { max-width: 640px; margin: 0 auto; padding: 0 24px 0; position: relative; } /* ── Screens ── */ .screen { display: none; animation: screenEnter 0.42s cubic-bezier(.25,.8,.25,1) both; } .screen.active { display: block; } .screen.leaving { display: block; position: absolute; top: 0; left: 24px; right: 24px; animation: screenLeave 0.3s ease forwards; pointer-events: none; } @keyframes screenEnter { from { opacity: 0; transform: translateY(24px); } to { opacity: 1; transform: translateY(0); } } @keyframes screenLeave { from { opacity: 1; transform: translateY(0); } to { opacity: 0; transform: translateY(-14px); } } /* ── Header shared ── */ .pre-logo { padding-top: 40px; margin-bottom: 40px; } .pre-logo img { width: 100%; max-height: 80px; object-fit: contain; object-position: center; display: block; } .pre-logo-sep { width: 1px; height: 28px; background: rgba(11,12,13,0.15); flex-shrink: 0; } .pre-logo-anni { font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', Arial, sans-serif; font-size: 11px; font-weight: 500; letter-spacing: 0.12em; text-transform: uppercase; color: var(--text-dim); white-space: nowrap; } /* ── Inline disaster word pill ── */ .disaster-pill { display: inline-block; color: #000000; font-style: normal; font-size: 1em; font-weight: 700; min-width: 5em; text-align: left; vertical-align: baseline; transition: opacity 0.5s ease; } .disaster-pill.fade { opacity: 0; } /* ── Typography ── */ .headline { font-family: 'Platypi', Georgia, serif; font-size: clamp(30px, 7.5vw, 46px); font-weight: 300; line-height: 1.3; letter-spacing: -0.01em; color: var(--text); text-align: center; margin-bottom: 10px; } .subheadline { font-size: clamp(14px, 3.2vw, 16px); color: var(--text-muted); text-align: center; line-height: 1.55; max-width: 420px; margin: 0 auto 28px; } /* ── Counter block ── */ .counter-block { text-align: center; margin: 0 auto 28px; } .counter-number { font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', Arial, sans-serif; font-size: clamp(56px, 15vw, 96px); font-weight: 800; letter-spacing: -0.03em; color: var(--text); line-height: 1; display: block; font-variant-numeric: tabular-nums; transition: color 0.15s ease; } @keyframes counterPulse { 0% { color: var(--text); } 20% { color: #e82340; } 100% { color: var(--text); } } .counter-pulse { animation: counterPulse 0.9s ease-out forwards; } .counter-label { font-size: clamp(14px, 3.2vw, 16px); color: var(--text); letter-spacing: 0.02em; line-height: 1.7; max-width: 380px; margin: 10px auto 0; } /* ── CTA area ── */ .cta-question { font-size: clamp(14px, 3.2vw, 16px); color: var(--text-muted); text-align: center; margin: 24px auto 10px; line-height: 1.5; max-width: 420px; } .btn-primary { display: block; width: 100%; max-width: 360px; margin: 0 auto; background: var(--accent); border: none; border-radius: 48px; padding: 16px 28px; color: #fff; font-size: 16px; font-weight: 600; font-family: inherit; cursor: pointer; letter-spacing: 0.03em; text-align: center; transition: opacity 0.2s ease, transform 0.15s ease; } .btn-primary:hover { opacity: 0.86; } .btn-primary:active { transform: scale(0.97); opacity: 1; } /* ── Screen 2: Lead capture ── */ #screen-2 .headline { margin-top: 20px; } .lead-sub { font-size: 14px; color: var(--text-muted); text-align: center; line-height: 1.65; max-width: 460px; margin: 0 auto 40px; } .input-wrap { max-width: 360px; margin: 0 auto 4px; } .input-field { width: 100%; background: #fff; border: 1px solid rgba(11,12,13,0.3); border-radius: 0; padding: 12px 14px 12px 100px; color: var(--text); font-size: 22px; font-family: inherit; outline: none; text-align: left; transition: border-color 0.25s ease; -webkit-appearance: none; } .input-field::placeholder { color: var(--text-dim); font-size: 20px; } .input-field:focus { border-color: var(--text); } .input-field.error { border-color: #e82340; animation: shake 0.3s ease; } @keyframes shake { 0%,100% { transform: translateX(0); } 25% { transform: translateX(-6px); } 75% { transform: translateX(6px); } } .input-error-msg { font-size: 13px; color: #e82340; text-align: center; margin-top: 8px; min-height: 18px; opacity: 0; transition: opacity 0.25s ease; } .input-error-msg.visible { opacity: 1; } .trust-line { text-align: center; font-size: 12px; color: var(--text-dim); font-weight: 400; margin: 14px auto 28px; letter-spacing: 0.02em; } .btn-wrap { max-width: 360px; margin: 0 auto; } .btn-wrap .btn-primary { max-width: 100%; } /* ── Inline phone section ── */ #phone-section { margin-top: 0; } .form-headline { font-family: 'Platypi', Georgia, serif; font-size: clamp(19px, 4.8vw, 27px); font-weight: 300; line-height: 1.3; text-align: center; margin-bottom: 28px; color: var(--text); } /* ── Screen 3: Thank you ── */ #screen-3 { padding-top: 48px; text-align: center; } .check-icon { width: 72px; height: 72px; background: #e82340; border-radius: 50%; display: flex; align-items: center; justify-content: center; margin: 0 auto 32px; animation: popIn 0.4s cubic-bezier(.34,1.56,.64,1) both; } @keyframes popIn { from { transform: scale(0.4); opacity: 0; } to { transform: scale(1); opacity: 1; } } .check-icon svg { width: 34px; height: 34px; } .check-icon .check-path { stroke-dasharray: 30; stroke-dashoffset: 30; animation: drawCheck 0.5s cubic-bezier(.4,0,.2,1) 0.25s forwards; } @keyframes drawCheck { to { stroke-dashoffset: 0; } } #screen-3 .headline { margin-top: 0; margin-bottom: 16px; } .thanks-sub { font-size: 15px; color: var(--text-muted); line-height: 1.7; max-width: 420px; margin: 0 auto; } /* ── Footer ── */ .footer-glow { margin-top: 80px; text-align: center; font-size: 12px; color: var(--text-dim); letter-spacing: 0.08em; padding-bottom: 40px; } .glow-rule { width: 60px; height: 2px; background: var(--accent); margin: 0 auto 16px; opacity: 0.7; border-radius: 1px; } @media (max-width: 400px) { .page { padding: 0 16px 0; } } </head> <body> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-KMP9MMS" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
Bei Erdbeben
zählt jede Minute.
Darf die Glückskette auch dich informieren,
wenn schnelle Hilfe nötig ist?
0
sind bereits dabei.
Deine Mobil-Nummer:
<input class="input-field" type="tel" id="phone-input" placeholder="079 123 45 67" inputmode="tel" autocomplete="tel" />
<input type="text" name="website" id="hp-website" tabindex="-1" autocomplete="off" style="position:absolute;left:-9999px;width:1px;height:1px;opacity:0" aria-hidden="true">
Bitte Schweizer Mobil-Nummer eingeben (07X XXX XX XX)
Keine Anrufe · keine Werbung · keine Weitergabe an Dritte
Eine Aktion zum 80-Jahr-Jubiläum der Glückskette
<button class="btn-primary" id="btn-submit">SMS-Alert aktivieren</button>
<svg viewBox="0 0 34 34" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="check-path" d="M7 18L14 25L27 10" stroke="#ffffff" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/> </svg>
Danke.
Deine Solidarität zählt.
Schön, dass wir im Ernstfall auf dich zählen können.
Wenn die Glückskette eine grosse Solidaritätsaktion lanciert, informieren wir dich per SMS.
<script> // ── Disaster word crossfade ──────────────────────────────── (function() { const WORDS = ['Erdbeben','Naturkatastrophen','einem Felssturz','Wirbelstürmen','Hochwasser','Dürre']; const el = document.getElementById('disaster-word'); let idx = 0; setInterval(() => { el.classList.add('fade'); setTimeout(() => { idx = (idx + 1) % WORDS.length; el.textContent = WORDS[idx]; el.classList.remove('fade'); }, 500); }, 3400); })(); // ── Counter animation ─────────────────────────────────────── (function() { const el = document.getElementById('counter-num'); const DURATION = 2200; function easeOut(t) { return 1 - Math.pow(1 - t, 18); } function runAnimation(target) { const TARGET = target; const start = performance.now(); function step(ts) { const t = Math.min(1, (ts - start) / DURATION); const val = Math.round(easeOut(t) * TARGET); el.textContent = val.toLocaleString('de-CH'); if (t < 1) { requestAnimationFrame(step); } else { startLiveTicker(TARGET); } } requestAnimationFrame(step); function startLiveTicker(count) { revealPhoneSection(); let first = true; function tick() { const delay = first ? 400 : 2000 + Math.random() * 13000; first = false; setTimeout(() => { count++; el.textContent = count.toLocaleString('de-CH'); el.classList.remove('counter-pulse'); void el.offsetWidth; el.classList.add('counter-pulse'); setTimeout(() => el.classList.remove('counter-pulse'), 900); tick(); }, delay); } tick(); } } // Load real count from server; fall back to hardcoded value fetch('api/count.php') .then(r => r.ok ? r.json() : Promise.reject()) .then(data => runAnimation(data.count || 24096)) .catch(() => runAnimation(24096)); })(); // ── Screen transitions ────────────────────────────────────── function showScreen(id) { const current = document.querySelector('.screen.active'); const next = document.getElementById(id); window.scrollTo({ top: 0, behavior: 'instant' }); if (current && current !== next) { current.classList.add('leaving'); current.classList.remove('active'); setTimeout(() => current.classList.remove('leaving'), 320); setTimeout(() => next.classList.add('active'), 200); } else { next.classList.add('active'); } } function revealPhoneSection() { const s = document.getElementById('phone-section'); if (s.classList.contains('visible')) return; s.classList.add('visible'); setTimeout(() => s.scrollIntoView({ behavior: 'smooth', block: 'nearest' }), 200); } // ── UTM-Parameter aus URL ──────────────────────────────────── function getUtm() { const p = new URLSearchParams(location.search); const utm = {}; ['utm_source','utm_medium','utm_campaign'].forEach(k => { const v = p.get(k); if (v) utm[k] = v.slice(0, 100); }); return utm; } // ── Telefonnummer-Format ──────────────────────────────────── function formatPhoneInput(e) { const input = e.target; const isPlus = input.value.startsWith('+'); const digits = input.value.replace(/\D/g, ''); let f = ''; if (isPlus) { if (digits.length <= 2) f = '+' + digits; else if (digits.length <= 4) f = '+' + digits.slice(0,2) + ' ' + digits.slice(2); else if (digits.length <= 7) f = '+' + digits.slice(0,2) + ' ' + digits.slice(2,4) + ' ' + digits.slice(4); else if (digits.length <= 9) f = '+' + digits.slice(0,2) + ' ' + digits.slice(2,4) + ' ' + digits.slice(4,7) + ' ' + digits.slice(7); else f = '+' + digits.slice(0,2) + ' ' + digits.slice(2,4) + ' ' + digits.slice(4,7) + ' ' + digits.slice(7,9) + ' ' + digits.slice(9,11); } else { if (digits.length <= 3) f = digits; else if (digits.length <= 6) f = digits.slice(0,3) + ' ' + digits.slice(3); else if (digits.length <= 8) f = digits.slice(0,3) + ' ' + digits.slice(3,6) + ' ' + digits.slice(6); else f = digits.slice(0,3) + ' ' + digits.slice(3,6) + ' ' + digits.slice(6,8) + ' ' + digits.slice(8,10); } input.value = f; } // ── Phone submit ────────────────────────────────────────── const phoneInput = document.getElementById('phone-input'); const btnSubmit = document.getElementById('btn-submit'); const phoneErrorMsg = document.getElementById('phone-error-msg'); phoneInput.addEventListener('input', formatPhoneInput); function submitPhone() { const val = phoneInput.value.trim().replace(/\s/g, ''); // Validation: Swiss phone numbers only if (!/^(\+41|07)\d{7,9}$/.test(val)) { phoneInput.classList.add('error'); phoneErrorMsg.classList.add('visible'); setTimeout(() => { phoneInput.classList.remove('error'); phoneErrorMsg.classList.remove('visible'); }, 3000); return; } try { localStorage.setItem('glueckskette_phone', val); } catch(e) {} // Send to server: subscribe.php fetch('/alert/api/subscribe.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ phone: val, lang: 'DE', source: 'c-d', hp: document.getElementById('hp-website').value, ...getUtm() }) }).then(() => { // Success: show thank you screen showScreen('screen-3'); }).catch(err => { console.error('Fehler:', err); // On error: still show thank you to avoid blocking user showScreen('screen-3'); }); } btnSubmit.addEventListener('click', submitPhone); phoneInput.addEventListener('keydown', e => { if (e.key === 'Enter') submitPhone(); }); </script> </body> </html>

