Files
beh-rde-brief/tools/sprachseiten/vorlage.html
T
JUSNandClaude Opus 5 1a239b7763 Sprachseiten: strukturierte Daten zurueck + Sitemap mit Sprach-Angaben
Zwei Luecken geschlossen:

1. Beim Umbau auf den Generator hatten die Sprachseiten ihren JSON-LD-Block
   verloren (Regression von mir). Jetzt erzeugt build.js pro Seite ein
   SoftwareApplication-Schema mit der Beschreibung IN DER JEWEILIGEN SPRACHE —
   ein deutscher Block auf der tuerkischen Seite waere widerspruechlich.

2. Die Sitemap war eine nackte URL-Liste ohne Sprachinformation. Jetzt traegt
   jede der 28 Sprachseiten xhtml:link-Angaben fuer alle Alternativen
   (812 Eintraege). Getrennte Sitemaps je Sprache waeren der falsche Weg —
   Google erwartet die Alternativen innerhalb einer Sitemap.

Sitemap wird ab jetzt vom Generator mitgeschrieben, bleibt also automatisch
synchron. Demo- und Ratgeber-URLs bleiben unveraendert erhalten.

Geprueft: 38 gueltige JSON-LD-Bloecke, 0 kaputt; Sitemap als XML valide.

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

197 lines
9.5 KiB
HTML

<!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); }
.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; }
</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="#anmelden">{{CTA_HERO}}&nbsp;→</a>
<span class="stempel">{{STEMPEL}}</span>
</div>
</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="anmelden">
<h2>§ 3 &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>
<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>
<!-- 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>