/* ============================================================
   GEO-RANKINGS · DESIGN-SYSTEM  (Single Source of Truth)
   Aus den Claude-Design-Templates extrahiert.

   Wird von ALLEN drei Oberflächen geteilt:
   - Astro-Verzeichnisseiten   →  ersetzt public/styles.css
   - WordPress Blog-Template    →  per wp_enqueue_style einbinden
   - Elementor Startseite       →  Elementor ▸ Custom Code / Global CSS

   Pro Stadt ändert sich NUR EINE ZAHL:  --h  (der OKLCH-Farbwinkel).
   Münster 24 · Dortmund 305 · Essen 248 · Osnabrück 188
   Setzen via:  <body style="--h:305">  (Astro, dynamisch pro Stadt)
            oder Elementor Global Color / WP body_class (fix pro Site).
   ============================================================ */

/* ---- Schriften: selbst gehostet (fonts/ im Theme-Ordner) -------------------
   Bewusst KEIN @import von fonts.googleapis.com: Ein CSS-@import feuert sofort
   beim Parsen — also vor jeder Cookie-Einwilligung — und würde die IP jedes
   Besuchers an Google übertragen (DSGVO/TDDDG).

   Diese Datei wird nicht nur im WP-Blog geladen, sondern von den Astro-Seiten
   als WP-Asset mit eingebunden. Ein @import hier hebelt das Selfhosting dort
   also gleich mit aus. Pfade sind relativ zur CSS-Datei und funktionieren
   deshalb auch bei domainübergreifender Einbindung.
   Gegenstück: geo-verzeichnis-output/public/styles.css · Doku: docs/fonts.md */
@font-face {
  font-family: 'Newsreader';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url('fonts/newsreader-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Newsreader';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url('fonts/newsreader-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Public Sans';
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url('fonts/public-sans-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Public Sans';
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url('fonts/public-sans-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

:root{
  /* ---- Marken-Konstanten (für ALLE Städte gleich) ---- */
  --ink:#000; --ink-2:#33363b; --ink-3:#6b7079;
  --line:#e6e4de; --paper:#fff; --bg:#f6f5f1;
  --green:oklch(0.58 0.15 150); --green-soft:oklch(0.955 0.03 150);
  --amber:oklch(0.74 0.15 55);
  --font-serif:"Newsreader",Georgia,serif;
  --font-sans:"Public Sans",system-ui,sans-serif;

  /* ---- Stadt-Akzent: EINE Variable steuert die gesamte Palette ---- */
  --h: 24;                       /* ← pro Stadt überschreiben */
  --accent-h: var(--h);          /* Templates nutzen einen Mini-Offset (±10); optional */
  --accent:      oklch(0.90  0.045 var(--accent-h));
  --accent-soft: oklch(0.955 0.022 var(--accent-h));
  --anchor:      oklch(0.39  0.13  var(--h));
  --anchor-900:  oklch(0.31  0.10  var(--h));
}

/* WICHTIG: Die abgeleitete Palette MUSS auf <body> neu auflösen. --h wird pro
   Stadt auf <body> gesetzt (Astro: inline `--h:<hue>`, sonst von :root geerbt).
   In :root deklarierte Derivate würden `var(--h)` mit dem :root-Default (24)
   einfrieren und pro Stadt NICHT umfärben. Re-Deklaration auf <body> behebt das. */
body{
  --accent:      oklch(0.90  0.045 var(--h));
  --accent-soft: oklch(0.955 0.022 var(--h));
  --anchor:      oklch(0.39  0.13  var(--h));
  --anchor-900:  oklch(0.31  0.10  var(--h));
}

/* ============================================================
   BASE
   ============================================================ */
*{box-sizing:border-box;}
html,body{margin:0;padding:0;}
body{background:var(--bg);color:var(--ink);font-family:var(--font-sans);
  font-size:17px;line-height:1.5;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
  /* Sticky-Footer: Footer klebt am Viewport-Boden, auch wenn der Inhalt kurz ist. */
  min-height:100vh;display:flex;flex-direction:column;}
/* main füllt den Raum und drückt den Footer nach unten (Sticky-Footer). Den Abstand
   über dem Footer tragen die Inhalts-Spalten selbst (siehe .pagebody / .formwrap /
   .kt-body / .mag-body / .artikel). Seiten, die mit einem Full-Bleed-Band enden
   (.startseite / .promise), geben bewusst keinen → das Band stößt bündig an den Footer. */
main{flex:1 0 auto;}
a{color:inherit;text-decoration:none;}
.wrap{max-width:1180px;margin:0 auto;padding:0 32px;}

/* ============================================================
   HEADER (System – identisch auf allen Seiten)
   ============================================================ */
header.site{position:sticky;top:0;z-index:20;background:#fff;
  transition:background .25s ease,box-shadow .25s ease,backdrop-filter .25s ease;}
header.site.scrolled{background:rgba(255,255,255,.72);backdrop-filter:saturate(160%) blur(14px);
  box-shadow:0 8px 30px -18px rgba(0,0,0,.35);}
header.site .bar{display:flex;align-items:center;justify-content:space-between;gap:18px;padding-block:18px;}
.logo{font-family:var(--font-sans);font-weight:800;font-size:clamp(18px,1.7vw,23px);
  letter-spacing:.10em;color:#000;text-transform:uppercase;white-space:nowrap;}
.nav{display:flex;align-items:center;gap:18px;}
.search{display:flex;align-items:center;gap:9px;background:#f0eee9;border:none;border-radius:999px;
  padding:12px 18px;min-width:150px;flex:1 1 auto;max-width:300px;color:var(--ink-3);}
@media(max-width:1240px){.nav .search{display:none;}}
.search input{border:none;outline:none;font:inherit;font-size:15.5px;color:var(--ink);background:transparent;width:100%;}
.search svg{width:17px;height:17px;color:var(--ink-3);}
.nav a.link{font-size:16.5px;font-weight:600;color:#000;}
.nav a.link:hover{color:var(--anchor);}
.nav .sep{width:1px;height:20px;background:var(--line);}

/* ============================================================
   BREADCRUMB (Default = Blog; Pagehead-Variante überschreibt unten)
   ============================================================ */
.crumb{font-size:14px;color:var(--ink-3);font-weight:500;margin:26px 0 22px;
  display:flex;align-items:center;gap:8px;}
.crumb a:hover{color:var(--anchor);}
.crumb .s{opacity:.5;}

/* ============================================================
   PAGEHEAD – farbiges Band (Ranking-/Verzeichnisseite)
   ============================================================ */
.pagehead{position:relative;overflow:hidden;background:var(--accent);}
.pagehead::before{content:"";position:absolute;inset:-25%;z-index:0;pointer-events:none;
  background:
    radial-gradient(36% 48% at 18% 26%, oklch(0.93 0.055 350 / .95), transparent 70%),
    radial-gradient(42% 55% at 84% 20%, oklch(0.92 0.06 40 / .9), transparent 70%),
    radial-gradient(48% 62% at 66% 96%, oklch(0.88 0.075 12 / .85), transparent 72%),
    radial-gradient(34% 44% at 6% 88%, oklch(0.94 0.05 65 / .8), transparent 70%);
  filter:blur(8px);animation:drift 22s ease-in-out infinite alternate;}
@keyframes drift{from{transform:translate3d(-2%,-1%,0) scale(1.03);}to{transform:translate3d(3%,2%,0) scale(1.10);}}
@media (prefers-reduced-motion: reduce){.pagehead::before{animation:none;}}
.pagehead .inner{position:relative;z-index:1;max-width:1180px;margin:0 auto;padding:26px 32px 48px;color:#000;}
.pagehead .crumb{color:rgba(0,0,0,.6);font-weight:600;margin:0 0 30px;}
.pagehead .crumb a:hover{color:#000;}
.pagehead .crumb .s{opacity:.45;}
.ph-center{text-align:center;}
.ph-icon{width:62px;height:62px;border-radius:18px;background:#fff;display:inline-flex;align-items:center;
  justify-content:center;margin:0 0 18px;box-shadow:0 10px 30px -16px rgba(60,10,20,.5);}
.ph-icon svg{width:30px;height:30px;color:#000;stroke-width:1.6;}
.pagehead h1.title{font-family:var(--font-serif);font-weight:600;font-size:clamp(36px,5vw,58px);
  line-height:1.0;letter-spacing:-.015em;margin:0 0 12px;}
.ph-sub{font-size:18px;line-height:1.5;color:var(--ink-2);max-width:54ch;margin:0 auto 20px;}
.ph-meta{display:inline-flex;align-items:center;gap:9px;background:rgba(255,255,255,.6);border-radius:999px;
  padding:9px 18px;font-size:14px;font-weight:600;color:var(--ink-2);}
.ph-meta svg{width:16px;height:16px;}

/* ============================================================
   LISTE als Karten (Ranking-/Verzeichnisseite)
   ============================================================ */
.listwrap{max-width:920px;margin:0 auto;padding:34px 32px 0;}
.list{display:flex;flex-direction:column;gap:14px;}
.entry{display:flex;gap:22px;align-items:flex-start;background:var(--paper);border-radius:18px;padding:24px 26px;
  box-shadow:0 1px 2px rgba(20,12,12,.04),0 10px 30px -20px rgba(20,12,12,.22);
  transition:transform .15s ease,box-shadow .15s ease;}
.entry:hover{transform:translateY(-2px);box-shadow:0 1px 2px rgba(20,12,12,.05),0 16px 38px -22px rgba(20,12,12,.3);}
.rank{flex:none;width:62px;height:62px;border-radius:16px;background:var(--accent);display:flex;align-items:center;
  justify-content:center;font-family:var(--font-sans);font-weight:800;font-size:27px;color:#000;font-feature-settings:"tnum" 1;}
.body{flex:1;min-width:0;}
.ehead{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:2px 0 8px;}
.nm{font-family:var(--font-serif);font-weight:600;font-size:25px;line-height:1.1;letter-spacing:-.01em;margin:0;}
.sub{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px;margin:0 0 12px;}
.cat{font-size:12.5px;font-weight:600;background:#f1efea;color:var(--ink-2);border-radius:999px;padding:5px 12px;}
.addr{display:inline-flex;align-items:center;gap:6px;font-size:14.5px;color:var(--ink-3);font-weight:500;}
.addr svg{width:15px;height:15px;}
.desc{font-size:16.5px;line-height:1.55;color:var(--ink-2);margin:0 0 14px;max-width:64ch;}
.meta{display:flex;flex-wrap:wrap;gap:10px 14px;}
.meta a{display:inline-flex;align-items:center;gap:7px;font-size:14px;font-weight:600;color:#000;background:transparent;
  border:1.5px solid rgba(0,0,0,.85);border-radius:999px;padding:6px 14px;transition:background .14s ease,color .14s ease;}
.meta a svg{width:15px;height:15px;}
.meta a:hover{background:#000;color:#fff;}

/* Badges */
.badge{font-family:var(--font-sans);font-size:12px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;
  padding:5px 11px;border-radius:999px;line-height:1;display:inline-flex;align-items:center;gap:5px;}
.badge svg{width:13px;height:13px;}
.badge.tipp{background:var(--green);color:#fff;}
.badge.neu{background:var(--amber);color:#241500;}
.entry.is-tipp{box-shadow:0 0 0 2px var(--green),0 14px 34px -20px rgba(20,60,30,.4);}
.entry.is-tipp .rank{background:var(--green-soft);}

/* ============================================================
   PROMISE – Full-Width-Foto-Sektion (Ranking + Startseite)
   ============================================================ */
.promise{position:relative;background-size:cover;background-position:center 40%;color:#fff;padding:88px 0;margin-top:48px;}
.promise::before{content:"";position:absolute;inset:0;
  background:linear-gradient(180deg, rgba(24,10,16,.55) 0%, rgba(22,9,14,.72) 55%, rgba(20,8,12,.85) 100%);}
.promise .wrap{position:relative;z-index:1;}
.promise .ptitle{font-family:var(--font-serif);font-weight:600;font-size:clamp(30px,3.6vw,42px);
  line-height:1.05;letter-spacing:-.01em;margin:0 0 12px;color:#fff;}
.promise .pintro{font-size:17px;line-height:1.55;color:rgba(255,255,255,.85);max-width:64ch;margin:0 0 22px;}
.promise .legend{display:flex;flex-wrap:wrap;gap:14px 26px;margin:0 0 38px;font-size:14.5px;color:rgba(255,255,255,.9);}
.promise .legend .li{display:flex;align-items:center;gap:9px;}
.promise-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:28px;}
@media(max-width:860px){.promise-grid{grid-template-columns:1fr 1fr;gap:30px 26px;}}
.pitem{border-top:2px solid rgba(255,255,255,.4);padding-top:16px;}
.pitem h3{font-family:var(--font-serif);font-weight:600;font-size:22px;margin:0 0 8px;color:#fff;}
.pitem p{font-size:15px;line-height:1.5;color:rgba(255,255,255,.82);margin:0;}
.promise .contact{font-size:15px;color:rgba(255,255,255,.85);margin:36px 0 0;}
.promise .contact a{color:#fff;font-weight:600;text-decoration:underline;text-underline-offset:2px;}

/* ============================================================
   BLOG – Artikel-Shell + Sidebar
   ============================================================ */
.artwrap{max-width:1180px;margin:0 auto;padding:0 32px;}
.featured{aspect-ratio:16/8;border-radius:20px;overflow:hidden;margin-bottom:14px;}
.featured img{width:100%;height:100%;object-fit:cover;display:block;}
.cap{font-size:12.5px;color:var(--ink-3);margin:0 0 26px;}
.art-grid{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:54px;padding-bottom:20px;}
@media(max-width:980px){.art-grid{grid-template-columns:1fr;gap:42px;}}
.meta-row{display:flex;align-items:center;gap:14px;margin:0 0 16px;flex-wrap:wrap;}
.cat-pill{font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--anchor);
  background:var(--accent-soft);border:1px solid var(--accent);border-radius:999px;padding:6px 13px;}
.date{font-size:14.5px;color:var(--ink-3);font-weight:500;display:inline-flex;align-items:center;gap:7px;}
.date svg{width:15px;height:15px;}
article h1.title{font-family:var(--font-serif);font-weight:600;font-size:clamp(34px,4.4vw,50px);
  line-height:1.04;letter-spacing:-.015em;margin:0 0 18px;}
.excerpt{font-size:20px;line-height:1.5;color:var(--ink-2);font-weight:500;margin:0 0 30px;max-width:62ch;}

/* Inhaltsverzeichnis */
.toc{background:var(--accent-soft);border-radius:14px;padding:22px 26px;margin:0 0 36px;}
.toc .h{font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3);
  margin:0 0 12px;display:flex;align-items:center;gap:8px;}
.toc .h svg{width:15px;height:15px;}
.toc ol{margin:0;padding:0;list-style:none;counter-reset:toc;}
.toc li{counter-increment:toc;padding:5px 0;font-size:16px;}
.toc li a{font-weight:500;color:var(--ink-2);}
.toc li a:hover{color:var(--anchor);text-decoration:underline;text-underline-offset:2px;}
.toc li::before{content:counter(toc) ".";color:var(--anchor);font-weight:700;margin-right:10px;}

/* ============================================================
   PROSE – Body aus dem CLASSIC EDITOR
   the_content() in einen <div class="prose"> wrappen → fertig gestylt.
   ============================================================ */
.prose{font-size:18px;line-height:1.72;color:var(--ink-2);}
.prose h2{font-family:var(--font-serif);font-weight:600;font-size:30px;line-height:1.12;letter-spacing:-.01em;
  color:#000;margin:44px 0 14px;scroll-margin-top:90px;}
.prose h3{font-family:var(--font-serif);font-weight:600;font-size:23px;line-height:1.2;color:#000;margin:32px 0 10px;}
.prose h4{font-family:var(--font-sans);font-weight:700;font-size:18px;color:#000;margin:24px 0 8px;}
.prose p{margin:0 0 18px;}
.prose a{color:var(--anchor);text-decoration:underline;text-underline-offset:2px;font-weight:600;}
.prose ul,.prose ol{margin:0 0 20px;padding-left:0;list-style:none;}
.prose ul li,.prose ol li{position:relative;padding-left:30px;margin:0 0 10px;}
.prose ul li::before{content:"";position:absolute;left:6px;top:12px;width:7px;height:7px;border-radius:50%;background:var(--anchor);}
.prose ol{counter-reset:li;}
.prose ol li{counter-increment:li;}
.prose ol li::before{content:counter(li);position:absolute;left:0;top:1px;font-family:var(--font-sans);font-weight:700;
  font-size:14px;color:var(--anchor);background:var(--accent-soft);width:22px;height:22px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;}
.prose table{width:100%;border-collapse:collapse;margin:8px 0 26px;font-size:16px;}
.prose thead th{background:var(--accent-soft);text-align:left;font-weight:700;color:#000;padding:13px 16px;font-size:14px;letter-spacing:.02em;}
.prose thead th:first-child{border-radius:10px 0 0 0;}
.prose thead th:last-child{border-radius:0 10px 0 0;}
.prose tbody td{padding:13px 16px;border-bottom:1px solid var(--line);color:var(--ink-2);}
.prose tbody tr:last-child td{border-bottom:none;}
.prose tbody td:first-child{font-weight:600;color:#000;}
.prose blockquote{margin:26px 0;padding:6px 0 6px 24px;border-left:4px solid var(--anchor);}
.prose blockquote p{font-family:var(--font-serif);font-style:italic;font-size:23px;line-height:1.4;color:#000;margin:0 0 8px;}
.prose blockquote cite{font-style:normal;font-size:14px;font-weight:600;color:var(--ink-3);}

/* Autor / Teilen / Sidebar */
.author{display:flex;gap:20px;align-items:flex-start;background:var(--bg);border-radius:18px;padding:26px 28px;margin:48px 0 0;}
.author .avatar{flex:none;width:72px;height:72px;border-radius:50%;overflow:hidden;}
.author .avatar img{width:100%;height:100%;object-fit:cover;}
.author .ainfo .arole{font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--anchor);margin:0 0 4px;}
.author .ainfo .aname{font-family:var(--font-serif);font-weight:600;font-size:22px;margin:0 0 8px;}
.author .ainfo p{font-size:15px;line-height:1.55;color:var(--ink-2);margin:0;max-width:54ch;}
.share{margin:40px 0 0;padding:24px 0 0;border-top:1px solid var(--line);}
.share .sh-top{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-bottom:14px;}
.share .sh-h{font-weight:700;font-size:17px;}
.share .sh-note{font-size:12.5px;color:var(--ink-3);display:inline-flex;align-items:center;gap:6px;}
.share .btns{display:flex;flex-wrap:wrap;gap:10px;}
.share .btns button{display:inline-flex;align-items:center;gap:8px;font:inherit;font-size:14px;font-weight:600;color:#000;
  background:#fff;border:1.5px solid rgba(0,0,0,.85);border-radius:999px;padding:9px 16px;cursor:pointer;transition:background .14s ease,color .14s ease;}
.share .btns button:hover{background:#000;color:#fff;}
.sidebar{align-self:start;position:sticky;top:90px;display:flex;flex-direction:column;gap:28px;}
.swidget .sw-h{font-size:12px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3);
  margin:0 0 16px;padding-bottom:12px;border-bottom:2px solid var(--anchor);}
.latest a{display:flex;gap:14px;align-items:flex-start;padding:12px 0;}
.latest a + a{border-top:1px solid var(--line);}
.latest .thumb{flex:none;width:74px;height:58px;border-radius:10px;object-fit:cover;}
.latest .lt{font-family:var(--font-serif);font-weight:600;font-size:16.5px;line-height:1.2;color:#000;margin:0 0 5px;}
.latest .lc{font-size:11.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--anchor);}
.side-cta{background:var(--accent-soft);border-radius:16px;padding:22px 22px;}
.side-cta .sc-h{font-family:var(--font-serif);font-weight:600;font-size:19px;margin:0 0 8px;}
.side-cta p{font-size:14px;color:var(--ink-2);line-height:1.5;margin:0 0 14px;}
.side-cta a{display:inline-flex;align-items:center;gap:7px;font-size:14px;font-weight:700;color:#fff;background:var(--anchor);border-radius:999px;padding:10px 18px;}

/* ============================================================
   FOOTER (System – identisch auf allen Seiten)
   ============================================================ */
footer.site{background:var(--anchor-900);color:#fff;}
footer.site .ftop{padding-block:56px 40px;display:grid;grid-template-columns:1.4fr 1fr 1fr 1fr;gap:32px;}
@media(max-width:860px){footer.site .ftop{grid-template-columns:1fr 1fr;gap:34px;}}
footer .flogo{font-weight:800;font-size:22px;letter-spacing:.12em;text-transform:uppercase;color:#fff;}
footer .ftag{font-size:15px;line-height:1.55;color:rgba(255,255,255,.72);margin:14px 0 0;max-width:34ch;}
footer .col h4{font-size:12px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:rgba(255,255,255,.55);margin:0 0 16px;}
footer .col a{display:block;font-size:16px;color:rgba(255,255,255,.86);padding:7px 0;font-weight:500;}
footer .col a:hover{color:#fff;}
footer .fbot{border-top:1px solid rgba(255,255,255,.14);padding-block:20px 30px;display:flex;justify-content:space-between;
  flex-wrap:wrap;gap:12px;font-size:13px;color:rgba(255,255,255,.6);}

/* Footer-Trust mit Lorbeer-Zweigen */
footer .trust{display:inline-flex;align-items:center;gap:4px;color:#fff;margin:18px 0 0;}
footer .trust .laurel-svg{height:46px;width:auto;}
footer .trust .tt b{display:block;font-size:16px;font-weight:700;line-height:1;}
footer .trust .tt span{display:block;font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:rgba(255,255,255,.7);margin-top:4px;}

/* ============================================================
   LORBEER-BADGE (Hero) — prozedural per JS gezeichnet (Base.astro)
   ============================================================ */
.laurel-badge{display:inline-flex;align-items:center;justify-content:center;gap:0;color:#000;margin:0 auto 22px;}
.laurel-badge .laurel-svg{height:52px;width:auto;display:block;}
.laurel-badge .lb-text{padding:0 4px;text-align:center;}
.laurel-badge .lb-text b{display:block;font-size:15px;font-weight:700;line-height:1;}
.laurel-badge .lb-text > span{display:block;font-size:11.5px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-2);margin-top:4px;}

/* ============================================================
   CONTENT-SEITEN (Index · Übersicht · Recht) — geteilte Bausteine
   Lesbare Textspalte + Token-Karten; ersetzt alte per-Seite-Hex-Styles.
   ============================================================ */
.pagebody{max-width:920px;margin:0 auto;padding:24px 32px 80px;}
.pagebody > .crumb:first-child{margin-top:0;}
.pagebody h1{font-family:var(--font-serif);font-weight:600;font-size:clamp(30px,4.4vw,46px);
  line-height:1.05;letter-spacing:-.015em;margin:0 0 14px;}
.pagebody h2{font-family:var(--font-serif);font-weight:600;font-size:26px;line-height:1.15;
  letter-spacing:-.01em;margin:40px 0 16px;}
.lead{font-size:19px;line-height:1.55;color:var(--ink-2);max-width:62ch;margin:0 0 26px;}
.empty{font-size:16px;color:var(--ink-3);background:var(--paper);border:1px dashed var(--line);
  border-radius:14px;padding:22px 24px;}

/* Karten-Raster — Branchen-/Städte-/Verzeichnis-Kacheln */
.cards{list-style:none;margin:6px 0 0;padding:0;display:grid;
  grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px;}
.card{display:flex;flex-direction:column;gap:5px;background:var(--paper);border:1px solid var(--line);
  border-radius:16px;padding:20px 22px;color:inherit;
  box-shadow:0 1px 2px rgba(20,12,12,.04),0 10px 30px -22px rgba(20,12,12,.2);
  transition:transform .15s ease,box-shadow .15s ease,border-color .15s ease;}
.card:hover{transform:translateY(-2px);border-color:var(--accent);
  box-shadow:0 1px 2px rgba(20,12,12,.05),0 16px 38px -24px rgba(20,12,12,.28);}
.card .c-kicker{font-size:12px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--anchor);}
.card .c-title{font-family:var(--font-serif);font-weight:600;font-size:21px;line-height:1.15;color:#000;}
.card .c-sub{font-size:14px;color:var(--ink-3);font-weight:500;}
.card .c-count{font-size:13px;color:var(--ink-3);font-weight:600;margin-top:2px;}

/* Such-Box (Index) — Token-Variante der Header-Suche */
.searchbox{display:flex;align-items:center;gap:10px;background:#f0eee9;border:none;border-radius:999px;
  padding:13px 20px;margin:2px 0 26px;max-width:520px;color:var(--ink-3);}
.searchbox svg{width:18px;height:18px;color:var(--ink-3);flex:none;}
.searchbox input{border:none;outline:none;background:transparent;font:inherit;font-size:16px;color:var(--ink);width:100%;}

/* Redaktioneller Hinweis-Kasten ("Über dieses Verzeichnis") */
.note{background:var(--accent-soft);border-radius:16px;padding:24px 26px;margin:34px 0 0;}
.note h2{font-family:var(--font-serif);font-weight:600;font-size:21px;margin:0 0 8px;}
.note p{font-size:15.5px;line-height:1.6;color:var(--ink-2);margin:0;}
.note a{color:var(--anchor);font-weight:600;text-decoration:underline;text-underline-offset:2px;}

/* „Mehr"-Textlink + FAQ-Liste (Index/Domain-Seiten) */
.morelink{display:inline-block;margin-top:14px;font-size:15px;font-weight:600;color:var(--anchor);}
.morelink:hover{text-decoration:underline;text-underline-offset:2px;}
.faq{display:flex;flex-direction:column;gap:18px;margin:6px 0 0;}
.faq dt{font-family:var(--font-serif);font-weight:600;font-size:18px;color:#000;margin:0 0 4px;}
.faq dd{font-size:15.5px;line-height:1.6;color:var(--ink-2);margin:0;}

/* Button-Paar (Akzent-gefüllt + Ghost) — Token-basiert, Stadt-Hue folgt --h */
.btnrow{display:flex;flex-wrap:wrap;gap:12px;margin:4px 0 2px;}
.btn{display:inline-flex;align-items:center;gap:7px;font-size:15px;font-weight:700;border-radius:999px;
  padding:11px 22px;background:var(--anchor);color:#fff;border:1.5px solid var(--anchor);
  transition:background .14s ease,border-color .14s ease,color .14s ease;}
.btn:hover{background:var(--anchor-900);border-color:var(--anchor-900);}
.btn.ghost{background:transparent;color:#000;border-color:rgba(0,0,0,.85);}
.btn.ghost:hover{background:#000;color:#fff;}

/* ============================================================
   STADT-STARTSEITE (Mini-Template) — Hero · Kategorien · Artikel.
   Alles unter .startseite gescoped, damit kurze Klassen (.cat/.nm/.art …)
   nicht mit den Listen-Klassen kollidieren. ACF füllt Hero/Promise/Foto,
   Listing-Daten füllen Kategorien/Artikel.
   ============================================================ */
.startseite .hero{padding:18px 0 6px;}
.startseite .hero-panel{position:relative;overflow:hidden;background:var(--accent);border-radius:26px;padding:64px 32px 60px;text-align:center;color:#000;}
/* Liquid-Band: 4 Hues pro Stadt via --lq1..4 (Astro setzt sie inline; Defaults = Münster). */
.startseite .hero-panel::before{content:"";position:absolute;inset:-25%;z-index:0;pointer-events:none;
  background:
    radial-gradient(36% 48% at 20% 28%, oklch(0.93 0.055 var(--lq1,350) / .95), transparent 70%),
    radial-gradient(42% 55% at 82% 22%, oklch(0.92 0.06  var(--lq2,40)  / .9),  transparent 70%),
    radial-gradient(48% 62% at 64% 92%, oklch(0.88 0.075 var(--lq3,12)  / .85), transparent 72%),
    radial-gradient(34% 44% at 8% 86%,  oklch(0.94 0.05  var(--lq4,65)  / .8),  transparent 70%);
  filter:blur(8px);animation:heroDrift 22s ease-in-out infinite alternate;}
.startseite .hero-panel > *{position:relative;z-index:1;}
@keyframes heroDrift{from{transform:translate3d(-2%,-1%,0) scale(1.03);}to{transform:translate3d(3%,2%,0) scale(1.10);}}
@media (prefers-reduced-motion: reduce){.startseite .hero-panel::before{animation:none;}}
.startseite .hero-badge{display:inline-block;font-size:11.5px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-2);margin:0 auto 18px;background:rgba(255,255,255,.55);border-radius:999px;padding:7px 16px;}
.startseite .hero-h{font-family:var(--font-serif);font-weight:600;font-size:clamp(38px,6vw,66px);line-height:1.0;letter-spacing:-.02em;margin:0 auto 18px;max-width:16ch;}
.startseite .hero-sub{font-size:clamp(18px,1.9vw,22px);line-height:1.5;font-weight:500;color:var(--ink-2);max-width:46ch;margin:0 auto 32px;}
.startseite .hero-pick{display:flex;gap:8px;max-width:520px;margin:0 auto;background:#fff;border-radius:999px;padding:7px 7px 7px 8px;align-items:center;box-shadow:0 10px 40px -22px rgba(60,10,20,.5);}
.startseite .select-wrap{position:relative;flex:1;display:flex;align-items:center;}
.startseite .select-wrap select{appearance:none;-webkit-appearance:none;border:none;outline:none;background:transparent;font:inherit;font-size:18px;font-weight:600;color:var(--ink);padding:14px 44px 14px 18px;width:100%;cursor:pointer;}
.startseite .select-wrap > svg,.startseite .select-wrap > i{position:absolute;right:16px;pointer-events:none;color:var(--ink-3);width:20px;height:20px;}
.startseite .hero-pick button{flex:none;background:var(--anchor);color:#fff;border:none;border-radius:999px;padding:14px 26px;font:inherit;font-size:16px;font-weight:700;cursor:pointer;white-space:nowrap;}
.startseite .hero-meta{margin-top:18px;font-size:13px;font-weight:600;color:var(--ink-2);letter-spacing:.02em;}

.startseite .block{padding:74px 0;}
.startseite .sec-top{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;margin-bottom:34px;}
.startseite .sec-top h2{font-family:var(--font-serif);font-weight:600;font-size:clamp(28px,3.4vw,40px);line-height:1.05;letter-spacing:-.01em;margin:0;}
.startseite .sec-top p{font-size:18px;color:var(--ink-2);margin:10px 0 0;max-width:48ch;line-height:1.5;}
.startseite .sec-top .more{font-size:16.5px;font-weight:700;color:#000;white-space:nowrap;display:inline-flex;align-items:center;gap:6px;border-bottom:2px solid #000;padding-bottom:2px;}

.startseite .cats{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;}
.startseite .cat{background:#f1efea;border:none;border-radius:20px;padding:30px 26px;display:flex;flex-direction:column;gap:18px;color:inherit;transition:transform .16s ease,background .16s ease;}
.startseite .cat:hover{transform:translateY(-3px);background:var(--accent);}
.startseite .cat .ic{width:54px;height:54px;border-radius:14px;background:#fff;display:flex;align-items:center;justify-content:center;color:#000;}
.startseite .cat .ic svg{width:27px;height:27px;stroke-width:1.6;}
.startseite .cat .nm{font-size:22px;font-weight:700;line-height:1.1;}
.startseite .cat .ct{font-size:15px;color:var(--ink-3);font-weight:500;margin-top:auto;}

.startseite .arts{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;}
.startseite .art{display:flex;flex-direction:column;color:inherit;}
.startseite .art .ph{aspect-ratio:16/10;border-radius:16px;overflow:hidden;background:repeating-linear-gradient(135deg,#ecebe6 0 11px,#f4f3ef 11px 22px);display:flex;align-items:center;justify-content:center;}
.startseite .art .ph img{width:100%;height:100%;object-fit:cover;}
.startseite .art .ph span{font-family:ui-monospace,Menlo,monospace;font-size:11.5px;color:#a6a39a;letter-spacing:.04em;}
.startseite .art .tag{font-size:13px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--anchor);margin:20px 0 10px;}
.startseite .art h3{font-family:var(--font-serif);font-weight:600;font-size:27px;line-height:1.12;letter-spacing:-.01em;margin:0;}

@media(max-width:860px){
  .startseite .cats{grid-template-columns:repeat(2,1fr);}
  .startseite .arts{grid-template-columns:1fr;}
  .startseite .sec-top{flex-direction:column;align-items:flex-start;gap:10px;}
}

/* ============================================================
   RESPONSIVE — Mobile (≤680px): kompaktere Maße + Bottom-Tabbar
   (aus den …-Mobile-Designs; Tabbar im Web = position:fixed)
   ============================================================ */
.tabbar{display:none;}          /* Desktop: keine Tabbar */

@media (max-width: 680px){
  /* Seitlichen Rand ändern, ohne das vertikale Padding von Header/Footer
     durch ein Padding-Shorthand zurückzusetzen. */
  .wrap{padding-inline:20px;}


  /* Header: Desktop-Nav weicht der Bottom-Tabbar */
  header.site .nav{display:none;}
  header.site .bar{padding-block:14px;}

  footer.site .ftop{padding-block:40px 28px;gap:30px 24px;}
  footer.site .fbot{flex-direction:column;align-items:center;text-align:center;gap:8px;padding-block:18px 22px;}

  /* Pagehead kompakter */
  .pagehead .inner{padding:18px 20px 34px;}
  .pagehead .crumb{margin:0 0 18px;}
  .pagehead h1.title{font-size:33px;}
  .ph-icon{width:54px;height:54px;margin-bottom:14px;}
  .ph-icon svg{width:27px;height:27px;}
  .ph-sub{font-size:16px;}

  /* Liste + Karten kompakter */
  .listwrap{padding:22px 16px 0;}
  .entry{gap:15px;padding:18px;}
  .rank{width:46px;height:46px;border-radius:13px;font-size:21px;}
  .nm{font-size:20px;}
  .desc{font-size:15.5px;}

  /* Promise kompakter */
  .promise{padding:48px 18px;margin-top:34px;}
  .promise .ptitle{font-size:27px;}
  .promise .legend{flex-direction:column;gap:10px;}

  /* Platz, damit die fixe Tabbar nichts verdeckt */
  body{padding-bottom:calc(74px + env(safe-area-inset-bottom));}

  /* BOTTOM-TABBAR — geteilte Mobile-Navigation */
  .tabbar{position:fixed;left:0;right:0;bottom:0;z-index:40;display:flex;
    background:rgba(255,255,255,.94);backdrop-filter:saturate(160%) blur(12px);
    border-top:1px solid var(--line);padding:8px 6px calc(8px + env(safe-area-inset-bottom));}
  .tabbar a{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;
    padding:7px 0;color:var(--ink-3);font-size:10.5px;font-weight:600;}
  .tabbar svg{width:23px;height:23px;stroke-width:1.8;}
  .tabbar a.active{color:var(--anchor);}

  /* Content-Seiten kompakter */
  .pagebody{padding:18px 20px 56px;}
  .pagebody h1{font-size:30px;}
  .pagebody h2{font-size:22px;margin:30px 0 12px;}
  .lead{font-size:16.5px;}
  .cards{grid-template-columns:1fr;gap:12px;}
  .note{padding:20px;}
  .searchbox{padding:11px 16px;}

  /* Stadt-Startseite kompakter */
  .startseite .block{padding:48px 0;}
  .startseite .hero-panel{padding:40px 20px 36px;border-radius:20px;}
  .startseite .hero-pick{flex-direction:column;border-radius:20px;padding:10px;}
  .startseite .hero-pick button{width:100%;}
  .startseite .cats{grid-template-columns:1fr;}
}
