// Miss-Scully — Anifit Shop Seite (Sortiment aus dem persönlichen Shop)
// Lädt nach homepage-sections.jsx + subpages-content.jsx, ersetzt window.AnifitPage.
const SHOP = 'https://miss-scully.anifit.ch/';
const SUB_IMG = 'https://miss-scully.anifit.ch/media/cache/subcategory_listing_image/uploads/category_product_example_image_upload/';
const CAT_IMG = {
dog: 'https://miss-scully.anifit.ch/media/cache/maincategory_listing_image/uploads/category_image_upload/6346c83f71a0a.jpg',
cat: 'https://miss-scully.anifit.ch/media/cache/maincategory_listing_image/uploads/category_image_upload/634ec0c37f5c7.jpg'
};
const SORTIMENT = {
dog: {
all: SHOP + 'shop/catalog/gesundes-hundefutter',
img: CAT_IMG.dog,
imgAlt: 'Gesundes, natürliches Hundefutter von ANiFiT',
intro: 'Trocken- und Nassfutter für Hunde jeder Rasse, Grösse und jeden Alters – für gute Verdauung, gesunde Zähne und starke Gelenke.',
tiles: [
{ n: 'Dog Menu Wet', d: 'Nassfutter für Hunde', p: 'shop/catalog/nassfutter-hund', img: '6398a403afd55.png', t: 'In Dosen, Beuteln oder als Wurst – mit 60–75 % Fleischanteil und ohne unnötige Zusatzstoffe.' },
{ n: 'Dog Menu Dry', d: 'Trockenfutter für Hunde', p: 'shop/catalog/trockenfutter-hund', img: '6398a380195b7.png', t: 'Bis zu 81 % Fleisch – auch kaltgepresst (Nature, Olymp, Sensi Mono) oder als Semi Dry.' },
{ n: 'Dog Sets', d: 'Sets für Hunde', p: 'shop/catalog/dog-sets', img: '681a0b637b0c5.png', t: 'Probierset S, Probierset M–L oder Welpenset – ideal zum Kennenlernen des Sortiments.' },
{ n: 'Dog Extra', d: 'Ergänzungsfuttermittel', p: 'shop/catalog/nahrungsergaenzung-hund', img: '6398a59a2a043.png', t: 'Gezielte Unterstützung für Immunsystem, Gelenke und Verdauung – auch als BARF-Zusatz.' },
{ n: 'Dog Snack', d: 'Hundeleckerli und Snacks', p: 'shop/catalog/hundeleckerlis', img: '6398a6aeed924.png', t: 'Für Training, Belohnung und Kauspass – z.B. Pouletherzen oder Trockenfleisch Rind.' },
{ n: 'Dog Care', d: 'Natürliche Hundepflege', p: 'shop/catalog/zubehoer-hund', img: '6398a671ebea8.png', t: 'Vom Zeckenmittel bis zur natürlichen Pflege von Augen, Pfoten und Ohren.' }]
},
cat: {
all: SHOP + 'shop/catalog/gesundes-katzenfutter',
img: CAT_IMG.cat,
imgAlt: 'Gesundes Katzenfutter von ANiFiT',
intro: 'Eine grosse Auswahl an Geschmacksrichtungen, Verpackungsarten und -grössen – für den optimalen Speiseplan Ihrer Katze.',
tiles: [
{ n: 'Cat Menu Wet', d: 'Nassfutter für Katzen', p: 'shop/catalog/nassfutter-katze', img: '63989fdfbada3.png', t: 'Im Beutel, in der Aluschale oder Dose – Fleischstückchen mit Sauce, ohne Geschmacksverstärker.' },
{ n: 'Cat Menu Dry', d: 'Trockenfutter für Katzen', p: 'shop/catalog/trockenfutter-katze', img: '6398791fa789e.png', t: 'Schonend verarbeitet – z.B. das langsam im Ofen getrocknete Vision mit hohem Fleischanteil.' },
{ n: 'Cat Sets', d: 'Sets für Katzen', p: 'shop/catalog/cat-sets', img: '681a0f40279c8.png', t: 'Katzen-Probierset und Kittenset – Nass-, Trockenfutter und Snacks zum Kennenlernen.' },
{ n: 'Cat Extra', d: 'Ergänzungsfuttermittel', p: 'shop/catalog/nahrungsergaenzung-katze', img: '63987ecea70e3.png', t: 'Mineralstoffe und Spurenelemente – z.B. Lachsöl, Fell Vital, Gelafit oder Petmin.' },
{ n: 'Cat Snack', d: 'Katzensnacks und Leckerli', p: 'shop/catalog/katzenleckerlis', img: '6398a2801daa6.png', t: 'Würste, Sticks und Chips aus Lachs, Huhn oder Rind – ohne chemische Zusatzstoffe.' },
{ n: 'Cat Care', d: 'Katzenpflege', p: 'shop/catalog/zubehoer-katze', img: '6347b32b60b83.png', t: 'Zeckenöl, Notfallapotheke und natürliche Pflege für Pfoten, Augen und Ohren.' }]
}
};
/* ---------- 3D-Tilt Wrapper ---------- */
function Tilt3D({ children, max, className }) {
const ref = React.useRef(null);
const reduced = window.useReducedMotion ? window.useReducedMotion() : false;
const m = max || 9;
const onMove = (e) => {
if (reduced) return;
const el = ref.current;
if (!el) return;
const r = el.getBoundingClientRect();
const px = (e.clientX - r.left) / r.width - 0.5;
const py = (e.clientY - r.top) / r.height - 0.5;
el.style.transform =
'perspective(900px) rotateY(' + (px * m).toFixed(2) + 'deg) rotateX(' + (-py * m).toFixed(2) + 'deg) translateY(-5px)';
el.style.setProperty('--glare-x', ((px + 0.5) * 100).toFixed(1) + '%');
el.style.setProperty('--glare-y', ((py + 0.5) * 100).toFixed(1) + '%');
};
const onLeave = () => {
if (ref.current) ref.current.style.transform = '';
};
return (
{children}
);
}
function AnifitSortiment({ petType }) {
const s = SORTIMENT[petType];
return (
{petType === 'dog' ? 'Hundefutter' : 'Katzenfutter'}
{petType === 'dog' ? 'Gesundes, natürliches Hundefutter' : 'Gesundes Katzenfutter'}
{s.intro}
Gesamtes Sortiment ansehen
);
}
/* ---------- Video-Stories (interaktiv: Hund/Katze) ---------- */
function AnifitVideos({ petType, setPetType }) {
const frames = petType === 'cat' ?
[
{ wide: true, src: '/assets/anifit-video-katze-1.mp4', fallback: '/assets/video-frischfutter.mp4', slotId: 'anifit-video-katze-1', ph: 'Video/Foto: Katze beim Fressen – Datei assets/anifit-video-katze-1.mp4 hochladen oder Foto hier ablegen', title: 'Auch für Katzen', text: 'Feine Menüs, die auch wählerische Katzen überzeugen.', href: SHOP + 'shop/catalog/gesundes-katzenfutter', label: 'Zum Katzenfutter' },
{ src: '/assets/anifit-video-katze-2.mp4', slotId: 'anifit-video-katze-2', ph: 'Video/Foto: Katze – Datei assets/anifit-video-katze-2.mp4 hochladen oder Foto hier ablegen', title: 'Das Probierset', text: 'Nass-, Trockenfutter und Snacks zum Kennenlernen.', href: SHOP + 'shop/catalog/cat-sets', label: 'Cat Sets ansehen' },
{ src: '/assets/anifit-video-katze-3.mp4', slotId: 'anifit-video-katze-3', ph: 'Video/Foto: Katzensnack – Datei assets/anifit-video-katze-3.mp4 hochladen oder Foto hier ablegen', title: 'Snacks ohne Chemie', text: 'Würste, Sticks und Chips aus Lachs, Huhn oder Rind.', href: SHOP + 'shop/catalog/katzenleckerlis', label: 'Zu den Snacks' }] :
[
{ wide: true, src: '/assets/anifit-video-hund-1.mp4', fallback: '/assets/startseite-video.mp4', slotId: 'anifit-video-1', ph: 'Video/Foto: Hund – Datei assets/anifit-video-hund-1.mp4 hochladen oder Foto hier ablegen', title: 'Frischfutter, das begeistert', text: '60–75 % Fleischanteil, kalt abgefüllt – ohne künstliche Zusätze.', href: SHOP + 'shop/catalog/nassfutter-hund', label: 'Zum Nassfutter' },
{ src: '/assets/anifit-video-hund-2.mp4', slotId: 'anifit-video-2', ph: 'Video/Foto: Fütterung – Datei assets/anifit-video-hund-2.mp4 hochladen oder Foto hier ablegen', title: 'Die Fütterung', text: 'So einfach ist die Umstellung auf Anifit.', href: SHOP + 'shop/catalog/dog-sets', label: 'Probierset ansehen' },
{ src: '/assets/anifit-video-hund-3.mp4', slotId: 'anifit-video-3', ph: 'Video/Foto: Hund unterwegs – Datei assets/anifit-video-hund-3.mp4 hochladen oder Foto hier ablegen', title: 'Energie, die man sieht', text: 'Gesunde Ernährung für jedes Abenteuer.', href: SHOP + 'shop/catalog/hundeleckerlis', label: 'Zu den Snacks' }];
return (
Anifit in Bewegung
Sehen Sie selbst, wie es schmeckt
setPetType('dog')}>
Hunde-Videos
setPetType('cat')}>
Katzen-Videos
{frames.map((f) =>
)}
);
}
/* ---------- Foto-Momente (3D-Tilt Galerie) ---------- */
function AnifitMomente() {
const cards = [
{ id: 'anifit-mom-1', src: '/assets/scully.jpg', cap: 'Scully – verkostet jedes Menü persönlich', ph: 'Foto: Hund mit Anifit' },
{ id: 'anifit-mom-2', src: '/assets/fibel/p06-2.png', cap: 'Volle Näpfe, glänzendes Fell', ph: 'Foto: Napf / Fütterung hier ablegen' },
{ id: 'anifit-mom-3', src: '/assets/katze-frisst.jpg', cap: 'Auch Katzen lieben Anifit', ph: 'Foto: Katze hier ablegen' },
{ id: 'anifit-mom-4', src: '/assets/fibel/p09-2.png', cap: 'Energie für jedes Abenteuer', ph: 'Foto: Snack-Moment hier ablegen' }];
return (
Anifit-Momente
Gesund sieht man – jeden Tag
{cards.map((c) =>
{c.cap}
)}
);
}
function AnifitGarantie() {
const points = [
'Verantwortungsvolle Produktion',
'Hoher Fleischanteil',
'100 % offene Deklaration',
'Keine Füllstoffe',
'Keine Farbstoffe',
'Keine minderwertigen Schlachtabfälle',
'Keine künstlichen Aromen & Geschmacksverstärker'];
return (
Die ANiFiT-Garantie
100 % natürlich, gesund und ehrlich
Natürliche Tiernahrung in Lebensmittelqualität – mit über 60 %
Fleischanteil, schonend zubereitet und kalt abgefüllt. Ohne
chemische Zusatzstoffe, ohne Zucker.
Zur ANiFiT-Garantie
{points.map((p) =>
{p}
)}
);
}
function AnifitServices() {
const services = [
{
t: 'Futterrechner für Hunde',
d: 'Erstellen Sie online einen individuellen Fütterungsplan für Ihren Hund.',
href: SHOP + 'shop/futterrechner-hund',
label: 'Jetzt ausprobieren'
},
{
t: 'Tierfutter-Abo',
d: 'Bequem liefern lassen und als Abo-Kund:in Pfotenpunkte-Prämien sammeln.',
href: SHOP + 'ueber-anifit/services/abo',
label: 'So funktioniert es'
},
{
t: 'Persönliche Beratung',
d: 'Nicolas berät Sie kostenlos und unverbindlich – passend zu Alter, Rasse und Unverträglichkeiten.',
href: 'mailto:info@miss-scully.ch?subject=Anifit%20Beratung',
label: 'Beratung anfragen'
}];
return (
Services
Mehr als nur ein Shop
{services.map((sv, i) =>
)}
);
}
/* ---------- Video-Hero (je Tierart) ---------- */
function AnifitHero({ petType, setPetType }) {
const [videos, setVideos] = React.useState({ dog: null, cat: null });
React.useEffect(() => {
let alive = true;
const candidates = {
dog: ['/assets/anifit-hero-hund.mp4', '/assets/startseite-video.mp4'],
cat: ['/assets/anifit-hero-katze.mp4', '/assets/video-frischfutter.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}
Anifit Frischfutter
Frischfutter & Trockenfutter
Natürliches Hunde- und Katzenfutter in Lebensmittelqualität, über 60 %
Fleischanteil, schonend zubereitet, ohne chemische Zusätze, Zucker oder
Füllstoffe. Direkt geliefert in die ganze Schweiz.
setPetType('dog')}>
Für Hunde
setPetType('cat')}>
Für Katzen
60–75 % Fleischanteil
100 % offene Deklaration
Versandkostenfrei ab CHF 69
);
}
/* ---------- Tweaks ---------- */
const ANIFIT_TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
"palette": ["#B77253", "#9A5B3F", "#221C36"],
"tone": "Elegant",
"motion": "Lebendig"
}/*EDITMODE-END*/;
const ANIFIT_PALETTES = [
["#B77253", "#9A5B3F", "#221C36"], // Kupfer (Brand)
["#5F8F6E", "#4C7A5B", "#1E2A22"], // Salbei
["#5E739E", "#4A5F89", "#1B2033"]]; // Nachtblau
function useAnifitTweaks() {
const [t, setTweak] = useTweaks(ANIFIT_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 AnifitTweaks({ t, setTweak }) {
return (
setTweak('palette', v)}>
setTweak('tone', v)}>
setTweak('motion', v)}>
);
}
function AnifitPageShop() {
const [petType, setPetType] = React.useState('dog');
const [t, setTweak] = useAnifitTweaks();
return (
{petType === 'dog' ? : null}
);
}
window.AnifitPage = AnifitPageShop;