Weniger Text, mehr Bild: Schablonen-Elemente entfernt
Über-uns-Block mit Kennzahlen, Zielgruppen-Leiste, Eyebrow-Labels, Pillen, Checklisten und reine Textsektionen entfernt. Hero auf Headline, eine Zeile und zwei Buttons reduziert. Unterseiten mit Foto im Kopf, Philosophie über Fassadenbild mit Parallax, Layout breiter (max. 1680px). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
62916fc179
commit
ba44dc3f0a
31 files changed
+227
-591
No files matched your search
+8
-43
@@ -85,37 +85,6 @@
|
||||
cmp._set = set;
|
||||
});
|
||||
|
||||
/* ---------- Umschalter Privat / Gewerbe (Tabs) ---------- */
|
||||
$$('.switch').forEach((sw) => {
|
||||
const tabs = $$('[role="tab"]', sw);
|
||||
const pill = $('.switch__pill', sw);
|
||||
const place = (t) => { if (pill) { pill.style.width = t.offsetWidth + 'px'; pill.style.transform = `translateX(${t.offsetLeft - 4}px)`; } };
|
||||
const select = (t, focus) => {
|
||||
tabs.forEach((x) => {
|
||||
const on = x === t;
|
||||
x.setAttribute('aria-selected', String(on));
|
||||
x.tabIndex = on ? 0 : -1;
|
||||
const panel = document.getElementById(x.getAttribute('aria-controls'));
|
||||
if (panel) panel.hidden = !on;
|
||||
if (on && panel && window.gsap && !matchMedia('(prefers-reduced-motion: reduce)').matches) {
|
||||
gsap.fromTo(panel.children, { opacity: 0, y: 14 }, { opacity: 1, y: 0, duration: .6, ease: 'expo.out', stagger: .035 });
|
||||
}
|
||||
});
|
||||
place(t);
|
||||
if (focus) t.focus();
|
||||
};
|
||||
tabs.forEach((t, i) => {
|
||||
t.addEventListener('click', () => select(t));
|
||||
t.addEventListener('keydown', (e) => {
|
||||
const d = e.key === 'ArrowRight' ? 1 : e.key === 'ArrowLeft' ? -1 : 0;
|
||||
if (d) { e.preventDefault(); select(tabs[(i + d + tabs.length) % tabs.length], true); }
|
||||
});
|
||||
});
|
||||
const initial = tabs.find((t) => t.getAttribute('aria-selected') === 'true') || tabs[0];
|
||||
requestAnimationFrame(() => place(initial));
|
||||
addEventListener('resize', () => place(tabs.find((t) => t.getAttribute('aria-selected') === 'true')));
|
||||
});
|
||||
|
||||
/* ---------- Notruf-Pille: nach dem Hero sichtbar, am Seitenende weg ---------- */
|
||||
const sos = $('.sos');
|
||||
if (sos) {
|
||||
@@ -269,18 +238,6 @@
|
||||
if (img) tl.from(img, { scale: 1.18, duration: 1.8, ease: 'expo.out' }, 0);
|
||||
});
|
||||
|
||||
/* ---- Zähler ---- */
|
||||
$$('[data-count]').forEach((el) => {
|
||||
const to = el.dataset.count === 'years' ? years : Number(el.dataset.count);
|
||||
const o = { v: 0 };
|
||||
el.textContent = '0';
|
||||
gsap.to(o, {
|
||||
v: to, duration: 1.8, ease: 'expo.out',
|
||||
scrollTrigger: { trigger: el, start: 'top 90%', once: true },
|
||||
onUpdate: () => { el.textContent = Math.round(o.v); },
|
||||
});
|
||||
});
|
||||
|
||||
/* ---- Philosophie: Wort für Wort hell (gescrubbt) ---- */
|
||||
$$('[data-scrub-words]').forEach((el) => {
|
||||
SplitText.create(el, {
|
||||
@@ -305,6 +262,14 @@
|
||||
});
|
||||
});
|
||||
|
||||
/* ---- Philosophie: Hintergrundbild läuft langsamer mit ---- */
|
||||
$$('.philosophy__media picture').forEach((el) => {
|
||||
gsap.fromTo(el, { yPercent: -8 }, {
|
||||
yPercent: 8, ease: 'none',
|
||||
scrollTrigger: { trigger: el.closest('section'), start: 'top bottom', end: 'bottom top', scrub: true },
|
||||
});
|
||||
});
|
||||
|
||||
/* ---- Parallax für einzelne Elemente ---- */
|
||||
$$('[data-parallax]').forEach((el) => {
|
||||
const amt = Number(el.dataset.parallax) || 10;
|
||||
|
||||
Reference in new issue
Block a user