Files
beh-rde-brief/tools/sprachseiten/vorlage.html
T
JUSNandClaude Opus 5 7780d381b3 Web-Demo mehrsprachig + Sprachseiten bekommen Demo und Kauf
Beim Nachgehen der Frage 'warum gibt es auf den Sprachseiten kein Payment'
kam heraus: Die Web-Demo antwortete AUSSCHLIESSLICH auf Deutsch. Die
Uebersetzung war bisher reine App-Funktion — und die App gibt es noch nicht.
Kauf-Knoepfe auf der tuerkischen Seite haetten also 2,99 EUR fuer eine
deutsche Antwort kassiert. Deshalb zuerst der Worker:

- /demo nimmt jetzt 'zielsprache' entgegen (28 erlaubte Codes, Whitelist —
  der Wert geht nie als freier Text in den Prompt, sonst koennte man eigene
  Anweisungen einschleusen).
- Der deutsche Fachbegriff bleibt deutsch, nur dessen Erklaerung wird
  uebersetzt — der Nutzer muss ihn im Brief wiederfinden.
- demo.html hat eine Sprachauswahl und merkt sich die Wahl; die Sprachseiten
  verlinken mit ?sprache=xx.

Erst danach die Sprachseiten: Demo-Knopf als Haupt-Handlung (es gab bisher
GAR KEINEN — man konnte das Produkt in 27 Sprachen nicht einmal ausprobieren)
und ein Kauf-Abschnitt mit uebersetzter Pflicht-Einwilligung nach §356 BGB.

Geprueft: 27 Dateien ohne Syntaxfehler, keine offenen Platzhalter, Kauf
liefert cs_live_. Zwei Tippfehler im bulgarischen Text korrigiert.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-19 16:27:59 +02:00

266 lines
13 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="{{LANG}}"{{DIR}}>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{TITEL}}</title>
<meta name="description" content="{{BESCHREIBUNG}}">
<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1">
<meta name="theme-color" content="#1d4e89">
{{HREFLANG}}
<link rel="canonical" href="{{URL}}">
<link rel="icon" href="/favicon.svg" type="image/svg+xml">
<meta property="og:site_name" content="BehördenKlar">
<meta property="og:type" content="website">
<meta property="og:locale" content="{{LOCALE}}">
<meta property="og:url" content="{{URL}}">
<meta property="og:title" content="{{OG_TITEL}}">
<meta property="og:description" content="{{OG_BESCHREIBUNG}}">
<meta property="og:image" content="https://behoerdenklar.de/vorschau.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta name="twitter:card" content="summary_large_image">
<style>
:root {
--papier: #faf7f0; --papier-dunkel: #f1ecdf; --tinte: #21211d;
--grau: #6b675e; --amtsblau: #1d4e89; --stempelrot: #b3372b;
--marker: #ffe66b; --gruen: #2e7d4f; color-scheme: light;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
font-family: Georgia, 'Times New Roman', serif;
background: repeating-linear-gradient(0deg, transparent 0 34px, rgba(33,33,29,0.025) 34px 35px), var(--papier);
color: var(--tinte); line-height: 1.7; font-size: 17px;
}
.mono { font-family: 'Courier New', ui-monospace, monospace; letter-spacing: 0.02em; }
.wrap { max-width: 720px; margin: 0 auto; padding: 0 20px 72px; }
.briefkopf {
display: flex; justify-content: space-between; align-items: baseline;
padding: 20px 0 12px; border-bottom: 2px solid var(--tinte); font-size: 14px;
}
.briefkopf .absender { font-weight: 700; font-size: 16px; }
.briefkopf .az { color: var(--grau); font-size: 13px; }
.sprachen { padding: 12px 0 0; font-size: 15px; color: var(--grau); display: flex; flex-wrap: wrap; gap: 6px 12px; align-items: center; }{{WAEHLER_CSS}}
header { padding: 40px 0 8px; }
h1 { font-size: clamp(30px, 6vw, 46px); line-height: 1.15; font-weight: 700; }
.markiert {
background: linear-gradient(104deg, transparent 2%, var(--marker) 4%, var(--marker) 96%, transparent 98%);
padding: 0 6px; box-decoration-break: clone; -webkit-box-decoration-break: clone;
}
.intro { margin-top: 22px; font-size: 18px; max-width: 580px; }
.hero-fuss { display: flex; align-items: center; gap: 20px; flex-wrap: wrap; margin-top: 28px; }
.cta {
display: inline-block; padding: 16px 28px; background: var(--amtsblau); color: #fff;
text-decoration: none; font-family: inherit; font-size: 17px; font-weight: 700;
border: 2px solid var(--tinte); box-shadow: 5px 5px 0 var(--tinte);
transition: transform .12s ease, box-shadow .12s ease;
}
.cta:hover { transform: translate(2px,2px); box-shadow: 3px 3px 0 var(--tinte); }
.cta-sek { background: #fff; color: var(--amtsblau); }
.stempel {
display: inline-block; padding: 7px 14px; border: 2.5px solid var(--stempelrot);
color: var(--stempelrot); font-family: 'Courier New', ui-monospace, monospace;
font-weight: 700; font-size: 14px; letter-spacing: .1em; text-transform: uppercase;
transform: rotate(-4deg); opacity: .9;
}
section { margin-top: 56px; }
h2 {
font-size: 15px; text-transform: uppercase; letter-spacing: .14em; color: var(--grau);
font-weight: 400; margin-bottom: 18px; display: flex; align-items: center; gap: 12px;
}
h2::after { content: ''; flex: 1; border-top: 1px solid rgba(33,33,29,.25); }
.verwandlung { display: grid; gap: 14px; }
.brief-karte {
background: #fff; border: 1px solid rgba(33,33,29,.28); padding: 22px 24px;
position: relative; box-shadow: 4px 5px 0 rgba(33,33,29,.08);
}
.brief-karte.amtsdeutsch { transform: rotate(-.7deg); background: var(--papier-dunkel); }
.brief-karte.klartext { transform: rotate(.5deg); }
.karten-label {
position: absolute; top: -12px; inset-inline-start: 16px;
font-family: 'Courier New', ui-monospace, monospace; font-size: 12px;
text-transform: uppercase; letter-spacing: .1em;
background: var(--tinte); color: var(--papier); padding: 3px 10px;
}
.brief-karte.klartext .karten-label { background: var(--gruen); }
.amtsdeutsch p { font-family: 'Courier New', ui-monospace, monospace; font-size: 15px; direction: ltr; text-align: start; }
.pfeil { text-align: center; color: var(--grau); font-size: 15px; margin: 4px 0; }
.hinweis { margin-top: 18px; font-size: 15.5px; color: var(--grau); }
.schritte { display: grid; gap: 14px; }
.schritt { background: #fff; border: 1px solid rgba(33,33,29,.28); padding: 16px 20px; }
.schritt strong { font-weight: 700; }
.schritt span { color: var(--grau); }
.antrag {
background: #fff; border: 2px solid var(--tinte); box-shadow: 7px 8px 0 rgba(33,33,29,.9);
padding: 30px 28px; position: relative; margin-top: 8px;
}
.antrag .formular-kopf {
font-family: 'Courier New', ui-monospace, monospace; font-size: 13px;
text-transform: uppercase; letter-spacing: .1em; color: var(--grau); margin-bottom: 6px;
}
.antrag h3 { font-size: 26px; line-height: 1.25; }
.antrag p { margin-top: 12px; max-width: 540px; }
.bonus {
margin: 18px 0; padding: 14px 16px; font-size: 17px;
background: linear-gradient(104deg, transparent 1%, var(--marker) 3%, var(--marker) 97%, transparent 99%);
}
.antrag .klein { font-size: 13.5px; color: var(--grau); margin-top: 14px; }
.antrag .klein a { color: var(--grau); }
a { color: var(--amtsblau); }
footer { margin-top: 56px; padding-top: 14px; border-top: 2px solid var(--tinte); font-size: 14.5px; color: var(--grau); }
.wl-form { display: flex; flex-direction: column; gap: 12px; margin-top: 4px; }
.wl-input {
width: 100%; padding: 15px 16px; font-size: 17px; font-family: inherit;
border: 2px solid var(--tinte); background: #fff; color: var(--tinte);
}
.wl-input::placeholder { color: #9a958a; }
.wl-btn { width: 100%; cursor: pointer; text-align: center; font-family: inherit; }
details { border-bottom: 1px solid rgba(33,33,29,.28); padding: 14px 4px; }
summary { font-weight: 700; cursor: pointer; font-size: 17px; list-style: none; display: flex; justify-content: space-between; gap: 12px; }
summary::-webkit-details-marker { display: none; }
summary::after { content: '+'; font-family: 'Courier New', ui-monospace, monospace; font-size: 22px; color: var(--amtsblau); }
details[open] summary::after { content: '–'; }
details p { margin-top: 10px; color: var(--grau); font-size: 16px; }
</style>
<script type="application/ld+json">
{{SCHEMA}}
</script>
</head>
<body>
<div class="wrap">
<div class="briefkopf">
<span class="absender">📬 BehördenKlar <span style="font-weight:400;font-size:.62em;opacity:.6;letter-spacing:.04em;">by Webklar</span></span>
<span class="az mono">Az: KLAR-01/2026</span>
</div>
{{WAEHLER}}
<header>
<h1>{{H1_A}}<br><span class="markiert">{{H1_B}}</span></h1>
<p class="intro">{{INTRO}}</p>
<div class="hero-fuss">
<a class="cta" href="/demo?sprache={{LANG}}">📷 {{CTA_DEMO}}&nbsp;→</a>
<a class="cta cta-sek" href="#kaufen">{{CTA_KAUF}}</a>
</div>
<p style="margin-top: 16px; font-size: 15.5px; color: var(--grau);">
{{DEMO_HINWEIS}} &nbsp;·&nbsp; <a href="#anmelden">{{CTA_HERO}}</a>
</p>
</header>
<section>
<h2>§ 1 &nbsp;{{S1_TITEL}}</h2>
<div class="verwandlung">
<div class="brief-karte amtsdeutsch">
<span class="karten-label">{{VORHER_LABEL}}</span>
<p>
„Gemäß § 32 SGB II wird bei Nichterscheinen ohne wichtigen Grund
eine Minderung des maßgebenden Regelbedarfs in Höhe von 10 vom
Hundert festgestellt."
</p>
</div>
<p class="pfeil">— 📷 {{PFEIL}} —</p>
<div class="brief-karte klartext">
<span class="karten-label">{{NACHHER_LABEL}}</span>
<p>{{NACHHER_TEXT}}</p>
</div>
</div>
<p class="hinweis">{{HINWEIS}}</p>
</section>
<section>
<h2>§ 2 &nbsp;{{S2_TITEL}}</h2>
<div class="schritte">
<div class="schritt"><div><strong>{{SCHRITT1_T}}</strong> <span>{{SCHRITT1_B}}</span></div></div>
<div class="schritt"><div><strong>{{SCHRITT2_T}}</strong> <span>{{SCHRITT2_B}}</span></div></div>
<div class="schritt"><div><strong>{{SCHRITT3_T}}</strong> <span>{{SCHRITT3_B}}</span></div></div>
</div>
</section>
<section id="kaufen">
<h2>§ 3 &nbsp;{{KAUF_TITEL}}</h2>
<div class="antrag" style="border-color: var(--amtsblau);">
<h3>{{KAUF_H3}}</h3>
<p>{{KAUF_TEXT}}</p>
<div id="paketListe" style="display: flex; flex-direction: column; gap: 12px; margin-top: 18px;"></div>
<p style="margin-top: 16px; background: #eef4fb; border-inline-start: 4px solid var(--amtsblau); padding: 12px 14px; font-size: 15px;">
📧 {{KAUF_EMAIL}}
</p>
<label style="display: flex; gap: 10px; align-items: flex-start; margin-top: 16px; font-size: 14px; line-height: 1.5; cursor: pointer;">
<input type="checkbox" id="kaufKonsens" style="margin-top: 3px; flex-shrink: 0;">
<span>{{KAUF_KONSENS}} <a href="/agb.html" target="_blank">AGB</a> · <a href="/widerruf.html" target="_blank">Widerruf</a> ({{AUF_DEUTSCH}})</span>
</label>
<p id="kaufFehler" style="display: none; margin-top: 12px; color: #b3261e; font-size: 14px; font-weight: 600;"></p>
<p class="klein">🔒 {{KAUF_SICHER}}</p>
</div>
</section>
<section id="anmelden">
<h2>§ 4 &nbsp;{{S3_TITEL}}</h2>
<div class="antrag">
<p class="formular-kopf">{{FORMULAR_KOPF}}</p>
<h3>{{FORM_H3}}</h3>
<p>{{FORM_TEXT}}</p>
<p class="bonus">🎁 {{BONUS}}</p>
<form class="wl-form" action="{{BREVO}}" method="POST">
<input class="wl-input" type="email" name="EMAIL" placeholder="{{EMAIL_PLATZHALTER}}" required autocomplete="email">
<input type="text" name="email_address_check" value="" style="position:absolute; left:-5000px;" tabindex="-1" autocomplete="off" aria-hidden="true">
<input type="hidden" name="locale" value="de">
<input type="hidden" name="html_type" value="simple">
<button class="cta wl-btn" type="submit">{{CTA_FORM}} →</button>
</form>
<p class="klein">{{KLEIN}} <a href="datenschutz.html">{{DATENSCHUTZ}}</a>.</p>
</div>
</section>
<section>
<h2>§ 5 &nbsp;{{S4_TITEL}}</h2>
{{FAQ_HTML}}
</section>
<footer>
{{FUSS_FRAGE}} 📧 <a href="mailto:behoerdenbriefhelfer@gmail.com">behoerdenbriefhelfer@gmail.com</a>
&nbsp;·&nbsp; <a href="impressum.html">{{IMPRESSUM}}</a>
&nbsp;·&nbsp; <a href="datenschutz.html">{{DATENSCHUTZ}}</a>
</footer>
</div>
<script>
(function () {
'use strict';
var BASIS = 'https://behoerdenklar-proxy.behoerdenbrief.workers.dev';
var PAKETE = [
{ priceId: 'price_1U6BNnBsRA1AOdnedGW5eefh', titel: '5', preis: '2,99 €' },
{ priceId: 'price_1U6BPRBsRA1AOdnemDUalzb8', titel: '15', preis: '6,99 €', best: true }
];
var liste = document.getElementById('paketListe');
var konsens = document.getElementById('kaufKonsens');
var fehler = document.getElementById('kaufFehler');
if (!liste) return;
konsens.addEventListener('change', function () { if (konsens.checked) fehler.style.display = 'none'; });
PAKETE.forEach(function (p) {
var b = document.createElement('button');
b.className = 'cta'; b.type = 'button';
b.style.width = '100%'; b.style.display = 'flex';
b.style.justifyContent = 'space-between'; b.style.alignItems = 'center';
var l = document.createElement('span');
l.textContent = (p.best ? '⭐ ' : '') + p.titel + ' \u00D7 {{PAKET_WORT}}';
var r = document.createElement('strong'); r.textContent = p.preis;
b.appendChild(l); b.appendChild(r);
b.addEventListener('click', function () { starte(p.priceId, b); });
liste.appendChild(b);
});
function starte(priceId, knopf) {
if (!konsens.checked) { fehler.style.display = 'block'; fehler.textContent = '{{KAUF_FEHLER_HAKEN}}'; konsens.focus(); return; }
fehler.style.display = 'none';
var alt = knopf.innerHTML; knopf.disabled = true;
fetch(BASIS + '/kaufen', { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ priceId: priceId }) })
.then(function (r) { return r.json(); })
.then(function (d) { if (d && d.url) { window.location.href = d.url; return; } throw new Error('x'); })
.catch(function () { knopf.disabled = false; knopf.innerHTML = alt; fehler.style.display = 'block'; fehler.textContent = '{{KAUF_FEHLER_ALLG}}'; });
}
})();
</script>
<!-- Cloudflare Web Analytics: cookielose Reichweitenmessung, keine Nutzer-Profile -->
<script type='module' src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "11f017e9a707466b9151921db6125dde"}'></script>
</body>
</html>