
/* ──────────────────────────────
Dynamische Settings (Custom-Props)
────────────────────────────── */
:root {
/* Grundlayout */
--background-color: #f0f0f0;
--table-bg-color: #fbfbfb;
--table-header-bg: #f3f4f6;
--table-row-odd-bg: #ffffff;
--table-row-even-bg: #f9fafb;
--font-family: Inter, sans-serif;
--font-size: 16px;

/* Globale Fallbacks */
--header-size: 24px;
--text-color: #333333;
--heading-color: #1e2761;

/* Überschriften */
--h1-size: 32px;
--h1-color: #2c3e50;

--h2-size: 28px;
--h2-color: #2c3e50;

--h3-size: 24px;
--h3-color: #2c3e50;

/* Legenden */
--legend-color: #1e2761;

/* Buttons */
--button-one-color: #79a7d3;
--button-one-text-color: #ffffff;
--button-one-hover-color: #00264d;
--button-two-color: #c07080;
--button-two-text-color: #ffffff;
--button-two-hover-color: #7a0000;
--button-three-color: #78ad8a;
--button-three-text-color: #ffffff;
--button-three-hover-color: #005a00;

/* Elegante Juwelen-Diagrammfarben */
--chart-total-color: #9A1B27; /* Rotton - Gesamtkosten */
--chart-partial-color: #FFD954; /* Gelbton - Regulierungsbasis */
--chart-liability-color: #2E5A88; /* Blauton - Anerkannte Haftung */
--chart-paid-color: #007F52; /* Grünton - Zahlungen */

/* Kreisdiagramm-Palette */
--chart-pie-1: #2E5A88; /* Saphirblau */
--chart-pie-2: #2D8659; /* Smaragdgrün */
--chart-pie-3: #B04A5A; /* Rubinrot */
--chart-pie-4: #7B5EA7; /* Amethyst */
--chart-pie-5: #C9A227; /* Gold */
--chart-pie-6: #3A9B94; /* Aquamarin */
--chart-pie-7: #D4785C; /* Koralle */
--chart-pie-8: #4A8B6F; /* Jade */
--chart-pie-9: #8E6B8C; /* Pflaume */
--chart-pie-10: #C4A35A; /* Champagner */
--chart-pie-11: #3D6B7D; /* Petrol */
--chart-pie-12: #C48B8B; /* Rosé */
--chart-pie-13: #5B7B4A; /* Moos */
--chart-pie-14: #9B6B47; /* Bronze */
--chart-pie-15: #6B8BA4; /* Taubenblau */
--chart-pie-16: #A67C5B; /* Karamell */

/* Index-Seite Karten-Hintergrundfarben */
--card-bg-1: #D7E1EF;
--card-bg-2: #EEDFDC;
--card-bg-3: #DEE4E9;
--card-bg-4: #F0E7D5;
--card-bg-5: #E4DFED;
--card-bg-6: #E7E6CD;
--card-bg-7: #D4E7E3;

/* Index-Seite Typografie */
--card-title-fs: clamp(22px, 5.4vw, 42px);
--card-text-fs: clamp(17px, 3.4vw, 22px);

--border-radius: 5px;
--padding: 8px;

/* Abstände Container/Page */
--container-padding: 24px;
--page-padding: 28px;

/* Rand-Ornament: Farbpalette, aus der margin-ornament.js pro Ornament-Arm
   kuratierte Zweifarb-Verläufe zusammenstellt (siehe COLOR_PAIRS dort) */
--ornament-color-green: #4f9d86;
--ornament-color-indigo: #1e2761;
--ornament-color-blue: #3d6b8f;
--ornament-color-red: #8a4a52;
--ornament-color-gray: #6b7280;

/* Einheitlicher vertikaler/horizontaler Abstand für gestapelte Layouts.
   Wird pro Breakpoint EINMAL gesetzt statt in jeder Regel einzeln. */
--stack-gap: 20px;
}

/* ──────────────────────────────
Basis-Typografie & Layout
────────────────────────────── */
body{
background-color: var(--background-color);
font-family: var(--font-family);
font-size: var(--font-size);
color: var(--text-color);
margin:0;
padding:0;
line-height:1.6;
}

/* Überschriften mit neuen Variablen */
h1{
font-size: var(--h1-size, var(--header-size));
color: var(--h1-color, var(--heading-color));
font-weight: bold;
margin-top:0;
}
h2{
font-size: var(--h2-size, var(--header-size));
color: var(--h2-color, var(--heading-color));
font-weight: bold;
margin-top:0;
}
h3{
font-size: var(--h3-size, var(--header-size));
color: var(--h3-color, var(--heading-color));
font-weight: bold;
margin-top:0;
}

/* ──────────────────────────────
Formulare & Tabellen
────────────────────────────── */
fieldset{
border:1px solid #ccc;
margin-bottom:20px;
padding:15px;
border-radius:5px;
position:relative;
min-width:0;
}
legend{
/* clamp() ersetzt die früheren Per-Breakpoint-Overrides (1.3em/1.1em/1em) */
font-size:clamp(1em, 3.5vw, 1.5em);
font-weight:bold;
padding:0 10px;
color:var(--legend-color);
}
label{
display:block;
margin-bottom:8px;
font-weight:bold;
}
table{
background-color:var(--table-bg-color);
border-collapse:collapse;
box-shadow:0 4px 6px rgba(0,0,0,.1);
border-radius:8px;
overflow:hidden;
width:100%;
margin-bottom:1rem;
}
table thead tr{background-color:var(--table-header-bg);}
table tbody tr:nth-child(odd){background-color:var(--table-row-odd-bg);}
table tbody tr:nth-child(even){background-color:var(--table-row-even-bg);}
input[type="text"],
input[type="date"],
input[type="time"],
input[type="email"],
input[type="password"],
input[type="number"],
textarea,
select{
width:100%;
padding:8px;
margin-bottom:15px;
border:1px solid #ccc;
border-radius:5px;
font-size:1em;
}
textarea{resize:vertical;}

/* ──────────────────────────────
Nur für Screenreader sichtbar
────────────────────────────── */
.visually-hidden{
position:absolute;
width:1px;height:1px;
margin:-1px;padding:0;border:0;
overflow:hidden;
clip:rect(0 0 0 0);
clip-path:inset(50%);
white-space:nowrap;
}

/* ──────────────────────────────
.static-field – bereits erfasster Wert innerhalb eines Formulars.
Ersetzt Label + <input>, wenn ein Feld nur noch angezeigt werden darf.
Gleiche vertikale Rhythmik wie ein Eingabefeld, aber ohne Rahmen.
────────────────────────────── */
.static-field{
display:grid;
grid-template-columns:1fr auto;
align-items:baseline;
column-gap:8px;
margin-bottom:15px;
padding:0 2px 6px;
border-bottom:1px solid #e2e2e2;
}
.static-field__label{
grid-column:1 / -1;
display:block;
margin-bottom:4px;
font-size:.9em;
opacity:.75;
}
.static-field__value{
padding-top:2px;
overflow-wrap:anywhere;
}
.static-field__empty{opacity:.5;font-style:italic;}
.static-field__lock{
display:block;
width:.85em;height:.85em;
align-self:center;
opacity:.4;
}

/* ──────────────────────────────
Buttons – responsiv per clamp()
────────────────────────────── */
.button-one,
.button-one-right,
.button-two,
.button-two-right,
.button-three,
.button-three-right{
--btn-fs: clamp(.75rem, 1.2vw, .85rem); /* kleinere Schrift */
--btn-py: clamp(.25rem, 0.8vw, .45rem); /* weniger Höhe */
--btn-px: clamp(.70rem, 2.5vw, 1.00rem); /* seitlich etwas kompakter */

display:inline-block;
margin-top:10px;
margin-right:10px;

font-size: var(--btn-fs);
padding: var(--btn-py) var(--btn-px);

text-decoration:none;
border-radius: var(--border-radius);
border:none;
line-height: 1.15;
transition: transform .2s ease, background-color .2s ease;
text-transform: uppercase;

letter-spacing: .6px;
cursor:pointer;
white-space: nowrap;
}

.button-one,
.button-one-right{
background-color:var(--button-one-color);
color:var(--button-one-text-color);
}
.button-one:hover,
.button-one-right:hover{
background-color:var(--button-one-hover-color);
transform: translateY(-1px);
}

.button-two,
.button-two-right{
background-color:var(--button-two-color);
color:var(--button-two-text-color);
}
.button-two:hover,
.button-two-right:hover{
background-color:var(--button-two-hover-color);
transform: translateY(-1px);
}

.button-three,
.button-three-right{
background-color:var(--button-three-color);
color:var(--button-three-text-color);
}
.button-three:hover,
.button-three-right:hover{
background-color:var(--button-three-hover-color);
transform: translateY(-1px);
}

/* Rechte Ausrichtung */
.button-one-right,
.button-two-right,
.button-three-right{ float:right; }

/* Innerhalb eines .button-container regelt der Container-gap die Abstände
   – kein doppelter margin-right/margin-top mehr. */
.button-container .button-one,
.button-container .button-one-right,
.button-container .button-two,
.button-container .button-two-right,
.button-container .button-three,
.button-container .button-three-right{
margin-right:0;
margin-top:0;
}

/* Mobile (≤ 480 px): Touch-Targets gemäß HIG (≥44px) + volle Breite,
   damit Buttons leicht treffbar sind und nicht abgeschnitten werden. */
@media (max-width: 480px){
.button-one,
.button-one-right,
.button-two,
.button-two-right,
.button-three,
.button-three-right{
--btn-fs: .9rem;
--btn-py: .7rem;
--btn-px: 1.1rem;
letter-spacing: .4px;
border-radius: 9px;
white-space: normal;
min-height: 44px;
display: flex;
width: 100%;
margin-right: 0;
float: none;          /* hebt .button-*-right-Float auf → kein Umbruch-Chaos */
align-items: center;
justify-content: center;
text-transform: none;
}
/* Mehrere Buttons untereinander, volle Breite, einheitlicher Abstand */
.button-container{
flex-direction: column;
align-items: stretch;
gap: var(--stack-gap);
}
.button-container .button-one,
.button-container .button-one-right,
.button-container .button-two,
.button-container .button-two-right,
.button-container .button-three,
.button-container .button-three-right{
width: 100%;
}
}

/* Sehr klein (≤ 360 px): nur leicht kompakter, aber Touch-Größe bleibt */
@media (max-width: 360px){
.button-one,
.button-one-right,
.button-two,
.button-two-right,
.button-three,
.button-three-right{
--btn-fs: .85rem;
--btn-px: .9rem;
}
}

/* ──────────────────────────────
Container & Helferklassen
────────────────────────────── */
.button-container{
display:flex;
gap:20px;
justify-content:center;
align-items:center;
margin-top:10px;
flex-wrap: wrap;
}

/* ──────────────────────────────
Einklappbare Fall-Navigation (render_case_nav)
────────────────────────────────
Desktop: Buttons als normale Reihe, KEIN Menü-Button.
Mobile : Buttons hinter einem deutlich erkennbaren „Menü"-Schalter (natives
         <details>/<summary>; den open-Zustand steuert js/nav-menu.js je nach
         Breite und Button-Anzahl, tastatur-/screenreaderfähig).
Wiederverwendbar für andere große Navigationsgruppen. */
.nav-collapse{margin-bottom:20px;}
.nav-collapse > summary{display:none;}   /* Standard: kein Toggle (nur .is-menu blendet ihn ein) */
/* Buttons-Layout NUR, wenn sie sichtbar sein sollen (offen ODER gar kein Menü).
   Einen GESCHLOSSENEN .is-menu lassen wir bewusst in Ruhe, damit das native
   <details>-Verstecken in jedem Browser greift. */
.nav-collapse:not(.is-menu) .nav-buttons,
.nav-collapse[open] .nav-buttons{display:flex;flex-wrap:wrap;}
.alternate-list{padding:0;margin:0;border-radius:8px;overflow:hidden;box-shadow:0 4px 6px rgba(0,0,0,.1);}
.alternate-list li{list-style:none;padding:10px;}
.alternate-list li:nth-child(odd){background-color:var(--table-row-odd-bg);}
.alternate-list li:nth-child(even){background-color:var(--table-row-even-bg);}

.container{
max-width:1500px;
margin:0 auto;
padding:var(--container-padding);
}
.page-container{
max-width:1000px;
margin:20px auto;
padding:var(--page-padding);
background:#fff;
border:1px solid #ddd;
border-radius:8px;
box-shadow:0 4px 8px rgba(0,0,0,.1);
}
/* 12-Spalten-Grid: fließt sauber mit, lässt sich pro Breakpoint mischen */
.row{
display:grid;
grid-template-columns:repeat(12,1fr);
gap:var(--stack-gap);
align-items:start;
}
/* min-width:0 verhindert Overflow durch lange, nicht umbrechbare Strings
   (z. B. FIN oder E-Mail-Adressen) in Grid-Kindern. */
.col-30{grid-column:span 4;min-width:0;}
.col-50{grid-column:span 6;min-width:0;}
.col-70{grid-column:span 8;min-width:0;}
.col-100{grid-column:span 12;min-width:0;}

/* .col-50.button-container behält Flex-Verhalten, damit innere Buttons sauber
   ausgerichtet werden. .right-align hingegen ist nur ein Text-Alignment-Helfer und
   darf NICHT zum Flex-Container werden — sonst zerfällt text-align:right. */
.col-50.button-container{display:flex;}

/* ──────────────────────────────
Schlüssel-Wert-Daten (semantische Beschreibungslisten)
────────────────────────────────
.data-list  – einspaltige Liste von Label/Wert-Paaren
.data-grid  – zwei Paare nebeneinander (Desktop), füllt ZEILENWEISE in
              Quell-Reihenfolge und stapelt am Phone exakt in dieser Reihenfolge
.pair       – ein Label/Wert-Paar (Label linksbündig, Wert bricht sauber um)
────────────────────────────── */
.data-list,
.data-grid{
margin:0 0 1rem;
display:grid;
gap:var(--pair-row-gap, .4rem) 24px;
align-items:start;
}
.data-list{grid-template-columns:1fr;}
.data-grid{grid-template-columns:repeat(2, minmax(0,1fr));}

.pair{
display:grid;
grid-template-columns:max-content 1fr;
column-gap:10px;
min-width:0;
}
.pair dt{font-weight:bold;color:var(--text-color);}
.pair dd{
margin:0;
min-width:0;
overflow-wrap:anywhere;   /* lange FIN/E-Mail bricht statt zu überlaufen */
}
/* In einspaltigen Listen dürfen lange Feldnamen umbrechen (Silbentrennung de),
   damit der Wert daneben genug Platz behält. .data-grid (kurze Werte) und die
   gestapelte Freitext-Variante bleiben unberührt. */
.data-list .pair dt{hyphens:auto;overflow-wrap:anywhere;}
@media(min-width:361px){
.data-list .pair:not(.pair--stacked){grid-template-columns:fit-content(45%) 1fr;}
}
/* Modifier für Freitext (langes Label / mehrzeiliger Wert): Label IMMER über
   dem Wert statt daneben – sonst quetscht ein langes Label die Textspalte. */
.pair--stacked{grid-template-columns:1fr;column-gap:0;}
.pair--stacked dt{margin-bottom:2px;}
/* Label/Wert untereinander, sobald es eng wird */
@media(max-width:420px){
.data-grid{grid-template-columns:1fr;}
}
@media(max-width:360px){
.pair{grid-template-columns:1fr;column-gap:0;}
.pair dt{margin-bottom:1px;}
}

/* ──────────────────────────────
Kopfbereich (Basis vor Responsive, damit Mobile-Overrides greifen)
────────────────────────────── */
.site-header{
margin-bottom:20px;
border-bottom:1px solid #ddd;
padding-bottom:10px;
}
.header-container{
display:flex;
align-items:center;
justify-content:space-between;
flex-wrap:wrap;
gap:12px;
}
.portal-name{
flex:1 1 60%;
min-width:0;
line-height:1.2;
}
/* Titel + Slogan beziehen ihre Größe aus inline-CSS-Variablen (gesetzt in header.php),
   damit Media-Queries sie sauber per clamp() überschreiben können. */
.portal-title{
font-size:var(--portal-title-size, 24px);
font-weight:bold;
color:var(--portal-title-color, var(--heading-color));
line-height:1.2;
}
.portal-slogan{
font-size:var(--portal-slogan-size, 12px);
color:#666;
margin-top:5px;
line-height:1.2;
}
.logo-container{
flex:0 1 33%;
text-align:right;
}
.logo-container img{
max-width:80%;
height:auto;
}

/* ──────────────────────────────
Responsive Basis
────────────────────────────── */
/* Verhindert Overflow durch Padding und Border (globaler Fix) */
*, *::before, *::after { box-sizing: border-box; }

/* Tablet (≤ 1024 px) — 3er-Reihen werden 2er-Reihen, col-70 wandert nach oben */
@media(max-width:1024px){
body{font-size:calc(var(--font-size) - 1px);}
.container{padding:calc(var(--container-padding) - 4px);}
.page-container{padding:calc(var(--page-padding) - 4px);}
.col-30{grid-column:span 6;}   /* drei col-30 nebeneinander → zwei pro Reihe */
.col-70{grid-column:span 12;}  /* verhindert Kollision mit col-30 (8+6 > 12) */
}

/* Schmale Tablets / große Phones (≤ 768 px) */
@media(max-width:768px){
body{font-size:calc(var(--font-size) - 2px);}
.container{padding:calc(var(--container-padding) - 8px);}
.page-container{padding:calc(var(--page-padding) - 8px);}
table{font-size:calc(var(--font-size) - 1px);}
h1{font-size:clamp(1.4rem,5.5vw,var(--h1-size));}
h2{font-size:clamp(1.25rem,4.5vw,var(--h2-size));}
h3{font-size:clamp(1.1rem,4vw,var(--h3-size));}
:root{--stack-gap:14px;}
}

/* Phones (≤ 640 px) — col-30 / col-70 stapeln, col-50 bleibt 2-spaltig */
@media(max-width:640px){
:root{--stack-gap:12px;}
.col-30{grid-column:span 12;}
.col-70{grid-column:span 12;}
/* col-50 bewusst NICHT stapeln — passt locker nebeneinander bis 420px */

/* Klappmenü-Optik NUR, wenn js/nav-menu.js dieses <details> als „.is-menu"
   markiert hat (Mobile UND mehr als 3 Buttons). Das Ein-/Ausklappen selbst
   übernimmt das native open-Attribut (von nav-menu.js gesteuert).
   Bei ≤3 Buttons / am Desktop: keine Box, kein Schalter, Buttons direkt sichtbar. */
.nav-collapse.is-menu{
border:1px solid #e3e3e3;
border-radius:var(--border-radius);
background:#fafafa;
padding:6px;
}
.nav-collapse.is-menu > summary{display:flex;}   /* Menü-Schalter einblenden */

/* Optik des Menü-Schalters (greift nur, wenn oben via display:flex sichtbar) */
.nav-collapse > summary{
align-items:center;
justify-content:center;
gap:10px;
min-height:44px;
padding:.6rem 1rem;
list-style:none;            /* Standard-Dreieck entfernen */
cursor:pointer;
user-select:none;
background:var(--button-one-color);
color:var(--button-one-text-color);
border-radius:var(--border-radius);
font-weight:bold;
letter-spacing:.4px;
}
.nav-collapse > summary::-webkit-details-marker{display:none;}  /* Safari/iOS */
.nav-toggle-label{font-size:1rem;}
/* Hamburger-Symbol aus drei Strichen (box-shadow-Trick) */
.nav-toggle-icon{
width:18px;height:2px;
background:currentColor;
box-shadow:0 -6px 0 currentColor, 0 6px 0 currentColor;
}
/* Pfeil rechts, dreht beim Öffnen nach oben */
.nav-collapse > summary::after{
content:"";
width:9px;height:9px;
border-right:2px solid currentColor;
border-bottom:2px solid currentColor;
transform:rotate(45deg);
transition:transform .2s ease;
margin-left:2px;
}
.nav-collapse[open] > summary::after{transform:rotate(225deg);}
.nav-collapse[open] > summary{margin-bottom:10px;}

/* Outline-Variante (Fall-Aktionen-Schalter): setzt sich vom gefüllten
   Seiten-„Menü" ab. Icon/Pfeil färben sich über currentColor mit. */
.nav-collapse > summary.nav-toggle--outline{
background:transparent;
color:var(--button-one-color);
border:2px solid var(--button-one-color);
}
.nav-collapse > summary.nav-toggle--outline:hover{
background:var(--button-one-color);
color:var(--button-one-text-color);
}

/* E-Mail-Protokoll: Anlass- und Anhänge-Spalten ausblenden */
.email-col-context,.email-col-attachments{display:none;}

/* Tabellen horizontal scrollbar statt zerquetscht (Standard-Fallback) */
table{
display:block;
overflow-x:auto;
-webkit-overflow-scrolling:touch;
max-width:100%;
}

/* Formularfelder straffen: weniger vertikaler Abstand */
input[type="text"],
input[type="date"],
input[type="time"],
input[type="email"],
input[type="password"],
input[type="number"],
textarea,
select{margin-bottom:10px;padding:7px;}
fieldset{padding:12px 10px;margin-bottom:14px;}
label{margin-bottom:4px;}
}

/* Kleine Phones (≤ 480 px) */
@media(max-width:480px){
body{font-size:calc(var(--font-size) - 2px);}
.container{padding:6px;}
.page-container{padding:12px;margin:10px auto;}
:root{--stack-gap:10px;}

/* Button-Abstände auf Mobile straffen (gap statt doppeltem margin) */
.button-container{gap:10px;}

/* Header: Portalname + Logo bleiben IMMER nebeneinander, schrumpfen nur */
.header-container{flex-wrap:nowrap;gap:8px;}
.portal-name{flex:1 1 auto;min-width:0;}
.portal-title{font-size:clamp(.95rem, 4.8vw, var(--portal-title-size, 24px));}
.portal-slogan{font-size:clamp(.6rem, 2.6vw, var(--portal-slogan-size, 12px));margin-top:2px;}
.logo-container{flex:0 0 auto;max-width:38%;}
.logo-container img{max-width:100%;max-height:54px;width:auto;}
}

/* col-50 erst auf wirklich schmalen Phones stapeln (~iPhone SE / Galaxy A0X) */
@media(max-width:420px){
.col-50{grid-column:span 12;}
}

/* Sehr kleine Geräte (≤ 360 px) — Header bleibt nebeneinander, alles wird kompakter */
@media(max-width:360px){
body{font-size:calc(var(--font-size) - 2px);}
.page-container{margin:0;border-left:none;border-right:none;border-radius:0;padding:10px;}
.container{padding:4px;}
fieldset{padding:10px 8px;}
.header-container{gap:6px;}
.portal-title{font-size:clamp(.85rem, 4.5vw, 1rem);}
.portal-slogan{font-size:clamp(.55rem, 2.4vw, .7rem);}
.logo-container{max-width:34%;}
.logo-container img{max-height:44px;}
}

/* ──────────────────────────────
Alert-Meldungen
────────────────────────────── */
.alert {
margin: 16px 0;
padding: 10px 12px;
border-radius: 8px;
}
.alert-success {
background: #d4edda;
color: #155724;
border: 1px solid #c3e6cb;
}
.alert-danger {
background: #f8d7da;
color: #721c24;
border: 1px solid #f5c6cb;
}
.alert-warning {
background: #fff3cd;
color: #856404;
border: 1px solid #ffeeba;
}

/* ──────────────────────────────
QR-Code Modal
────────────────────────────── */
/* ──────────────────────────────
Overlay-Balkendiagramm
────────────────────────────── */
.overlay-bar-chart {
position: relative;
width: 100%;
height: 14px;
background: var(--chart-total-color, #B04A5A);
border-radius: 4px;
margin: 10px 0;
overflow: hidden;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15), 0 2px 4px rgba(0, 0, 0, 0.1);
}
.overlay-bar-chart div {
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 0;
transition: width 1.2s ease-out;
}
.overlay-bar-chart .prop {
background: var(--chart-partial-color, #C9A227);
border-radius: 4px;
transition: width 1.5s ease-out;
}
.overlay-bar-chart .liab {
background: var(--chart-liability-color, #2E5A88);
border-radius: 4px;
transition: width 1.8s ease-out;
}
.overlay-bar-chart .paid {
background: var(--chart-paid-color, #2D8659);
border-radius: 4px;
transition: width 2s ease-out;
}
.overlay-bar-chart.overlay-bar-lg {
height: 30px;
margin-top: 20px;
}
.overlay-bar-legend {
display: flex;
justify-content: flex-start;
gap: 16px;
font-size: 0.9em;
margin-top: 8px;
align-items: center;
flex-wrap: wrap;
}
.overlay-bar-legend .swatch {
display: inline-block;
width: 12px;
height: 12px;
border: 1px solid #333;
}

/* ──────────────────────────────
Legende Kreisdiagramm (Kosten / gezahlt)
────────────────────────────── */
/* Die Liste selbst ist das Raster, die <li> lösen sich per display:contents
   auf. Nur so teilen sich Kopfzeile und alle Positionen dieselben
   Spaltenbreiten. Der Spaltenabstand steckt bewusst im padding-left der
   Zahlenspalten und nicht in column-gap, damit die Trennlinie unter den
   Spaltenköpfen durchläuft. */
.pie-legend {
list-style: none;
padding: 0;
margin: 0;
font-size: 0.8em;
display: grid;
grid-template-columns: 1fr auto auto;
row-gap: 6px;
align-items: baseline;
}
.pie-legend li {
display: contents;
}
.pie-legend .pie-legend-head span {
font-size: 0.85em;
color: #8a8a8a;
border-bottom: 1px solid rgba(0, 0, 0, 0.12);
padding-bottom: 4px;
}
/* Spaltenabstand wie in den Wertzeilen, sonst stoßen die beiden
   Überschriften stumpf aneinander. */
.pie-legend .pie-legend-head span:not(:first-child) {
text-align: right;
padding-left: 14px;
}
.pie-legend .pie-legend-label {
display: flex;
align-items: center;
gap: 8px;
padding-right: 6px;
}
.pie-legend .swatch {
display: inline-block;
flex: 0 0 auto;
width: 12px;
height: 12px;
border: 1px solid #333;
}
.pie-legend .pie-legend-cost,
.pie-legend .pie-legend-paid {
text-align: right;
white-space: nowrap;
padding-left: 14px;
font-variant-numeric: tabular-nums;
font-feature-settings: "tnum";
}
.pie-legend .pie-legend-paid {
color: #8a8a8a;
}
.pie-legend .pie-legend-paid.is-complete {
color: var(--chart-paid-color, #2D8659);
}
.pie-legend .pie-legend-paid.is-none {
color: #b5b5b5;
}

/* ──────────────────────────────
QR-Code Modal
────────────────────────────── */
.qr-modal {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(255, 255, 255, 0.85);
justify-content: center;
align-items: center;
z-index: 9999;
cursor: pointer;
}
.qr-modal img {
max-width: 300px;
max-height: 300px;
border: 2px solid #333;
border-radius: 8px;
box-shadow: 0 4px 20px rgba(0,0,0,0.3);
background-color: #fff;
}

/* ──────────────────────────────
Guilloché-Rand-Ornament (generativ, Inhaltsseiten außer Startseite)
Wird von js/margin-ornament.js erzeugt, sobald rechts neben .page-container
genug Platz ist; wächst einmalig aus der oberen rechten Ecke des Viewports.
────────────────────────────── */
.rf-margin-ornament {
position: fixed;
top: 0;
right: 0;
pointer-events: none;
z-index: -1;
opacity: .14;
color: var(--ornament-color-indigo);
overflow: hidden;
}

/* ──────────────────────────────
Schieberegler für Ja/Nein-Auswahlen (z. B. Zugriffsrechte, Galerie-Markierung)
Optik wie der Ansichtsschalter auf recent_files.php, ergänzt um einen
ausgegrauten Aus-Zustand. Die Bezeichnung wechselt die Farbe mit.

Markup:
  <label class="switch-row">
    <input type="checkbox" name="…" value="1">
    <span class="switch-track"></span>
    <span class="switch-text">Bezeichnung</span>
  </label>
Mehrere Schalter werden in einen <div class="switch-grid"> gesetzt; das
Raster wird ab genügend Breite von selbst zweispaltig.
────────────────────────────── */
.switch-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
gap: 2px 24px;
margin-top: 6px;
}
.switch-row {
display: flex;
align-items: center;
gap: 10px;
padding: 6px 2px;
cursor: pointer;
/* Kein blauer Auswahlblitzer beim Tippen auf dem Handy */
-webkit-tap-highlight-color: transparent;
-webkit-user-select: none;
user-select: none;
}
/* Das Kästchen selbst bleibt bedienbar (Tastatur, Screenreader), ist aber
   unsichtbar; sichtbar ist allein die Schiene darunter. */
.switch-row > input[type="checkbox"] {
position: absolute;
width: 1px;
height: 1px;
margin: 0;
opacity: 0;
pointer-events: none;
}
.switch-track {
position: relative;
flex: 0 0 auto;
width: 44px;
height: 24px;
border-radius: 24px;
background-color: #c7ccd1;
transition: background-color .25s ease, box-shadow .2s ease;
}
.switch-track::before {
content: "";
position: absolute;
top: 3px;
left: 3px;
width: 18px;
height: 18px;
border-radius: 50%;
background-color: #fff;
box-shadow: 0 1px 3px rgba(0,0,0,.25);
transition: transform .25s ease;
}
.switch-text {
font-size: 0.92em;
line-height: 1.25;
color: #8a9099;
transition: color .25s ease;
}
.switch-row > input[type="checkbox"]:checked ~ .switch-track {
background-color: var(--button-one-color);
}
.switch-row > input[type="checkbox"]:checked ~ .switch-track::before {
transform: translateX(20px);
}
.switch-row > input[type="checkbox"]:checked ~ .switch-text {
color: var(--button-one-color);
font-weight: 600;
}
.switch-row:hover .switch-track {
background-color: #b6bcc3;
}
.switch-row:hover > input[type="checkbox"]:checked ~ .switch-track {
filter: brightness(.93);
}
.switch-row > input[type="checkbox"]:focus-visible ~ .switch-track {
box-shadow: 0 0 0 3px rgba(30, 39, 97, .28);
}
/* Deaktivierte Schalter (z. B. Recht nicht vergebbar) */
.switch-row > input[type="checkbox"]:disabled ~ .switch-track,
.switch-row > input[type="checkbox"]:disabled ~ .switch-text {
opacity: .5;
}
.switch-row:has(> input[type="checkbox"]:disabled) {
cursor: not-allowed;
}
/* Erläuterung unter einem Schalter; bündig mit dessen Bezeichnung */
.switch-hint {
display: block;
margin: -2px 0 8px;
padding-left: 54px;
font-size: 0.85em;
color: #6b7280;
}

@media (prefers-reduced-motion: reduce) {
.switch-track,
.switch-track::before,
.switch-text {
transition: none;
}
}
