/*
 * Cheshire - Base Stylesheet
 * Layout and component styles for the forum frontend.
 * No inline styles in PHP files - all CSS lives here.
 * @see templates/themes/default/
 */

/* Theme-Baukasten Etappe 2 (Peter-Freigabe 21.08.2026): CSS-Variablen fuer
   Primaer-/Akzentfarbe + Inhaltsbreite, Default = bisheriger Wert dieses
   Themes (keine optische Aenderung ohne aktive AdminCP-Einstellung). Wird
   bei Bedarf per :root-Override-Block ueberschrieben, siehe
   Cheshire\Services\Theme::cssVarsBlock(). */
:root{--cheshire-primary:#2E4057;--cheshire-accent:#3D6B8C;--cheshire-content-width:960px}

/* ── Reset & base ── */
.cheshire-wrap *{box-sizing:border-box}
.cheshire-wrap{font-family:sans-serif;line-height:1.5;color:var(--cheshire-text,#333);background:var(--cheshire-bg,transparent);max-width:var(--cheshire-content-width,960px);margin:0 auto;background-image:var(--cheshire-bg-image,none);background-size:var(--cheshire-bg-size,auto);background-repeat:var(--cheshire-bg-repeat,no-repeat);background-attachment:var(--cheshire-bg-attachment,scroll);background-position:center top}

/* #141 Hybrid-Betrieb: eigene Seiten-Huelle (_layout.htt) hat kein WBCE-Theme
   als Basis, daher minimaler eigener Reset — nur unter #cheshire-standalone
   (Body-ID nur im Hybrid-Modus vorhanden), Integriert-Modus bleibt unberuehrt. */
#cheshire-standalone{margin:0;font-family:sans-serif;line-height:1.5;color:var(--cheshire-text,#333);background:var(--cheshire-surface-alt,#f7f8fa)}
#cheshire-standalone *{box-sizing:border-box}
#cheshire-standalone-main{max-width:var(--cheshire-content-width,960px);margin:0 auto;padding:1rem}

/* ── Breadcrumb ── */
.cheshire-breadcrumb{font-size:.85rem;color:var(--cheshire-text-muted,#777);margin-bottom:1rem}
/* Zusammenstellung-Restpunkt TP4 (Peter-Feedback #408): eigene Farbe per
   --cheshire-breadcrumb statt reiner Ableitung, siehe Theme::cssVarsBlock() */
/* Nachbesserung 13.09.2026 (Peter-Wunsch "Trennung zwischen Farben egal
   Frontend/Backend"): kein Fallback mehr auf --cheshire-accent -- Aendern
   der Akzentfarbe hat sonst unerwartet auch die (eigentlich unabhaengige)
   Breadcrumb-Farbe mitgeaendert. Eigener fester Theme-Default am Ende der
   Kette (--cheshire-brand-text bleibt als toter Zwischenschritt stehen,
   wird nirgends selbst gesetzt, siehe cssVarsBlock()). */
.cheshire-breadcrumb a{color:var(--cheshire-breadcrumb,#3D6B8C);text-decoration:none}
.cheshire-breadcrumb a:hover{text-decoration:underline}
/* Peter-Wunsch: gleiche Navi auch am Seitenende, damit man nach dem
   Scrollen nicht orientierungslos dasteht (Forum-/Thread-Ansicht). */
.cheshire-breadcrumb-bottom{margin-top:1.5rem;margin-bottom:0;padding-top:.8rem;border-top:1px solid var(--cheshire-border-strong,#e2e6ea)}
.cheshire-back-to-top{float:right}

/* ── Editor ── */
/* Bugfix 02.10.2026 (Peter-Meldung: BBCode-Toolbar bricht bei vielen Addon-
   Buttons -- z.B. Smilies/ITG/MsgBox zusaetzlich zu den 8 Core-Buttons --
   nicht um und laeuft stattdessen aus dem Container, waehrend die TTE-
   Toolbar (.ev-toolbar, siehe TipTapEditor/assets/editor.css) das per
   flex-wrap:wrap bereits konnte): flex-wrap ergaenzt, analog TTE. */
.cheshire-editor-toolbar{display:flex;flex-wrap:wrap;gap:.25rem;margin-bottom:.25rem}
.cheshire-editor-toolbar button{border:1px solid var(--cheshire-border-strong,#ccc);background:var(--cheshire-surface-alt,#f5f5f5);border-radius:3px;padding:.25rem .5rem;cursor:pointer}
.cheshire-editor-toolbar button:hover{background:var(--cheshire-surface-alt,#e8e8e8)}
.CodeMirror{border:1px solid var(--cheshire-border-strong,#ccc);border-radius:3px;background:var(--cheshire-surface,#fff);color:var(--cheshire-text,#000)}
textarea.cheshire-editor{border:1px solid var(--cheshire-border-strong,#ccc);border-radius:3px;padding:.5rem;width:100%;background:var(--cheshire-surface,#fff);color:var(--cheshire-text,#222)}

/* Backlog #873 (Peter-Feedback 25.09.2026, "Dark-Mode-Fix Editor/
   Formularfelder, alle Themes"): bisher hatten normale Formularfelder
   (Text/Zahl/Datum/Textarea/Select) ausserhalb der oben genannten
   Editor-Sonderfaelle GAR KEINE eigene Farbregel -- sie liefen komplett
   auf Browser-Standard (immer weisser Hintergrund/schwarzer Text), auch
   im aktiven Dark Mode. Generische Basis-Regel hier (token-basiert, wie
   ueberall sonst im Stylesheet) -- Light-Mode-Fallback (#fff/#222/#ccc)
   ist bewusst identisch zum bisherigen Browser-Standard, also pixelgleich
   ohne aktiven Dark Mode; sobald .cheshire-dark aktiv ist, greifen die
   ueberschriebenen --cheshire-*-Variablen automatisch (kein eigener
   Dark-Block noetig). Bewusst KEINE checkbox/radio/range/color/file
   (haben eigene, oft bereits kleinere/andere Optik, siehe #210). */
.cheshire-wrap input[type=text],.cheshire-wrap input[type=search],.cheshire-wrap input[type=email],
.cheshire-wrap input[type=url],.cheshire-wrap input[type=password],.cheshire-wrap input[type=number],
.cheshire-wrap input[type=date],.cheshire-wrap input[type=datetime-local],.cheshire-wrap input[type=time],
.cheshire-wrap input[type=tel],.cheshire-wrap input:not([type]),.cheshire-wrap textarea,.cheshire-wrap select,
#cheshire-standalone input[type=text],#cheshire-standalone input[type=search],#cheshire-standalone input[type=email],
#cheshire-standalone input[type=url],#cheshire-standalone input[type=password],#cheshire-standalone input[type=number],
#cheshire-standalone input[type=date],#cheshire-standalone input[type=datetime-local],#cheshire-standalone input[type=time],
#cheshire-standalone input[type=tel],#cheshire-standalone input:not([type]),#cheshire-standalone textarea,#cheshire-standalone select{
  background:var(--cheshire-surface,#fff);color:var(--cheshire-text,#222);
  border:1px solid var(--cheshire-border-strong,#ccc);border-radius:4px;padding:.4rem .5rem
}

/* CodeMirror-Innenleben (Zeilen/Gutter/Cursor/Selektion) folgt im Dark
   Mode denselben Tokens -- die vendored codemirror.css (assets/libs/)
   bleibt dabei unangetastet (fixierte Drittanbieter-Datei), diese
   Regeln ueberschreiben nur gezielt per Selektor-Spezifitaet. */
.cheshire-wrap.cheshire-dark .CodeMirror,#cheshire-standalone.cheshire-dark .CodeMirror{background:var(--cheshire-surface);color:var(--cheshire-text)}
.cheshire-wrap.cheshire-dark .CodeMirror-gutters,#cheshire-standalone.cheshire-dark .CodeMirror-gutters{background:var(--cheshire-surface-alt);border-color:var(--cheshire-border)}
.cheshire-wrap.cheshire-dark .CodeMirror-linenumber,#cheshire-standalone.cheshire-dark .CodeMirror-linenumber{color:var(--cheshire-text-muted)}
.cheshire-wrap.cheshire-dark .CodeMirror-cursor,#cheshire-standalone.cheshire-dark .CodeMirror-cursor{border-left-color:var(--cheshire-text)}
.cheshire-wrap.cheshire-dark .CodeMirror-selected,#cheshire-standalone.cheshire-dark .CodeMirror-selected{background:var(--cheshire-surface-alt)}

.cheshire-category{margin-bottom:1.5rem}
.cheshire-category-title{font-size:1.1rem;font-weight:700;padding:.5rem 0;border-bottom:2px solid var(--cheshire-brand-text,var(--cheshire-accent,#3D6B8C));margin-bottom:.5rem;display:flex;align-items:center;gap:.4rem}
.cheshire-category-toggle{background:none;border:none;color:var(--cheshire-brand-text,var(--cheshire-accent,#3D6B8C));cursor:pointer;font-size:.85rem;padding:0 .2rem}
/* Weg 1 (Design & Layout, 31.08.2026): siehe ContentDisplay.php */
.cheshire-category-description{font-size:.82rem;color:var(--cheshire-text-muted,#777);margin:0 0 .5rem}
.cheshire-badge-thread-count{background:var(--cheshire-surface-alt,#f0f4f8);color:var(--cheshire-text-muted,#777);font-size:.72rem;padding:.1rem .4rem;border-radius:3px;margin-left:auto;font-weight:400}

/* ── Forum row ── */
/* Peter-Wunsch (18.09.2026): erste Spalte ist jetzt der Auf/Zu-Pfeil
   (.cheshire-forum-expand), analog zur Kategorie-Ebene -- siehe Markup-
   Reihenfolge in ForumController.php. */
.cheshire-forum-row{display:grid;grid-template-columns:auto 2rem 1fr auto auto;gap:.5rem;align-items:center;padding:.6rem 0;border-bottom:1px solid var(--cheshire-border,#eee)}
/* Weg 1 (Design & Layout, 31.08.2026): "Kompakte Darstellung", siehe ContentDisplay.php */
.cheshire-forum-row-compact{padding:.3rem 0;font-size:.9em}
.cheshire-forum-row-compact .cheshire-forum-icon{font-size:.8em}
.cheshire-forum-row-compact .cheshire-forum-description{display:none}
.cheshire-forum-name{font-weight:600;color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057));text-decoration:none}
.cheshire-forum-name:hover{text-decoration:underline}
.cheshire-forum-description{font-size:.82rem;color:var(--cheshire-text-muted,#777);margin:.1rem 0 0}
.cheshire-forum-stats{display:flex;gap:.35rem;justify-content:flex-end;align-items:center}
/* Design-Runde 2, Thema 1 (Peter-Mockup-Feedback 01.09.2026): Themen-/
   Beitraege-Zahlen als Badges statt Fliesstext, gleiches Muster wie
   .cheshire-badge-thread-count auf der Kategorie-Ebene. */
.cheshire-forum-badge{font-size:.72rem;padding:.15rem .55rem;border-radius:10px;white-space:nowrap;font-weight:400}
.cheshire-forum-badge-threads{background:var(--cheshire-surface-alt,#f0f4f8);color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057))}
.cheshire-forum-badge-posts{background:var(--cheshire-surface-alt,#f0f4f8);color:var(--cheshire-text-muted,#777)}
.cheshire-forum-lastpost{font-size:.78rem;color:var(--cheshire-text-faint,#999);text-align:right;white-space:nowrap;min-width:11rem}
.cheshire-forum-expand{text-align:left}
.cheshire-forum-toggle{background:var(--cheshire-surface-alt,#f0f4f8);border:1px solid var(--cheshire-border-strong,#c5d5e8);color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057));cursor:pointer;font-size:.75rem;padding:.15rem .5rem;border-radius:4px}
.cheshire-forum-toggle:hover{background:var(--cheshire-surface-alt,#e2ecf5)}
.cheshire-forum-mini-threads{padding:.3rem 0 .6rem 2.5rem;border-bottom:1px solid var(--cheshire-border,#eee)}
.cheshire-mini-thread-row{display:flex;flex-wrap:wrap;align-items:center;gap:.3rem;font-size:.85rem;padding:.25rem 0}
.cheshire-mini-thread-row a{color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057));text-decoration:none;font-weight:600}
.cheshire-mini-thread-row a:hover{text-decoration:underline}
.cheshire-mini-thread-stats{display:flex;gap:.3rem;flex-wrap:nowrap}
.cheshire-mini-thread-lastpost{margin-left:auto;font-size:.75rem;color:var(--cheshire-text-faint,#999);white-space:nowrap}
.cheshire-mini-thread-more{display:inline-block;margin-top:.3rem;font-size:.8rem;color:var(--cheshire-brand-text,var(--cheshire-accent,#3D6B8C));text-decoration:none}
.cheshire-mini-thread-more:hover{text-decoration:underline}

/* ── Thread list ── */
.cheshire-thread-row{display:grid;grid-template-columns:1fr auto auto auto;gap:.5rem;align-items:center;padding:.6rem 0;border-bottom:1px solid var(--cheshire-border,#eee)}
.cheshire-thread-title{font-weight:600;color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057));text-decoration:none}
.cheshire-thread-title:hover{text-decoration:underline}
.cheshire-badge-solved{background:#27AE60;color:#fff;font-size:.72rem;padding:.1rem .4rem;border-radius:3px;margin-left:.4rem}
.cheshire-badge-unread{background:#E67E22;color:#fff;font-size:.72rem;padding:.1rem .4rem;border-radius:3px;margin-left:.4rem}
/* Design-Runde 4 TP5 (Peter-Wunsch 19.09.2026): Neu/Gelöst-Zaehler im
   Kategorie-Kopf, per JS-Klasse (.cheshire-category-collapsed) nur
   sichtbar, solange die Kategorie eingeklappt ist. */
.cheshire-cat-status-badges{display:none;margin-left:.4rem}
.cheshire-category-collapsed .cheshire-cat-status-badges{display:inline-flex;gap:.3rem}
.cheshire-cat-status-badges .cheshire-badge-solved{margin-left:0}
/* Peter-Wunsch 20.09.2026: "+Neues Thema"-Icon-Link direkt in der Forum-
   Zeile, neben den neu/gelöst-Badges (siehe ForumController.php). Rund,
   kompakt, Primaerfarbe wie .cheshire-btn-new, aber als Icon statt Text. */
.cheshire-forum-new-icon{display:inline-flex;align-items:center;justify-content:center;width:1.3rem;height:1.3rem;margin-left:.4rem;background:var(--cheshire-primary,#2E4057);color:#fff;border-radius:50%;font-size:.7rem;text-decoration:none;line-height:1;vertical-align:middle}
.cheshire-forum-new-icon:hover{background:var(--cheshire-accent,#3D6B8C);color:#fff}
.cheshire-badge-closed{background:#7f8c8d;color:#fff;font-size:.72rem;padding:.1rem .4rem;border-radius:3px;margin-left:.4rem}
/* Bugfix 26.08.2026 (forum_tag.htt neu): Forum-Link je Zeile, da eine Tag-
   Ansicht Themen aus mehreren Foren mischt (anders als forum_show.htt). */
.cheshire-thread-forum{display:block;font-size:.75rem;color:var(--cheshire-text-faint,#999);margin-top:.1rem}
.cheshire-thread-forum-link{color:var(--cheshire-brand-text,var(--cheshire-accent,#3D6B8C));text-decoration:none}
.cheshire-thread-forum-link:hover{text-decoration:underline}
.cheshire-tag-empty{color:var(--cheshire-text-faint,#999);padding:.6rem 0}
/* Backlog #491 (Peter-Freigabe 11.09.2026): Posts/Views in der Themen-Liste
   waren reiner Fließtext -- jetzt Badges im selben Look wie die Foren-Stats
   (.cheshire-forum-badge, siehe oben), nur schmaler fuer die kompaktere
   Themen-Zeile. */
.cheshire-thread-stats{display:flex;gap:.4rem;flex-wrap:nowrap}
.cheshire-thread-badge{font-size:.72rem;padding:.15rem .5rem;border-radius:10px;white-space:nowrap;font-weight:400;background:var(--cheshire-surface-alt,#f0f4f8);color:var(--cheshire-text-muted,#777)}

/* ── Verschieben/Massenbearbeitung (1.30) ── */
.cheshire-move-thread-form{display:inline-block;margin-left:.6rem;font-size:.85rem}
.cheshire-move-thread-form select{padding:.2rem;border:1px solid var(--cheshire-border-strong,#ccc);border-radius:4px}
.cheshire-bulk-move-bar{position:sticky;bottom:0;background:var(--cheshire-warning-bg,#fff3cd);border:1px solid var(--cheshire-warning-border,#ffc107);border-radius:6px;padding:.6rem .9rem;margin:.8rem 0;font-size:.85rem;display:flex;flex-wrap:wrap;gap:.6rem;align-items:center}
.cheshire-bulk-move-bar input[type="number"],.cheshire-bulk-move-bar input[type="text"]{padding:.25rem;border:1px solid var(--cheshire-border-strong,#ccc);border-radius:4px}
/* Chip-Design (Peter-Wunsch 20.09.2026, Mockup-Screenshot "TAGS"-Seite):
   heller Chip-Hintergrund + kraeftige, farbige Kontur statt Volltonfuellung
   -- die Farbe kommt als CSS-Custom-Property --tag-color vom jeweiligen
   Tag/Themen-Typ (siehe Tag.php/ThreadType.php, style="--tag-color:#hex"),
   Fallback auf die normale Akzentfarbe, wenn keine gesetzt ist. */
.cheshire-tag{display:inline-flex;align-items:center;gap:.3rem;background:var(--cheshire-surface,#fff);border:2px solid var(--tag-color,var(--cheshire-accent,#3D6B8C));color:var(--tag-color,var(--cheshire-accent,#3D6B8C));font-size:.72rem;font-weight:600;padding:.15rem .55rem;border-radius:999px;margin:.1rem;text-decoration:none}
.cheshire-icon-sticky,.cheshire-icon-type{color:var(--cheshire-brand-text,var(--cheshire-accent,#3D6B8C));margin-right:.15rem}
/* Gruppe 5 (18.09.2026: "Sticky-Umrandung"): angepinnte Themen bekommen
   zusaetzlich zum Reisszwecken-Icon eine eigene Zeilen-Hervorhebung --
   linker Akzentrahmen + leicht abgesetzter Hintergrund, gleiche Tokens
   wie das Sticky-Icon selbst (dark-mode-sicher via var(--cheshire-x,...)). */
.cheshire-thread-row-sticky,.cheshire-mini-thread-row-sticky{border-left:3px solid var(--cheshire-accent,#3D6B8C);background:var(--cheshire-surface-alt,#f7f8fa);padding-left:.5rem;border-radius:4px}
.cheshire-thread-lastpost,.cheshire-lastpost,.cheshire-lastpost-empty{font-size:.78rem;color:var(--cheshire-text-faint,#999);text-align:right;white-space:nowrap}
.cheshire-lastpost a{color:var(--cheshire-brand-text,var(--cheshire-accent,#3D6B8C));text-decoration:none}
.cheshire-lastpost a:hover{text-decoration:underline}
.cheshire-lastpost-jump{display:inline-block;margin-left:.3rem;text-decoration:none;opacity:.7;font-size:.95em}
.cheshire-lastpost-jump:hover{opacity:1;text-decoration:none}
@media (max-width:700px){
    .cheshire-forum-row{grid-template-columns:auto 2rem 1fr auto}
    .cheshire-forum-lastpost{display:none}
    .cheshire-forum-mini-threads{padding-left:.5rem}
    .cheshire-mini-thread-lastpost{display:none}
    .cheshire-thread-row{grid-template-columns:1fr auto auto}
    .cheshire-thread-lastpost{display:none}
}

/* ── Pagination-Profil-Override (Peter-Reminder Juli 2026) ── */
.cheshire-pagination-pref{display:flex;flex-wrap:wrap;gap:1rem;align-items:flex-end;margin:.8rem 0 1.2rem;padding:.7rem 1rem;background:var(--cheshire-surface-alt,#f4f6f8);border-radius:6px}
.cheshire-pagination-pref select{padding:.3rem;border:1px solid var(--cheshire-border-strong,#ccc);border-radius:4px}

/* ── Consent / legal checkboxes ──
   !important on layout props: WBCE Flat Theme's global form CSS applies
   its own label/input[checkbox] rules (block labels, full-width inputs)
   that otherwise break this layout. Used for registration consent and
   upload copyright confirmation. */
.cheshire-consent-box{margin:1rem 0;padding:.8rem 1rem;background:var(--cheshire-surface-alt,#f8f9fa);border:1px solid var(--cheshire-border-strong,#dee2e6);border-radius:6px}
.cheshire-consent-item{display:flex!important;align-items:flex-start;gap:.5rem;margin-bottom:.5rem;cursor:pointer;font-weight:400;line-height:1.4}
.cheshire-consent-item:last-child{margin-bottom:0}
.cheshire-consent-item input[type="checkbox"]{margin-top:.2rem;flex-shrink:0;width:auto!important;min-width:16px;height:16px}
.cheshire-consent-item span{flex:1 1 auto}
@media (max-width:480px){
    .cheshire-consent-item{gap:.4rem;font-size:.88rem}
}

/* ── Post ── */
.cheshire-post{border:1px solid var(--cheshire-border,#eee);border-radius:6px;margin-bottom:1rem;overflow:hidden}
.cheshire-post-author{background:var(--cheshire-surface-alt,#f5f5f5);padding:.5rem .8rem;border-bottom:1px solid var(--cheshire-border,#eee);display:flex;align-items:flex-start;gap:.5rem}
/* Design-Runde 4 TP2 (Peter-Wunsch 19.09.2026): eigene Avatar-Spalte links
   im Post-Kopf, als erstes Flex-Item vor Checkbox/Autor-Block -- balanciert
   die Kopfzeile optisch gegen die rechts sitzende Mod-Aktionsleiste. Auf
   schmalen Screens (Mediascreen-Backlog #409) verkleinert, nicht versteckt,
   damit die Zeile trotzdem als Einheit lesbar bleibt. */
.cheshire-post-avatar{flex:0 0 auto;display:block;line-height:0}
.cheshire-post-avatar img{width:40px;height:40px;border-radius:50%;object-fit:cover;display:block;border:1px solid var(--cheshire-border,#ddd)}
@media (max-width:480px){.cheshire-post-avatar img{width:28px;height:28px}}
/* Design-Runde 2, Thema 2: Name+Rolle vs. Zeit/Beitraege-Link getrennte
   Zeilen statt einer flachen Reihe (Peter-Mockup-Feedback 01.09.2026). */
.cheshire-post-author-block{display:flex;flex-direction:column;gap:.15rem}
.cheshire-post-author-name{font-size:.88rem;font-weight:600;display:flex;align-items:center;gap:.4rem;flex-wrap:wrap}
.cheshire-post-author-meta{font-size:.76rem;color:var(--cheshire-text-faint,#999);display:flex;align-items:center;gap:.35rem}
.cheshire-post-author-meta .cheshire-btn-userposts{color:inherit;text-decoration:none}
.cheshire-post-author-meta .cheshire-btn-userposts:hover{text-decoration:underline}
.cheshire-meta-dot{opacity:.6}
/* Design-Runde 2, Thema 5 (Peter-Mockup-Feedback 01.09.2026): verwaltende
   Aktionen (Bearbeiten/Loeschen/Loesung/Bearbeitet-Hinweis/Addon-Tools)
   rechtsbuendig in derselben Zeile wie Autor/Datum -- "oben rechts in die
   Zeile des Posts". Elementare Aktionen (Like/Zitieren/Antworten/Melden)
   bleiben in .cheshire-post-actions unten. */
.cheshire-post-actions-top{margin-left:auto;display:flex;align-items:center;flex-wrap:wrap;gap:.3rem;flex-shrink:0}
/* Design-Runde 4 TP3 (Peter-Wunsch 19.09.2026): expliziter Grundton fuer
   den Beitragstext, damit die Abstufung Kopf (surface-alt, grau) -> Inhalt
   (surface, weiss) -> verschachtelte Bloecke Anhaenge/Signatur/Support
   (surface-alt, grau, siehe cheshire-content-block) auf einen Blick lesbar
   ist -- vorher war der Inhalt nur implizit weiss (kein eigener background),
   dadurch verschwamm die Grenze zum Kopf optisch staerker als noetig. */
.cheshire-post-body{padding:.8rem;background:var(--cheshire-surface,#fff)}
/* TP3 (22.09.2026, siehe modern.css fuer Begruendung): Sicherheitsnetz fuer
   direkt im Beitragstext eingefuegte Bilder (TipTap/Markdown/ITG). */
.cheshire-post-body img{max-width:100%;height:auto}
/* Peter-Feedback 11.09.2026 (Quote-Redesign): fehlendes Layout fuer echte
   Zitate im Beitragstext -- BBCode-Regex UND TTE (cheshire.js
   buildQuoteBlockquoteHtml()) rendern beide <blockquote data-author>.
   ::before zeigt den Autor als Label, kein extra JS/Markup noetig. */
.cheshire-post-body blockquote{border-left:3px solid var(--cheshire-accent,#3D6B8C);margin:.6rem 0;padding:.5rem .9rem;background:var(--cheshire-surface-alt,#f0f4f8);color:var(--cheshire-text-muted,#555);border-radius:0 4px 4px 0}
.cheshire-post-body blockquote[data-author]::before{content:"Zitat von " attr(data-author) ":";display:block;font-weight:600;font-size:.82rem;color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057));margin-bottom:.3rem}
/* Kompaktreferenz [quoteref=ID] ab dem 2. Zitat (Parser::renderQuoteRefTag()):
   Autor+Jump-Link sichtbar, voller Inhalt als eigenes CSS-Hover-Popup statt
   title-Attribut (Peter-Wunsch, mehrzeilig/gestaltbar). Peter-Feedback
   12.09.2026: Badge muss wie das volle Zitat "gerahmt" sein -- daher
   block-level mit Rahmenbalken statt Inline-Pill. [replyref=ID:N] (Reply-
   Verlinkung, Parser::renderReplyRefTag()) nutzt dieselben Klassen, nur mit
   eigenem Rahmenfarbton via .cheshire-replyref-badge. */
.cheshire-quoteref-badge{position:relative;display:block;margin:.6rem 0;padding:.5rem .9rem;background:var(--cheshire-surface-alt,#f0f4f8);border-left:3px solid var(--cheshire-accent,#3D6B8C);border-radius:0 4px 4px 0}
.cheshire-replyref-badge{border-left-color:var(--cheshire-primary,#2E4057)}
.cheshire-quoteref-jump{display:inline-flex;align-items:center;gap:.3rem;font-size:.82rem;font-weight:600;color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057));text-decoration:none}
.cheshire-quoteref-jump:hover{text-decoration:underline}
.cheshire-quoteref-author-deleted{font-style:italic;color:var(--cheshire-text-muted,#777)}
.cheshire-quoteref-unavailable{display:block;margin:.6rem 0;padding:.5rem .9rem;font-size:.82rem;font-style:italic;color:var(--cheshire-text-muted,#888);background:var(--cheshire-surface-alt,#f0f0f0);border-left:3px dashed var(--cheshire-border-strong,#c5d5e8);border-radius:0 4px 4px 0}
.cheshire-quoteref-popup{visibility:hidden;opacity:0;position:absolute;left:0;bottom:calc(100% + .4rem);z-index:20;width:280px;max-width:80vw;background:var(--cheshire-surface,#fff);border:1px solid var(--cheshire-border-strong,#c5d5e8);border-radius:6px;box-shadow:var(--cheshire-shadow-sm,0 4px 16px rgba(0,0,0,.15));padding:.6rem .8rem;font-size:.82rem;line-height:1.4;color:var(--cheshire-text,#333);transition:opacity .12s ease}
.cheshire-quoteref-badge:hover .cheshire-quoteref-popup,.cheshire-quoteref-badge:focus-within .cheshire-quoteref-popup{visibility:visible;opacity:1}
.cheshire-post-actions{padding:.4rem .8rem;border-top:1px solid var(--cheshire-border,#eee);font-size:.82rem}
/* TP2 (22.09.2026, siehe modern.css/ThreadController.php): Move-Checkbox
   als kleiner Chip statt nacktem Inline-Element. */
.cheshire-move-chip{display:inline-flex;align-items:center;justify-content:center;width:1.6rem;height:1.6rem;margin-right:.5rem;border:1px solid var(--cheshire-border-strong,#c5d5e8);border-radius:6px;background:var(--cheshire-surface,#fff);vertical-align:middle;cursor:pointer}
.cheshire-move-chip:hover{background:var(--cheshire-surface-alt,#f0f4f8)}
.cheshire-move-checkbox{margin:0;cursor:pointer}
.cheshire-btn-like,.cheshire-btn-quote,.cheshire-btn-reply,.cheshire-btn-copy{background:var(--cheshire-surface-alt,#f0f4f8);border:1px solid var(--cheshire-border-strong,#c5d5e8);color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057));padding:.2rem .6rem;border-radius:4px;cursor:pointer;font-size:.82rem;margin-right:.3rem}
.cheshire-btn-like:hover,.cheshire-btn-quote:hover,.cheshire-btn-reply:hover,.cheshire-btn-copy:hover{background:var(--cheshire-surface-alt,#e0eaf4)}
/* Peter-Feedback 20.09.2026: reine Anzeige (kein Button) fuer die Like-Anzahl
   am eigenen Beitrag -- ohne Hover/Cursor-Pointer, damit klar ist, dass hier
   nichts klickbar ist. */
.cheshire-like-count-static{display:inline-block;color:var(--cheshire-text-muted,#667);padding:.2rem .6rem;font-size:.82rem;margin-right:.3rem}
/* Gruppe 7 (18.09.2026, "Post-Export/Speichern-Symbol"): Export-Button + Dropdown-Menue (TXT/Markdown/PDF) */
.cheshire-export-wrap{position:relative;display:inline-block}
.cheshire-btn-export{background:var(--cheshire-surface-alt,#f0f4f8);border:1px solid var(--cheshire-border-strong,#c5d5e8);color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057));padding:.2rem .6rem;border-radius:4px;cursor:pointer;font-size:.82rem;margin-right:.3rem}
.cheshire-btn-export:hover{background:var(--cheshire-surface-alt,#e0eaf4)}
/* oeffnet nach OBEN (bottom statt top) -- .cheshire-post hat overflow:hidden
   (abgerundete Ecken), die Aktionsleiste sitzt direkt am unteren Rand, ein
   nach unten oeffnendes Menu wuerde dort abgeschnitten (gleiche Logik wie
   .cheshire-quoteref-popup weiter oben in dieser Datei) */
.cheshire-export-menu{display:none;position:absolute;left:0;bottom:calc(100% + .3rem);z-index:20;min-width:160px;background:var(--cheshire-surface,#fff);border:1px solid var(--cheshire-border-strong,#c5d5e8);border-radius:6px;box-shadow:var(--cheshire-shadow-sm,0 4px 16px rgba(0,0,0,.15));padding:.3rem 0}
.cheshire-export-menu.cheshire-export-open{display:block}
.cheshire-export-menu a{display:block;padding:.35rem .8rem;font-size:.82rem;color:var(--cheshire-text,#333);text-decoration:none}
.cheshire-export-menu a:hover{background:var(--cheshire-surface-alt,#e0eaf4)}
/* Backlog #492: kurzes Text-Feedback am Quote-Button (cheshire.js flashQuoteFeedback) */
.cheshire-quote-flash{background:var(--cheshire-success-bg,#dff5e1);border-color:var(--cheshire-success,#3a9d4f);color:var(--cheshire-success,#2f7d40)}

/* ── Quick reply ── */
.cheshire-quick-reply{margin-top:1.5rem}
.cheshire-quick-reply textarea{width:100%;padding:.6rem;border:1px solid var(--cheshire-border-strong,#ccc);border-radius:6px;min-height:80px;font-family:inherit}
.cheshire-quick-reply button{margin-top:.4rem;padding:.5rem 1rem;background:var(--cheshire-primary,#2E4057);color:#fff;border:none;border-radius:5px;cursor:pointer}

/* ── Guest notice ── */
.cheshire-guest-notice{background:var(--cheshire-info-bg,#EBF5FB);border:1px solid var(--cheshire-info-border,#AED6F1);border-radius:5px;padding:.7rem;margin-top:.5rem;font-size:.88rem}
.cheshire-guest-notice a{color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057));font-weight:600}

/* ── Auth forms ── */
.cheshire-auth-form{max-width:400px;margin:2rem auto}
/* Peter-Feedback 20.09.2026: Signatur-Formular nutzt .cheshire-auth-form
   (Login/Registrierungs-Optik), ist aber seit der Editor-Toolbar (TipTap/
   BBCode) mit den festen 400px viel zu schmal -- Modifier-Klasse statt die
   Basisbreite fuer Login/Register mit zu aendern. */
.cheshire-form-wide{max-width:700px}
.cheshire-auth-form h1{margin-bottom:1rem}
.cheshire-auth-form label{display:block;margin:.6rem 0 .2rem;font-size:.88rem;font-weight:600}
.cheshire-auth-form input{width:100%;padding:.5rem;border:1px solid var(--cheshire-border-strong,#ccc);border-radius:5px}
.cheshire-auth-form button{margin-top:.8rem;padding:.6rem 1.2rem;background:var(--cheshire-primary,#2E4057);color:#fff;border:none;border-radius:5px;cursor:pointer;font-weight:600}
#cheshire-pw-strength{display:none !important;margin:.4rem 0 .6rem;padding:.5rem .7rem;background:var(--cheshire-surface,#fff);border:1px solid var(--cheshire-border-strong,#ddd);border-radius:4px;font-size:.88rem;line-height:1.5}
#cheshire-pw-strength.active{display:block !important}

/* Peter-Feedback 20.09.2026 ("Meine Abonnements" ohne saubere Struktur):
   jede Einstellung bekommt eine eigene betitelte Box statt formlos
   hintereinander zu laufen -- Grid-Wrapper fuer die 3 Kurzformulare (Freq/
   Pagination/Editor), gestapelte Vollbreite-Box fuer die Abo-Liste darunter
   (siehe subscriptions.htt, SubscriptionController::index()). */
.cheshire-settings-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:1rem;margin:1rem 0}
.cheshire-settings-box{background:var(--cheshire-surface-alt,#f9fafb);border:1px solid var(--cheshire-border,#eee);border-radius:8px;padding:1rem 1.2rem}
.cheshire-settings-box h2{margin:0 0 .6rem;font-size:1.05rem}
.cheshire-settings-box label{display:block;margin:.5rem 0 .2rem;font-size:.9rem}
.cheshire-settings-box button{margin-top:.6rem;padding:.4rem 1rem;background:var(--cheshire-primary,#2E4057);color:#fff;border:none;border-radius:5px;cursor:pointer;font-weight:600}
.cheshire-error{background:var(--cheshire-danger-bg,#FDEDEC);border:1px solid var(--cheshire-danger-border,#C0392B);border-radius:5px;padding:.6rem;margin:.6rem 0;font-size:.88rem;color:var(--cheshire-danger-text,#7B241C)}
/* DMCA-Formular (Peter-Wunsch) */
.cheshire-dmca-intro{color:var(--cheshire-text-muted,#555);font-size:.9rem;max-width:600px;margin-bottom:1rem}
.cheshire-dmca-success{background:var(--cheshire-success-bg,#EAFAF1);border:1px solid var(--cheshire-success-border,#27AE60);border-radius:5px;padding:.8rem 1rem;color:var(--cheshire-success-text,#1E8449)}

/* ── Pagination ── */
.cheshire-pagination{margin:1rem 0;display:flex;gap:.4rem;flex-wrap:wrap}
.cheshire-pagination a{padding:.3rem .7rem;border:1px solid var(--cheshire-border-strong,#ddd);border-radius:4px;color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057));text-decoration:none;font-size:.88rem}
.cheshire-pagination a.active,.cheshire-pagination a:hover{background:var(--cheshire-primary,#2E4057);color:#fff;border-color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057))}

/* ── Tag cloud (Backlog #616 Wolken-Design, Peter-Wunsch 15.09.2026) ──
   Tier-Klassen t1..t5 kommen aus TagCloud::withTiers() (Services/TagCloud.php),
   ersetzt die alte hardcodierte Inline-font-size-Berechnung im Logik-Code. */
.cheshire-tag-cloud{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:.4rem;line-height:1.6;padding:.7rem 0}
/* Chip-Design: Zaehler erbt die Kontur-/Textfarbe des Chips (siehe oben),
   statt der alten festen hellen Schrift auf Volltonfuellung. */
.cheshire-tag-count{font-size:.75em;color:inherit;opacity:.75}
.cheshire-tag{transition:transform .12s ease,opacity .12s ease}
.cheshire-tag:hover{transform:scale(1.08);opacity:.92}
.cheshire-tag-t1{font-size:.68rem;opacity:.7}
.cheshire-tag-t2{font-size:.8rem;opacity:.8}
.cheshire-tag-t3{font-size:.95rem;opacity:.9;font-weight:600}
.cheshire-tag-t4{font-size:1.12rem;opacity:.96;font-weight:600}
.cheshire-tag-t5{font-size:1.35rem;opacity:1;font-weight:700}

/* ── Delete Button ── */
.cheshire-btn-delete{background:none;border:1px solid var(--cheshire-danger-border,#C0392B);color:var(--cheshire-danger-text,#C0392B);border-radius:4px;padding:.2rem .5rem;cursor:pointer;font-size:.8rem}
.cheshire-btn-delete:hover{background:#C0392B;color:#fff}
.cheshire-thread-actions{display:inline-block}

/* ── Search ── */
.cheshire-search-form{display:flex;gap:.5rem;margin:1rem 0}
.cheshire-search-form input{flex:1;padding:.5rem;border:1px solid var(--cheshire-border-strong,#ccc);border-radius:5px}
.cheshire-search-form button{padding:.5rem 1rem;background:var(--cheshire-primary,#2E4057);color:#fff;border:none;border-radius:5px;cursor:pointer}
.cheshire-search-result{padding:.7rem 0;border-bottom:1px solid var(--cheshire-border,#eee)}
.cheshire-search-type{background:var(--cheshire-accent,#3D6B8C);color:#fff;font-size:.72rem;padding:.1rem .4rem;border-radius:3px;margin-right:.4rem}
.cheshire-search-forum{font-size:.82rem;color:var(--cheshire-text-muted,#777)}
.cheshire-search-excerpt{font-size:.85rem;color:var(--cheshire-text-muted,#666);margin:.3rem 0 0}
/* "Meinten Sie...?"-Ausweichsuche (Peter-Wunsch 20.09.2026, 3-Stufen-Suche) */
.cheshire-search-suggestion{font-size:.9rem;color:var(--cheshire-text-muted,#666);margin:.5rem 0}
.cheshire-search-suggestion a{color:var(--cheshire-brand-text,var(--cheshire-accent,#3D6B8C))}

/* Forum-/Kategorie-Badges (Peter-Wunsch 20.09.2026, Screenshot "Forum » Tags
   » Entwicklung"): zeigen auf Tags-/Themen-Typ-/Suchergebnislisten, aus
   welchem Forum/welcher Kategorie ein Treffer stammt -- gleiches Pillen-
   Muster wie .cheshire-search-type/.cheshire-thread-badge, nur neutral statt
   Akzentfarbe, da sie Herkunft statt Ergebnistyp anzeigen. Kein eigenes Icon
   je Forum/Kategorie (keine Icon-Spalte in den Models) -- Platzhalter 📁/🗂. */
.cheshire-badge-forum,.cheshire-badge-category{display:inline-block;font-size:.75rem;padding:.1rem .45rem;border-radius:10px;background:var(--cheshire-surface-alt,#f0f4f8);color:var(--cheshire-text-muted,#777);margin-right:.3rem;white-space:nowrap}
.cheshire-badge-forum a{color:var(--cheshire-brand-text,var(--cheshire-accent,#3D6B8C));text-decoration:none}
.cheshire-badge-forum a:hover{text-decoration:underline}

/* ── Edit button + timestamp ── */
.cheshire-btn-edit{background:none;border:1px solid var(--cheshire-brand-text,var(--cheshire-accent,#3D6B8C));color:var(--cheshire-brand-text,var(--cheshire-accent,#3D6B8C));border-radius:4px;padding:.2rem .5rem;cursor:pointer;font-size:.8rem;text-decoration:none;margin-right:.3rem}
.cheshire-btn-edit:hover{background:var(--cheshire-accent,#3D6B8C);color:#fff}
.cheshire-edited{font-size:.75rem;color:var(--cheshire-text-faint,#aaa);margin-left:.5rem;font-style:italic}
/* Peter-Wunsch 20.09.2026: bearbeitet-Hinweis als eigene Zeile unter dem
   Autoren-Meta-Block statt zwischen den Aktions-Buttons -- kein Einzug. */
.cheshire-post-edited-line{margin-top:.15rem}
.cheshire-post-edited-line .cheshire-edited{margin-left:0}
/* Weg 1 (Design & Layout, 31.08.2026): siehe ContentDisplay.php */
.cheshire-post-date{font-size:.78rem;color:var(--cheshire-text-faint,#999);font-weight:400}
.cheshire-post-rank-badge{color:#fff;font-size:.68rem;font-weight:700;padding:.05rem .4rem;border-radius:3px;white-space:nowrap}

/* ── Post subject ── */
.cheshire-post-subject{font-weight:600;color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057));padding:.3rem .8rem;border-bottom:1px solid var(--cheshire-border,#eee);font-size:.9rem}
.cheshire-reply-subject{width:100%;padding:.4rem;border:1px solid var(--cheshire-border-strong,#ccc);border-radius:5px;margin-bottom:.4rem;box-sizing:border-box}

/* ── Report button ── */
.cheshire-btn-report{background:none;border:1px solid var(--cheshire-warning-border,#E67E22);color:#E67E22;border-radius:4px;padding:.2rem .5rem;font-size:.8rem;text-decoration:none;margin-left:.3rem}
.cheshire-btn-report:hover{background:#E67E22;color:#fff}

/* ── Solution marking (T04) ── */
.cheshire-btn-solve{background:none;border:1px solid var(--cheshire-success-border,#27AE60);color:var(--cheshire-success-text,#27AE60);border-radius:4px;padding:.2rem .5rem;cursor:pointer;font-size:.8rem;margin-left:.3rem}
.cheshire-btn-solve:hover{background:#27AE60;color:#fff}
.cheshire-badge-solution{background:#27AE60;color:#fff;font-size:.78rem;padding:.2rem .5rem;border-radius:4px;margin-left:.3rem}

/* ── Signature (SIG01-SIG03) ── */
/* Design-Runde 3 TP1: eigener Rahmen/Abstand entfernt -- steckt jetzt in
   <details class="cheshire-content-block">, siehe Signature::render(). */
.cheshire-signature{font-size:.85rem;color:var(--cheshire-text-muted,#666)}
.cheshire-signature img{max-height:80px;max-width:100%;vertical-align:middle}

/* Zusammenstellung-Restpunkt TP5 (Peter-Feedback #408): "+ Neues Thema" hatte
   die Klasse .cheshire-btn-new bereits im Markup (ForumController.php), aber
   in keiner der 3 Theme-Dateien je eine CSS-Regel -- lief bisher als reiner
   unformatierter Textlink. Jetzt am bestehenden Button-Muster ausgerichtet
   (.cheshire-btn-primary/.cheshire-btn-subscribe: volle Akzentfarbe, weisser
   Text, Hover-Wechsel). */
.cheshire-btn-new{display:inline-block;background:var(--cheshire-primary,#2E4057);color:#fff;border:none;border-radius:5px;padding:.4rem 1rem;font-size:.85rem;text-decoration:none;cursor:pointer}
.cheshire-btn-new:hover{background:var(--cheshire-accent,#3D6B8C);color:#fff}

/* ── Social-media profile links (SM01) ── */
/* Zusammenstellung-Restpunkt TP5: von blasser Chip-Optik (Text auf hellem
   Hintergrund) auf echtes Button-Muster umgestellt, siehe .cheshire-btn-new
   oben -- gleiche Begruendung. */
.cheshire-social-links{display:flex;flex-wrap:wrap;gap:.5rem;margin:.6rem 0}
.cheshire-social-item{background:var(--cheshire-primary,#2E4057);border-radius:5px;font-size:.85rem;overflow:hidden}
.cheshire-social-item a{color:#fff;text-decoration:none;display:block;padding:.3rem .7rem}
.cheshire-social-item a:hover{background:var(--cheshire-accent,#3D6B8C)}

/* ── Support-Links: Spenden/Wunschlisten/Gutscheine (3.13, SW01-SW07) ── */
.cheshire-support-group{margin:.6rem 0}
.cheshire-support-group-title{margin:0 0 .3rem;font-size:.9rem;color:var(--cheshire-text-muted,#555)}
.cheshire-support-links{display:flex;flex-wrap:wrap;gap:.5rem}
/* Zusammenstellung-Restpunkt TP5: gleiche Umstellung wie .cheshire-social-item. */
.cheshire-support-item{background:var(--cheshire-primary,#2E4057);color:#fff;padding:.3rem .7rem;border-radius:5px;font-size:.85rem;text-decoration:none;display:inline-block}
.cheshire-support-item:hover{background:var(--cheshire-accent,#3D6B8C)}
.cheshire-support-edit-list{list-style:none;margin:0 0 1rem;padding:0}
.cheshire-support-edit-row{padding:.4rem 0;border-bottom:1px solid var(--cheshire-border,#e0e0e0)}

/* ── Community-Visitenkarte (CS01) ── */
.cheshire-card{display:flex;gap:1rem;align-items:flex-start;margin:1rem 0}
.cheshire-avatar-placeholder{flex-shrink:0;width:72px;height:72px;border-radius:50%;background:var(--cheshire-primary,#2E4057);color:#fff;
    display:flex;align-items:center;justify-content:center;font-size:1.8rem;font-weight:700}
.cheshire-card-main h1{margin:0 0 .2rem}
.cheshire-card-meta{margin:.15rem 0;color:var(--cheshire-text-muted,#555);font-size:.9rem}
.cheshire-card-score{font-weight:700;color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057))}
.cheshire-rating{margin-top:.4rem;font-size:.9rem}
.cheshire-rating-emoji{font-size:1.3rem;vertical-align:middle}
.cheshire-rate-form{display:flex;align-items:center;gap:.4rem;margin-top:.4rem;flex-wrap:wrap}
.cheshire-rate-form label{display:inline-flex;align-items:center;gap:.15rem;font-size:.85rem}
.cheshire-rating-choice{position:relative;display:inline-flex;align-items:center;justify-content:center;width:2.1rem;height:2.1rem;border:2px solid transparent;border-radius:50%;cursor:pointer}
.cheshire-rating-choice:hover{background:var(--cheshire-surface-alt,#f5f5f5)}
.cheshire-rating-radio{position:absolute;opacity:0;width:0;height:0;margin:0;pointer-events:none}
.cheshire-rating-emoji-pick{font-size:1.3rem;line-height:1}
.cheshire-rating-choice:has(.cheshire-rating-radio:checked){border-color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057));background:var(--cheshire-surface-alt,#eef2f6)}
.cheshire-rating-radio:focus-visible ~ .cheshire-rating-emoji-pick{outline:2px solid var(--cheshire-brand-text,var(--cheshire-primary,#2E4057));outline-offset:2px;border-radius:50%}
.cheshire-rate-submit{display:none}
.cheshire-bio{background:var(--cheshire-surface-alt,#f9fafb);border:1px solid var(--cheshire-border,#eee);border-radius:6px;padding:.6rem .9rem;margin:.6rem 0;font-size:.9rem}
.cheshire-card-edit{background:var(--cheshire-surface-alt,#f9fafb);border:1px solid var(--cheshire-border,#eee);border-radius:6px;padding:.8rem 1rem;margin:.6rem 0}
.cheshire-card-edit textarea{width:100%;max-width:600px;padding:.4rem;border:1px solid var(--cheshire-border-strong,#ccc);border-radius:4px}
.cheshire-avatar-edit-form{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem;margin:.6rem 0;font-size:.85rem}
.cheshire-avatar-rules-confirm{display:flex!important;align-items:flex-start;gap:.5rem;flex-basis:100%;cursor:pointer;font-weight:400;line-height:1.4;font-size:.85rem}
.cheshire-avatar-rules-confirm input[type="checkbox"]{margin-top:.2rem;flex-shrink:0;width:auto!important;min-width:16px;height:16px}
.cheshire-help-text{font-size:.78rem;color:var(--cheshire-text-faint,#888);margin:.3rem 0 .8rem}
.cheshire-tab-toggles{display:flex;flex-direction:column;gap:.2rem;margin:.5rem 0;font-size:.85rem}
/* Weg 1 (Design & Layout, 31.08.2026): Profil-Block-Reihenfolge per CSS
   "order", siehe ContentDisplay::profileBlockOrder() + user_profile.htt.
   Design-Runde 2, Thema 4 (01.09.2026): 2-spaltiges Grid statt 1 Spalte fuer
   bessere Flaechennutzung -- Grid respektiert "order" wie Flexbox, die
   Drag&Drop-Reihenfolge bleibt dadurch unveraendert nutzbar. Tabs/Gaestebuch
   spannen per .cheshire-profile-block-full ueber beide Spalten. */
.cheshire-profile-blocks{display:grid;grid-template-columns:1.3fr 1fr;gap:1.2rem;align-items:start}
.cheshire-profile-block-full{grid-column:1/-1}
@media (max-width:768px){
    .cheshire-profile-blocks{grid-template-columns:1fr}
}
/* Design-Runde 2, Thema 3 (Peter-Mockup-Feedback 01.09.2026): gleichmaessige
   Schaltflaechen statt einzelner Text-Links -- .cheshire-profile-link-btn
   ist die gemeinsame Klasse fuer <a>, <button> (in Formularen) und
   Addon-Buttons aus dem Hook "user.profile_links". */
.cheshire-card-links{display:flex;flex-wrap:wrap;gap:.5rem;margin:.6rem 0}
.cheshire-profile-link-btn{display:inline-flex;align-items:center;gap:.35rem;padding:.35rem .8rem;border:1px solid var(--cheshire-border-strong,#ddd);border-radius:6px;background:var(--cheshire-surface,#fff);color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057));font-size:.82rem;line-height:1.3;text-decoration:none;cursor:pointer}
.cheshire-profile-link-btn:hover{background:var(--cheshire-surface-alt,#f0f4f8)}
.cheshire-demo-link{opacity:.55;cursor:not-allowed}
.cheshire-demo-link:hover{background:var(--cheshire-surface,#fff)}
.cheshire-expertise{margin:1rem 0}
.cheshire-expertise-row{display:grid;grid-template-columns:120px 1fr 40px;align-items:center;gap:.6rem;margin:.3rem 0;font-size:.85rem}
.cheshire-expertise-bar{background:#eee;border-radius:4px;height:8px;overflow:hidden}
.cheshire-expertise-bar div{background:var(--cheshire-primary,#2E4057);height:100%}
.cheshire-profile-tabs{margin-top:1.5rem}
.cheshire-tab-nav{display:flex;flex-wrap:wrap;gap:.4rem;border-bottom:1px solid var(--cheshire-border-strong,#e2e2e2);margin-bottom:.8rem;padding-bottom:.4rem}
.cheshire-tab-btn{background:var(--cheshire-surface-alt,#f0f0f0);border:none;padding:.45rem .9rem;border-radius:5px 5px 0 0;cursor:pointer;font-size:.88rem;color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057))}
.cheshire-tab-btn.active{background:var(--cheshire-primary,#2E4057);color:#fff}
.cheshire-tab-panel{background:var(--cheshire-surface-alt,#f9fafb);border:1px solid var(--cheshire-border,#eee);border-radius:8px;padding:.8rem 1rem}
.cheshire-tab-panel h4{margin:.2rem 0 .3rem;font-size:.88rem;color:var(--cheshire-text-muted,#555)}
.cheshire-subtab-nav{display:flex;flex-wrap:wrap;gap:.3rem;margin-bottom:.6rem}
.cheshire-subtab-btn{background:var(--cheshire-surface-alt,#eef1f4);border:none;padding:.3rem .7rem;border-radius:4px;cursor:pointer;font-size:.8rem;color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057))}
.cheshire-subtab-btn.active{background:var(--cheshire-accent,#3D6B8C);color:#fff}
.cheshire-more-note{color:var(--cheshire-text-faint,#999);font-size:.78rem;margin:.4rem 0 0}
.cheshire-activity-list{list-style:none;margin:0;padding:0}
.cheshire-activity-list li{padding:.2rem 0;font-size:.87rem;border-bottom:1px solid var(--cheshire-border,#eee)}
.cheshire-activity-list li:last-child{border-bottom:none}
.cheshire-status-badge{background:var(--cheshire-surface-alt,#eef2f6);color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057));padding:.05rem .5rem;border-radius:3px;font-size:.75rem;margin-left:.3rem}
.cheshire-empty{color:var(--cheshire-text-faint,#999);font-size:.85rem}

/* ── TOP-Listen ── */
.cheshire-top-periods{display:flex;flex-wrap:wrap;gap:.4rem;margin:.8rem 0}
.cheshire-top-period{padding:.35rem .8rem;border-radius:5px;background:var(--cheshire-surface-alt,#f0f0f0);text-decoration:none;color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057));font-size:.85rem}
.cheshire-top-period.active{background:var(--cheshire-primary,#2E4057);color:#fff}
.cheshire-top-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:1rem;margin-top:1rem}
.cheshire-top-section{background:var(--cheshire-surface-alt,#f9fafb);border:1px solid var(--cheshire-border,#eee);border-radius:8px;padding:.8rem 1rem}
.cheshire-top-section h3{margin:0 0 .5rem;font-size:1rem}
.cheshire-top-list{list-style:none;margin:0;padding:0}
.cheshire-top-list li{display:flex;justify-content:space-between;padding:.25rem 0;font-size:.88rem;border-bottom:1px solid var(--cheshire-border,#eee)}
.cheshire-top-list li:last-child{border-bottom:none}
.cheshire-top-rank{color:var(--cheshire-text-faint,#999);margin-right:.3rem}
.cheshire-top-count{color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057));font-weight:600}

/* ── Statistiken & WIO (3.9, Peter-Freigabe 09.09.2026) ── */
.cheshire-stats-section{background:var(--cheshire-surface-alt,#f9fafb);border:1px solid var(--cheshire-border,#eee);border-radius:8px;padding:.8rem 1rem;margin:1rem 0}
.cheshire-stats-section h3{margin:0 0 .5rem;font-size:1rem}
.cheshire-stats-totals{display:flex;flex-wrap:wrap;gap:.8rem}
.cheshire-stats-badge{display:flex;flex-direction:column;align-items:center;min-width:90px;padding:.5rem .8rem;background:var(--cheshire-surface,#fff);border:1px solid var(--cheshire-border,#eee);border-radius:6px}
.cheshire-stats-badge strong{font-size:1.3rem;color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057))}
.cheshire-stats-badge span{font-size:.78rem;color:var(--cheshire-text-faint,#999)}
.cheshire-stats-newest{margin:.7rem 0 0;font-size:.88rem}
.cheshire-stats-record{margin:0;font-size:.9rem}
.cheshire-wio-group{margin-bottom:.9rem}
.cheshire-wio-group:last-child{margin-bottom:0}
.cheshire-wio-group h4{margin:0 0 .3rem;font-size:.9rem;color:var(--cheshire-text-faint,#999)}
.cheshire-wio-list{list-style:none;margin:0;padding:0}
.cheshire-wio-list li{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;padding:.3rem 0;font-size:.85rem;border-bottom:1px solid var(--cheshire-border,#eee)}
.cheshire-wio-list li:last-child{border-bottom:none}
.cheshire-wio-location{color:var(--cheshire-text-faint,#999);font-size:.78rem}
.cheshire-wio-ip{margin-left:auto;font-family:monospace;font-size:.78rem;color:var(--cheshire-text-faint,#999)}
/* Backlog #642 (14.09.2026): Ping-Button/Checkbox/Gruppen-Start-CSS entfernt --
   Anpingen laeuft jetzt ueber das "Wer ist online"-Widget auf der Support-
   Chat-Staff-Seite (supportchat.css .sc-online-*), WIO zeigt nur Anwesenheit. */

/* ── Einblendungs-System (Slots/Werbeflaechen), 3.15/TP3, Peter-Freigabe 09.09.2026 */
.cheshire-slot{margin:.8rem 0;text-align:center}
.cheshire-slot-banner-img{max-width:100%;height:auto;border-radius:6px}
.cheshire-slot-wbce-iframe{width:100%;min-height:250px;border:1px solid var(--cheshire-border,#eee);border-radius:6px}
.cheshire-slot-code,.cheshire-slot-html{font-size:.85rem;color:var(--cheshire-text-faint,#999)}

/* ── Portal (3-Zonen-Grid), Peter-Vorgabe 07.09.2026: Links schmal/Mitte
   breit/Rechts schmal, analog klassischem Portal-Layout. Etappe 3: pro-User
   Drag&Drop + Pfeil-Buttons zwischen/innerhalb der Zonen (cheshire.js) ── */
.cheshire-portal-grid{display:grid;grid-template-columns:1fr 2fr 1fr;gap:1rem;margin-top:1rem;align-items:start}
.cheshire-portal-col{display:flex;flex-direction:column;gap:1rem;min-width:0}
/* Bugfix (Zusammenstellung-Restpunkt, Peter-Mockup-Feedback #408): Kontur
   war zu schwach (--cheshire-border, sehr hell) -- Widgets liefen optisch
   ineinander. Staerkerer Rahmenton wie bei .cheshire-content-block
   (Design-Runde 3), gleiches Kontrast-Prinzip. */
.cheshire-portal-widget{background:var(--cheshire-surface-alt,#f9fafb);border:1px solid var(--cheshire-border-strong,#d5d9dd);border-radius:8px;padding:.8rem 1rem;cursor:grab}
.cheshire-portal-widget h3{margin:0 0 .5rem;font-size:1rem}
.cheshire-portal-placeholder{color:var(--cheshire-text-faint,#999);font-size:.85rem;margin:0}
/* Etappe 2: echte Widget-Inhalte (Abo-Liste/TOP-Listen/Score) statt
   Platzhalter -- .cheshire-top-list (TOP-Listen) ist oben bereits
   gestylt und wird 1:1 wiederverwendet, hier nur die neuen Klassen. */
.cheshire-portal-list{list-style:none;margin:0;padding:0}
.cheshire-portal-list li{padding:.25rem 0;font-size:.88rem;border-bottom:1px solid var(--cheshire-border,#eee)}
.cheshire-portal-list li:last-child{border-bottom:none}
.cheshire-portal-list-type{color:var(--cheshire-text-faint,#999);font-size:.78rem;margin-right:.3rem}
.cheshire-portal-more{display:inline-block;margin-top:.6rem;font-size:.82rem}
.cheshire-portal-score{display:flex;align-items:center;justify-content:space-between;gap:.5rem}
.cheshire-portal-score-rank{font-weight:600}
.cheshire-portal-score-value{font-size:1.3rem;font-weight:700;color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057))}
.cheshire-portal-score-units{margin-top:.3rem;color:var(--cheshire-text-faint,#999);font-size:.8rem}
/* Backlog #494: "Neueste Beitraege"-Widget zeigt Volltext-Excerpts statt nur
   Titel -- eigener scrollbarer Innenbereich, damit die Box eine feste
   Maximalhoehe behaelt statt das ganze Portal-Grid aufzureissen. */
.cheshire-portal-widget-scroll{max-height:360px;overflow-y:auto}
.cheshire-portal-list-posts li{border-bottom:1px solid var(--cheshire-border,#eee);padding:.5rem 0}
.cheshire-portal-list-posts li:last-child{border-bottom:none}
.cheshire-portal-post-title{font-weight:600;font-size:.88rem}
.cheshire-portal-post-meta{color:var(--cheshire-text-faint,#999);font-size:.76rem;margin:.15rem 0}
.cheshire-portal-post-excerpt{font-size:.84rem;color:var(--cheshire-text-muted,#555);line-height:1.4}
/* Etappe 2 Droplets/Baukasten (Peter-Freigabe 29.09.2026): Konfigurations-
   formular des 'custom'-Widgets (PortalController::renderCustom()) --
   schlichtes gestapeltes Formular, kein eigenes Design-System noetig, nutzt
   dieselben Text-/Select-Feld-Grundstile wie andere Cheshire-Formulare. */
.cheshire-portal-custom-form{display:flex;flex-direction:column;gap:.5rem}
.cheshire-portal-custom-form label{display:flex;flex-direction:column;gap:.2rem;font-size:.82rem;color:var(--cheshire-text-muted,#555)}
.cheshire-portal-custom-form select,.cheshire-portal-custom-form input{padding:.35rem .5rem;border:1px solid var(--cheshire-border,#ccc);border-radius:4px;background:var(--cheshire-surface,#fff);color:var(--cheshire-text,#333);font-size:.85rem}
.cheshire-portal-custom-title{margin:0 0 .4rem;font-size:.92rem;font-weight:600}
.cheshire-portal-list-meta{color:var(--cheshire-text-faint,#999);font-size:.78rem}
/* Backlog: WIO-Portal-Widget (Peter-Idee 0.1.198-dev) -- Zaehler-Zeile ueber
   der Mitglieder-Liste, gleiche Tonalitaet wie die uebrigen Portal-Meta-Zeilen. */
.cheshire-portal-wio-counts{font-size:.82rem;color:var(--cheshire-text-faint,#999);margin:0 0 .4rem}
/* Etappe 3: Werkzeugleiste je Widget-Box (Ziehgriff, Pfeile, Ausblenden).
   Pfeil-Sichtbarkeit rein per CSS -- kein serverseitiges/JS-Positions-
   Wissen noetig: ▲ verschwindet beim ersten, ▼ beim letzten Widget einer
   Zone (:first-child/:last-child), ◄ in der linken Zone, ► in der rechten. */
.cheshire-portal-widget-toolbar{display:flex;align-items:center;gap:.15rem;margin:-.3rem -.3rem .4rem;opacity:.55}
.cheshire-portal-widget-toolbar:hover{opacity:1}
.cheshire-drag-handle{cursor:grab;color:var(--cheshire-text-faint,#999);padding:.1rem .3rem;font-size:.85rem}
.cheshire-portal-btn{background:none;border:none;cursor:pointer;color:var(--cheshire-text-faint,#999);font-size:.78rem;padding:.15rem .35rem;border-radius:4px;line-height:1}
.cheshire-portal-btn:hover{background:var(--cheshire-border,#eee);color:var(--cheshire-text,#333)}
.cheshire-portal-btn-hide{margin-left:auto}
.cheshire-portal-col-left .cheshire-portal-btn[data-action="left"],
.cheshire-portal-col-right .cheshire-portal-btn[data-action="right"]{display:none}
.cheshire-portal-widget:first-child .cheshire-portal-btn[data-action="up"],
.cheshire-portal-widget:last-child .cheshire-portal-btn[data-action="down"]{display:none}
.cheshire-portal-status{min-height:1.2em;font-size:.8rem;color:var(--cheshire-text-faint,#999);margin:.5rem 0 0}
.cheshire-portal-hidden{margin-top:1.5rem;padding-top:1rem;border-top:1px solid var(--cheshire-border,#eee)}
.cheshire-portal-hidden h3{margin:0 0 .5rem;font-size:.9rem;color:var(--cheshire-text-faint,#999)}
.cheshire-portal-hidden-list{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:.5rem}
.cheshire-portal-hidden-list li{display:flex;align-items:center;gap:.5rem;background:var(--cheshire-surface-alt,#f9fafb);border:1px solid var(--cheshire-border,#eee);border-radius:6px;padding:.3rem .6rem;font-size:.82rem}
.cheshire-portal-hidden-list .cheshire-portal-btn{background:var(--cheshire-border,#eee)}
/* Backlog #481 (Peter-Freigabe 11.09.2026): "Portal als Startseite"-Zeile
   ueber dem Grid, siehe PortalController::index() $home_html. */
.cheshire-portal-home{margin:.6rem 0 1rem;font-size:.85rem;color:var(--cheshire-text-muted,#777);display:flex;align-items:center;gap:.6rem}
.cheshire-portal-home button{background:none;border:1px solid var(--cheshire-brand-text,var(--cheshire-accent,#3D6B8C));color:var(--cheshire-brand-text,var(--cheshire-accent,#3D6B8C));border-radius:var(--cheshire-radius,4px);padding:.3rem .8rem;font-size:.85rem;cursor:pointer}
.cheshire-portal-home button:hover{background:var(--cheshire-surface-alt,#f0f4f8)}
/* Peter-Feedback 21.09.2026 (Teil 2): gleicher Toggle jetzt auch in der
   Forum-Uebersicht (ForumController::index()), eigene Klasse fuer etwas
   kompakteren Abstand neben .cheshire-view-toggle statt Portal-Widget-Kontext. */
.cheshire-portal-home-inline{margin:.4rem 0 1rem;font-size:.85rem;color:var(--cheshire-text-muted,#777);display:flex;align-items:center;gap:.6rem}
.cheshire-portal-home-inline button{background:none;border:1px solid var(--cheshire-brand-text,var(--cheshire-accent,#3D6B8C));color:var(--cheshire-brand-text,var(--cheshire-accent,#3D6B8C));border-radius:var(--cheshire-radius,4px);padding:.25rem .7rem;font-size:.82rem;cursor:pointer}
.cheshire-portal-home-inline button:hover{background:var(--cheshire-surface-alt,#f0f4f8)}
/* Etappe 4: Zeitraum-Tabs im Trending-Widget (Peter-Entscheidung 07.09.2026,
   Bedienkonzept wie .cheshire-top-periods/-period beim Top-System). */
.cheshire-portal-tabs{display:flex;flex-wrap:wrap;gap:.3rem;margin:0 0 .6rem}
.cheshire-portal-tab{padding:.2rem .6rem;border-radius:5px;background:var(--cheshire-surface-alt,#f0f0f0);text-decoration:none;color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057));font-size:.78rem}
.cheshire-portal-tab.active{background:var(--cheshire-primary,#2E4057);color:#fff}
@media (max-width:700px){.cheshire-portal-grid{grid-template-columns:1fr}}

/* Peter-Feedback 21.09.2026 (Teil 1, TP8): Widget "Seit deinem letzten
   Besuch" in der Forum-Uebersicht -- 4 Kategorie-Links + Mark-all-read.
   Verschwindet serverseitig, sobald alle Zaehler auf 0 stehen (siehe
   ForumController::sinceVisitWidgetHtml()), daher keine JS-Ausblendlogik.
   Nachbesserung (Peter-Wunsch 25.09.2026): festes 4-Spalten-Raster statt
   einer wechselnd kurzen/leeren inline-flex-Zeile -- alle 4 Kategorien sind
   jetzt IMMER als eigene Spalte sichtbar (auch mit Zaehler 0, siehe
   --empty/--zero-Modifikatoren unten), damit das Widget durchgehend die
   volle Breite mit Information fuellt, statt bei wenigen Treffern schmal/
   leer zu wirken. */
.cheshire-since-visit-widget{margin:.4rem 0 1rem;padding:.6rem .8rem;border:1px solid var(--cheshire-border,#ddd);border-radius:var(--cheshire-radius,4px);background:var(--cheshire-surface-alt,#f7f9fb)}
.cheshire-since-visit-title{font-weight:600;font-size:.85rem;color:var(--cheshire-text-muted,#777);display:block;margin-bottom:.4rem}
.cheshire-since-visit-links{display:grid;grid-template-columns:repeat(4,1fr);gap:.5rem}
.cheshire-since-visit-link{display:flex;align-items:center;justify-content:center;gap:.3rem;padding:.4rem .5rem;border-radius:5px;background:var(--cheshire-surface,#fff);color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057));text-decoration:none;font-size:.82rem;border:1px solid var(--cheshire-border,#ddd);text-align:center}
.cheshire-since-visit-link:hover{background:var(--cheshire-surface-alt,#eef2f6)}
.cheshire-since-visit-link--empty{opacity:.55;cursor:default}
.cheshire-since-visit-link--empty:hover{background:var(--cheshire-surface,#fff)}
.cheshire-badge-unread--zero{background:var(--cheshire-text-faint,#aaa)}
@media (max-width:640px){.cheshire-since-visit-links{grid-template-columns:repeat(2,1fr)}}
.cheshire-since-visit-markall{margin-top:.5rem}
.cheshire-since-visit-markall button{background:none;border:1px solid var(--cheshire-brand-text,var(--cheshire-accent,#3D6B8C));color:var(--cheshire-brand-text,var(--cheshire-accent,#3D6B8C));border-radius:var(--cheshire-radius,4px);padding:.25rem .7rem;font-size:.78rem;cursor:pointer}
.cheshire-since-visit-markall button:hover{background:var(--cheshire-surface-alt,#f0f4f8)}
/* Teil 3 (Peter-Wunsch 22.09.2026): Leerzustand -- Widget bleibt taeglich
   mindestens einmal sichtbar statt komplett zu verschwinden. */
.cheshire-since-visit-widget--empty{opacity:.85}
.cheshire-since-visit-empty-text{font-size:.82rem;color:var(--cheshire-text-muted,#777);margin:0 0 .4rem}

/* ── Private Nachrichten (PM) ── */
.cheshire-pm-nav{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem;margin:.8rem 0}
.cheshire-pm-tab{padding:.35rem .8rem;border-radius:5px;background:var(--cheshire-surface-alt,#f0f0f0);text-decoration:none;color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057));font-size:.85rem}
.cheshire-pm-tab.active{background:var(--cheshire-primary,#2E4057);color:#fff}
.cheshire-pm-new{margin-left:auto;padding:.35rem .8rem;border-radius:5px;background:var(--cheshire-accent,#3D6B8C);color:#fff;text-decoration:none;font-size:.85rem}
.cheshire-pm-list{display:flex;flex-direction:column;border:1px solid var(--cheshire-border,#eee);border-radius:6px;overflow:hidden}
.cheshire-pm-row{display:grid;grid-template-columns:1fr 1fr 2fr auto;gap:.6rem;align-items:center;padding:.55rem .8rem;border-bottom:1px solid var(--cheshire-border,#eee);text-decoration:none;color:inherit;font-size:.87rem}
.cheshire-pm-row:last-child{border-bottom:none}
a.cheshire-pm-row:hover{background:var(--cheshire-surface-alt,#f9fafb)}
.cheshire-pm-unread{background:var(--cheshire-surface-alt,#eef4fa);font-weight:600}
.cheshire-pm-partner{color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057))}
.cheshire-pm-badge{background:#E67E22;color:#fff;border-radius:10px;padding:.05rem .45rem;font-size:.72rem;margin-left:.3rem}
.cheshire-pm-excerpt{color:var(--cheshire-text-muted,#777);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cheshire-pm-date{color:var(--cheshire-text-faint,#999);font-size:.78rem;text-align:right}
.cheshire-pm-thread{display:flex;flex-direction:column;gap:.6rem;margin:1rem 0}
.cheshire-pm-msg{background:var(--cheshire-surface-alt,#f9fafb);border-radius:8px;padding:.6rem .9rem;max-width:80%}
.cheshire-pm-mine{align-self:flex-end;background:var(--cheshire-surface-alt,#eef4fa)}
.cheshire-pm-msg-meta{color:var(--cheshire-text-faint,#999);font-size:.75rem;margin-bottom:.2rem}
/* #1032: Betreff-Trennzeile im PN-Verlauf */
.cheshire-pm-subject-divider{display:flex;align-items:center;gap:.6rem;margin:1rem 0 .5rem;color:var(--cheshire-text-faint,#999);font-size:.8rem}
.cheshire-pm-subject-divider::before,.cheshire-pm-subject-divider::after{content:"";flex:1;border-top:1px solid var(--cheshire-border,#ddd)}
.cheshire-pm-subject-divider span{font-weight:600}
.cheshire-pm-msg-body{white-space:pre-wrap;font-size:.9rem}
.cheshire-pm-reply,.cheshire-pm-compose{display:flex;flex-direction:column;gap:.5rem;margin-top:1rem}
.cheshire-pm-reply textarea{width:100%;box-sizing:border-box;padding:.5rem;border:1px solid var(--cheshire-border-strong,#ddd);border-radius:5px}
.cheshire-pm-compose label{display:flex;flex-direction:column;gap:.2rem;font-size:.85rem;color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057))}
.cheshire-pm-compose input,.cheshire-pm-compose textarea{padding:.5rem;border:1px solid var(--cheshire-border-strong,#ddd);border-radius:5px;font-family:inherit;box-sizing:border-box}
.cheshire-pm-compose button,.cheshire-pm-reply button{align-self:flex-start;padding:.4rem 1.2rem;background:var(--cheshire-primary,#2E4057);color:#fff;border:none;border-radius:5px;cursor:pointer}
.cheshire-pm-actions{margin-top:1rem;font-size:.85rem}
.cheshire-pm-badge-topbar{background:#E67E22;color:#fff;border-radius:10px;padding:.05rem .45rem;font-size:.72rem;margin-left:.2rem}

/* PM-Erweiterungen (Backlog #29): Suche, Anhaenge, Blockieren/Kontakte, Melden, Broadcast */
.cheshire-pm-search{display:flex;gap:.3rem;margin-left:auto}
.cheshire-pm-search input{padding:.35rem .6rem;border:1px solid var(--cheshire-border-strong,#ddd);border-radius:5px;font-size:.85rem}
.cheshire-pm-search button{padding:.35rem .7rem;border:1px solid var(--cheshire-border-strong,#ddd);border-radius:5px;background:var(--cheshire-surface,#fff);cursor:pointer}
.cheshire-pm-partner-actions{display:flex;gap:.5rem;flex-wrap:wrap;margin:.4rem 0 1rem}
.cheshire-pm-partner-btn{padding:.3rem .7rem;border:1px solid var(--cheshire-border-strong,#ddd);border-radius:5px;background:var(--cheshire-surface,#fff);font-size:.8rem;cursor:pointer}
.cheshire-pm-report-link{margin-left:.5rem;color:var(--cheshire-danger-text,#C0392B);text-decoration:none;font-size:.8rem}
.cheshire-pm-att-input{flex-direction:row !important;align-items:center;gap:.5rem !important;font-size:.85rem;color:var(--cheshire-text-muted,#555)}
.cheshire-pm-att-list{margin-top:.5rem;display:flex;flex-wrap:wrap;gap:.5rem}
.cheshire-pm-att-img{max-width:180px;max-height:140px;border-radius:6px;display:block}
.cheshire-pm-att-file{display:inline-block;padding:.3rem .7rem;background:var(--cheshire-surface-alt,#eef2f6);border-radius:5px;font-size:.82rem;text-decoration:none;color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057))}
.cheshire-pm-contact-add{display:flex;gap:.5rem;margin:.6rem 0 1rem}
.cheshire-pm-contact-add input{flex:1;padding:.5rem;border:1px solid var(--cheshire-border-strong,#ddd);border-radius:5px}
.cheshire-pm-contact-add button{padding:.5rem 1rem;background:var(--cheshire-primary,#2E4057);color:#fff;border:none;border-radius:5px;cursor:pointer}
.cheshire-pm-contact-list{display:flex;flex-direction:column;border:1px solid var(--cheshire-border,#eee);border-radius:6px;overflow:hidden;margin-bottom:1.2rem}
.cheshire-pm-contact-row{display:flex;justify-content:space-between;align-items:center;padding:.5rem .8rem;border-bottom:1px solid var(--cheshire-border,#eee);font-size:.88rem}
.cheshire-pm-contact-row:last-child{border-bottom:none}
.cheshire-pm-contact-row button{padding:.2rem .6rem;border:1px solid var(--cheshire-border-strong,#ddd);border-radius:5px;background:var(--cheshire-surface,#fff);cursor:pointer;font-size:.8rem}
.cheshire-pm-hint{color:var(--cheshire-text-muted,#777);font-size:.88rem;margin:.3rem 0 1rem}
/* Bugfix (Peter/Florian-Meldung Teil 4, 18.09.2026: "Modern-Theme schlechter
   als Klassisch auf der PM-Seite"): PM-Seiten hatten bisher KEINEN Karten-
   Wrapper um den Hauptinhalt (anders als z.B. Profil/Formular-Seiten), im
   Standard-/Klassisch-Theme fiel das nicht auf, im Modern-Theme (das seine
   "Card"-Optik ueber genau solche Wrapper erzeugt) wirkte die PM-Seite dadurch
   unstyled/flach. Hier bewusst als No-Op definiert (display:block, keine
   optische Aenderung fuer Standard/Klassisch) -- die eigentliche Karten-Optik
   kommt gezielt aus modern.css. */
.cheshire-pm-panel{display:block}
.cheshire-mod-pm-hint{display:inline-block;color:var(--cheshire-text-muted,#777);font-size:.85rem;margin:0}
.cheshire-mod-warn-form{display:inline-flex;align-items:center;gap:.3rem;margin:.3rem .3rem 0 0}
.cheshire-mod-warn-done{color:var(--cheshire-success-text,#388e3c);font-size:.8rem;margin:.3rem 0 0}
/* Peter-Feedback 21.09.2026 (Teil 2b): Verwarnung-Formular eingeklappt
   hinter eigenem Button statt permanent offen unter dem Beitrag. */
.cheshire-mod-warn-details{margin:.4rem 0 0}
.cheshire-mod-warn-toggle{cursor:pointer;display:inline-block;background:var(--cheshire-danger-bg,#fdecea);color:var(--cheshire-danger-text,#C0392B);border:1px solid var(--cheshire-danger-border,#e6b3ad);border-radius:4px;padding:.2rem .6rem;font-size:.8rem;font-weight:600;list-style:none;user-select:none}
.cheshire-mod-warn-toggle::-webkit-details-marker{display:none}
.cheshire-mod-warn-details[open] .cheshire-mod-warn-toggle{margin-bottom:.4rem}
.cheshire-mod-warn-points{width:4em}
/* Design-Runde 2, Thema 3: Formular bleibt (POST-Aktion), aber
   display:contents reicht das Grid-Layout des Eltern-.cheshire-card-links
   an den inneren Button durch -- der Button selbst traegt bereits
   cheshire-profile-link-btn (siehe oben). */
.cheshire-profile-buddy{display:contents}
.cheshire-success{background:var(--cheshire-success-bg,#EAFAF1);border:1px solid var(--cheshire-success-border,#27AE60);border-radius:5px;padding:.6rem;margin:.6rem 0;font-size:.88rem;color:var(--cheshire-success-text,#1E8449)}

/* ── Gästebuch & Avatar-Platzhalter (Peter-Reminder Runde 3) ── */
.cheshire-avatar-img{flex-shrink:0;width:72px;height:72px;border-radius:50%;object-fit:cover}
.cheshire-avatar-guest{width:40px;height:40px}
.cheshire-avatar-wrap{position:relative;display:inline-block;flex-shrink:0}
.cheshire-avatar-badge{position:absolute;color:#fff;font-size:.62rem;font-weight:700;line-height:1.3;padding:.1rem .4rem;border-radius:4px;white-space:nowrap;box-shadow:var(--cheshire-shadow-sm,0 1px 3px rgba(0,0,0,.35));pointer-events:none}
.cheshire-avatar-badge i{margin-right:.15rem}
.cheshire-avatar-badge-top-left{top:-4px;left:-6px}
.cheshire-avatar-badge-top-right{top:-4px;right:-6px}
.cheshire-avatar-badge-bottom-left{bottom:-4px;left:-6px}
.cheshire-avatar-badge-bottom-right{bottom:-4px;right:-6px}
.cheshire-avatar-badge-diagonal{top:10px;left:-30px;width:104px;text-align:center;border-radius:0;padding:.15rem 0;transform:rotate(-45deg)}
.cheshire-avatar-report-link{display:block;text-align:center;font-size:.7rem;color:var(--cheshire-text-faint,#999);margin-top:.2rem;text-decoration:none}
.cheshire-avatar-report-link:hover{color:var(--cheshire-danger-text,#C0392B);text-decoration:underline}
.cheshire-warnings{background:var(--cheshire-warning-bg,#fff8f0);border:1px solid var(--cheshire-warning-border,#f0d9b5);border-radius:6px;padding:.6rem 1rem;margin:.6rem 0;font-size:.85rem}
.cheshire-warning-entry{padding:.4rem 0;border-top:1px solid var(--cheshire-warning-border,#f0e0c5)}
.cheshire-warning-entry:first-of-type{border-top:none}
.cheshire-warning-disabled-note{color:var(--cheshire-warning-text,#8a6d3b);font-size:.8rem;margin:0 0 .4rem}
.cheshire-warning-meta{display:block;font-size:.75rem;color:var(--cheshire-text-faint,#888)}
.cheshire-warning-expired{opacity:.55}
.cheshire-badges{display:flex;flex-wrap:wrap;gap:.35rem;margin:.4rem 0}
.cheshire-badge-chip{color:#fff;font-size:.75rem;font-weight:600;padding:.15rem .55rem;border-radius:12px;white-space:nowrap;cursor:default}
.cheshire-digest-freq{background:var(--cheshire-surface-alt,#f9fafb);border:1px solid var(--cheshire-border,#eee);border-radius:6px;padding:.8rem 1rem;margin:.6rem 0 1.2rem;display:flex;align-items:flex-end;gap:.6rem;flex-wrap:wrap}
.cheshire-digest-freq select{padding:.4rem;border:1px solid var(--cheshire-border-strong,#ccc);border-radius:4px}
.cheshire-poll{background:var(--cheshire-surface-alt,#f9fafb);border:1px solid var(--cheshire-border,#eee);border-radius:6px;padding:.8rem 1rem;margin:.8rem 0}
.cheshire-poll h3{margin:0 0 .5rem}
.cheshire-poll-option{display:block;margin:.3rem 0;font-size:.9rem}
.cheshire-poll-closed{color:var(--cheshire-danger-text,#C0392B);font-size:.85rem;font-weight:600}
.cheshire-poll-results{margin-top:.6rem}
.cheshire-poll-result-row{display:flex;align-items:center;gap:.5rem;margin:.35rem 0;font-size:.85rem}
.cheshire-poll-result-label{flex:0 0 30%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cheshire-poll-bar-track{flex:1;background:var(--cheshire-surface-alt,#e5e9ed);border-radius:4px;height:10px;overflow:hidden}
.cheshire-poll-bar{background:var(--cheshire-accent,#3D6B8C);height:100%}
.cheshire-poll-result-pct{flex:0 0 auto;color:var(--cheshire-text-muted,#777);white-space:nowrap}
.cheshire-poll-total{color:var(--cheshire-text-faint,#999);font-size:.78rem;margin:.4rem 0 0}
.cheshire-poll-hint{color:var(--cheshire-text-muted,#777);font-size:.85rem}
.cheshire-poll-edit-toggle{margin-top:.6rem;background:none;border:1px solid var(--cheshire-border-strong,#ccc);border-radius:4px;padding:.25rem .6rem;font-size:.8rem;cursor:pointer}
.cheshire-poll-admin-form{margin-top:.5rem}
.cheshire-poll-admin-form label{font-size:.82rem;display:block;margin:.3rem 0}
.cheshire-poll-admin-form input[type=text]{width:100%;max-width:22rem}
.cheshire-demo-link{color:var(--cheshire-text-faint,#999);cursor:default;border-bottom:1px dashed var(--cheshire-border-strong,#ccc);user-select:none}
.cheshire-guestbook{margin-top:1.5rem}
.cheshire-guestbook h3{margin:0 0 .5rem;font-size:1rem}
.cheshire-guestbook-pending{background:var(--cheshire-warning-bg,#fff8e6);border:1px solid var(--cheshire-warning-border,#e8d8a0);border-radius:6px;padding:.6rem .8rem;margin-bottom:1rem;font-size:.88rem}
.cheshire-guestbook-pending-entry{border-top:1px solid var(--cheshire-warning-border,#e8d8a0);margin-top:.5rem;padding-top:.5rem}
.cheshire-guestbook-pending-entry button{margin-top:.3rem;padding:.25rem .6rem;border:1px solid var(--cheshire-border-strong,#ddd);border-radius:5px;background:var(--cheshire-surface,#fff);font-size:.8rem;cursor:pointer}
.cheshire-guestbook-list{display:flex;flex-direction:column;gap:.6rem}
.cheshire-guestbook-entry{display:flex;gap:.7rem;align-items:flex-start;background:var(--cheshire-surface-alt,#f9fafb);border:1px solid var(--cheshire-border,#eee);border-radius:8px;padding:.6rem .9rem}
.cheshire-guestbook-meta{color:var(--cheshire-text-faint,#999);font-size:.78rem;margin-bottom:.15rem}
.cheshire-guestbook-msg{font-size:.9rem;white-space:pre-wrap}
.cheshire-guestbook-form{display:flex;flex-direction:column;gap:.5rem;margin-top:1rem;max-width:500px}
.cheshire-guestbook-form label{display:flex;flex-direction:column;gap:.2rem;font-size:.85rem;color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057))}
.cheshire-guestbook-form input,.cheshire-guestbook-form textarea{padding:.5rem;border:1px solid var(--cheshire-border-strong,#ddd);border-radius:5px;font-family:inherit;box-sizing:border-box}
.cheshire-guestbook-form button{align-self:flex-start;padding:.4rem 1.2rem;background:var(--cheshire-primary,#2E4057);color:#fff;border:none;border-radius:5px;cursor:pointer}

/* ── Benachrichtigungen & Abonnements (N01) ── */
.cheshire-subscribe-form{display:inline-block;margin-left:.6rem}
.cheshire-btn-subscribe{padding:.35rem .8rem;border-radius:5px;background:var(--cheshire-surface-alt,#f0f0f0);color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057));border:1px solid var(--cheshire-border-strong,#ddd);cursor:pointer;font-size:.85rem}
.cheshire-btn-subscribe.active{background:var(--cheshire-accent,#3D6B8C);color:#fff;border-color:var(--cheshire-brand-text,var(--cheshire-accent,#3D6B8C))}
.cheshire-sub-list{display:flex;flex-direction:column;border:1px solid var(--cheshire-border,#eee);border-radius:6px;overflow:hidden}
.cheshire-sub-row{display:flex;align-items:center;gap:.7rem;padding:.55rem .8rem;border-bottom:1px solid var(--cheshire-border,#eee);font-size:.87rem}
.cheshire-sub-row:last-child{border-bottom:none}
.cheshire-sub-type{background:var(--cheshire-surface-alt,#eef2f6);color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057));padding:.05rem .5rem;border-radius:3px;font-size:.75rem}
.cheshire-sub-row a{color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057));flex:1}
.cheshire-sub-row a.cheshire-sub-category{flex:none;color:var(--cheshire-text-faint,#999);font-size:.78rem;background:var(--cheshire-surface-alt,#f5f5f5);padding:.05rem .5rem;border-radius:3px;text-decoration:none}
.cheshire-sub-row a.cheshire-sub-category:hover{text-decoration:underline}

/* ── Melde-Workflow / Moderation (2.9) ── */
.cheshire-mod-tabs{display:flex;flex-wrap:wrap;gap:.4rem;margin:.8rem 0}
.cheshire-mod-tab{padding:.35rem .8rem;border-radius:5px;background:var(--cheshire-surface-alt,#f0f0f0);text-decoration:none;color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057));font-size:.85rem}
.cheshire-mod-tab.active{background:var(--cheshire-primary,#2E4057);color:#fff}
/* Phase 5.2/M06: gemeinsame Mod-CP-Kopfnavigation (Meldungen/Safe) */
.cheshire-modcp-nav{display:flex;gap:.6rem;margin:.6rem 0 1rem;border-bottom:1px solid var(--cheshire-border,#eee);padding-bottom:.6rem}
.cheshire-modcp-tab{padding:.4rem .9rem;border-radius:5px 5px 0 0;text-decoration:none;color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057));font-size:.9rem;font-weight:600}
.cheshire-modcp-tab.active{background:var(--cheshire-primary,#2E4057);color:#fff}
.cheshire-modcp-count{background:#777;color:#fff;border-radius:10px;padding:.05rem .45rem;font-size:.72rem;margin-left:.2rem}
.cheshire-mod-list{display:flex;flex-direction:column;border:1px solid var(--cheshire-border,#eee);border-radius:6px;overflow:hidden}
.cheshire-mod-row{display:grid;grid-template-columns:auto 2fr auto auto auto auto;gap:.6rem;align-items:center;padding:.55rem .8rem;border-bottom:1px solid var(--cheshire-border,#eee);text-decoration:none;color:inherit;font-size:.87rem}
.cheshire-mod-row:last-child{border-bottom:none}
a.cheshire-mod-row:hover{background:var(--cheshire-surface-alt,#f9fafb)}
.cheshire-mod-type{background:var(--cheshire-surface-alt,#eef2f6);color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057));padding:.05rem .5rem;border-radius:3px;font-size:.75rem}
/* Peter-Feedback 21.09.2026 (Teil 4): Status-Badge im "Erledigt/Archiviert"-
   Tab -- unterscheidet echte Safe-Faelle (post/thread) von rein generisch
   abgeschlossenen Reports (Signatur/DMCA/Addon), siehe ModerationController. */
.cheshire-mod-status-badge{padding:.05rem .5rem;border-radius:10px;font-size:.72rem;font-weight:600;white-space:nowrap}
.cheshire-mod-status-safe{background:var(--cheshire-danger-bg,#fdecea);color:var(--cheshire-danger-text,#C0392B)}
.cheshire-mod-status-done{background:var(--cheshire-success-bg,#e8f6ef);color:var(--cheshire-success-text,#1e8a5f)}
.cheshire-mod-content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cheshire-mod-content small{color:var(--cheshire-text-faint,#999)}
.cheshire-mod-reason{font-weight:600}
.cheshire-mod-reporter,.cheshire-mod-date{color:var(--cheshire-text-faint,#999);font-size:.8rem}
.cheshire-mod-report-meta{background:var(--cheshire-surface-alt,#f9fafb);border:1px solid var(--cheshire-border,#eee);border-radius:8px;padding:.7rem 1rem;margin:.8rem 0;font-size:.9rem}
.cheshire-mod-report-meta p{margin:.2rem 0}
.cheshire-mod-spy{border:2px dashed var(--cheshire-danger-border,#C0392B);border-radius:8px;padding:1rem;margin:1rem 0;background:var(--cheshire-warning-bg,#fff9f8)}
.cheshire-mod-spy-notice{color:var(--cheshire-danger-text,#C0392B);font-weight:600;font-size:.85rem;margin:0 0 .6rem}
.cheshire-mod-author{color:var(--cheshire-text-muted,#777);font-size:.85rem}
.cheshire-mod-message{margin-top:.5rem}
/* Peter-Wunsch 21.09.2026 (Teil 7): Operatoren-Tipp unter dem Suchfeld. */
.cheshire-search-hint{font-size:.8rem;color:var(--cheshire-text-faint,#999);margin:.3rem 0 1rem}
.cheshire-search-hint code{background:var(--cheshire-surface-alt,#f4f4f4);padding:.05rem .35rem;border-radius:3px}
/* Bugfix (Peter/Florian-Feedback 21.09.2026, Teil 5): eigener Block fuer den
   Signatur-TEXT oberhalb der Bild-Galerie im Mod-Report. */
.cheshire-mod-sig-text{background:var(--cheshire-surface-alt,#f9fafb);border:1px solid var(--cheshire-border,#eee);border-radius:6px;padding:.7rem 1rem;margin-bottom:.8rem}
.cheshire-mod-sig-gallery{display:flex;flex-wrap:wrap;gap:.8rem}
.cheshire-mod-sig-item{display:flex;flex-direction:column;align-items:center;gap:.3rem;background:var(--cheshire-surface-alt,#fafafa);border:1px solid var(--cheshire-border-strong,#ddd);border-radius:6px;padding:.5rem}
.cheshire-mod-actions{margin:1rem 0}
.cheshire-mod-action-group{display:flex;gap:.6rem;flex-wrap:wrap;align-items:center;margin-bottom:.8rem}
.cheshire-mod-action-group:last-child{margin-bottom:0}
.cheshire-mod-action-group h4{width:100%;font-size:.8rem;color:var(--cheshire-text-muted,#777);margin:0 0 .2rem;text-transform:uppercase;letter-spacing:.03em}
.cheshire-mod-type-badge{background:var(--cheshire-primary,#2E4057);color:#fff;padding:.1rem .6rem;border-radius:12px;font-size:.7rem;font-weight:500;vertical-align:middle;margin-left:.5rem}
.cheshire-mod-comment-hint{color:var(--cheshire-text-faint,#999);font-size:.8rem}
.cheshire-mod-comments{display:flex;flex-direction:column;gap:.6rem;margin:.6rem 0}
.cheshire-mod-comment{background:var(--cheshire-surface-alt,#f9fafb);border-radius:6px;padding:.5rem .8rem}
.cheshire-mod-comment-meta{color:var(--cheshire-text-faint,#999);font-size:.75rem;display:block;margin-bottom:.2rem}
.cheshire-mod-comment-text{font-size:.88rem;white-space:pre-wrap}
.cheshire-mod-comment-form{display:flex;flex-direction:column;gap:.5rem;margin-top:.6rem}
.cheshire-mod-comment-form textarea{width:100%;box-sizing:border-box;padding:.5rem;border:1px solid var(--cheshire-border-strong,#ddd);border-radius:5px}
.cheshire-mod-comment-form button{align-self:flex-start;padding:.4rem 1.2rem;background:var(--cheshire-primary,#2E4057);color:#fff;border:none;border-radius:5px;cursor:pointer}
/* Phase 5.2/M07: einheitliches Styling fuer alle Melde-Formulare (Beitrag/PN/Profilbild/Signatur) */
.cheshire-report-form{max-width:480px}
.cheshire-report-form label{display:block;margin-bottom:.9rem;font-weight:600}
.cheshire-report-form select,.cheshire-report-form textarea{display:block;width:100%;box-sizing:border-box;margin-top:.3rem;padding:.5rem;border:1px solid var(--cheshire-border-strong,#ddd);border-radius:5px;font-family:inherit;font-weight:400}
.cheshire-report-form textarea{resize:vertical}
.cheshire-mod-safe-list{display:flex;flex-direction:column;gap:.8rem}
.cheshire-mod-safe-row{border:1px solid var(--cheshire-border,#eee);border-radius:8px;padding:.8rem 1rem;background:var(--cheshire-surface-alt,#f9fafb)}
.cheshire-mod-safe-row-deleted{border-color:var(--cheshire-success-border,#c7e6cf);background:var(--cheshire-success-bg,#f4fbf6)}
.cheshire-mod-safe-meta{font-size:.85rem;color:var(--cheshire-text-muted,#555);margin-bottom:.5rem}
.cheshire-mod-hard-deleted-badge{color:var(--cheshire-success-text,#2E7D32);font-weight:600;font-size:.85rem;margin:.6rem 0 0}
.cheshire-btn-mod{color:inherit;text-decoration:none}
.cheshire-post-reported-link{margin-left:.5rem;font-weight:600}

/* ── Reported post ── */
.cheshire-post-reported{border:1px dashed var(--cheshire-warning-border,#E67E22);border-radius:6px;margin-bottom:1rem}
.cheshire-post-reported-notice{padding:.6rem 1rem;color:#E67E22;font-size:.88rem;font-style:italic}

/* ── Site-Header (Logo/Titel) — Peter-Wunsch 12.08.2026, Vorlage forum.wbce.org ── */
/* Zusammenstellung-Restpunkt TP2 (Peter-Feedback #408): margin-top per
   --cheshire-header-padding-top ueberschreibbar, siehe Theme::cssVarsBlock().
   Nachbesserung (Peter-Meldung 13.09.2026, "vergroessert nur den Header,
   aber nicht den Abstand vom oberen Rand des Browsers"): war zuerst als
   padding-top umgesetzt -- das vergroessert nur die Box selbst (Innenabstand
   ueber Logo/Titel), erzeugt aber keinen Zwischenraum zur Boxkante. Jetzt
   margin-top (Aussenabstand), padding bleibt beim urspruenglichen Fixwert. */
.cheshire-site-header{position:relative;display:flex;align-items:center;gap:.8rem;padding:1rem 0 .6rem;margin-top:var(--cheshire-header-padding-top,0)}
.cheshire-site-logo{font-size:2.3rem;text-decoration:none;line-height:1}
.cheshire-site-heading{display:flex;flex-direction:column}
.cheshire-site-title{font-size:1.5rem;font-weight:700;color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057));text-decoration:none}
.cheshire-site-title:hover{text-decoration:underline}
.cheshire-site-tagline{margin:.1rem 0 0;font-size:.85rem;color:var(--cheshire-text-muted,#777)}
/* Theme-Baukasten Etappe 2 (Peter-Freigabe 21.08.2026): Logo-Position +
   Sticky-Header, siehe Cheshire\Services\Theme::logoPosition()/config(). */
.cheshire-site-logo img{max-height:2.3rem;width:auto;display:block}
.cheshire-site-header--logo-center{justify-content:center;text-align:center;flex-wrap:wrap}
.cheshire-site-header--logo-center .cheshire-site-heading{align-items:center}
.cheshire-site-header--logo-right{flex-direction:row-reverse}
.cheshire-site-header--sticky{position:sticky;top:0;z-index:50;background:var(--cheshire-surface,#fff);box-shadow:var(--cheshire-shadow-sm,0 1px 4px rgba(0,0,0,.08))}
/* Theme-Baukasten Etappe 4 (Peter-Freigabe 21.08.2026): Eckdekoration, siehe
   Cheshire\Services\Theme::config()-Kommentar zum Scope (Header/Topbar/
   Buttons-Chrome, nicht jede Karte). Ohne Einstellung 0 = unveraendert. */
.cheshire-site-header{border-radius:var(--cheshire-radius,0);box-shadow:var(--cheshire-radius-shadow,none)}
/* Peter-Wunsch 07.09.2026: Header ausserhalb von .cheshire-wrap gerendert
   (siehe Bootstrap.php SITE_HEADER_OUTSIDE_HTML/_layout.htt) -- eigener
   Selektor statt .cheshire-wrap-Kindauswahl, da kein Nachfahre mehr. Gleiche
   Breite/Zentrierung wie der Inhalt darunter, damit nichts optisch springt. */
.cheshire-site-header--outside{max-width:var(--cheshire-content-width,960px);margin:0 auto;margin-top:var(--cheshire-header-padding-top,0);padding:1.2rem 1rem .8rem}

/* ── Topbar (login/logout bar) — als durchgehende Farbleiste statt duenner
   Trennlinie, naeher an der WBCE-Vorlage (Peter-Wunsch "mehr Konturen") ── */
.cheshire-topbar{display:flex;justify-content:flex-end;align-items:center;gap:.8rem;padding:.55rem 1rem;font-size:.85rem;background:var(--cheshire-header-bg,var(--cheshire-primary,#2E4057));color:#fff;border-radius:var(--cheshire-radius,6px);box-shadow:var(--cheshire-radius-shadow,none);margin-bottom:1rem}
/* Bugfix-Vorschlag (Peter-Erklaerung 13.09.2026, "muss Cookies loeschen
   damit CSS-Aenderungen zu sehen sind"): Hinweis nur fuer Admins, wenn das
   30-Tage-Vorschau-Cookie (Bootstrap.php) die echte AdminCP-Theme-
   Einstellung ueberdeckt. Bewusst auffaellig/warnfarben, kein normaler
   Hinweiskasten. */
.cheshire-preview-notice{background:#fff3cd;color:#664d03;border:1px solid #ffe69c;border-radius:6px;padding:.5rem .8rem;font-size:.82rem;margin-bottom:1rem}
.cheshire-preview-notice a{color:#664d03;text-decoration:underline;font-weight:600}
/* 2.44-Restpunkt 1 (24.08.2026): kompaktes 26px-Logo sitewide in der
   Topbar, siehe Bootstrap::setGlobals() ($topbar_logo). margin-right:auto
   schiebt Burger/Nav-Links/Toggle weiterhin ans rechte Ende. */
.cheshire-topbar-logo{margin-right:auto;display:inline-flex;align-items:center;font-size:1.2rem;line-height:1;text-decoration:none}
.cheshire-topbar-logo img{height:26px;width:auto;display:block;border-radius:4px}
/* 2.44-Restpunkt 1 Nachbesserung (Peter-Vorgabe 26.08.2026): Modus statt Seite
   entscheidet, was sichtbar ist -- Integriert zeigt das kompakte Logo immer
   (Grundregel oben), Hybrid/Standalone zeigt stattdessen sitewide den grossen
   Banner und blendet das kompakte Logo erst unterhalb des Breakpoints ein. */
.cheshire-wrap:not(.cheshire-integrated) .cheshire-topbar-logo{display:none}
@media (max-width:768px){
    .cheshire-wrap:not(.cheshire-integrated) .cheshire-site-header{display:none}
    /* .cheshire-site-header--outside sitzt ausserhalb von .cheshire-wrap,
       braucht daher einen eigenen Selektor ohne Wrap-Vorfahren-Bedingung. */
    .cheshire-site-header--outside{display:none}
    .cheshire-wrap:not(.cheshire-integrated) .cheshire-topbar-logo{display:inline-flex}
}
.cheshire-btn-login,.cheshire-btn-register,.cheshire-btn-logout,.cheshire-btn-pm,.cheshire-btn-mod{padding:.2rem .6rem;border-radius:var(--cheshire-radius,4px);text-decoration:none;font-size:.82rem;border-color:rgba(255,255,255,.6)!important;color:#fff!important}
.cheshire-btn-login{background:rgba(255,255,255,.18)}
/* Theme-Baukasten Etappe 3 (Peter-Freigabe 21.08.2026, Styling-only): Nav-
   Link-Farben + Burger-Menue. Burger-Button standardmaessig unsichtbar --
   erscheint nur innerhalb des dynamischen @media-Blocks aus
   Cheshire\Services\Theme::navCssBlock() (Breakpoint > 0 gesetzt). */
.cheshire-topbar a{color:var(--cheshire-nav-link,#fff)}
.cheshire-topbar a:hover{color:var(--cheshire-nav-hover,#fff);background:rgba(255,255,255,.18)}
.cheshire-topbar a.active{color:var(--cheshire-nav-active,#fff);text-decoration:underline;font-weight:600}
.cheshire-nav-links{display:flex;align-items:center;gap:.8rem;flex-wrap:wrap}
.cheshire-nav-burger{display:none;background:none;border:1px solid rgba(255,255,255,.5);color:inherit;border-radius:var(--cheshire-radius,4px);width:2rem;height:2rem;font-size:1.1rem;line-height:1;cursor:pointer;align-items:center;justify-content:center}
/* Theme-Baukasten Etappe 4 Teil 2 (Peter-Freigabe 21.08.2026): Navigations-
   Icons SVG-Modus, siehe NavIcons.php. stroke="currentColor" im SVG folgt
   automatisch der jeweiligen Nav-Link-/Hover-/Aktiv-Farbe (color-Vererbung),
   ohne Einstellung ('text', Default) taucht diese Klasse nie im Markup auf. */
.cheshire-nav-icon{display:inline-flex;align-items:center;justify-content:center;width:1em;height:1em;margin-right:.35em;vertical-align:-0.125em}
.cheshire-nav-icon svg{width:1em;height:1em;display:block}
/* Theme-Baukasten Etappe 4 Teil 3 (Dark Mode, Peter-Freigabe 21.08.2026):
   Besucher-Umschalter fuer Hell/Dunkel, immer sichtbar (anders als der
   Burger, der nur ab einem Breakpoint erscheint) -- Klick-Logik in
   cheshire.js, Icon wird serverseitig passend zum Cookie vorgerendert. */
.cheshire-color-toggle{background:none;border:1px solid rgba(255,255,255,.5);color:inherit;border-radius:var(--cheshire-radius,4px);width:2rem;height:2rem;font-size:1rem;line-height:1;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;margin-left:.5rem;flex:0 0 auto}
.cheshire-color-toggle:hover{background:rgba(255,255,255,.18)}

/* Freie Links (Backlog #392, Peter-Freigabe 11.09.2026): reine Textlinks,
   keine Badge/Icon-Optik (siehe CustomLinks.php-Kopfkommentar). Ein
   Markup fuer Header (in .cheshire-topbar, erbt dessen Linkfarbe/Hover
   ueber die bestehenden ".cheshire-topbar a"-Regeln) und Footer (eigener
   Rahmen unten auf der Seite). */
.cheshire-custom-links{display:flex;flex-wrap:wrap;gap:.6rem;justify-content:center;padding:.8rem 1rem;margin-top:1rem;font-size:var(--cheshire-custom-links-font-size,.82rem);color:var(--cheshire-text-muted,#777);border-top:1px solid var(--cheshire-border,#e2e6ea)}
.cheshire-custom-links a{color:inherit;text-decoration:none}
.cheshire-custom-links a:hover{text-decoration:underline}
.cheshire-topbar .cheshire-custom-links{padding:0;margin:0 0 0 .4rem;border-top:none;font-size:var(--cheshire-custom-links-font-size,.82rem);gap:.6rem;flex-wrap:nowrap}
/* Nachbesserung 13.09.2026 (Peter-Meldung: "muss in den Header rechts oben,
   nicht Top NAVI"): Header-Links sitzen jetzt als drittes Flex-Kind im
   .cheshire-site-header (siehe Bootstrap.php $header_links_html) --
   margin-left:auto schiebt sie an den rechten Rand, align-self:flex-start
   haelt sie oben statt vertikal mittig (der Header ist align-items:center).
   Bekannte Einschraenkung: bei Logo-Position "rechts" (flex-direction:
   row-reverse) ist die Reihenfolge visuell vertauscht -- seltene Kombination,
   bewusst nicht extra behandelt (siehe Kommentar Theme-Baukasten Etappe 2). */
/* Nachbesserung 13.09.2026 Teil 2 (Peter-Meldung: Logo-Position "Mittig"
   wird trotz Einstellung links angezeigt -- Ursache war margin-left:auto
   als drittes Flex-Kind im selben Flex-Layout wie Logo/Titel, das mit
   .cheshire-site-header--logo-center's justify-content:center konkurriert
   und das Logo nach links verdraengt hat). Jetzt eine echte "freistehende
   Containerbox" per position:absolute, komplett aus dem Flex-Layout der
   Logo-Positionierung herausgenommen -- funktioniert dadurch unabhaengig
   von Links/Mittig/Rechts (und behebt nebenbei auch die vorher dokumentierte
   Einschraenkung bei Logo-Position "Rechts"/row-reverse). Braucht
   position:relative auf .cheshire-site-header, siehe Basis-Regel oben. */
.cheshire-header-links{position:absolute;top:.15rem;right:0;border-top:none;padding:0;margin:0;flex-wrap:nowrap}

/* Wer-ist-online-Footerzeile (Peter-Wunsch 29.09.2026): sitzt direkt VOR
   den Freien Links (siehe _layout.htt/Renderer::injectAssets() -- gleiche
   Dual-Modus-Reihenfolge). Peter-Nachbesserung 29.09.2026: linksbuendig
   statt zentriert, "Statistiken"-Button entfernt (Online.php); Modern/
   Support-Theme geben ihr zusaetzlich den Kategorie-Kasten-Look (siehe
   dortige .cheshire-wio-footer-Ueberschreibung, analog .cheshire-category) --
   Default/Klassisch bleiben bei der schlichten Rahmenlinie wie .cheshire-
   category dort auch keinen Kasten hat.
   Peter-Nachbesserung 2 (29.09.2026, "zu breit, sollte genau so breit sein
   wie bei der Kategorie"): die Zeile sitzt in _layout.htt/Renderer bewusst
   AUSSERHALB von .cheshire-wrap (gleiche Position wie Freie Links, die aber
   keinen eigenen Kasten haben und die Ueberbreite daher nie auffiel) --
   ohne eigene Breitenbegrenzung zog sie ueber die volle Body-Breite statt
   der 960px-Inhaltsspalte. max-width/margin:auto hier dupliziert bewusst
   .cheshire-wrap (siehe dort), damit die Box exakt die Kategorie-Breite
   trifft, egal wo im DOM sie landet. */
.cheshire-wio-footer{display:flex;flex-wrap:wrap;align-items:baseline;gap:.5rem;padding:.6rem 1rem;margin:1rem auto 0;max-width:var(--cheshire-content-width,960px);font-size:.82rem;color:var(--cheshire-text-muted,#777);border-top:1px solid var(--cheshire-border,#e2e6ea);justify-content:flex-start}
.cheshire-wio-footer-total{font-weight:600;color:var(--cheshire-text,#333)}
.cheshire-wio-footer-detail{color:inherit}
.cheshire-wio-footer-detail a{color:var(--cheshire-brand-text,var(--cheshire-accent,#3D6B8C));text-decoration:none}
.cheshire-wio-footer-detail a:hover{text-decoration:underline}

/* ── Hilfe/Handbuch (FAQ) ── */
.cheshire-help-intro{color:var(--cheshire-text-muted,#666);margin-bottom:1.2rem}
.cheshire-help-sections{display:flex;flex-direction:column;gap:1.2rem}
.cheshire-help-cat{background:var(--cheshire-surface-alt,#f9fafb);border:1px solid var(--cheshire-border,#eee);border-radius:8px;padding:.9rem 1.2rem}
.cheshire-help-cat h2{margin:0 0 .5rem;font-size:1.05rem}
.cheshire-help-badge{font-size:.72rem;font-weight:400;color:#E67E22;border:1px solid var(--cheshire-warning-border,#E67E22);border-radius:4px;padding:.05rem .4rem;margin-left:.4rem}
.cheshire-help-list{margin:0;padding-left:1.2rem}
.cheshire-help-list li{margin:.25rem 0}
.cheshire-help-list a{color:var(--cheshire-brand-text,var(--cheshire-accent,#3D6B8C));text-decoration:none}
.cheshire-help-list a:hover{text-decoration:underline}
.cheshire-help-empty{color:var(--cheshire-text-faint,#999)}
.cheshire-help-article table{border-collapse:collapse;margin:.8rem 0;width:100%}
.cheshire-help-article th,.cheshire-help-article td{border:1px solid var(--cheshire-border,#eee);padding:.4rem .6rem;text-align:left;font-size:.9rem}
.cheshire-help-article blockquote{border-left:3px solid var(--cheshire-border-strong,#ddd);margin:.6rem 0;padding:.2rem 1rem;color:var(--cheshire-text-muted,#555)}
.cheshire-help-article code{background:var(--cheshire-surface-alt,#f4f4f4);padding:.1rem .3rem;border-radius:3px;font-size:.88rem}
.cheshire-btn-login{background:var(--cheshire-primary,#2E4057);color:#fff}
.cheshire-btn-register{border:1px solid var(--cheshire-brand-text,var(--cheshire-primary,#2E4057));color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057))}
.cheshire-btn-logout{border:1px solid #aaa;color:var(--cheshire-text-muted,#666)}
.cheshire-btn-pm{padding:.2rem .6rem;border-radius:4px;text-decoration:none;font-size:.82rem;border:1px solid var(--cheshire-brand-text,var(--cheshire-accent,#3D6B8C));color:var(--cheshire-brand-text,var(--cheshire-accent,#3D6B8C))}

/* ── Password strength bar ── */
.cheshire-pw-strength-wrap{margin:.4rem 0 .6rem}
.cheshire-pw-strength-wrap:not(:empty){background:var(--cheshire-surface,#fff);border:1px solid var(--cheshire-border-strong,#ddd);border-radius:4px;padding:.5rem .7rem}
#cheshire-pw-strength{position:relative;z-index:1}

/* ── MFA Instructions ── */
.cheshire-mfa-instructions{background:var(--cheshire-info-bg,#EBF5FB);border:1px solid var(--cheshire-info-border,#AED6F1);border-radius:6px;padding:1rem;margin:.8rem 0;font-size:.9rem}
.cheshire-mfa-instructions ol{margin:.5rem 0 0 1.2rem;padding:0}
.cheshire-mfa-instructions li{margin:.4rem 0}

/* ── Newbie-Link-Hinweise (#890, Peter-Feedback 25.09.2026: bisherige
   .cheshire-mfa-instructions-Box war "zu unscheinbar") -- deutlich
   auffaelligere Warnbox statt der zuvor wiederverwendeten, dezenten
   Info-Box; Modifier -blocked nutzt die staerkeren Danger-Tokens fuer
   den abgewiesenen Beitrag (schwerwiegenderer Fall als der Notice-Hinweis).
   @see ThreadController::create()/reply()/editPost() (NOTICE_HTML) */
.cheshire-link-warning{display:flex;align-items:flex-start;gap:.6rem;background:var(--cheshire-warning-bg,#fff8e6);border:1px solid var(--cheshire-warning-border,#f0c36d);border-left:5px solid var(--cheshire-warning-border,#f0c36d);border-radius:6px;padding:.9rem 1.1rem;margin:.8rem 0;font-size:.92rem;font-weight:600;color:var(--cheshire-warning-text,#8a6d3b)}
.cheshire-link-warning-icon{font-size:1.4rem;line-height:1;flex-shrink:0}
.cheshire-link-warning-text{font-weight:600}
.cheshire-link-warning-text small{display:block;font-weight:400;margin-top:.25rem;font-size:.85rem;opacity:.9}
.cheshire-link-warning--blocked{background:var(--cheshire-danger-bg,#fdecea);border-color:var(--cheshire-danger-border,#e6b3ad);color:var(--cheshire-danger-text,#C0392B)}
/* 4.42 (IL01-03, Peter-Wunsch 02.10.2026): Hinweis auf kaputte interne Links
   -- gleiche Warn-Box wie oben, Liste der Treffer + Alternativ-Vorschlaege
   (IL02) als eigener Block statt der einzeiligen <small>. @see ThreadController::show() */
.cheshire-link-warning-list{margin:.4rem 0 0;padding-left:1.1rem;font-weight:400;font-size:.85rem;opacity:.9}
.cheshire-link-warning-list li{margin:.15rem 0}
.cheshire-link-warning-list a{text-decoration:underline}
/* Backlog #921 TP3 (Peter-Wunsch 28.09.2026): Loeschanfrage-Hinweisbanner
   im Thema -- gleiche Warn-Tokens wie .cheshire-link-warning oben, damit
   Hell-/Dunkelmodus automatisch mitgezogen wird. */
.cheshire-notice{display:flex;align-items:flex-start;gap:.6rem;border-radius:6px;padding:.9rem 1.1rem;margin:.8rem 0;font-size:.92rem}
.cheshire-notice-warn{background:var(--cheshire-warning-bg,#fff8e6);border:1px solid var(--cheshire-warning-border,#f0c36d);border-left:5px solid var(--cheshire-warning-border,#f0c36d);color:var(--cheshire-warning-text,#8a6d3b)}
.cheshire-backup-codes{list-style:none;padding:0;display:flex;flex-wrap:wrap;gap:.5rem;margin:.8rem 0}
.cheshire-backup-codes li code{background:var(--cheshire-surface-alt,#f0f0f0);padding:.3rem .6rem;border-radius:4px;font-family:monospace;font-size:.9rem}

/* MD Inline Render */
[id^="cheshire-md-"] h1,[id^="cheshire-md-"] h2,[id^="cheshire-md-"] h3{color:var(--cheshire-brand-text,var(--cheshire-primary,#2E4057));margin:.8rem 0 .3rem;line-height:1.3}
[id^="cheshire-md-"] h1{font-size:1.3rem;border-bottom:1px solid var(--cheshire-border-strong,#ddd);padding-bottom:.2rem}
[id^="cheshire-md-"] h2{font-size:1.1rem}
[id^="cheshire-md-"] pre{background:#1e1e1e;color:var(--cheshire-text-faint,#d4d4d4);padding:.7rem 1rem;border-radius:5px;overflow-x:auto;font-size:.83rem}
[id^="cheshire-md-"] code{background:var(--cheshire-surface-alt,#f0f4f8);padding:.1rem .3rem;border-radius:3px;font-size:.85rem;color:var(--cheshire-danger-text,#c7254e)}
[id^="cheshire-md-"] pre code{background:none;padding:0;color:var(--cheshire-text-faint,#d4d4d4)}
[id^="cheshire-md-"] blockquote{border-left:3px solid var(--cheshire-brand-text,var(--cheshire-accent,#3D6B8C));margin:.5rem 0;padding:.3rem .7rem;background:var(--cheshire-surface-alt,#f0f4f8);color:var(--cheshire-text-muted,#555);border-radius:0 4px 4px 0}
[id^="cheshire-md-"] table{border-collapse:collapse;width:100%;margin:.5rem 0;font-size:.88rem}
[id^="cheshire-md-"] th{background:var(--cheshire-primary,#2E4057);color:#fff;padding:.35rem .6rem;text-align:left}
[id^="cheshire-md-"] td{border:1px solid var(--cheshire-border-strong,#ddd);padding:.3rem .6rem}
[id^="cheshire-md-"] tr:nth-child(even){background:var(--cheshire-surface-alt,#f8f9fa)}
[id^="cheshire-md-"] a{color:var(--cheshire-brand-text,var(--cheshire-accent,#3D6B8C))}
[id^="cheshire-md-"] hr{border:none;border-top:1px solid var(--cheshire-border-strong,#ddd);margin:1rem 0}

/* FSK-Bestaetigungsseite */
.cheshire-fsk-gate{max-width:600px;margin:2rem auto;text-align:center;background:var(--cheshire-warning-bg,#fff3cd);border:1px solid var(--cheshire-warning-border,#ffc107);border-radius:8px;padding:1.5rem}
.cheshire-fsk-gate h1{margin-top:0;font-size:1.3rem}
.cheshire-btn-primary{background:var(--cheshire-primary,#2E4057);color:#fff;border:none;border-radius:5px;padding:.6rem 1.4rem;font-size:1rem;cursor:pointer;margin:.8rem 0}
.cheshire-btn-primary:hover{background:var(--cheshire-accent,#3D6B8C)}

/* Bewerbungen-Ticker (1.28) */
.cheshire-applications-ticker{display:flex;align-items:center;justify-content:space-between;gap:.8rem;flex-wrap:wrap;background:var(--cheshire-warning-bg,#fff3cd);border:1px solid var(--cheshire-warning-border,#ffc107);border-radius:6px;padding:.6rem 1rem;margin-bottom:.8rem;font-size:.9rem}
.cheshire-btn-apply{background:var(--cheshire-primary,#2E4057);color:#fff;border:none;border-radius:5px;padding:.4rem .9rem;text-decoration:none;font-size:.85rem;white-space:nowrap}
.cheshire-btn-apply:hover{background:var(--cheshire-accent,#3D6B8C)}
.cheshire-app-position{border:1px solid var(--cheshire-border,#eee);border-radius:8px;padding:.8rem 1rem;margin-bottom:.8rem}
.cheshire-app-position h3{margin:0 0 .5rem}
.cheshire-app-status{display:inline-block;padding:.3rem .7rem;border-radius:5px;font-size:.85rem}
.cheshire-app-pending{background:var(--cheshire-warning-bg,#fff3cd);color:var(--cheshire-warning-text,#856404)}
.cheshire-app-approved{background:var(--cheshire-success-bg,#d4edda);color:var(--cheshire-success-text,#155724)}
.cheshire-app-rejected-note{color:var(--cheshire-danger-text,#C0392B);font-size:.85rem}
.cheshire-app-description{background:var(--cheshire-surface-alt,#f4f6f8);border-radius:5px;padding:.6rem .8rem;font-size:.88rem;color:var(--cheshire-text,#444);margin:.4rem 0}

/* Signatur-Bild-Galerie (Backlog #24) */
.cheshire-sig-gallery{margin-top:1rem;padding-top:.8rem;border-top:1px solid var(--cheshire-border,#eee);max-width:600px}
.cheshire-sig-gallery-grid{display:flex;flex-wrap:wrap;gap:.6rem;margin:.6rem 0}
.cheshire-sig-gallery-item{position:relative;border:1px solid var(--cheshire-border-strong,#ddd);border-radius:6px;padding:.3rem;background:var(--cheshire-surface-alt,#fafafa)}
.cheshire-sig-gallery-item img{display:block;max-width:100px;max-height:80px;border-radius:4px;cursor:pointer}
.cheshire-sig-gallery-item img:hover{outline:2px solid var(--cheshire-brand-text,var(--cheshire-accent,#3D6B8C))}
.cheshire-sig-gallery-item form{position:absolute;top:-.5rem;right:-.5rem}
.cheshire-sig-gallery-item button{border:1px solid var(--cheshire-border-strong,#ddd);background:var(--cheshire-surface,#fff);border-radius:50%;width:22px;height:22px;line-height:1;cursor:pointer;font-size:.75rem}
.cheshire-sig-gallery-upload{margin-top:.4rem}
.cheshire-sig-rules-confirm{display:flex;align-items:center;gap:.4rem;font-size:.85rem;margin:.4rem 0}
.cheshire-sig-report-link{display:inline-block;margin-top:.3rem;font-size:.75rem;color:var(--cheshire-text-faint,#999);text-decoration:none}
.cheshire-sig-report-link:hover{color:var(--cheshire-danger-text,#C0392B);text-decoration:underline}
/* Peter-Wunsch 20.09.2026: "Signatur melden" neben die Auf-/Zuklapp-
   Ueberschrift statt unterhalb des Inhalts -- ueberschreibt den Block-
   Abstand von oben fuer diesen Kontext, gleiches Ausblenden bei
   zugeklapptem Block wie beim Label (kompakte Icon-Leiste). */
details.cheshire-content-block summary .cheshire-sig-report-link{display:inline;margin-top:0;margin-left:.6rem;font-weight:400}
details.cheshire-content-block:not([open]) summary .cheshire-sig-report-link{display:none}
.cheshire-sig-gallery-item-locked{background:var(--cheshire-danger-bg,#fdf0ee)}
.cheshire-sig-gallery-locked-badge{display:block;font-size:.7rem;color:var(--cheshire-danger-text,#c0392b);text-align:center;margin-top:.2rem}

/* Video-Upload/-Embed (#91, donor_only) */
.cheshire-attachment-video video{display:block;border-radius:6px;background:#000}
.cheshire-video-embed{position:relative;max-width:560px;margin:.6rem 0;aspect-ratio:16/9}
.cheshire-video-embed iframe{width:100%;height:100%;border-radius:6px}
/* DSGVO Klick-zum-Laden-Platzhalter (Peter-Wunsch) statt Auto-Embed */
.cheshire-video-consent{display:flex;align-items:center;justify-content:center;background:var(--cheshire-surface-alt,#eef1f4);border:1px solid var(--cheshire-border-strong,#d5dce3);border-radius:6px}
.cheshire-video-load-btn{display:flex;flex-direction:column;align-items:center;gap:.3rem;background:var(--cheshire-surface,#fff);border:1px solid var(--cheshire-brand-text,var(--cheshire-accent,#3D6B8C));color:var(--cheshire-brand-text,var(--cheshire-accent,#3D6B8C));border-radius:6px;padding:.7rem 1.2rem;font-size:1rem;cursor:pointer}
.cheshire-video-load-btn:hover{background:var(--cheshire-accent,#3D6B8C);color:#fff}
.cheshire-video-load-btn small{font-size:.72rem;font-weight:normal;color:inherit;opacity:.8}

/* 3.15/TP6: generische DSGVO-Embeds (YouTube/Vimeo/SoundCloud/Spotify via
   [embed=URL], Peter-Freigabe 09.09.2026) -- gleiches Klick-zum-Laden-Muster
   wie Video oben, aber ohne feste 16:9-Annahme (Audio-Player sind flacher). */
.cheshire-embed{position:relative;max-width:560px;margin:.6rem 0;min-height:160px}
.cheshire-embed iframe{width:100%;height:100%;min-height:160px;border-radius:6px;border:0}
.cheshire-embed-consent{display:flex;align-items:center;justify-content:center;min-height:120px;background:var(--cheshire-surface-alt,#eef1f4);border:1px solid var(--cheshire-border-strong,#d5dce3);border-radius:6px}
.cheshire-embed-load-btn{display:flex;flex-direction:column;align-items:center;gap:.3rem;background:var(--cheshire-surface,#fff);border:1px solid var(--cheshire-brand-text,var(--cheshire-accent,#3D6B8C));color:var(--cheshire-brand-text,var(--cheshire-accent,#3D6B8C));border-radius:6px;padding:.7rem 1.2rem;font-size:1rem;cursor:pointer}
.cheshire-embed-load-btn:hover{background:var(--cheshire-accent,#3D6B8C);color:#fff}
.cheshire-embed-load-btn small{font-size:.72rem;font-weight:normal;color:inherit;opacity:.8}

/* Design-Runde 3 TP1 (Peter-Freigabe 13.09.2026): gemeinsames Rahmen-Muster
   fuer Beitrags-Inhaltsbloecke (Anhaenge/Signatur/Support-Wunschliste,
   erweiterbar fuer kuenftige Bloecke) -- sichtbarer Kontrast, damit
   Beitragsende und Block-Anfang nicht "ineinander verschwimmen" (Peter).
   Details/Summary fuer native Klapplogik ohne JS-Pflicht; Bildschirmgroessen-
   abhaengiger Default (offen/zu) folgt in TP2 (cheshire.js + Breakpoint).
   @see src/Services/Signature.php, src/Services/Support.php,
        src/Controllers/ThreadController.php */
details.cheshire-content-block{margin:.5rem 0;border:1px solid var(--cheshire-border-strong,#ddd);border-radius:6px;padding:.4rem .7rem;background:var(--cheshire-surface-alt,#f7f8fa)}
details.cheshire-content-block summary{cursor:pointer;font-size:.82rem;color:var(--cheshire-text-muted,#555);font-weight:600;list-style:revert}
details.cheshire-content-block[open] summary{margin-bottom:.5rem}
/* Rueckbau TP2 (Peter-Wunsch 20.09.2026): die "kompakte Icon-Leiste" bei
   zugeklapptem Block (nur Icon, Labeltext ausgeblendet, siehe 13.09.2026)
   war zu knapp -- "ohne Namen ist man ratlos, auch wenn das ein Bleistift
   ist". Label bleibt jetzt auch zugeklappt sichtbar (betrifft einheitlich
   Anhaenge/Signatur/Support-Wunschliste, gleiche Klasse). Der "Signatur
   melden"-Link (.cheshire-sig-report-link) bleibt weiterhin nur bei
   AUFgeklapptem Block sichtbar, siehe eigene Regel unten. */

/* Bugfix (Peter 31.08.2026): Absicherungs-CSS fuer per fetch() nachgeladenen
   MD-Anhang-Inhalt (siehe ThreadController.php-Kommentar) -- ohne diese
   Regeln konnten breite Tabellen/Code-Zeilen die Seite aufreissen. */
.cheshire-md-inline{max-width:100%}
.cheshire-md-inline *{max-width:100%;box-sizing:border-box}
.cheshire-md-inline pre{background:#1e1e1e;color:#d4d4d4;padding:1rem 1.2rem;border-radius:6px;overflow-x:auto;font-size:.88rem;line-height:1.5}
.cheshire-md-inline code{background:var(--cheshire-surface-alt,#f0f4f8);padding:.1rem .35rem;border-radius:3px;font-size:.88rem;color:#c7254e}
.cheshire-md-inline pre code{background:none;padding:0;color:#d4d4d4}
.cheshire-md-inline table{border-collapse:collapse;width:100%;margin:.8rem 0;table-layout:fixed}
.cheshire-md-inline th{background:var(--cheshire-primary,#2E4057);color:#fff;padding:.5rem .8rem;text-align:left}
.cheshire-md-inline td{border:1px solid var(--cheshire-border,#ddd);padding:.4rem .8rem;word-break:break-word}
.cheshire-md-inline img{height:auto;border-radius:4px}
.cheshire-md-inline blockquote{border-left:4px solid var(--cheshire-accent,#3D6B8C);margin:.8rem 0;padding:.4rem .8rem .4rem 1rem;background:var(--cheshire-surface-alt,#f0f4f8);color:#555;border-radius:0 4px 4px 0}
.cheshire-md-inline p,.cheshire-md-inline li{overflow-wrap:anywhere}

/* Bugfix (Peter/Florian-Meldung Teil 5, 18.09.2026: "Markdown-Tabellen-
   Rendering"): Parsedown rendert GFM-Tabellen technisch korrekt, aber ohne
   jede CSS-Absicherung landete das <table> unstyled/roh in .cheshire-post-
   content -- .cheshire-md-inline (MD-Anhangsvorschau, siehe oben) hatte
   dieses Problem schon lange geloest, normale Markdown-Beitraege aber nicht.
   Gleiche Optik wie dort uebernommen, jetzt auch fuer echte Beitraege. */
.cheshire-post-content table{border-collapse:collapse;width:100%;margin:.8rem 0;table-layout:fixed}
.cheshire-post-content th{background:var(--cheshire-primary,#2E4057);color:#fff;padding:.5rem .8rem;text-align:left}
.cheshire-post-content td{border:1px solid var(--cheshire-border,#ddd);padding:.4rem .8rem;word-break:break-word}
.cheshire-post-content tr:nth-child(2n) td{background:var(--cheshire-surface-alt,#f7f8fa)}

/* Bugfix (Peter/Florian-Meldung Teil 5, 18.09.2026: "Syntax-Highlighting-
   Verbesserung"): Code-Bloecke (BBCode [code]/[html] etc. UND Markdown-
   Fences, siehe Parser::renderCodeBlock()) hatten bisher gar keine eigene
   Box-Optik -- reiner Browser-Default-<pre>. Bewusst eigenstaendig (nicht
   ueber TipTapEditor/assets/prose.css, siehe Kommentar dort) und komplett
   ueber var(--cheshire-x,...) theme-/dark-mode-sicher. Sprache-Badge
   (.ev-code-lang) und Kopier-Button (.ev-code-copy) werden nur eingeblendet,
   wenn addons/TipTapEditor/assets/prose.js sie tatsaechlich einfuegt (siehe
   post.render_after-Hook in TipTapEditor/init.php) -- ohne aktiviertes
   TTE-Addon bleibt der Code-Block trotzdem lesbar/gestylt, nur ohne die
   beiden JS-Extras. */
.cheshire-code{position:relative;font-family:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,"Liberation Mono",monospace;font-size:.88rem;line-height:1.5;background:var(--cheshire-surface-alt,#f6f8fa);border:1px solid var(--cheshire-border-strong,#d0d7de);border-radius:8px;padding:1rem 1.1rem;overflow-x:auto;margin:0 0 1em;tab-size:2}
.cheshire-code code{display:block;background:transparent;padding:0;border:none;font-size:100%;white-space:pre;color:var(--cheshire-text,inherit)}
.ev-code-lang{position:absolute;top:.7rem;right:2.2rem;font-size:11px;font-weight:600;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.05em;text-transform:uppercase;color:var(--cheshire-text-muted,#6e8daa);background:var(--cheshire-surface,#d3e1ee);padding:0 6px;border-radius:6px;user-select:none;pointer-events:none}
.ev-code-copy{position:absolute;top:.3rem;right:.4rem;display:flex;align-items:center;justify-content:center;width:24px;height:20px;padding:0;background:transparent;border:1px solid transparent;border-radius:5px;cursor:pointer;color:var(--cheshire-text-faint,#8c959f);opacity:0;transition:opacity .15s,background .12s,color .12s,border-color .12s;line-height:1}
.cheshire-code:hover .ev-code-copy{opacity:1}
.ev-code-copy:hover{background:var(--cheshire-surface,rgba(255,255,255,.85));border-color:var(--cheshire-border-strong,#d0d7de);color:var(--cheshire-text,#1f2328)}
.ev-code-copy.ev-code-copied{color:var(--cheshire-success-text,#1a7f37);border-color:var(--cheshire-success-border,#2da44e);background:var(--cheshire-success-bg,#dafbe1);opacity:1}
/* hljs-Syntaxfarben: bewusst fixe (nicht var()-basierte) Akzentfarben --
   mittlere Saettigung/Helligkeit, dadurch auf hellem UND dunklem
   --cheshire-surface-alt ausreichend lesbar, ohne 2 komplette Paletten
   pflegen zu muessen. Keine formale WCAG-Pruefung wie bei der UI-Chrome-
   Dark-Palette (Aenderungshistorie "Dark Mode"), nur Sichttest. */
.cheshire-code .hljs-comment,.cheshire-code .hljs-quote{color:#8a9097;font-style:italic}
.cheshire-code .hljs-keyword,.cheshire-code .hljs-selector-tag,.cheshire-code .hljs-built_in,.cheshire-code .hljs-name,.cheshire-code .hljs-tag{color:#c026d3}
.cheshire-code .hljs-string,.cheshire-code .hljs-attr,.cheshire-code .hljs-symbol,.cheshire-code .hljs-bullet{color:#059669}
.cheshire-code .hljs-number,.cheshire-code .hljs-literal,.cheshire-code .hljs-variable,.cheshire-code .hljs-template-variable{color:#d97706}
.cheshire-code .hljs-title,.cheshire-code .hljs-section{color:#3b82f6}
.cheshire-code .hljs-attribute{color:#8b5cf6}
.cheshire-code .hljs-type,.cheshire-code .hljs-selector-id,.cheshire-code .hljs-selector-class{color:#14b8a6}
.cheshire-code .hljs-meta{color:#9098a0}
.cheshire-code .hljs-emphasis{font-style:italic}
.cheshire-code .hljs-strong{font-weight:600}

/* #122 Peter-Wunsch: Bild-Anhänge als horizontale Swipe-Reihe statt
   untereinander mit sichtbarem Dateinamen — Name nur noch als Tooltip
   (title-Attribut) bzw. Alt-Text, Downloads-Zähler kurz & klein. */
.cheshire-att-img-row{display:flex;gap:.5rem;overflow-x:auto;padding:.2rem 0 .5rem;scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch}
.cheshire-att-thumb{position:relative;flex:0 0 auto;display:block;scroll-snap-align:start;border-radius:6px;overflow:hidden;line-height:0}
.cheshire-att-thumb img{display:block;border-radius:6px}
.cheshire-att-thumb-dl{position:absolute;right:.3rem;bottom:.3rem;background:rgba(0,0,0,.6);color:#fff;font-size:.68rem;padding:.05rem .35rem;border-radius:3px;line-height:1.4}

/* Signatur: Auflistung "Beiträge ohne Signatur" (Peter-Wunsch) */
details.cheshire-sig-off-list{margin:.8rem 0;font-size:.85rem}
details.cheshire-sig-off-list summary{cursor:pointer;color:var(--cheshire-text-muted,#555);font-weight:600}
details.cheshire-sig-off-list ul{margin:.4rem 0 0;padding-left:1.2rem}
details.cheshire-sig-off-list li{margin:.2rem 0}

/* ── Theme-/Designpack-Baukasten Etappe 4 (Teil 3): Dark Mode
   (Peter-Freigabe 21.08.2026, "ganze Seite" + AdminCP-Default + Besucher-
   Toggle) ── .cheshire-wrap.cheshire-dark ueberschreibt alle Token-
   Variablen mit der Dunkel-Palette. Jede Farbe im uebrigen Stylesheet
   nutzt var(--cheshire-x,ORIGINAL) -- ohne diese Klasse pixelgleich zum
   bisherigen Stand. Kontrastverhaeltnisse rechnerisch gegen WCAG 2.1 AA
   geprueft (4.5:1 Text, 3:1 UI-Rahmen), siehe Cheshire_Planung_v1.0.md
   Aenderungshistorie. @see Cheshire\Services\Theme::config()['color_mode'],
   Bootstrap.php (Klasse+Toggle-Button), cheshire.js (Umschalt-Logik) */
.cheshire-wrap.cheshire-dark,#cheshire-standalone.cheshire-dark{
  --cheshire-bg:#15171c;
  --cheshire-surface:#1f232b;
  --cheshire-surface-alt:#232a37;
  --cheshire-text:#e7e9ec;
  --cheshire-text-muted:#aab0bd;
  --cheshire-text-faint:#8a90a0;
  --cheshire-border:#2b313d;
  --cheshire-border-strong:#6e7484;
  --cheshire-brand-text:#8ab4e8;
  --cheshire-success-bg:#15301f;
  --cheshire-success-text:#74d18f;
  --cheshire-success-border:#2c5b3a;
  --cheshire-warning-bg:#3a2f10;
  --cheshire-warning-text:#e3c25e;
  --cheshire-warning-border:#5e4d1c;
  --cheshire-danger-bg:#3a1616;
  --cheshire-danger-text:#ef8b8b;
  --cheshire-danger-border:#5c2626;
  --cheshire-info-bg:#12293a;
  --cheshire-info-text:#82c6ea;
  --cheshire-info-border:#234a63;
  --cheshire-shadow-sm:0 1px 4px rgba(0,0,0,.5);
  --cheshire-shadow-md:0 2px 10px rgba(0,0,0,.6);
  /* Backlog #873 (Peter-Feedback 25.09.2026): TipTapEditor/assets/editor.css
     definiert seine eigene, bisher rein helle --ev-*-Palette in einem
     eigenen :root-Block (Addon-Datei, siehe dort). Da CSS-Custom-Properties
     immer vom naechstgelegenen definierenden Vorfahren im DOM gewinnen
     (nicht nach Datei-Reihenfolge), ueberschreibt diese Deklaration hier
     -- INNERHALB desselben .cheshire-dark-Ausgangspunkts -- die --ev-*-
     Werte fuer jedes Element unterhalb von .cheshire-wrap.cheshire-dark
     (die TipTap-Werkzeugleiste/-Editor-Flaeche haengt immer dort drin),
     ohne dass die Addon-Datei selbst angefasst werden muss. Die wenigen
     zusaetzlich hart codierten (nicht-var) Hellfarben in editor.css (z.B.
     Blockquote/Tabellenkopf/Codeblock-Sprachauswahl) werden separat direkt
     in editor.css unter einem eigenen .cheshire-dark-Abschnitt behandelt
     (Addon bleibt eigenstaendig funktionsfaehig ohne Cheshire-Kern).
     @see addons/TipTapEditor/assets/editor.css */
  --ev-bg:#15171c;
  --ev-card:#1f232b;
  --ev-text:#e7e9ec;
  --ev-muted:#aab0bd;
  --ev-border:#2b313d;
  --ev-border-st:#6e7484;
  --ev-hover:#232a37;
  --ev-accent-soft:#15301f;
  --ev-accent-dark:#5fe08a;
  --ev-code-bg:#232a37;
  --ev-shadow:0 8px 28px rgba(0,0,0,.6);
  --ev-shadow-sm:0 2px 10px rgba(0,0,0,.5);
}

/* TP-C1 (Baukasten v2, Baustein C "Schablonen-Katalog", Peter-Freigabe
   25.09.2026): generalisierte, theme-unabhaengige Version des 2-Spalten-
   Grids aus templates/themes/support/thread_show.htt (TP4, 22.09.2026,
   dort noch support-spezifisch benannt). Liegt hier in der gemeinsamen
   Datei (von allen 4 Themes geladen), damit JEDE Seite in JEDEM Theme
   die Schablone "Sidebar rechts" per Klassenname nutzen kann, ohne CSS
   zu duplizieren -- nutzt dieselben CSS-Variablen, die jedes Theme
   bereits definiert (--cheshire-surface/-border-strong/-radius/...).
   templates/themes/support/thread_show.htt bleibt unveraendert (eigene,
   bereits produktive Klassen) -- diese Schablone ist fuer NEUE Seiten
   gedacht, erster Pilot: Profil-Ansicht (TP-C2).
   @see docs/Cheshire_Baukasten_v2_Grobplan.md Abschnitt 3 (Baustein C) */
/* Peter-Feedback 27.09.2026 (Filebase-Screenshot, "Abstand zwischen den
   2 Spalten so aehnlich wie in der Post-Ansicht"): gap von 1.2rem auf 2rem
   erhoeht -- betrifft alle Nutzer dieser Schablone (Filebase, Profil-Pilot
   TP-C2), da .flb-detail (anders als eine Post-Karte) keine eigene
   Rahmen-/Hintergrund-Abgrenzung hat und der schmalere Abstand dadurch
   optisch knapper wirkte als beim identischen Wert in der Support-Theme-
   Thread-Ansicht (.cheshire-support-thread-grid, eigene, unveraenderte
   Klasse -- dort weiterhin 1.2rem, siehe assets/themes/support.css). */
.cheshire-schablone-sidebar-right{display:grid;grid-template-columns:1fr 280px;gap:2rem;align-items:start}
.cheshire-schablone-main{min-width:0}
.cheshire-schablone-sidebar{display:flex;flex-direction:column;gap:1rem;position:sticky;top:1rem}
.cheshire-schablone-sidebar-card{background:var(--cheshire-surface,#fff);border:1px solid var(--cheshire-border-strong,#ddd);border-radius:var(--cheshire-radius,8px);padding:.9rem 1rem}
.cheshire-schablone-sidebar-card h2{margin:0 0 .6rem;font-size:.8rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em;color:var(--cheshire-text-muted,#777)}
.cheshire-schablone-sidebar-card dl{margin:0;display:grid;grid-template-columns:auto 1fr;gap:.3rem .6rem;font-size:.83rem}
.cheshire-schablone-sidebar-card dt{color:var(--cheshire-text-muted,#777)}
.cheshire-schablone-sidebar-card dd{margin:0;text-align:right;color:var(--cheshire-text,#333)}
/* Peter-Feedback 27.09.2026 (Screenshot Neu-Formular, "Spalte 1 wirkt zu
   breit/leer"): nur fuer Formulare (.flb-form) die Hauptspalte auf eine
   sinnvolle Breite begrenzen statt volle Grid-Breite (1fr) -- Sidebar
   bleibt unveraendert 280px, andere Nutzer der Schablone (Detailseite,
   Profil-Pilot) sind von dieser Regel nicht betroffen. */
/* Bugfix #974 (Peter-Meldung 02.10.2026, Screenshot: Filebase-Formular in
   Mobilansicht ueberlappt): diese Regel hat 2 Klassen im Selektor (.flb-form
   .cheshire-schablone-sidebar-right) und damit hoehere Spezifitaet als die
   @media(max-width:960px)-Kollaps-Regel unten (nur 1 Klasse) -- unabhaengig
   von der Reihenfolge im CSS gewinnt die spezifischere Regel, die 960px-
   Regel griff bei Filebase-Formularen also NIE, die 2 Spalten blieben auf
   jedem Viewport erzwungen nebeneinander. Fix: diese Breiten-Vorgabe gilt
   jetzt nur noch oberhalb des Kollaps-Breakpoints, darunter kann die
   allgemeine 1fr-Regel wieder greifen. */
@media (min-width:961px){
  .flb-form .cheshire-schablone-sidebar-right{grid-template-columns:minmax(0,760px) 280px}
}
/* Peter-Feedback 27.09.2026 ("beide Spalten zu nahe zusammen, kein
   Cellspacing/Padding", Klaro-Consent-Manager-Screenshot): der 2rem-Gap
   allein reichte nicht, weil .flb-detail (anders als die Sidebar-Karten)
   keine eigene Rahmen-/Hintergrund-Flaeche hatte -- Hauptspalte bekommt
   jetzt denselben Karten-Look wie .cheshire-schablone-sidebar-card, damit
   die Trennung der 2 Spalten eindeutig sichtbar ist. */
/* Peter-Feedback 28.09.2026 (Screenshot mit rotem Rahmen "Add-On
   Repository"-Detailseite): die 3.90-Regel nutzte --cheshire-surface als
   Hintergrund -- dessen Fallback (#fff) ist in JEDEM Theme mit hellem
   Modus identisch zur Seiten-Hintergrundfarbe (Seite ist selbst weiss/
   transparent), zusaetzlich ist --cheshire-surface im Hell-Modus der
   Theme-CSS-Dateien gar nicht im :root definiert (nur in .cheshire-dark),
   d.h. der Fallback greift praktisch immer -- die Hauptspalte hatte dadurch
   NIE einen sichtbaren Flaechenkontrast zur Seite, nur die duenne 1px-
   Umrandung, die im Zusammenspiel mit dem leeren Grid-Gap kaum auffiel und
   wie eine durchgehende Flaeche mit der Sidebar wirkte. Fix: Hintergrund auf
   --cheshire-surface-alt (mit sichtbar abgesetztem Fallback-Grauton) statt
   --cheshire-surface -- dadurch immer ein klarer Flaechenunterschied zur
   (weissen) Seite, unabhaengig davon ob das Theme eigene Variablen setzt. */
.flb-detail .cheshire-schablone-main{background:var(--cheshire-surface-alt,#f2f4f8);border:1px solid var(--cheshire-border-strong,#d3d8de);border-radius:var(--cheshire-radius,8px);padding:1rem 1.2rem}
@media (max-width:960px){
  .cheshire-schablone-sidebar-right{grid-template-columns:1fr}
  .cheshire-schablone-sidebar{position:static}
}

/* TP-C1b (Baukasten v2, Baustein C "Schablonen-Katalog", Peter-Freigabe
   25.09.2026): zweite Schablone "Card-Grid" -- Kategorien/Themen als
   Kacheln statt Listenzeilen, a la Discourse/Reddit (Peter-Auswahl aus
   dem Schablonen-Mockup 25.09.2026). Gleiches Prinzip wie oben: fertige,
   theme-unabhaengige CSS-Klassen, kein neues Markup-System -- eine Seite
   nutzt diese Schablone einfach, indem ihre Liste diese Klassen traegt.
   Noch OHNE Anwendungsfall verdrahtet (kein Pilot in dieser TP) -- reine
   Bereitstellung der Schablone, analog zur Sidebar-rechts-Schablone oben. */
.cheshire-schablone-card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:1rem}
.cheshire-schablone-card{background:var(--cheshire-surface,#fff);border:1px solid var(--cheshire-border-strong,#ddd);border-radius:var(--cheshire-radius,8px);padding:1rem;display:flex;flex-direction:column;gap:.4rem;transition:box-shadow .15s,transform .15s}
.cheshire-schablone-card:hover{box-shadow:var(--cheshire-shadow-md,0 2px 10px rgba(0,0,0,.08));transform:translateY(-1px)}
.cheshire-schablone-card h3{margin:0;font-size:.95rem;font-weight:600}
.cheshire-schablone-card h3 a{color:inherit;text-decoration:none}
.cheshire-schablone-card p{margin:0;font-size:.83rem;color:var(--cheshire-text-muted,#777);flex:1}
.cheshire-schablone-card .cheshire-schablone-card-meta{display:flex;gap:.6rem;font-size:.78rem;color:var(--cheshire-text-muted,#777);border-top:1px solid var(--cheshire-border,#eee);padding-top:.5rem;margin-top:.2rem}
