diff --git a/render.sh b/render.sh
index d01189c..79ae802 100755
--- a/render.sh
+++ b/render.sh
@@ -32,6 +32,7 @@ font_secondary=$(yq -r '.vars.font_secondary // "Inter"' "$SITE_YAML")
emoji=$(yq -r '.vars.emoji // ""' "$SITE_YAML")
cta_text=$(yq -r '.vars.cta.text // ""' "$SITE_YAML")
cta_href=$(yq -r '.vars.cta.href // "#"' "$SITE_YAML")
+disclosure_tone=$(yq -r '.disclosure.tone // "minimal"' "$SITE_YAML")
year=$(date +%Y)
# i18n: helper to generate data-de/data-en attribute string
@@ -234,6 +235,7 @@ BEGIN {
-e "s|{{cta_href}}|${cta_href}|g" \
-e "s|{{year}}|${year}|g" \
-e "s|{{domain}}|${domain}|g" \
+ -e "s|{{disclosure_tone}}|${disclosure_tone}|g" \
-e "s|{{title_i18n}}|$(echo "$title_i18n" | sed 's/[&/\]/\\&/g')|g" \
-e "s|{{description_i18n}}|$(echo "$description_i18n" | sed 's/[&/\]/\\&/g')|g" \
-e "s|{{role_i18n}}|$(echo "$role_i18n" | sed 's/[&/\]/\\&/g')|g" \
diff --git a/shared/ai-disclosure.js b/shared/ai-disclosure.js
new file mode 100644
index 0000000..e07d1c3
--- /dev/null
+++ b/shared/ai-disclosure.js
@@ -0,0 +1,72 @@
+/**
+ * KI/AI disclosure for onepager sites.
+ *
+ * Include:
+ *
+ * Configuration via data attributes on the script tag:
+ * data-tone="playful" — Lighthearted note with humor
+ * data-tone="serious" — Straightforward disclosure
+ * data-tone="minimal" — Single compact label
+ * data-tone="none" — No disclosure (script does nothing)
+ *
+ * Language is read from document.documentElement.lang:
+ * "de" -> KI terminology, "en" -> AI terminology.
+ * All tones link to msbls.de/ki.
+ */
+(function () {
+ var script = document.currentScript;
+ var tone = (script && script.getAttribute('data-tone')) || 'minimal';
+
+ if (tone === 'none') return;
+
+ var lang = (document.documentElement.lang || 'de').slice(0, 2).toLowerCase();
+ var isEn = lang === 'en';
+
+ var texts = {
+ minimal: isEn ? 'AI-assisted' : 'KI-unterst\u00FCtzt',
+ serious: isEn
+ ? 'This site was created with AI assistance.'
+ : 'Diese Seite wurde mit Unterst\u00FCtzung von KI erstellt.',
+ playful: isEn
+ ? 'Made with AI (no AIs were harmed)'
+ : 'Mit KI gemacht (keine KI wurde verletzt)',
+ };
+
+ var text = texts[tone] || texts.minimal;
+
+ var el = document.createElement('div');
+ el.className = 'onepager-ai-disclosure';
+ el.innerHTML = '' + text + '';
+
+ el.style.cssText = 'text-align:center;font-size:0.65rem;opacity:0.4;padding:6px 0;margin-top:2px;';
+ var a = el.querySelector('a');
+ if (a) {
+ a.style.color = 'inherit';
+ a.style.textDecoration = 'none';
+ }
+
+ // i18n: update text when language changes
+ var observer = new MutationObserver(function () {
+ var newLang = (document.documentElement.lang || 'de').slice(0, 2).toLowerCase();
+ var newIsEn = newLang === 'en';
+ var newTexts = {
+ minimal: newIsEn ? 'AI-assisted' : 'KI-unterst\u00FCtzt',
+ serious: newIsEn
+ ? 'This site was created with AI assistance.'
+ : 'Diese Seite wurde mit Unterst\u00FCtzung von KI erstellt.',
+ playful: newIsEn
+ ? 'Made with AI (no AIs were harmed)'
+ : 'Mit KI gemacht (keine KI wurde verletzt)',
+ };
+ var link = el.querySelector('a');
+ if (link) link.textContent = newTexts[tone] || newTexts.minimal;
+ });
+ observer.observe(document.documentElement, { attributes: true, attributeFilter: ['lang'] });
+
+ var footer = document.querySelector('footer .container, footer');
+ if (footer) {
+ footer.appendChild(el);
+ } else {
+ document.body.appendChild(el);
+ }
+})();
diff --git a/sites/allainallain.de/index.html b/sites/allainallain.de/index.html
index 17564fc..417f35a 100644
--- a/sites/allainallain.de/index.html
+++ b/sites/allainallain.de/index.html
@@ -433,6 +433,7 @@
})();
+