// Miss-Scully — Animalia Versicherung (voll interaktiv: Video-Hero, Szenarien, Schätzer, FAQ) // Lädt nach homepage-sections.jsx + subpages-content.jsx, ersetzt window.AnimaliaPage. const CALC_BASE = 'https://animalia.ch/de/pramienrechner-versicherung-hund-katze?codeAgent=9590&breedType='; /* ---------- Count-up hook (startet, sobald sichtbar) ---------- */ function useCountUp(target, duration) { const ref = React.useRef(null); const [val, setVal] = React.useState(0); const reduced = window.useReducedMotion ? window.useReducedMotion() : false; React.useEffect(() => { const el = ref.current; if (!el) return; if (reduced || !('IntersectionObserver' in window)) { setVal(target); return; } let started = false; const io = new IntersectionObserver((entries) => { entries.forEach((e) => { if (e.isIntersecting && !started) { started = true; const dur = duration || 1400; const t0 = performance.now(); const tick = (now) => { const p = Math.min(1, (now - t0) / dur); const ease = 1 - Math.pow(1 - p, 3); setVal(target * ease); if (p < 1) requestAnimationFrame(tick);else setVal(target); }; requestAnimationFrame(tick); } }); }, { threshold: 0.4 }); io.observe(el); return () => io.disconnect(); }, [target, duration, reduced]); return [ref, val]; } /* ---------- Video-Hero (eigenes Video je Tierart) ---------- */ function AnimaliaHero({ petType, setPetType }) { const [videos, setVideos] = React.useState({ dog: null, cat: null }); React.useEffect(() => { let alive = true; const candidates = { dog: ['/assets/animalia-hero-hund.mp4', '/assets/animalia-hero.mp4'], cat: ['/assets/animalia-hero-katze.mp4', '/assets/animalia-hero.mp4'] }; Object.entries(candidates).forEach(([pet, list]) => { list.reduce( (p, url) => p.then((found) => found || fetch(url, { method: 'HEAD' }).then((r) => r.ok ? url : null).catch(() => null)), Promise.resolve(null) ).then((url) => { if (alive && url) setVideos((v) => Object.assign({}, v, { [pet]: url })); }); }); return () => {alive = false;}; }, []); const src = videos[petType]; return (
{src ? : null}

Animalia Tierversicherung

{petType === 'dog' ? 'Die beste Versicherung für Ihren Hund' : 'Die beste Versicherung für Ihre Katze'}

Schützen Sie Ihr Tier gegen Krankheiten und Unfälle – ohne jede Altersbegrenzung. Als offizieller Animalia-Partner begleiten wir Sie persönlich.

Prämie schätzen Was kostet der Tierarzt?
{src ? null :

Videos als «assets/animalia-hero-hund.mp4» und «assets/animalia-hero-katze.mp4» ablegen – sie erscheinen automatisch je nach Auswahl.

}
); } /* ---------- Animierte Zahlen ---------- */ function Stat({ value, suffix, prefix, decimals, label }) { const [ref, val] = useCountUp(value, 1500); const shown = (prefix || '') + val.toFixed(decimals || 0).replace('.', ',') + (suffix || ''); return (
{shown} {label}
); } function AnimaliaStats() { return (
); } /* ---------- Interaktive Kosten-Szenarien ---------- */ function CostScenarios({ petType }) { const scenarios = [ { n: 'Kreuzband-OP', cost: 4500, d: 'Eine der häufigsten Operationen bei Hunden: Riss des Kreuzbandes nach dem Toben – inkl. OP, Narkose und Nachkontrollen.' }, { n: 'Magendrehung (Not-OP)', cost: 5800, d: 'Lebensbedrohlicher Notfall, der sofort operiert werden muss – oft nachts oder am Wochenende mit Notfallzuschlag.' }, { n: 'Fremdkörper verschluckt', cost: 3200, d: 'Spielzeug, Stein oder Socke im Magen: Diagnostik, Endoskopie oder OP plus stationäre Überwachung.' }, { n: 'Allergie-Abklärung', cost: 1800, d: 'Tests, Ausschlussdiät und Behandlung über mehrere Monate – Kosten, die sich leise summieren.' }, { n: 'Zahnbehandlung', cost: 1400, d: 'Zahnstein-Entfernung unter Narkose, Extraktionen und Röntgen – bei Katzen und kleinen Hunden besonders häufig.' }]; const [sel, setSel] = React.useState(0); const s = scenarios[sel]; const deductible = 250; const refund = Math.round((s.cost - deductible) * 0.9); const own = s.cost - refund; const fmt = (n) => "CHF " + n.toLocaleString('de-CH').replace(/,/g, "'"); return (

Was kostet der Tierarzt?

Echte Fälle, echte Zahlen

Wählen Sie einen typischen Behandlungsfall – und sehen Sie sofort, was die Versicherung übernimmt und was Sie selbst tragen.

{scenarios.map((sc, i) => )}

{s.n}

{s.d}

{fmt(s.cost)} Typische Gesamtkosten (Richtwert Schweiz)
Animalia erstattet {fmt(refund)}
Ihr Anteil {fmt(own)}

Rechenbeispiel: 90 % Rückerstattung nach Selbstbehalt von CHF 250.–. Effektive Werte abhängig von Deckung und Police.

); } /* ---------- Interaktiver Prämienschätzer ---------- */ function PremiumEstimator({ petType }) { const [plan, setPlan] = React.useState(1); // 0 Compact, 1 Classic, 2 Comfort const [age, setAge] = React.useState(3); const planData = [ { name: 'Compact', base: 24 }, { name: 'Classic', base: 41 }, { name: 'Comfort', base: 57 }]; const petFactor = petType === 'cat' ? 0.78 : 1; const ageAdd = Math.max(0, age - 2) * 1.9; const raw = (planData[plan].base + ageAdd) * petFactor; const monthly = Math.round(raw); const [display, setDisplay] = React.useState(monthly); React.useEffect(() => { let raf;const t0 = performance.now();const from = display;const to = monthly; const tick = (now) => { const p = Math.min(1, (now - t0) / 450); const e = 1 - Math.pow(1 - p, 3); setDisplay(Math.round(from + (to - from) * e)); if (p < 1) raf = requestAnimationFrame(tick); }; raf = requestAnimationFrame(tick); return () => cancelAnimationFrame(raf); }, [monthly]); const calc = CALC_BASE + (petType || 'dog'); return (

Prämienschätzer

In 10 Sekunden zur Richtprämie

Bewegen Sie die Regler – die geschätzte Monatsprämie passt sich sofort an. Für die verbindliche Prämie nutzen Sie den offiziellen Animalia-Rechner.

{planData.map((p, i) => )}
setAge(Number(e.target.value))} />
WelpeSenior
    {(plan === 0 ? ['Unfälle'] : plan === 1 ? ['Unfälle', 'Akute & chronische Krankheiten', 'CHF 100.– Prävention'] : ['Unfälle', 'Krankheiten', 'Erbkrankheiten & Geburtsgebrechen', 'CHF 100.– Prävention']). map((it) =>
  • {it}
  • )}
Geschätzte Monatsprämie
CHF {display} /Mt.

{planData[plan].name}-Deckung · {petType === 'cat' ? 'Katze' : 'Hund'} · {age} {age === 1 ? 'Jahr' : 'Jahre'}

Verbindliche Prämie berechnen →

Unverbindliche Schätzung. Es gelten die Konditionen der Animalia.

); } /* ---------- Video-Sektion (interaktiv: Hund/Katze) ---------- */ function AnimaliaVideo({ petType, setPetType }) { const frames = petType === 'cat' ? [ { wide: true, src: '/assets/animalia-video-katze-1.mp4', slotId: 'animalia-video-katze-1', ph: 'Video/Foto: Katze – Datei assets/animalia-video-katze-1.mp4 hochladen oder Foto hier ablegen', title: 'Neugier ohne Risiko', text: 'Auch Freigänger sind rundum versichert.', href: '#estimator', label: 'Prämie schätzen' }, { src: '/assets/animalia-video-katze-2.mp4', slotId: 'animalia-video-katze-2', ph: 'Video/Foto: Katze beim Tierarzt – Datei assets/animalia-video-katze-2.mp4 hochladen oder Foto hier ablegen', title: 'Beim Tierarzt entspannt', text: '90 % der Kosten werden zurückerstattet.', href: '#szenarien', label: 'Beispiele ansehen' }, { src: '/assets/animalia-video-katze-3.mp4', slotId: 'animalia-video-katze-3', ph: 'Video/Foto: Katze zu Hause – Datei assets/animalia-video-katze-3.mp4 hochladen oder Foto hier ablegen', title: 'Ein Katzenleben lang', text: 'Ohne Altersgrenze – auch für Senioren.', href: '#estimator', label: 'Prämie schätzen' }] : [ { wide: true, src: '/assets/animalia-video-hund-1.mp4', slotId: 'animalia-video-1', ph: 'Video/Foto: Hund & Halterin – Datei assets/animalia-video-hund-1.mp4 hochladen oder Foto hier ablegen', title: 'Sorglos unterwegs', text: 'Ohne Altersgrenze versichert – ein Hundeleben lang.', href: '#estimator', label: 'Prämie schätzen' }, { src: '/assets/animalia-video-hund-2.mp4', slotId: 'animalia-video-2', ph: 'Video/Foto: Beim Tierarzt – Datei assets/animalia-video-hund-2.mp4 hochladen oder Foto hier ablegen', title: 'Beim Tierarzt entspannt', text: '90 % der Kosten werden zurückerstattet.', href: '#szenarien', label: 'Beispiele ansehen' }, { src: '/assets/animalia-video-hund-3.mp4', slotId: 'animalia-video-3', ph: 'Video/Foto: Hund beim Spielen – Datei assets/animalia-video-hund-3.mp4 hochladen oder Foto hier ablegen', title: 'Toben ohne Sorgen', text: 'Unfälle sind mitversichert – weltweit.', href: '#estimator', label: 'Prämie schätzen' }]; return (

Im Schadenfall an Ihrer Seite

Sicherheit, die man spürt

{frames.map((f) => )}
); } function AnimaliaPlans() { const plans = [ { name: 'Animalia Compact', tag: 'Der Basisschutz', items: ['Unfälle'], pop: false }, { name: 'Animalia Classic', tag: 'Der Bewährte', items: ['Unfälle', 'Akute und chronische Krankheiten', 'CHF 100.– geschenkt für Präventionskosten'], pop: false }, { name: 'Animalia Comfort', tag: 'Beliebt', items: ['Unfälle', 'Akute und chronische Krankheiten', 'Erbkrankheiten und/oder Geburtsgebrechen', 'CHF 100.– für Präventionskosten'], pop: true }]; return (

Drei Deckungen

Vom Basisschutz bis zum Rundum-Paket

{plans.map((p, i) =>
{p.pop ? Beliebt : null}

{p.tag}

{p.name}

    {p.items.map((it) =>
  • {it}
  • )}
Prämie schätzen
)}
); } function AnimaliaBenefits() { const benefits = [ { t: 'Krankheiten', d: '90 % der Behandlungskosten nach Selbstbehalt – ohne Begrenzung der Versicherungssumme.' }, { t: 'Unfälle', d: '90 % der Behandlungskosten nach Selbstbehalt, ebenfalls ohne Summenbegrenzung.' }, { t: 'Präventionspaket', d: 'CHF 100.– pro Jahr für Vorsorge – ohne Selbstbehalt.' }, { t: 'Weltweite Deckung', d: 'Im Notfall ist Ihr Tier auch in den Ferien weltweit versichert.' }, { t: 'Komplementärmedizin', d: 'Bis CHF 600.–/Jahr für Osteopathie, Physiotherapie oder Akupunktur.' }, { t: 'Tierambulanz', d: 'Bis CHF 100.–/Jahr für den Notfalltransport in die Tierklinik.' }, { t: 'Unterbringung', d: 'Bis CHF 150.–/Jahr, falls Sie ins Spital müssen und Ihr Tier versorgt werden muss.' }, { t: 'Unterkunftskosten', d: 'Bis CHF 200.–/Jahr bei Klinikaufenthalten – für Sie und Ihr Tier.' }]; return (

8 gute Gründe

Das leistet die Animalia Tierversicherung

Ohne Altersbegrenzung – auch Senioren auf vier Pfoten sind willkommen.

{benefits.map((b, i) =>
{b.t}

{b.d}

)}
); } /* ---------- Galerie (interaktiv: Hunde/Katzen, Bilder per Drag & Drop) ---------- */ function AnimaliaGallery({ petType, setPetType }) { const sets = { dog: [ { id: 'animalia-gal-dog-1', src: '/assets/scully.jpg', cap: 'Scully – bestens versichert unterwegs', ph: 'Foto: Hund unterwegs' }, { id: 'animalia-gal-dog-2', src: '/assets/westie-vet.jpg', cap: 'Beim Tierarzt ohne Kostensorgen', ph: 'Foto: Beim Tierarzt' }, { id: 'animalia-gal-dog-3', src: '/assets/hund-toben.jpg', cap: 'Toben ohne Risiko', ph: 'Foto: Hund beim Spielen hier ablegen' }], cat: [ { id: 'animalia-gal-cat-1', src: '/assets/katzenbaby.jpg', cap: 'Neugier ist mitversichert', ph: 'Foto: Katze hier ablegen' }, { id: 'animalia-gal-cat-2', src: '', cap: 'Beim Tierarzt ohne Kostensorgen', ph: 'Foto: Katze beim Tierarzt hier ablegen' }, { id: 'animalia-gal-cat-3', src: '/assets/katze-tracker.jpg', cap: 'Freigänger? Kein Problem.', ph: 'Foto: Katze draussen hier ablegen' }] }; const cards = sets[petType] || sets.dog; return (

Unbeschwerte Momente

{petType === 'cat' ? 'Versichert heisst: einfach Katze sein dürfen' : 'Versichert heisst: einfach Hund sein dürfen'}

{cards.map((c, i) =>
{c.cap}
)}
); } /* ---------- FAQ ---------- */ function AnimaliaFaq() { const items = [ { q: 'Ab wann ist mein Tier versichert?', a: 'Nach Abschluss gilt eine kurze Wartefrist (Karenzfrist) für Krankheiten; Unfälle sind in der Regel schneller gedeckt. Die genauen Fristen finden Sie in Ihrer Police.' }, { q: 'Kann ich meinen Tierarzt frei wählen?', a: 'Ja – Sie gehen zu dem Tierarzt oder der Klinik Ihres Vertrauens, in der ganzen Schweiz und im Notfall weltweit.' }, { q: 'Wie melde ich einen Schadenfall?', a: 'Ganz einfach online: Im Animalia-Kundenbereich einloggen, Tierarztrechnung hochladen – die Rückerstattung kommt direkt auf Ihr Bankkonto.' }]; const [openKey, setOpenKey] = React.useState(items[0].q); return (

Häufige Fragen

Gut zu wissen

{items.map((f) =>

{f.a}

)}
); } /* ---------- Tweaks ---------- */ const ANIMALIA_TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "palette": ["#B77253", "#9A5B3F", "#221C36"], "tone": "Elegant", "motion": "Lebendig" }/*EDITMODE-END*/; const ANIMALIA_PALETTES = [ ["#B77253", "#9A5B3F", "#221C36"], // Kupfer (Brand) ["#5F8F6E", "#4C7A5B", "#1E2A22"], // Salbei ["#5E739E", "#4A5F89", "#1B2033"]]; // Nachtblau function useAnimaliaTweaks() { const [t, setTweak] = useTweaks(ANIMALIA_TWEAK_DEFAULTS); React.useEffect(() => { const r = document.documentElement.style; const [accent, deep, dark] = t.palette; r.setProperty('--accent', accent); r.setProperty('--accent-deep', deep); r.setProperty('--accent-tint', 'color-mix(in srgb, ' + accent + ' 14%, transparent)'); r.setProperty('--paw', 'color-mix(in srgb, ' + accent + ' 35%, transparent)'); r.setProperty('--paw-on-dark', accent); r.setProperty('--dark', dark); r.setProperty('--dark-2', 'color-mix(in srgb, ' + dark + ' 88%, white)'); r.setProperty('--font-display', t.tone === 'Freundlich' ? '"Bricolage Grotesque", sans-serif' : '"DM Serif Display", serif'); document.body.dataset.tone = t.tone.toLowerCase(); document.body.dataset.motion = t.motion.toLowerCase(); }, [t]); return [t, setTweak]; } function AnimaliaTweaks({ t, setTweak }) { return ( setTweak('palette', v)}> setTweak('tone', v)}> setTweak('motion', v)}> ); } /* ---------- Seite ---------- */ function AnimaliaPageInteractive() { const [petType, setPetType] = React.useState('dog'); const [t, setTweak] = useAnimaliaTweaks(); return ( ); } window.AnimaliaPage = AnimaliaPageInteractive;