feat(marketing): Cookie-Hinweis & Datenschutz an Laravel-Integration angepasst

Durch die Laravel-Integration setzt die Seite jetzt technisch notwendige
Cookies (markemacht-session, XSRF-TOKEN). Der pauschale Hinweis „Keine
Cookies" stimmt damit nicht mehr.

- mm-wirkung wird nicht mehr als Cookie gespiegelt → nur noch localStorage
  (JS + Inline-Head-Script); kein Flash, da vor erstem Paint gesetzt
- Footer: „Keine Cookies" → „DSGVO-konform · keine Weitergabe"
- Datenschutz: neuer Absatz „Technisch notwendige Cookies" (markemacht-session,
  XSRF-TOKEN; § 25 Abs. 2 TTDSG i.V.m. Art. 6 Abs. 1 lit. f DSGVO, kein Banner nötig)
- Feature-Tests für Footer-Hinweis und Datenschutz-Inhalt

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-06-18 13:20:44 +00:00
parent 1f7c0aa430
commit 11a76f034b
5 changed files with 747 additions and 1 deletions

View file

@ -0,0 +1,311 @@
/* markemacht.de — Interaktionen (portiert aus _markemacht.de/assets/js/app.js)
* Anpassungen für Laravel/Vite:
* - Aktiv-Navigation kommt serverseitig (aria-current/is-active in der Nav-Komponente) → kein JS nötig.
* - Fonts sind in theme-markemacht.css gebündelt → keine dynamische Font-Injektion mehr.
* - Das Audit-Formular wird von der Livewire-Komponente versendet → hier nur Modal-Chrome.
*/
(function () {
'use strict';
/* ---------- Wirkung ---------------------------------------------------- */
const STORAGE_KEY = 'mm-wirkung';
const VALID = ['monolith', 'editorial'];
const DEFAULT = 'monolith';
function getStored() {
try {
const v = localStorage.getItem(STORAGE_KEY);
return VALID.includes(v) ? v : null;
} catch (_) { return null; }
}
function applyMode(mode) {
if (!VALID.includes(mode)) mode = DEFAULT;
document.documentElement.setAttribute('data-theme', mode);
// Persistenz ausschließlich im localStorage — kein Cookie (Datenschutz, siehe Footer/Datenschutz).
try { localStorage.setItem(STORAGE_KEY, mode); } catch (_) {}
syncButtons(mode);
}
function syncButtons(mode) {
document.querySelectorAll('[data-wirkung]').forEach((btn) => {
const pressed = btn.getAttribute('data-wirkung') === mode;
btn.setAttribute('aria-pressed', pressed ? 'true' : 'false');
});
}
function initWirkung() {
const initial = getStored() || DEFAULT;
applyMode(initial);
document.querySelectorAll('[data-wirkung]').forEach((btn) => {
btn.addEventListener('click', () => {
applyMode(btn.getAttribute('data-wirkung'));
});
});
}
/* ---------- Mobile Drawer --------------------------------------------- */
function initDrawer() {
const drawer = document.querySelector('[data-mobile-drawer]');
if (!drawer) return;
const openBtns = document.querySelectorAll('[data-drawer-open]');
const closeBtns = document.querySelectorAll('[data-drawer-close]');
function open() {
drawer.classList.add('is-open');
document.body.classList.add('drawer-open');
drawer.setAttribute('aria-hidden', 'false');
openBtns.forEach((btn) => btn.setAttribute('aria-expanded', 'true'));
const firstLink = drawer.querySelector('a, button');
if (firstLink) firstLink.focus();
}
function close() {
drawer.classList.remove('is-open');
document.body.classList.remove('drawer-open');
drawer.setAttribute('aria-hidden', 'true');
openBtns.forEach((btn) => btn.setAttribute('aria-expanded', 'false'));
}
openBtns.forEach((b) => b.addEventListener('click', open));
closeBtns.forEach((b) => b.addEventListener('click', close));
drawer.querySelectorAll('a[href]').forEach((a) => a.addEventListener('click', close));
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape' && drawer.classList.contains('is-open')) close();
});
}
/* ---------- Audit Modal (nur Chrome: öffnen/schließen/Fokus) ----------- */
function initAuditModal() {
const modal = document.querySelector('[data-audit-modal]');
if (!modal) return;
const openButtons = document.querySelectorAll('[data-audit-modal-open]');
const closeButtons = modal.querySelectorAll('[data-audit-modal-close]');
const focusableSelector = 'a[href], button:not([disabled]), input:not([disabled]), textarea:not([disabled])';
let lastActive = null;
function getFocusable() {
return Array.from(modal.querySelectorAll(focusableSelector))
.filter((el) => el.offsetParent !== null && el.tabIndex >= 0);
}
function open() {
lastActive = document.activeElement;
modal.classList.add('is-open');
modal.setAttribute('aria-hidden', 'false');
document.body.classList.add('modal-open');
const first = getFocusable()[0];
if (first) first.focus();
}
function close() {
modal.classList.remove('is-open');
modal.setAttribute('aria-hidden', 'true');
document.body.classList.remove('modal-open');
if (lastActive && typeof lastActive.focus === 'function') lastActive.focus();
}
openButtons.forEach((button) => button.addEventListener('click', open));
closeButtons.forEach((button) => button.addEventListener('click', close));
modal.addEventListener('click', (event) => {
if (event.target === modal) close();
});
document.addEventListener('keydown', (event) => {
if (!modal.classList.contains('is-open')) return;
if (event.key === 'Escape') { close(); return; }
if (event.key !== 'Tab') return;
const focusable = getFocusable();
if (!focusable.length) return;
const first = focusable[0];
const last = focusable[focusable.length - 1];
if (event.shiftKey && document.activeElement === first) {
event.preventDefault();
last.focus();
} else if (!event.shiftKey && document.activeElement === last) {
event.preventDefault();
first.focus();
}
});
// Livewire signalisiert erfolgreichen Versand → Modal schließen.
window.addEventListener('audit-sent', () => window.setTimeout(close, 2500));
}
/* ---------- Hero Keyvisual (Lazy Load) -------------------------------- */
function initHeroKeyvisual() {
const slots = document.querySelectorAll('.monolith');
if (!slots.length) return;
const resolveCssUrl = (value) => {
const trimmed = (value || '').trim();
if (!trimmed) return null;
// Manche Browser liefern bereits eine absolute URL ohne url()-Hülle.
if (/^https?:\/\//i.test(trimmed)) return trimmed;
const match = trimmed.match(/url\(\s*["']?([^"')]+)["']?\s*\)/i);
if (!match) return null;
const raw = match[1].trim();
if (/^https?:\/\//i.test(raw)) return raw;
// url(/web/…) wird in Custom Properties teils als //web/… serialisiert.
// Das ist kein protocol-relative Host, sondern ein site-root-Pfad.
if (raw.startsWith('//')) {
return `${window.location.origin}/${raw.replace(/^\/+/, '')}`;
}
if (raw.startsWith('/')) {
return `${window.location.origin}${raw}`;
}
const cssLink = document.querySelector('link[rel="stylesheet"][href*="theme-markemacht"]');
const base = cssLink ? new URL(cssLink.href) : new URL(window.location.href);
return new URL(raw, base).href;
};
const preloadImage = (url) => new Promise((resolve, reject) => {
const img = new Image();
img.onload = () => resolve();
img.onerror = () => reject(new Error(`Hero image failed: ${url}`));
img.src = url;
});
const editorialActive = () =>
document.documentElement.getAttribute('data-theme') === 'editorial';
slots.forEach((slot) => {
const styles = getComputedStyle(slot);
const monoUrl = resolveCssUrl(styles.getPropertyValue('--hero-monolith'));
const editUrl = resolveCssUrl(styles.getPropertyValue('--hero-editorial'));
const loadMono = () => {
if (slot.classList.contains('is-loaded-mono') || !monoUrl) return Promise.resolve();
return preloadImage(monoUrl)
.then(() => slot.classList.add('is-loaded-mono'))
.catch((err) => console.warn(err));
};
const loadEditorial = () => {
if (slot.classList.contains('is-loaded-editorial') || !editUrl) return Promise.resolve();
return preloadImage(editUrl)
.then(() => slot.classList.add('is-loaded-editorial'))
.catch((err) => console.warn(err));
};
const loadForViewport = () => {
loadMono().then(() => {
if (editorialActive()) loadEditorial();
});
};
document.querySelectorAll('[data-wirkung="editorial"]').forEach((btn) => {
btn.addEventListener('mouseenter', loadEditorial, { once: true });
btn.addEventListener('focus', loadEditorial, { once: true });
});
const themeObserver = new MutationObserver(() => {
if (editorialActive()) loadEditorial();
});
themeObserver.observe(document.documentElement, {
attributes: true,
attributeFilter: ['data-theme'],
});
if (!('IntersectionObserver' in window)) {
loadForViewport();
return;
}
const target = slot.closest('.hero-keyvisual') || slot.closest('.split-visual') || slot;
const io = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
if (!entry.isIntersecting) return;
loadForViewport();
io.unobserve(entry.target);
});
}, { rootMargin: '120px 0px', threshold: 0.01 });
io.observe(target);
});
}
/* ---------- Reveal ----------------------------------------------------- */
function initReveal() {
const items = document.querySelectorAll('[data-reveal]');
if (!items.length) return;
const prefersReduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
if (prefersReduced || !('IntersectionObserver' in window)) {
items.forEach((el) => el.classList.add('is-revealed'));
return;
}
const io = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
if (!entry.isIntersecting) return;
const el = entry.target;
const delay = parseInt(el.getAttribute('data-reveal-delay') || '0', 10);
window.setTimeout(() => el.classList.add('is-revealed'), delay);
io.unobserve(el);
});
}, { threshold: 0.08, rootMargin: '0px 0px -5% 0px' });
items.forEach((el) => io.observe(el));
}
/* ---------- Scroll position on navigation ------------------------------ */
function initScrollPosition() {
if ('scrollRestoration' in history) history.scrollRestoration = 'manual';
function scrollToTargetOrTop() {
const hash = location.hash;
if (hash.length > 1) {
const target = document.getElementById(decodeURIComponent(hash.slice(1)));
if (target) { target.scrollIntoView(); return; }
}
window.scrollTo(0, 0);
}
scrollToTargetOrTop();
window.addEventListener('pageshow', (event) => {
if (event.persisted) scrollToTargetOrTop();
});
requestAnimationFrame(() => {
const active = document.activeElement;
if (active && active.closest('.site-footer')) {
active.blur();
scrollToTargetOrTop();
}
});
}
/* ---------- Boot ------------------------------------------------------- */
function boot() {
initScrollPosition();
initWirkung();
initDrawer();
initAuditModal();
initHeroKeyvisual();
initReveal();
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', boot);
} else {
boot();
}
})();

View file

@ -0,0 +1,323 @@
<x-web::layouts.marketing
active="datenschutz"
title="Datenschutzerklärung · MARKE MACHT"
description="Datenschutzerklärung von MARKE MACHT mit Informationen zu Hosting, Server-Logs, Kontakt und Analyse."
ogTitle="Datenschutzerklärung · MARKE MACHT"
ogType="website"
ogDescription="Datenschutzerklärung von MARKE MACHT mit Informationen zu Hosting, Server-Logs, Kontakt und Analyse.">
<header class="article-head">
<div class="shell grid-12">
<div class="col-12 stack-24">
<a class="link-arrow" href="{{ route('index') }}">
<svg class="icon" aria-hidden="true"><use href="/web/markemacht/icons.svg#arrow-back"></use></svg>
Zurück zur Startseite
</a>
<div class="article-meta">
<span class="meta accent">Rechtliches</span>
<span class="meta mute">Datenschutz</span>
</div>
<h1 class="hero-headline" style="max-width: 18ch; font-size: clamp(38px, 5.6vw, 68px);">
Datenschutzerklärung
</h1>
<p class="lead dim max-wide">
Informationen dazu, welche personenbezogenen Daten beim Besuch dieser Website verarbeitet werden.
</p>
</div>
</div>
</header>
<article class="section section-border-top">
<div class="shell grid-12">
<div class="col-12">
<div class="prose">
<h2>1. Datenschutz auf einen Blick</h2>
<p><strong>Allgemeine Hinweise</strong></p>
<p>
Die folgenden Hinweise geben einen einfachen Überblick darüber, was mit Ihren personenbezogenen Daten passiert, wenn Sie unsere Website besuchen.
Personenbezogene Daten sind alle Daten, mit denen Sie persönlich identifiziert werden können. Ausführliche Informationen zum Thema Datenschutz
entnehmen Sie unserer unter diesem Text aufgeführten Datenschutzerklärung.
</p>
<p><strong>Datenerfassung auf unserer Website</strong></p>
<p><strong>Wer ist verantwortlich für die Datenerfassung auf dieser Website?</strong></p>
<p>
Die Datenverarbeitung auf dieser Website erfolgt durch den Websitebetreiber. Dessen Kontaktdaten können Sie dem Impressum dieser Website entnehmen.
</p>
<p><strong>Wie erfassen wir Ihre Daten?</strong></p>
<p>
Ihre Daten werden zum einen dadurch erhoben, dass Sie uns diese mitteilen. Hierbei kann es sich z.B. um Daten handeln, die Sie in ein Kontaktformular eingeben.
</p>
<p>
Andere Daten werden automatisch beim Besuch der Website durch unsere IT-Systeme erfasst. Das sind vor allem technische Daten
(z.B. Internetbrowser, Betriebssystem oder Uhrzeit des Seitenaufrufs). Die Erfassung dieser Daten erfolgt automatisch, sobald Sie unsere Website betreten.
</p>
<p><strong>Wofür nutzen wir Ihre Daten?</strong></p>
<p>
Ein Teil der Daten wird erhoben, um eine fehlerfreie Bereitstellung der Website zu gewährleisten.
Andere Daten werden zur anonymisierten Analyse Ihres Nutzerverhaltens verwendet.
</p>
<p><strong>Welche Rechte haben Sie bezüglich Ihrer Daten?</strong></p>
<p>
Sie haben jederzeit das Recht unentgeltlich Auskunft über Herkunft, Empfänger und Zweck Ihrer gespeicherten personenbezogenen Daten zu erhalten.
Sie haben außerdem ein Recht, die Berichtigung, Sperrung oder Löschung dieser Daten zu verlangen. Hierzu sowie zu weiteren Fragen zum Thema Datenschutz
können Sie sich jederzeit unter der im Impressum angegebenen Adresse an uns wenden. Des Weiteren steht Ihnen ein Beschwerderecht bei der zuständigen
Aufsichtsbehörde zu.
</p>
<p>
Außerdem haben Sie das Recht, unter bestimmten Umständen die Einschränkung der Verarbeitung Ihrer personenbezogenen Daten zu verlangen.
Details hierzu entnehmen Sie der Datenschutzerklärung unter „Recht auf Einschränkung der Verarbeitung“.
</p>
<h2>2. Hosting</h2>
<p><strong>Externes Hosting</strong></p>
<p>
Diese Website wird bei einem externen Dienstleister gehostet (Hoster). Die personenbezogenen Daten, die auf dieser Website erfasst werden,
werden auf den Servern des Hosters gespeichert. Hierbei kann es sich v. a. um IP-Adressen, Kontaktanfragen, Meta- und Kommunikationsdaten,
Vertragsdaten, Kontaktdaten, Namen, Websitezugriffe und sonstige Daten, die über eine Website generiert werden, handeln.
</p>
<p>
Der Einsatz des Hosters erfolgt zum Zwecke der Vertragserfüllung gegenüber unseren potenziellen und bestehenden Kunden
(Art. 6 Abs. 1 lit. b DSGVO) und im Interesse einer sicheren, schnellen und effizienten Bereitstellung unseres Online-Angebots durch einen
professionellen Anbieter (Art. 6 Abs. 1 lit. f DSGVO). Unser Hoster wird Ihre Daten nur insoweit verarbeiten, wie dies zur Erfüllung seiner
Leistungspflichten erforderlich ist und unsere Weisungen in Bezug auf diese Daten befolgen.
</p>
<p>
Wir setzen folgenden Hoster ein:<br />
ALL-INKL.COM - Neue Medien Münnich<br />
Inhaber: René Münnich<br />
Hauptstraße 68<br />
02742 Friedersdorf
</p>
<p><strong>Abschluss eines Vertrages über Auftragsverarbeitung (AVV)</strong></p>
<p>
Wir haben einen Vertrag über Auftragsverarbeitung (AVV) mit dem oben genannten Anbieter geschlossen. Hierbei handelt es sich um einen
datenschutzrechtlich vorgeschriebenen Vertrag, der gewährleistet, dass dieser die personenbezogenen Daten unserer Websitebesucher nur nach
unseren Weisungen und unter Einhaltung der DSGVO verarbeitet.
</p>
<h2>3. Allgemeine Hinweise und Pflichtinformationen</h2>
<p><strong>Datenschutz</strong></p>
<p>
Die Betreiber dieser Seiten nehmen den Schutz Ihrer persönlichen Daten sehr ernst. Wir behandeln Ihre personenbezogenen Daten vertraulich und
entsprechend der gesetzlichen Datenschutzvorschriften sowie dieser Datenschutzerklärung.
</p>
<p>
Wenn Sie diese Website benutzen, werden verschiedene personenbezogene Daten erhoben. Personenbezogene Daten sind Daten, mit denen Sie persönlich
identifiziert werden können. Die vorliegende Datenschutzerklärung erläutert, welche Daten wir erheben und wofür wir sie nutzen. Sie erläutert
auch, wie und zu welchem Zweck das geschieht.
</p>
<p>
Wir weisen darauf hin, dass die Datenübertragung im Internet (z.B. bei der Kommunikation per E-Mail) Sicherheitslücken aufweisen kann.
Ein lückenloser Schutz der Daten vor dem Zugriff durch Dritte ist nicht möglich.
</p>
<p><strong>Hinweis zur verantwortlichen Stelle</strong></p>
<p>
Die verantwortliche Stelle für die Datenverarbeitung auf dieser Website ist:<br />
<br />
ADAMETZ.MEDIA<br />
Kevin Adametz<br />
In der Lake 4<br />
33739 Bielefeld<br />
<br />
Tel: +49 5206 7076721<br />
E-Mail: <a href="mailto:info&#64;adametz.media">info&#64;adametz.media</a>
</p>
<p>
Verantwortliche Stelle ist die natürliche oder juristische Person, die allein oder gemeinsam mit anderen über die Zwecke und Mittel der
Verarbeitung von personenbezogenen Daten (z.B. Namen, E-Mail-Adressen o. Ä.) entscheidet.
</p>
<p><strong>Widerruf Ihrer Einwilligung zur Datenverarbeitung</strong></p>
<p>
Viele Datenverarbeitungsvorgänge sind nur mit Ihrer ausdrücklichen Einwilligung möglich. Sie können eine bereits erteilte Einwilligung
jederzeit widerrufen. Dazu reicht eine formlose Mitteilung per E-Mail an uns. Die Rechtmäßigkeit der bis zum Widerruf erfolgten Datenverarbeitung
bleibt vom Widerruf unberührt.
</p>
<p><strong>Widerspruchsrecht gegen die Datenerhebung in besonderen Fällen sowie gegen Direktwerbung (Art. 21 DSGVO)</strong></p>
<p>
Wenn die Datenverarbeitung auf Grundlage von Art. 6 Abs. 1 lit. e oder f DSGVO erfolgt, haben Sie jederzeit das Recht, aus Gründen, die sich aus
Ihrer besonderen Situation ergeben, gegen die Verarbeitung Ihrer personenbezogenen Daten Widerspruch einzulegen; dies gilt auch für ein auf diese
Bestimmungen gestütztes Profiling. Die jeweilige Rechtsgrundlage, auf denen eine Verarbeitung beruht, entnehmen Sie dieser Datenschutzerklärung.
Wenn Sie Widerspruch einlegen, werden wir Ihre betroffenen personenbezogenen Daten nicht mehr verarbeiten, es sei denn, wir können zwingende
schutzwürdige Gründe für die Verarbeitung nachweisen, die Ihre Interessen, Rechte und Freiheiten überwiegen oder die Verarbeitung dient der
Geltendmachung, Ausübung oder Verteidigung von Rechtsansprüchen (Widerspruch nach Art. 21 Abs. 1 DSGVO).
</p>
<p>
Werden Ihre personenbezogenen Daten verarbeitet, um Direktwerbung zu betreiben, so haben Sie das Recht, jederzeit Widerspruch gegen die Verarbeitung
Sie betreffender personenbezogener Daten zum Zwecke derartiger Werbung einzulegen; dies gilt auch für das Profiling, soweit es mit solcher
Direktwerbung in Verbindung steht. Wenn Sie widersprechen, werden Ihre personenbezogenen Daten anschließend nicht mehr zum Zwecke der Direktwerbung
verwendet (Widerspruch nach Art. 21 Abs. 2 DSGVO).
</p>
<p><strong>Beschwerderecht bei der zuständigen Aufsichtsbehörde</strong></p>
<p>
Im Falle von Verstößen gegen die DSGVO steht den Betroffenen ein Beschwerderecht bei einer Aufsichtsbehörde, insbesondere in dem Mitgliedstaat
ihres gewöhnlichen Aufenthalts, ihres Arbeitsplatzes oder des Orts des mutmaßlichen Verstoßes zu. Das Beschwerderecht besteht unbeschadet
anderweitiger verwaltungsrechtlicher oder gerichtlicher Rechtsbehelfe.
</p>
<p><strong>Recht auf Datenübertragbarkeit</strong></p>
<p>
Sie haben das Recht, Daten, die wir auf Grundlage Ihrer Einwilligung oder in Erfüllung eines Vertrags automatisiert verarbeiten, an sich oder an
einen Dritten in einem gängigen, maschinenlesbaren Format aushändigen zu lassen. Sofern Sie die direkte Übertragung der Daten an einen anderen
Verantwortlichen verlangen, erfolgt dies nur, soweit es technisch machbar ist.
</p>
<p><strong>SSL- bzw. TLS-Verschlüsselung</strong></p>
<p>
Diese Seite nutzt aus Sicherheitsgründen und zum Schutz der Übertragung vertraulicher Inhalte, wie zum Beispiel Bestellungen oder Anfragen,
die Sie an uns als Seitenbetreiber senden, eine SSL-bzw. TLS-Verschlüsselung. Eine verschlüsselte Verbindung erkennen Sie daran, dass die
Adresszeile des Browsers von “http://” auf “https://” wechselt und an dem Schloss-Symbol in Ihrer Browserzeile. Wenn die SSL- bzw.
TLS-Verschlüsselung aktiviert ist, können die Daten, die Sie an uns übermitteln, nicht von Dritten mitgelesen werden.
</p>
<p><strong>Auskunft, Sperrung, Löschung und Berichtigung</strong></p>
<p>
Sie haben im Rahmen der geltenden gesetzlichen Bestimmungen jederzeit das Recht auf unentgeltliche Auskunft über Ihre gespeicherten
personenbezogenen Daten, deren Herkunft und Empfänger und den Zweck der Datenverarbeitung und ggf. ein Recht auf Berichtigung, Sperrung oder
Löschung dieser Daten. Hierzu sowie zu weiteren Fragen zum Thema personenbezogene Daten können Sie sich jederzeit unter der im Impressum
angegebenen Adresse an uns wenden.
</p>
<p><strong>Recht auf Einschränkung der Verarbeitung</strong></p>
<p>
Sie haben das Recht, die Einschränkung der Verarbeitung Ihrer personenbezogenen Daten zu verlangen. Das Recht auf Einschränkung der Verarbeitung
besteht in folgenden Fällen:
</p>
<p>
Wenn Sie die Richtigkeit Ihrer bei uns gespeicherten personenbezogenen Daten bestreiten, benötigen wir in der Regel Zeit, um dies zu überprüfen.
Für die Dauer der Prüfung haben Sie das Recht, die Einschränkung der Verarbeitung Ihrer personenbezogenen Daten zu verlangen.
</p>
<p>
Wenn die Verarbeitung Ihrer personenbezogenen Daten unrechtmäßig geschah / geschieht, können Sie statt der Löschung die Einschränkung der
Datenverarbeitung verlangen.
</p>
<p>
Wenn wir Ihre personenbezogenen Daten nicht mehr benötigen, Sie sie jedoch zur Ausübung, Verteidigung oder Geltendmachung von Rechtsansprüchen
benötigen, haben Sie das Recht, statt der Löschung die Einschränkung der Verarbeitung Ihrer personenbezogenen Daten zu verlangen.
</p>
<p>
Wenn Sie einen Widerspruch nach Art. 21 Abs. 1 DSGVO eingelegt haben, muss eine Abwägung zwischen Ihren und unseren Interessen vorgenommen werden.
Solange noch nicht feststeht, wessen Interessen überwiegen, haben Sie das Recht, die Einschränkung der Verarbeitung Ihrer personenbezogenen Daten
zu verlangen.
</p>
<p>
Wenn Sie die Verarbeitung Ihrer personenbezogenen Daten eingeschränkt haben, dürfen diese Daten – von ihrer Speicherung abgesehen – nur mit Ihrer
Einwilligung oder zur Geltendmachung, Ausübung oder Verteidigung von Rechtsansprüchen oder zum Schutz der Rechte einer anderen natürlichen oder
juristischen Person oder aus Gründen eines wichtigen öffentlichen Interesses der Europäischen Union oder eines Mitgliedstaats verarbeitet werden.
</p>
<p><strong>Widerspruch gegen Werbe-E-Mails</strong></p>
<p>
Der Nutzung von im Rahmen der Impressumspflicht veröffentlichten Kontaktdaten zur Übersendung von nicht ausdrücklich angeforderter Werbung und
Informationsmaterialien wird hiermit widersprochen. Die Betreiber der Seiten behalten sich ausdrücklich rechtliche Schritte im Falle der
unverlangten Zusendung von Werbeinformationen, etwa durch Spam-E-Mails, vor.
</p>
<h2>4. Datenerfassung auf unserer Website</h2>
<p><strong>Technisch notwendige Cookies</strong></p>
<p>
Diese Webseite setzt ausschließlich technisch notwendige Cookies, die für den Betrieb und die Absicherung
der Formulare (z. B. des Anfrage-/Kontaktformulars) erforderlich sind:
</p>
<p>
<code>markemacht-session</code> — hält Ihre Sitzung, damit eine Formulareingabe dem richtigen Seitenaufruf zugeordnet werden kann.<br />
<code>XSRF-TOKEN</code> — schützt Formulare vor websiteübergreifender Anfragefälschung (CSRF).
</p>
<p>
Diese Cookies werden ausschließlich von uns selbst gesetzt (First-Party), enthalten keine Profil- oder
Werbedaten, dienen weder der Analyse noch dem Tracking und werden nicht an Dritte weitergegeben. Rechtsgrundlage
ist § 25 Abs. 2 Nr. 2 TTDSG (für den vom Nutzer ausdrücklich gewünschten Dienst unbedingt erforderlich) in
Verbindung mit Art. 6 Abs. 1 lit. f DSGVO. Eine Einwilligung ist hierfür nicht erforderlich; ein Cookie-Banner
entfällt entsprechend.
</p>
<p><strong>Lokaler Speicher (localStorage)</strong></p>
<p>
Für die Darstellungseinstellung „Wirkung“ (monolithisch / editorial) wird Ihre Auswahl ausschließlich im
<code>localStorage</code> Ihres Browsers gespeichert — nicht in Cookies. Es werden dabei keine personenbezogenen Daten
übermittelt. Sie können den Eintrag jederzeit über die Browser-Einstellungen löschen.
</p>
<p><strong>Server-Log-Dateien</strong></p>
<p>
Der Provider der Seiten erhebt und speichert automatisch Informationen in so genannten Server-Log-Dateien, die Ihr Browser automatisch an uns
übermittelt. Dies sind:
</p>
<p>
Browsertyp und Browserversion<br />
verwendetes Betriebssystem<br />
Referrer URL<br />
Hostname des zugreifenden Rechners<br />
Uhrzeit der Serveranfrage<br />
IP-Adresse
</p>
<p>
Eine Zusammenführung dieser Daten mit anderen Datenquellen wird nicht vorgenommen. Die Erfassung dieser Daten erfolgt auf Grundlage von
Art. 6 Abs. 1 lit. f DSGVO. Der Websitebetreiber hat ein berechtigtes Interesse an der technisch fehlerfreien Darstellung und der Optimierung
seiner Website – hierzu müssen die Server-Log-Files erfasst werden.
</p>
<p><strong>Kontaktformular &amp; E-Mail-Kontakt</strong></p>
<p>
Wenn Sie uns per Kontaktformular oder per E-Mail Anfragen zukommen lassen, werden Ihre Angaben (z. B. Name, E-Mail-Adresse und der Text Ihrer
Anfrage) zwecks Bearbeitung der Anfrage und für den Fall von Anschlussfragen bei uns gespeichert. Diese Daten geben wir nicht ohne Ihre
Einwilligung weiter.
</p>
<p>
Die Verarbeitung dieser Daten erfolgt auf Grundlage von Art. 6 Abs. 1 lit. b DSGVO, sofern Ihre Anfrage mit der Erfüllung eines Vertrags
zusammenhängt oder zur Durchführung vorvertraglicher Maßnahmen erforderlich ist. In allen übrigen Fällen beruht die Verarbeitung auf unserem
berechtigten Interesse an der effektiven Bearbeitung der an uns gerichteten Anfragen (Art. 6 Abs. 1 lit. f DSGVO) oder auf Ihrer Einwilligung
(Art. 6 Abs. 1 lit. a DSGVO), sofern diese abgefragt wurde.
</p>
<p>
Die von Ihnen an uns übersendeten Daten verbleiben bei uns, bis Sie uns zur Löschung auffordern, Ihre Einwilligung zur Speicherung widerrufen
oder der Zweck für die Datenspeicherung entfällt (z.B. nach abgeschlossener Bearbeitung Ihrer Anfrage). Zwingende gesetzliche Bestimmungen –
insbesondere Aufbewahrungsfristen – bleiben unberührt.
</p>
<p><strong>Verarbeiten von Daten (Kunden- und Vertragsdaten)</strong></p>
<p>
Wir erheben, verarbeiten und nutzen personenbezogene Daten nur, soweit sie für die Begründung, inhaltliche Ausgestaltung oder Änderung des
Rechtsverhältnisses erforderlich sind (Bestandsdaten). Dies erfolgt auf Grundlage von Art. 6 Abs. 1 lit. b DSGVO, der die Verarbeitung von Daten
zur Erfüllung eines Vertrags oder vorvertraglicher Maßnahmen gestattet. Personenbezogene Daten über die Inanspruchnahme unserer Internetseiten
(Nutzungsdaten) erheben, verarbeiten und nutzen wir nur, soweit dies erforderlich ist, um dem Nutzer die Inanspruchnahme des Dienstes zu
ermöglichen oder abzurechnen.
</p>
<p>
Die erhobenen Kundendaten werden nach Abschluss des Auftrags oder Beendigung der Geschäftsbeziehung gelöscht. Gesetzliche Aufbewahrungsfristen
bleiben unberührt.
</p>
<h2>5. Analyse-Tools</h2>
<p><strong>Umami Analytics (selbst gehostet)</strong></p>
<p>
Diese Website nutzt das Open-Source-Webanalyse-Tool Umami für interne Auswertungen. Um höchste Datenschutzstandards zu gewährleisten, wird Umami
vollständig auf einem eigenen Server gehostet. Dadurch bleiben alle erfassten Daten in unserer alleinigen Kontrolle und werden nicht an Dritte
weitergegeben.
</p>
<p>Umami wurde datenschutzfreundlich konzipiert:</p>
<p>
Es werden keine Cookies in Ihrem Browser gespeichert.<br />
Es findet kein website- oder geräteübergreifendes Tracking (Cross-Site Tracking) statt.<br />
Alle IP-Adressen werden unmittelbar bei der Erfassung vollständig anonymisiert, sodass ein Rückschluss auf Ihre Person oder Ihr genaues Gerät ausgeschlossen ist.
</p>
<p>
Es werden lediglich grundlegende, anonyme Telemetriedaten erfasst (z. B. aufgerufene Seiten, Browsertyp, Betriebssystem, Herkunftsland und
Bildschirmauflösung). Die Nutzung von Umami erfolgt auf Grundlage unseres berechtigten Interesses gemäß Art. 6 Abs. 1 lit. f DSGVO. Unser
berechtigtes Interesse liegt in der anonymisierten Analyse des Nutzerverhaltens, um unsere Website sowie unser Angebot technisch und inhaltlich
fortlaufend zu optimieren.
</p>
</div>
</div>
</div>
</article>
</x-web::layouts.marketing>

View file

@ -0,0 +1,85 @@
@props([
'active' => '',
'title' => 'MARKE MACHT · Denkraum für Unternehmer',
'description' => 'Wenn Sie Ihr Unternehmen nicht erklären können, haben Sie kein Marketingproblem. Sondern ein Markenproblem. Denkraum für Unternehmer im Mittelstand.',
'canonical' => null,
'ogTitle' => null,
'ogType' => 'website',
'ogDescription' => 'Marke ist die Fähigkeit eines Unternehmens, sich selbst eindeutig zu erklären.',
'bodyClass' => '',
])
@php
$canonicalUrl = $canonical ?? url()->current();
$ogTitle ??= $title;
@endphp
<!DOCTYPE html>
<html lang="de" data-theme="monolith">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
<title>{{ $title }}</title>
<meta name="description" content="{{ $description }}" />
<meta property="og:type" content="{{ $ogType }}" />
<meta property="og:site_name" content="MARKE MACHT" />
<meta property="og:title" content="{{ $ogTitle }}" />
<meta property="og:description" content="{{ $ogDescription }}" />
<meta property="og:url" content="{{ $canonicalUrl }}" />
<link rel="canonical" href="{{ $canonicalUrl }}" />
<meta property="og:locale" content="de_DE" />
<meta property="og:image" content="{{ url('/web/markemacht/img/og-share.webp') }}" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:image:alt" content="MARKE MACHT — Denkraum für Unternehmer" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:image" content="{{ url('/web/markemacht/img/og-share.webp') }}" />
<meta name="theme-color" content="#0A0A0A" media="(prefers-color-scheme: dark)" />
<meta name="theme-color" content="#FBFAF2" media="(prefers-color-scheme: light)" />
<link rel="icon" type="image/svg+xml" href="/web/markemacht/favicon.svg" />
<link rel="preconnect" href="https://sys.adametz.media" crossorigin />
{{-- Wirkung vor dem ersten Paint setzen (kein Flash). Fonts sind in theme-markemacht.css gebündelt. --}}
<script>
(function () {
'use strict';
if ('scrollRestoration' in history) history.scrollRestoration = 'manual';
if (!location.hash) window.scrollTo(0, 0);
var v = 'monolith';
try {
var stored = localStorage.getItem('mm-wirkung');
if (stored === 'monolith' || stored === 'editorial') v = stored;
} catch (_) {}
document.documentElement.setAttribute('data-theme', v);
})();
</script>
@vite(['resources/css/web/theme-markemacht.css', 'resources/js/web/markemacht.js'])
<script defer src="https://sys.adametz.media/config.js" data-website-id="40125fcf-49c4-43f3-a9a5-9eec5eb55696"></script>
@verbatim
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "MARKE MACHT",
"url": "https://markemacht.de/",
"description": "Denkraum für Unternehmer im Mittelstand. Marke ist die Fähigkeit eines Unternehmens, sich selbst eindeutig zu erklären.",
"inLanguage": "de-DE"
}
</script>
@endverbatim
</head>
<body @class([$bodyClass => $bodyClass])>
@include('web.partials.nav', ['active' => $active])
<main id="main">
{{ $slot }}
</main>
@include('web.partials.footer')
</body>
</html>

View file

@ -3,7 +3,7 @@
<div class="footer-inner">
<div class="footer-meta">
<p class="footer-copy">© <strong>Marke macht<span class="accent">.</span></strong> · Denkraum für Unternehmer</p>
<p class="footer-note">Keine Cookies</p>
<p class="footer-note">DSGVO-konform · keine Weitergabe</p>
</div>
<div class="footer-links">
<a class="footer-link" href="{{ route('impressum') }}">Impressum</a>

View file

@ -0,0 +1,27 @@
<?php
use function Pest\Laravel\get;
test('der footer nennt den neuen datenschutz-hinweis statt „keine cookies"', function () {
get(route('index'))
->assertOk()
->assertSee('keine Weitergabe')
->assertDontSee('Keine Cookies');
});
test('die datenschutzerklärung deklariert die technisch notwendigen cookies', function () {
get(route('datenschutz'))
->assertOk()
->assertSee('Technisch notwendige Cookies')
->assertSee('markemacht-session')
->assertSee('XSRF-TOKEN')
->assertDontSee('verwendet keine Cookies');
});
test('die wirkungs-präferenz wird nicht mehr als cookie gesetzt', function () {
// Der Inline-Head-Script liest die Präferenz nur noch aus localStorage, nicht aus Cookies.
get(route('index'))
->assertOk()
->assertDontSee('document.cookie.match', false)
->assertDontSee('mm-wirkung=', false);
});