/**
 * RESTAY Vermietung – gemeinsames Portal-Stylesheet (zugang/ + intern/).
 * -----------------------------------------------------------------------
 * Abgelöst am 25. September 2026 das bisherige, pro Seite einzeln inline
 * eingebettete <style>-Element (Rückmeldung: "Design ist sehr altbacken").
 * Wird von JEDER Seite in zugang/ und intern/ per
 * <link rel="stylesheet" href="../assets/portal.css"> eingebunden - eine
 * einzige Datei statt zwölf fast identischer Kopien, und jede künftige
 * Design-Anpassung wirkt sich automatisch auf das ganze Portal aus.
 *
 * Design-Sprache an das tatsächliche RESTAY-Branding auf restay.ch
 * angelehnt (Quellcode des öffentlichen Auftritts: Farb-Tokens,
 * Open Sans für Fliesstext/Bedienelemente und Montserrat für Überschriften, Button-
 * /Badge-/Card-Stil) - das Portal soll sich jetzt wie derselbe Absender
 * anfühlen wie die öffentliche Webseite, nicht wie ein separates
 * Verwaltungswerkzeug.
 *
 * WICHTIG bei künftigen Änderungen: nur bestehende, bereits im Markup
 * verwendete Selektoren (header, .card, .badge, button, label, table, …)
 * wurden neu gestaltet - es wurden bewusst KEINE Klassen umbenannt oder
 * aus dem PHP-Markup entfernt, damit diese eine CSS-Datei ausreicht und
 * keine der bestehenden Seiten angepasst werden muss, ausser beim
 * Umstellen von <style>…</style> auf den <link>-Tag selbst.
 */

/* ==========================================================================
   1. DESIGN-TOKENS
   ========================================================================== */
:root {
  /* Typografie exakt entsprechend dem gelieferten restay.ch-Quellcode */
  --font-body: 'Open Sans', Arial, Helvetica, sans-serif;
  --font-heading: 'Montserrat', 'Open Sans', Arial, sans-serif;
  --font-mono: 'Open Sans', Arial, Helvetica, sans-serif;

  --paper: #F5F4F5;
  --paper-line: #C7CBC8;
  --white: #FFFFFF;
  --ink: #1D1D1B;
  --ink-soft: #5C6460;
  --green: #49B16D;
  --green-deep: #26704A;
  --green-tint: #E3F1E8;
  --error: #C0392B;
  --error-tint: #FBEAEA;
  --amber: #8A5F0C;
  --amber-tint: #FBF1DC;
  --radius-sm: 3px;   /* Buttons */
  --radius: 4px;      /* Eingabefelder */
  --radius-lg: 8px;   /* Karten/Panels */
  --radius-pill: 999px; /* Badges */
}

/* ==========================================================================
   2. BASIS
   ========================================================================== */
*, *::before, *::after { box-sizing: border-box; }

body {
  font-family: var(--font-body);
  font-size: 15px;
  line-height: 1.65;
  color: var(--ink);
  background: var(--paper);
  margin: 40px auto;
  padding: 0 20px;
  max-width: 760px;
}
body.w-narrow { max-width: 520px; }
body.w-medium { max-width: 600px; }
body.w-wide { max-width: 860px; }
body.w-xwide { max-width: 900px; }

h1, h2, h3, h4 {
  font-family: var(--font-heading);
  font-weight: 700;
  letter-spacing: -0.01em;
  color: var(--ink);
  margin: 0 0 10px;
}
h1 { font-size: 26px; }
h2 { font-size: 17px; margin: 0 0 10px; }

a { color: var(--green-deep); }
a.logout { color: var(--ink-soft); text-decoration: none; }
a.logout:hover { color: var(--ink-soft); text-decoration: underline; }

p { margin: 0 0 12px; }

/* Formulare und Navigation erben in Browsern nicht immer zuverlässig die
   Body-Schrift. Darum RESTAY-Fliesstext hier explizit durchsetzen. */
button, input, select, textarea, option {
  font-family: var(--font-body);
}

/* Kleine, grossgeschriebene Eyebrow-/Mikro-Beschriftungen im Mono-Font -
   das wiederkehrende Gestaltungselement der Marke (siehe restay.ch: Tags,
   Terminnummern, "Ansehen"-Badges). */
.mono, .langswitch, .badge, legend, th {
  font-family: var(--font-mono);
}

/* ==========================================================================
   3. KOPFZEILE (header/.headerright/.langswitch/.badge)
   ========================================================================== */
header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 28px;
  flex-wrap: wrap;
  gap: 10px;
  padding-bottom: 16px;
  border-bottom: 1px solid var(--paper-line);
}
/* Logo und Seitentitel/-badge übereinander statt in einer Zeile mit
   Bindestrich getrennt (Rückmeldung von Dani, 26. September 2026) - eine
   einzige Regel hier wirkt auf ALLE Seiten, da jede Kopfzeile denselben
   Aufbau "<header><div>Logo + Titel</div><div class="headerright">...</div>
   </header>" verwendet (siehe die einzelnen *.php-Dateien). */
header > div:first-child {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 3px;
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 19px;
  letter-spacing: -0.01em;
}
/* Echtes RESTAY-Logo (seit 26. September 2026, ersetzt den vorherigen
   CSS-Punkt+Text-Platzhalter, siehe assets/logo.png). Feste Höhe, Breite
   automatisch im Original-Seitenverhältnis. */
.brand-logo {
  height: 22px;
  width: auto;
  display: block;
}
/* Seitentitel unter dem Logo (siehe header > div:first-child oben) - etwas
   kleiner/leichter als der Markenname, damit die zweizeilige Kopfzeile nicht
   zu wuchtig wirkt. */
.brand-title {
  font-size: 15px;
  font-weight: 500;
  color: var(--ink-soft);
  letter-spacing: 0;
}
.headerright { display: flex; align-items: center; gap: 16px; }

/* V16 – portalweit einheitliche Kopfzeilen-Aktionen wie DE/EN */
.headerright > a {
  color: var(--ink-soft);
  text-decoration: none;
}
.headerright > a:hover,
.headerright > a:focus-visible {
  color: var(--ink-soft);
  text-decoration: underline;
}
.badge {
  background: var(--paper);
  border: 1px solid var(--paper-line);
  color: var(--ink-soft);
  padding: 4px 10px;
  border-radius: var(--radius-pill);
  font-size: 12px;
  font-weight: 400;
  letter-spacing: 0.02em;
}
.langswitch {
  font-size: 12px;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--ink-soft);
}
.langswitch a { color: var(--ink-soft); text-decoration: none; }
.langswitch a:hover { color: var(--ink); }
/* Auf den paar schlichten Seiten ohne volle Kopfzeile (Code-Eingabe,
   Datenschutzhinweis, abgelaufene Sitzung) steht der Sprachumschalter
   allein als erstes Element im Kasten bzw. im Body - dort rechtsbündig
   oberhalb des Inhalts statt inline. */
.card > .langswitch:first-child,
body > .langswitch:first-child {
  display: block;
  text-align: right;
  margin-bottom: 14px;
}
.backlink { font-size: 13px; margin-bottom: 8px; }
.backlink a { text-decoration: none; }

/* ==========================================================================
   4. KARTEN (.card, .termin, fieldset)
   ========================================================================== */
.card {
  background: var(--white);
  border: 1px solid var(--paper-line);
  border-radius: var(--radius-lg);
  padding: 22px 24px;
  margin-top: 18px;
}
.termin {
  background: var(--white);
  border: 1px solid var(--paper-line);
  border-radius: var(--radius-lg);
  padding: 16px 18px;
  margin-top: 16px;
}
.termin-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 10px; flex-wrap: wrap; }
/* "Termin bearbeiten"-Formular je Termin (intern/besichtigung.php,
   26. September 2026) - standardmässig per hidden-Attribut zugeklappt, wird
   per Klick auf den zugehörigen "Bearbeiten"-Knopf ein-/ausgeblendet. */
.termin-edit {
  margin-top: 10px;
  padding: 12px 16px 14px;
  background: var(--paper);
  border: 1px solid var(--paper-line);
  border-radius: var(--radius);
}
/* Generisches Gegenstück zu .termin-edit für Bearbeiten-Formulare ausserhalb
   von intern/besichtigung.php (intern/dossier.php, Umsetzungskonzept
   Abschnitt 57) - identische Optik, eigener Name statt einer irreführenden
   Wiederverwendung des termin-spezifischen Klassennamens. */
.inline-edit {
  margin-top: 10px;
  padding: 12px 16px 14px;
  background: var(--paper);
  border: 1px solid var(--paper-line);
  border-radius: var(--radius);
}
fieldset {
  border: 1px solid var(--paper-line);
  border-radius: var(--radius);
  margin-top: 14px;
  padding: 12px 16px 14px;
}
legend {
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--green-deep);
  padding: 0 6px;
}

/* ==========================================================================
   5. STATUS-/HINWEISMELDUNGEN (.err/.ok/.warn/.hint)
   ========================================================================== */
.err, .ok, .warn, .hint {
  padding: 11px 14px;
  border-radius: var(--radius);
  border-left: 3px solid transparent;
  margin: 0 0 16px;
  font-size: 14.5px;
}
.err { background: var(--error-tint); color: #7A2323; border-left-color: var(--error); }
.ok { background: var(--green-tint); color: var(--green-deep); border-left-color: var(--green-deep); }
.warn { background: var(--amber-tint); color: var(--amber); border-left-color: var(--amber); }
.hint { background: var(--paper); color: var(--ink-soft); border-left-color: var(--paper-line); }
.cancelled-notice {
  padding: 12px 14px;
  border-radius: var(--radius);
  margin: 0 0 16px;
  background: var(--error-tint);
  color: #7A2323;
  border: 1px solid rgba(192,57,43,.22);
  border-left: 4px solid var(--error);
  font-size: 14.5px;
  font-weight: 600;
}
.muted { color: var(--ink-soft); font-size: 13.5px; }

/* ==========================================================================
   6. BADGES/PILLS (Status-Chips)
   ========================================================================== */
.badge-green, .badge-grey, .badge-red {
  display: inline-block;
  padding: 3px 11px;
  border-radius: var(--radius-pill);
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.05em;
}
.badge-green { background: var(--green-tint); color: var(--green-deep); }
.badge-grey { background: var(--paper); color: var(--ink-soft); border: 1px solid var(--paper-line); }
.badge-red { background: var(--error-tint); color: var(--error); }

/* ==========================================================================
   7. FORMULARE
   ========================================================================== */
label {
  display: block;
  margin-top: 14px;
  font-weight: 600;
  font-size: 13.5px;
  color: var(--ink);
}
label .sub { font-weight: 400; color: var(--ink-soft); font-size: 12.5px; display: block; margin-top: 2px; }

input[type=text], input[type=email], input[type=tel], input[type=date],
input[type=time], input[type=number], input[type=url], input[type=file], select, textarea {
  width: 100%;
  box-sizing: border-box;
  padding: 9px 11px;
  font-size: 15px;
  margin-top: 5px;
  font-family: inherit;
  background: var(--white);
  border: 1px solid var(--paper-line);
  border-radius: var(--radius);
  color: var(--ink);
}
textarea { resize: vertical; }
input:focus-visible, select:focus-visible, textarea:focus-visible, button:focus-visible, a.btn:focus-visible {
  outline: 2px solid var(--green-deep);
  outline-offset: 1px;
}
/* Der Code-Eingabe-Seite (zugang/index.php) ihre grosse, gut lesbare
   Ziffern-Darstellung erhalten. */
input.code-input {
  font-size: 22px;
  letter-spacing: 4px;
  text-align: center;
  padding: 10px;
}

.checkbox-row, .radio-row {
  margin-top: 12px;
  font-weight: 400;
  display: flex;
  gap: 8px;
  align-items: flex-start;
}
.checkbox-row input, .radio-row input { width: auto; margin-top: 3px; }
.checkbox-row label, .radio-row label { margin: 0; font-weight: 400; }

.grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0 16px; }
.row { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; }
.inline-form { display: inline; }

/* zugang/anmeldung.php: Haftpflicht-Vorschläge nur einblenden, wenn "nein"
   gewählt ist. Rein CSS-basiert (:has()), kein JavaScript nötig. */
.haftpflicht-vorschlaege { display: none; }
form:has(#haftpflicht_nein:checked) .haftpflicht-vorschlaege { display: block; }

/* zugang/anmeldung.php: Staatsangehörigkeits-Freitext + Pflicht-Upload
   Aufenthaltsbewilligung nur einblenden, wenn nicht "Schweiz" gewählt ist
   (Umsetzungskonzept Abschnitt 56). Ebenfalls rein CSS-basiert - ein per
   display:none verstecktes required-Feld wird vom Browser nicht zur
   Formularvalidierung herangezogen, solange "Schweiz" gewählt bleibt. */
.nicht-ch-felder { display: none; }
form:has(#staatsangehoerigkeit_andere:checked) .nicht-ch-felder { display: block; }

/* Moderner Dokument-Upload im externen Anmeldeformular. Das echte
   input[type=file] liegt unsichtbar über der gesamten Fläche: dadurch
   funktionieren Klick, Tastatur und natives Drag & Drop ohne proprietäre
   Upload-API. JavaScript ergänzt lediglich Dateiname/-grösse als Komfort. */
.documents-section {
  margin-top: 26px;
  padding-top: 4px;
}
.documents-section > h2 { margin-bottom: 4px; }
.documents-section > .lead { margin-top: 0; }
.upload-card {
  margin-top: 16px;
  border: 1px solid var(--paper-line);
  border-radius: var(--radius);
  background: var(--white);
  padding: 16px;
}
.upload-card-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 10px;
}
.upload-card-head strong { font-size: 14.5px; }
.upload-card-head .sub { display: block; color: var(--ink-soft); font-size: 12.5px; margin-top: 3px; font-weight: 400; }
.upload-required, .upload-optional {
  flex: 0 0 auto;
  border-radius: var(--radius-pill);
  padding: 3px 9px;
  font-size: 10.5px;
  text-transform: uppercase;
  letter-spacing: .05em;
}
.upload-required { background: var(--green-tint); color: var(--green-deep); }
.upload-optional { background: var(--paper); color: var(--ink-soft); border: 1px solid var(--paper-line); }
.upload-dropzone {
  position: relative;
  display: grid;
  place-items: center;
  text-align: center;
  min-height: 132px;
  padding: 18px;
  margin-top: 0;
  border: 1.5px dashed #9aa59f;
  border-radius: var(--radius);
  background: var(--paper);
  cursor: pointer;
  transition: border-color .15s ease, background .15s ease, box-shadow .15s ease;
  overflow: hidden;
}
.upload-dropzone:hover,
.upload-dropzone:focus-within,
.upload-dropzone.is-selected {
  border-color: var(--green-deep);
  background: var(--green-tint);
  box-shadow: 0 0 0 2px rgba(43,108,68,.08);
}
.upload-dropzone input[type=file] {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  margin: 0;
  padding: 0;
  opacity: 0;
  cursor: pointer;
}
.upload-icon {
  display: grid;
  place-items: center;
  width: 36px;
  height: 36px;
  margin: 0 auto 8px;
  border-radius: 50%;
  background: var(--white);
  border: 1px solid var(--paper-line);
  font-size: 19px;
  line-height: 1;
}
.upload-title { display: block; font-weight: 600; font-size: 14px; }
.upload-hint { display: block; color: var(--ink-soft); font-size: 12px; margin-top: 4px; }
.upload-choose {
  display: inline-block;
  margin-top: 10px;
  padding: 6px 11px;
  border-radius: var(--radius-sm);
  border: 1px solid var(--ink);
  background: var(--white);
  color: var(--ink);
  font-size: 12.5px;
  font-weight: 500;
}
.upload-file-meta {
  min-height: 19px;
  margin: 9px 0 0;
  color: var(--green-deep);
  font-size: 12.5px;
  font-weight: 500;
}
.provider-block {
  margin-top: 12px;
  padding: 13px 14px;
  border-radius: var(--radius);
  background: var(--paper);
  border: 1px solid var(--paper-line);
}
.provider-block h3 { margin: 0 0 5px; font-size: 14px; }
.provider-block p { margin: 5px 0; font-size: 12.5px; color: var(--ink-soft); }
.provider-list { display: grid; gap: 8px; margin-top: 10px; }
.provider-item {
  display: flex;
  gap: 12px;
  align-items: center;
  justify-content: space-between;
  padding: 10px 11px;
  background: var(--white);
  border: 1px solid var(--paper-line);
  border-radius: var(--radius-sm);
}
.provider-item-text { min-width: 0; }
.provider-item-name { display: block; font-weight: 600; font-size: 13px; color: var(--ink); }
.provider-item-note { display: block; margin-top: 2px; font-size: 11.5px; color: var(--ink-soft); }
.provider-link {
  flex: 0 0 auto;
  text-decoration: none;
  color: var(--green-deep);
  font-size: 12.5px;
  font-weight: 600;
}
.provider-link:hover { text-decoration: underline; }
.haftpflicht-proof-card { display: none; }
form:has(#haftpflicht_ja:checked) .haftpflicht-proof-card,
form:has(#haftpflicht_nein:checked) .haftpflicht-proof-card,
form:has(#haftpflicht_weiss_nicht:checked) .haftpflicht-proof-card { display: block; }
.haftpflicht-provider-block { display: none; }
form:has(#haftpflicht_nein:checked) .haftpflicht-provider-block,
form:has(#haftpflicht_weiss_nicht:checked) .haftpflicht-provider-block { display: block; }
.haftpflicht-proof-hint-ja, .haftpflicht-proof-badge-required { display: none !important; }
form:has(#haftpflicht_ja:checked) .haftpflicht-proof-hint-ja,
form:has(#haftpflicht_ja:checked) .haftpflicht-proof-badge-required { display: block !important; }
form:has(#haftpflicht_ja:checked) .haftpflicht-proof-hint-optional,
form:has(#haftpflicht_ja:checked) .haftpflicht-proof-badge-optional { display: none !important; }

@media (max-width: 680px) {
  .upload-card { padding: 13px; }
  .upload-card-head, .provider-item { align-items: stretch; flex-direction: column; }
  .provider-link { align-self: flex-start; }
}

/* ==========================================================================
   8. SCHALTFLÄCHEN
   ========================================================================== */
button, a.btn {
  display: inline-block;
  margin-top: 16px;
  background: var(--ink);
  color: var(--white);
  border: 1px solid var(--ink);
  border-radius: var(--radius-sm);
  padding: 10px 18px;
  font-size: 14.5px;
  font-weight: 500;
  font-family: inherit;
  cursor: pointer;
  text-decoration: none;
  transition: transform .1s ease, box-shadow .1s ease;
}
button:hover, a.btn:hover { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(29,29,27,.18); }
button.secondary, a.btn.secondary {
  background: var(--white);
  color: var(--ink);
  border-color: var(--paper-line);
}
button.secondary:hover, a.btn.secondary:hover { background: var(--paper); box-shadow: none; transform: none; }
button.danger, a.btn.danger { background: var(--error); border-color: var(--error); }
button.ghost, a.btn.ghost {
  background: transparent;
  color: var(--green-deep);
  border-color: var(--green-deep);
  box-shadow: none;
}
button.ghost:hover, a.btn.ghost:hover { background: var(--green-tint); transform: none; }

/* ==========================================================================
   9. TABELLEN
   ========================================================================== */
table { width: 100%; border-collapse: collapse; margin-top: 10px; font-size: 14px; }
th, td { text-align: left; padding: 8px 10px; border-bottom: 1px solid var(--paper-line); vertical-align: top; }
th { font-size: 11px; text-transform: uppercase; letter-spacing: 0.05em; color: var(--ink-soft); font-weight: 500; }
tbody tr:hover { background: var(--paper); }

dl { display: grid; grid-template-columns: auto 1fr; gap: 7px 16px; margin: 0; }
dt { color: var(--ink-soft); font-weight: 600; font-size: 13.5px; }
dd { margin: 0; }

/* ==========================================================================
   10. AUTOCOMPLETE-VORSCHLAGSLISTE
   ========================================================================== */
.ac-wrap { position: relative; }
.ac-list {
  position: absolute; z-index: 20; left: 0; right: 0; top: 100%; margin-top: -3px;
  background: var(--white); border: 1px solid var(--paper-line); border-radius: 0 0 var(--radius) var(--radius);
  max-height: 230px; overflow-y: auto;
  box-shadow: 0 10px 24px -8px rgba(29,29,27,.22);
}
.ac-list[hidden] { display: none; }
.ac-item { padding: 8px 11px; cursor: pointer; font-size: 14px; font-weight: 400; font-family: var(--font-body); }
.ac-item.active, .ac-item:hover { background: var(--green-tint); }
.ac-empty { padding: 8px 11px; font-size: 13px; color: var(--ink-soft); font-weight: 400; }

/* ==========================================================================
   11. FORTSCHRITTSANZEIGE (zugang/anmeldung.php)
   ========================================================================== */
.layout { display: flex; gap: 32px; align-items: flex-start; }
.layout aside { flex: 0 0 220px; }
.layout main { flex: 1; min-width: 0; }
@media (max-width: 680px) { .layout { flex-direction: column; } .layout aside { display: none; } }
.lead { color: var(--ink-soft); margin-top: -6px; }
.fortschritt-titel { font-weight: 600; margin: 0 0 8px; font-family: var(--font-heading); }
.fortschritt-liste { list-style: none; margin: 0 0 16px; padding: 0; }
.fortschritt-liste li { padding: 6px 0 6px 20px; position: relative; font-size: 13px; color: var(--ink-soft); border-left: 2px solid var(--paper-line); }
.fortschritt-liste li:last-child { border-left: 2px solid transparent; }
.fortschritt-liste li::before { content: ''; position: absolute; left: -6px; top: 11px; width: 10px; height: 10px; border-radius: 50%; background: var(--paper-line); border: 2px solid var(--paper); }
.fortschritt-liste li.f-done { color: var(--ink); }
.fortschritt-liste li.f-done::before { background: var(--green-deep); }
.fortschritt-liste li.f-active { color: var(--ink); font-weight: 600; }
.fortschritt-liste li.f-active::before { background: var(--green-deep); box-shadow: 0 0 0 3px rgba(46,126,80,.22); }

/* ==========================================================================
   12. BESICHTIGUNGSTERMINE: LISTE (zugang/besichtigung.php)
   ========================================================================== */
.termin-liste { list-style: none; margin: 0; padding: 0; }
.termin-liste li {
  background: var(--white);
  border: 1px solid var(--paper-line);
  border-radius: var(--radius-lg);
  padding: 14px 18px;
  margin-top: 12px;
  display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 10px;
}
.termin-liste .btn { margin-top: 0; }
.termin-meta { color: var(--ink-soft); font-size: 13.5px; }
.objekt-titel { font-family: var(--font-heading); font-weight: 600; margin: 26px 0 6px; font-size: 16px; }

/* Stammdaten: dynamische Anbieter-/Anmeldelinks (+/-), Bedienprinzip wie
   bei der Termin-Stapelerfassung. */
.anbieter-batch { margin-top: 22px; }
.anbieter-batch + .anbieter-batch { padding-top: 20px; border-top: 1px solid var(--paper-line); }
.anbieter-batch-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.anbieter-batch-head h3 { margin: 0; }
.anbieter-batch-head .anbieter-add-row { margin-top: 0; padding: 7px 12px; }
.anbieter-batch-rows { margin-top: 8px; }
.anbieter-batch-row {
  display: grid;
  grid-template-columns: minmax(150px,.8fr) minmax(260px,1.35fr) minmax(190px,1fr) auto;
  gap: 0 12px;
  align-items: end;
  padding: 12px 0;
  border-top: 1px solid var(--paper-line);
}
.anbieter-batch-row:first-child { border-top: none; }
.anbieter-batch-row label { margin-top: 0; }
.anbieter-batch-row .row-remove {
  margin: 0; padding: 9px 12px; min-width: 42px; align-self: center;
  background: transparent; color: var(--error); border-color: var(--paper-line);
}
.anbieter-batch-row .row-remove:hover { background: var(--error-tint); box-shadow: none; transform: none; }
@media (max-width: 900px) {
  .anbieter-batch-row { grid-template-columns: 1fr 1fr auto; }
  .anbieter-batch-row label:nth-child(3) { grid-column: 1 / span 2; }
}
@media (max-width: 640px) {
  .anbieter-batch-row { grid-template-columns: 1fr auto; }
  .anbieter-batch-row label { grid-column: 1 / span 2; }
  .anbieter-batch-row .row-remove { grid-column: 2; justify-self: end; }
}

/* ==========================================================================
   13. TERMIN-STAPELERFASSUNG (bis zu 10 Termine auf einmal, intern/besichtigung.php)
   ========================================================================== */
.termin-batch { margin-top: 14px; }
.termin-batch-row {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr auto;
  gap: 0 12px;
  align-items: end;
  padding: 12px 0;
  border-top: 1px solid var(--paper-line);
}
.termin-batch-row:first-child { border-top: none; padding-top: 0; }
.termin-batch-row label { margin-top: 0; }
.termin-batch-row .row-remove {
  margin: 0; padding: 9px 12px; align-self: center;
  background: transparent; color: var(--error); border-color: var(--paper-line);
}
.termin-batch-row .row-remove:hover { background: var(--error-tint); box-shadow: none; transform: none; }
.batch-actions { display: flex; align-items: center; gap: 14px; margin-top: 14px; flex-wrap: wrap; }
.batch-actions .muted { margin: 0; }
@media (max-width: 640px) {
  .termin-batch-row { grid-template-columns: 1fr 1fr; }
  .termin-batch-row .row-remove { grid-column: 1 / -1; justify-self: start; }
}

/* ==========================================================================
   14. KOMMENTARE (intern/dossier.php)
   ========================================================================== */
.kommentar { border-bottom: 1px solid var(--paper-line); padding: 11px 0; }
.kommentar:last-child { border-bottom: 0; }
.kommentar .meta { color: var(--ink-soft); font-size: 12.5px; margin-bottom: 4px; }
.kommentar .text { white-space: pre-wrap; }

/* ==========================================================================
   15. DATENBANK-DIAGNOSE (intern/db-check.php)
   ========================================================================== */
/* Eigene Klassen für die reine Text-Statusfarbe in Tabellenzellen -
   bewusst NICHT ".ok"/".err" (das sind die eingerahmten Meldungskästen
   oben, siehe Abschnitt 5), sonst bekäme eine Tabellenzelle versehentlich
   Padding/Hintergrund/Rahmen der Kastenmeldung. */
.status-ok { color: var(--green-deep); font-weight: 600; }
.status-missing { color: var(--error); font-weight: 600; }

/* ==========================================================================
   16. FEHLER-DIALOG (sperrt den Bildschirm, bis "OK" geklickt wird) und
       FELDMARKIERUNG (intern/besichtigung.php, Rückmeldung von Dani vom
       26. September 2026 - Fehler dürfen nicht mehr unbemerkt übersehen
       werden können, und es soll klar sein, welches Feld betroffen ist)
   ========================================================================== */
.modal-overlay {
  position: fixed;
  inset: 0;
  background: rgba(29, 29, 27, .55);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 20px;
  z-index: 1000;
}
.modal-box {
  background: var(--white);
  border-radius: var(--radius-lg);
  padding: 22px 24px;
  max-width: 440px;
  width: 100%;
  box-shadow: 0 12px 36px rgba(29, 29, 27, .3);
}
.modal-box .err { margin-bottom: 18px; }
.modal-ok-btn { width: 100%; }

.field-invalid {
  border-color: var(--error) !important;
  box-shadow: 0 0 0 2px var(--error-tint);
}

/* ==========================================================================
   17. KUNDENCHAT-WIDGET (zugang/kundenchat.php + assets/kundenchat.js,
       schwebender Knopf auf allen externen Portalseiten, 26. September 2026)
   ========================================================================== */
#rk-chat-toggle {
  position: fixed; right: 18px; bottom: 18px; z-index: 500;
  width: 56px; height: 56px; border-radius: var(--radius-pill);
  background: var(--green-deep); color: var(--white); border: none;
  box-shadow: 0 6px 18px rgba(29,29,27,.28); cursor: pointer;
  display: flex; align-items: center; justify-content: center;
  margin-top: 0;
}
#rk-chat-toggle:hover { background: #24623e; transform: none; box-shadow: 0 6px 18px rgba(29,29,27,.28); }
#rk-chat-toggle svg { width: 26px; height: 26px; }

#rk-chat-panel {
  position: fixed; right: 18px; bottom: 84px; z-index: 500;
  width: 340px; max-width: calc(100vw - 36px);
  height: 460px; max-height: calc(100vh - 130px); max-height: calc(100dvh - 130px);
  background: var(--white); border: 1px solid var(--paper-line);
  border-radius: var(--radius-lg); box-shadow: 0 14px 40px rgba(29,29,27,.3);
  display: none; flex-direction: column; overflow: hidden;
}
#rk-chat-panel.rk-open { display: flex; }
#rk-chat-head { background: var(--green-deep); color: var(--white); padding: 12px 16px; font-weight: 600; font-size: 14.5px; }
#rk-chat-msgs { flex: 1; overflow-y: auto; padding: 12px; font-size: 13.5px; background: var(--paper); }
.rk-msg { margin-bottom: 8px; max-width: 85%; padding: 8px 11px; border-radius: var(--radius); line-height: 1.4; white-space: pre-wrap; }
.rk-msg-user { background: var(--green-deep); color: var(--white); margin-left: auto; }
.rk-msg-bot { background: var(--white); color: var(--ink); border: 1px solid var(--paper-line); }
.rk-msg-error { background: var(--error-tint); color: var(--error); border: 1px solid var(--error); }
#rk-chat-form { display: flex; border-top: 1px solid var(--paper-line); background: var(--white); }
#rk-chat-input {
  flex: 1; border: none; padding: 10px 12px; font-size: 13.5px; font-family: inherit;
  resize: none; max-height: 80px;
}
#rk-chat-input:focus { outline: none; }
#rk-chat-send { margin-top: 0; border-radius: 0; padding: 0 16px; font-size: 13.5px; }
#rk-chat-send:disabled { opacity: .5; cursor: default; }
@media (max-width: 480px) {
  #rk-chat-panel { right: 8px; left: 8px; width: auto; bottom: 78px; }
  #rk-chat-toggle { right: 12px; bottom: 12px; }
}

/* ==========================================================================
   18. DOKUMENTVORSCHAU-SPLITPANE (intern/dossier.php, Umsetzungskonzept
       Abschnitt 59): rechts neben dem Dossier eingeblendete PDF-/Bild-
       Vorschau für Anhang, Ausweiskopie, Aufenthaltsbewilligung und die
       beiden Nachweisdokumente (Kaution/Haftpflicht) - damit lässt sich
       direkt prüfen, ob ein Nachweis korrekt erbracht wurde, ohne die
       Dossier-Seite zu verlassen. Bewusst ein position:fixed-Panel statt
       einer zweispaltigen Seitenstruktur (.layout weiter oben ist dafür zu
       schmal/unpassend und wird nirgends verwendet) - so bleiben Karten und
       Formulare in dossier.php unverändert, das Panel legt sich einfach
       über den rechten, bei .w-wide (max-width:860px) ohnehin meist freien
       Bereich; body.doc-preview-open schiebt den Inhalt bei Bedarf zur
       Seite. Siehe .js-doc-preview-Klick-Handler in intern/dossier.php.
   ========================================================================== */
.doc-preview-panel {
  position: fixed;
  top: 0; right: 0; bottom: 0;
  width: min(48vw, 700px);
  background: var(--white);
  border-left: 1px solid var(--paper-line);
  box-shadow: -8px 0 24px rgba(29, 29, 27, .18);
  z-index: 800;
  display: flex;
  flex-direction: column;
}
.doc-preview-panel[hidden] { display: none; }
.doc-preview-head {
  display: flex; align-items: center; gap: 10px;
  padding: 10px 14px;
  background: var(--paper);
  border-bottom: 1px solid var(--paper-line);
}
.doc-preview-title {
  flex: 1; font-weight: 600; font-size: 14px; color: var(--ink);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.doc-preview-newtab { font-size: 13px; margin-top: 0; }
.doc-preview-close {
  border: none; background: transparent; color: var(--ink-soft);
  font-size: 22px; line-height: 1; cursor: pointer; padding: 2px 6px;
  margin-top: 0;
}
.doc-preview-close:hover { color: var(--ink); }
.doc-preview-frame { flex: 1; border: none; background: var(--paper); }

/* Schiebt den (zentrierten, max-width-begrenzten) Seiteninhalt nach links,
   solange die Vorschau offen ist, damit sie ihn auf breiteren Bildschirmen
   nicht überdeckt - auf schmaleren Bildschirmen übernimmt die Media-Query
   unten stattdessen die Vollbild-Variante. */
body.doc-preview-open {
  margin-left: 24px;
  margin-right: min(48vw, 700px);
  max-width: none;
}

@media (max-width: 900px) {
  .doc-preview-panel { width: 100vw; left: 0; }
  body.doc-preview-open { margin: 0; max-width: none; overflow: hidden; }
}


/* 19. Generierte RESTAY-Anmeldelinks in Stammdaten – 29.09.2026 */
.table-scroll{overflow-x:auto}
.zugangslink-cell{min-width:360px}
.copy-link-row{display:flex;gap:8px;align-items:center;margin-bottom:8px}
.copy-link-row input[readonly]{margin:0;min-width:260px;font-family:var(--font-mono);font-size:12px}
.copy-link-row button{margin:0;white-space:nowrap}
.compact{margin:0 0 8px}
.compact-action{margin-top:0;padding:6px 10px;font-size:13px}
@media (max-width:680px){.zugangslink-cell{min-width:300px}.copy-link-row{align-items:stretch;flex-direction:column}.copy-link-row input[readonly]{min-width:0;width:100%}}

/* ========================================================================== 
   20. EXTERNER DOSSIER-ARBEITSBEREICH – Tabs, permanenter Ablauf/Chat,
       selbst bearbeitbare Anmeldung bis RESTAY-Freigabe (29.09.2026)
   ========================================================================== */
body.w-portal { max-width: 1500px; }
.portal-shell {
  display: grid;
  grid-template-columns: minmax(230px, 270px) minmax(0, 1fr);
  gap: 26px;
  align-items: start;
}
.portal-sidebar {
  position: sticky;
  top: 18px;
  display: flex;
  flex-direction: column;
  gap: 14px;
  min-width: 0;
}
.portal-progress-card,
.portal-chat-slot {
  background: var(--white);
  border: 1px solid var(--paper-line);
  border-radius: var(--radius-lg);
  padding: 16px;
}
.portal-chat-slot { padding: 0; overflow: hidden; }
.portal-main { min-width: 0; }
.portal-title-row {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 18px;
  margin-bottom: 14px;
}
.portal-title-row h1 { margin-bottom: 8px; }
.portal-title-row .lead { margin: 0; }

.dossier-tabs {
  position: sticky;
  top: 0;
  z-index: 80;
  display: flex;
  gap: 6px;
  overflow-x: auto;
  padding: 8px;
  margin: 14px 0 16px;
  background: rgba(248,247,243,.96);
  border: 1px solid var(--paper-line);
  border-radius: var(--radius-lg);
  -webkit-backdrop-filter: blur(8px);
  backdrop-filter: blur(8px);
}
.dossier-tab {
  flex: 0 0 auto;
  margin: 0;
  padding: 9px 13px;
  border: 1px solid transparent;
  border-radius: var(--radius-pill);
  background: transparent;
  color: var(--ink-soft);
  box-shadow: none;
  font-size: 13.5px;
}
.dossier-tab:hover { background: var(--green-tint); color: var(--ink); transform: none; box-shadow: none; }
.dossier-tab.is-active { background: var(--green-deep); color: var(--white); }
.dossier-panel[hidden] { display: none !important; }
.portal-edit-fieldset { border: 0; padding: 0; margin: 0; min-width: 0; }
.portal-edit-fieldset:disabled { opacity: 1; }
.portal-edit-fieldset:disabled input,
.portal-edit-fieldset:disabled select,
.portal-edit-fieldset:disabled textarea { background: var(--paper); color: var(--ink-soft); }

.fortschritt-klickbar li { padding-top: 4px; padding-bottom: 4px; }
.fortschritt-klickbar li a {
  display: block;
  color: inherit;
  text-decoration: none;
  padding: 3px 0;
}
.fortschritt-klickbar li a:hover { color: var(--green-deep); }

.portal-lock {
  display: flex;
  flex-direction: column;
  gap: 4px;
  margin: 12px 0;
  padding: 12px 14px;
  border-radius: var(--radius);
  border: 1px solid #d5c37a;
  background: #fff9df;
  color: var(--ink);
}
.portal-lock span { font-size: 13.5px; color: var(--ink-soft); }
.status-pill {
  display: inline-flex;
  align-items: center;
  width: fit-content;
  border-radius: var(--radius-pill);
  padding: 5px 9px;
  font-size: 12px;
  font-weight: 600;
  white-space: nowrap;
}
.status-pending { background: var(--paper); color: var(--ink-soft); border: 1px solid var(--paper-line); }
.status-active { background: #fff7dc; color: #735c08; border: 1px solid #ead990; }
.status-done { background: var(--green-tint); color: var(--green-deep); border: 1px solid #b7d6c2; }
.status-info { background: #edf2ff; color: #36538d; border: 1px solid #c8d4ef; }
.section-title-with-status { display: flex; gap: 12px; align-items: center; justify-content: space-between; flex-wrap: wrap; }
.section-title-with-status h2 { margin-bottom: 0; }

.field-grid { display: grid; gap: 0 16px; }
.field-grid.two { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.portal-savebar {
  display: flex;
  align-items: center;
  gap: 14px;
  flex-wrap: wrap;
  margin-top: 18px;
  padding-top: 14px;
  border-top: 1px solid var(--paper-line);
}
.portal-savebar button { margin: 0; }
.portal-savebar span { color: var(--ink-soft); font-size: 12.5px; }
.current-document {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 14px;
  margin: 10px 0;
  padding: 10px 12px;
  background: var(--paper);
  border: 1px solid var(--paper-line);
  border-radius: var(--radius);
}
.current-document > div:first-child { min-width: 0; }
.current-document strong,
.current-document span { display: block; }
.current-document span { margin-top: 3px; color: var(--ink-soft); font-size: 12.5px; overflow-wrap: anywhere; }
.current-document-actions { display: flex; gap: 6px; flex-wrap: wrap; flex: 0 0 auto; }
.current-document-actions .btn { margin: 0; }

.appointment-grid { display: grid; gap: 8px; margin: 10px 0 16px; }
.appointment-card,
.mini-status-card {
  display: flex;
  justify-content: space-between;
  gap: 14px;
  align-items: center;
  padding: 11px 13px;
  border: 1px solid var(--paper-line);
  border-radius: var(--radius);
  background: var(--paper);
}
.appointment-card { text-decoration: none; color: var(--ink); }
.appointment-card:hover { border-color: #9dc3aa; background: var(--green-tint); }
.appointment-card span,
.mini-status-card span { color: var(--ink-soft); font-size: 12.5px; }
.contract-status-list { margin-top: 14px; }

/* Kundenchat innerhalb der linken Spalte statt als schwebendes Widget. */
.portal-chat-slot #rk-chat-panel.rk-embedded {
  position: static;
  display: flex;
  width: 100%;
  max-width: none;
  height: 380px;
  max-height: min(46vh, 420px);
  border: 0;
  border-radius: 0;
  box-shadow: none;
}
.portal-chat-slot #rk-chat-panel.rk-embedded #rk-chat-head { border-radius: 0; }
.portal-chat-slot #rk-chat-panel.rk-embedded #rk-chat-msgs { min-height: 150px; }

@media (max-width: 980px) {
  .portal-shell { grid-template-columns: 210px minmax(0,1fr); gap: 18px; }
  .portal-sidebar { top: 8px; }
}
@media (max-width: 760px) {
  .portal-shell { display: block; }
  .portal-sidebar { position: static; margin-bottom: 14px; }
  .portal-progress-card { display: none; }
  .portal-chat-slot #rk-chat-panel.rk-embedded { height: 300px; max-height: 42vh; }
  .portal-title-row { flex-direction: column; }
  .field-grid.two { grid-template-columns: 1fr; }
  .dossier-tabs { top: 0; margin-left: -4px; margin-right: -4px; }
  .current-document { align-items: stretch; flex-direction: column; }
  .current-document-actions { width: 100%; }
  .appointment-card, .mini-status-card { align-items: flex-start; flex-direction: column; }
}

/* ========================================================================== 
   V12 – Objektstammdaten / öffentliches Wohnungsportal
   ========================================================================== */
.subcard {
  margin: 22px 0;
  padding: 18px;
  border: 1px solid var(--paper-line, #dedede);
  border-radius: 6px;
  background: rgba(255,255,255,.46);
}
.subcard > h3:first-child { margin-top: 0; }
.masterdata-portal-block { border-left: 4px solid var(--green, #49b16d); }
.masterdata-grid-3 { grid-template-columns: repeat(3, minmax(0,1fr)); }
.mietoptionen-batch-rows { display: grid; gap: 9px; margin: 12px 0; }
.mietoption-batch-row {
  display: grid;
  grid-template-columns: minmax(180px,1.5fr) minmax(110px,.8fr) minmax(100px,.7fr) minmax(120px,.8fr) minmax(90px,.55fr) 38px;
  gap: 8px;
  align-items: end;
  padding: 10px;
  border: 1px solid var(--paper-line, #dedede);
  border-radius: 6px;
  background: #fff;
}
.mietoption-batch-row label { margin: 0; }
.mietoption-batch-row input,
.mietoption-batch-row select { margin-bottom: 0; }
.mietoption-batch-row .row-remove {
  width: 38px;
  height: 38px;
  padding: 0;
  border-radius: 4px;
}
.masterdata-image-list { display: grid; gap: 7px; margin: 10px 0 14px; }
.masterdata-image-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 9px 11px;
  border: 1px solid var(--paper-line, #dedede);
  border-radius: 5px;
  background: #fff;
}
@media (max-width: 1050px) {
  .masterdata-grid-3 { grid-template-columns: 1fr 1fr; }
  .mietoption-batch-row { grid-template-columns: 1.5fr .8fr .8fr; }
  .mietoption-batch-row .row-remove { align-self: end; }
}
@media (max-width: 700px) {
  .masterdata-grid-3 { grid-template-columns: 1fr; }
  .mietoption-batch-row { grid-template-columns: 1fr; }
  .masterdata-image-item { align-items: flex-start; flex-direction: column; }
}

/* ========================================================================== 
   V13 – interne Tab-Navigation für Stammdaten und Zugangsdaten
   ========================================================================== */
.admin-tabs {
  display: flex;
  gap: 6px;
  margin: 0 0 18px;
  padding: 5px;
  overflow-x: auto;
  border: 1px solid var(--paper-line);
  border-radius: 8px;
  background: #fff;
  scrollbar-width: thin;
}
.admin-tab {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 40px;
  padding: 9px 15px;
  border: 1px solid transparent;
  border-radius: 5px;
  color: var(--ink-soft);
  font-weight: 600;
  line-height: 1.2;
  text-decoration: none;
  white-space: nowrap;
}
.admin-tab:hover,
.admin-tab:focus-visible {
  color: var(--ink);
  background: var(--paper);
  border-color: var(--paper-line);
}
.admin-tab.is-active {
  color: #fff;
  background: var(--green-deep);
  border-color: var(--green-deep);
}
.admin-inline-link {
  display: inline-block;
  margin-left: 6px;
  padding: 9px 16px;
  text-decoration: none;
}
.admin-selector-form {
  display: grid;
  grid-template-columns: minmax(260px, 1fr) auto;
  gap: 14px;
  align-items: end;
}
.admin-selector-form label { margin: 0; }
.admin-selector-form button { margin: 0; }
.section-heading-row {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
}
.section-heading-row h2,
.section-heading-row h3 { margin-bottom: 4px; }
.section-heading-row .admin-inline-link { margin: 0; }
.hidden-form { display: none !important; }

@media (max-width: 700px) {
  .admin-tabs { margin-left: -2px; margin-right: -2px; }
  .admin-tab { padding: 9px 12px; }
  .admin-selector-form { grid-template-columns: 1fr; }
  .section-heading-row { flex-direction: column; }
  .section-heading-row .admin-inline-link { margin-left: 0; }
}

/* ========================================================================== 
   V14 – schnelle interne Tabs, konsistente Feldhöhen und Stammdaten-Layout
   ========================================================================== */
[data-admin-panel][hidden] { display: none !important; }

/* Einheitliche vertikale Ausrichtung: einzeilige Controls und Buttons haben
   portalweit dieselbe Mindesthöhe. Textareas/File-Uploads bleiben flexibel. */
input[type=text], input[type=email], input[type=tel], input[type=date],
input[type=time], input[type=number], input[type=url], select {
  min-height: 42px;
}
button, a.btn {
  min-height: 42px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.grid > label,
.field-grid > label,
.admin-equal-fields label {
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
}

.object-address-block {
  margin-top: 18px;
  margin-bottom: 18px;
  background: #fafbfa;
}
.object-address-block > h3 { margin: 0 0 4px; }
.object-address-street-grid { grid-template-columns: minmax(0, 1fr) minmax(110px, .28fr); }
.object-address-place-grid { grid-template-columns: minmax(120px, .45fr) minmax(180px, 1fr) minmax(150px, .7fr); }
.object-address-block label { margin-top: 10px; }

.table-toolbar {
  display: flex;
  justify-content: flex-end;
  align-items: center;
  margin: 4px 0 6px;
}
.compact-toggle {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  margin: 0;
  font-size: 12.5px;
  font-weight: 500;
  color: var(--ink-soft);
  cursor: pointer;
}
.compact-toggle input { margin: 0; }
.object-list-table .optional-country-col[hidden] { display: none !important; }
.badge-strong-green { background: var(--green-deep) !important; color: #fff !important; border-color: var(--green-deep) !important; }
.badge-strong-red { background: var(--error) !important; color: #fff !important; border-color: var(--error) !important; }

/* Objektliste: jede Spalte direkt filterbar. */
.object-list-table thead th { vertical-align: bottom; }
.object-filter-row th {
  padding-top: 2px;
  padding-bottom: 9px;
  background: #fafbfa;
}
.object-column-filter {
  min-width: 92px;
  width: 100%;
  height: 34px;
  min-height: 34px;
  margin: 0;
  padding: 6px 9px;
  border-radius: 5px;
  font-size: 12.5px;
  font-weight: 400;
  text-transform: none;
  letter-spacing: 0;
}
.object-data-row td {
  padding-top: 11px;
  padding-bottom: 7px;
  border-bottom: 0;
  background: #fff;
}
.object-action-row td {
  padding: 5px 10px 11px;
  border-bottom: 1px solid #dfe4e1;
  background: #fafbfa;
}
.object-data-row:hover td,
.object-data-row:hover + .object-action-row td,
.object-action-row:hover td { background: #f8faf8; }
.object-action-bar {
  display: flex;
  align-items: center;
  gap: 7px;
  flex-wrap: wrap;
}
.object-action-bar .inline-form { display: inline-flex; margin: 0; }
.object-action-bar .compact-action {
  margin: 0;
  white-space: nowrap;
  min-height: 34px;
  padding: 7px 12px;
  box-shadow: none;
}
.object-action-bar .compact-action:hover { transform: none; box-shadow: none; }
.object-action-bar .action-edit {
  background: var(--green-tint);
  border-color: #b7d6c2;
  color: var(--green-deep);
}
.object-action-bar .action-edit:hover { background: #d7ebde; }
.object-action-bar .action-inserat {
  background: var(--paper);
  border-color: var(--paper-line);
  color: var(--ink-soft);
}
.object-action-bar .action-inserat:hover { background: #ecebed; color: var(--ink); }
.object-action-bar .action-deactivate {
  background: var(--error-tint);
  border-color: rgba(192,57,43,.24);
  color: var(--error);
}
.object-action-bar .action-deactivate:hover { background: #f5d9d5; }
.object-action-bar .action-activate {
  background: var(--green-tint);
  border-color: #b7d6c2;
  color: var(--green-deep);
}
.object-action-bar .action-activate:hover { background: #d7ebde; }
.object-filter-empty td {
  padding: 18px 12px;
  text-align: center;
  color: var(--ink-soft);
  background: #fafbfa;
}

/* Anbieter: Name/Hinweis/Entfernen auf einer Höhe; der längere Anmeldelink
   erhält darunter eine eigene, breite Zeile. */
.anbieter-batch-row {
  grid-template-columns: minmax(170px, .8fr) minmax(220px, 1fr) auto;
  grid-template-areas:
    "name hint remove"
    "url  url  .";
  gap: 10px 12px;
  align-items: end;
}
.anbieter-batch-row .provider-name { grid-area: name; }
.anbieter-batch-row .provider-hint { grid-area: hint; }
.anbieter-batch-row .provider-url { grid-area: url; }
.anbieter-batch-row .row-remove {
  grid-area: remove;
  align-self: end;
  margin: 0;
  min-height: 42px;
}
.anbieter-batch-row label { margin: 0; }
.anbieter-batch-row input { margin-bottom: 0; }

@media (max-width: 900px) {
  .object-address-street-grid,
  .object-address-place-grid { grid-template-columns: 1fr 1fr; }
  .object-address-place-grid label:last-child { grid-column: 1 / -1; }
  .anbieter-batch-row {
    grid-template-columns: 1fr 1fr auto;
    grid-template-areas:
      "name hint remove"
      "url  url  url";
  }
}
@media (max-width: 640px) {
  .object-address-street-grid,
  .object-address-place-grid { grid-template-columns: 1fr; }
  .object-address-place-grid label:last-child { grid-column: auto; }
  .anbieter-batch-row {
    grid-template-columns: 1fr auto;
    grid-template-areas:
      "name remove"
      "hint hint"
      "url url";
  }
  .object-action-bar { min-width: 0; }
}

/* ========================================================================== 
   V18 – Stammdaten: einheitliche Aktionsbuttons in Zeilen-/Spaltenlayouts
   ========================================================================== */
.stammdaten-page {
  --stamm-row-action-width: 150px;
  --stamm-row-action-height: 42px;
  --stamm-row-action-font-size: 13px;
}

/* Text-Aktionen in strukturierten Zeilen/Spalten haben überall dieselben
   Abmessungen und dieselbe Typografie. Dadurch springen Bearbeiten, Inserat,
   De-/Aktivieren, Anbieteraktionen usw. optisch nicht mehr gegeneinander. */
.stammdaten-page .stamm-row-action {
  box-sizing: border-box;
  width: var(--stamm-row-action-width);
  min-width: var(--stamm-row-action-width);
  height: var(--stamm-row-action-height);
  min-height: var(--stamm-row-action-height);
  margin: 0;
  padding: 0 12px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-family: inherit;
  font-size: var(--stamm-row-action-font-size);
  font-weight: 500;
  line-height: 1.2;
  text-align: center;
  white-space: nowrap;
  vertical-align: middle;
}

.stammdaten-page .object-action-bar,
.stammdaten-page .stamm-row-actions {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
}
.stammdaten-page .object-action-bar .inline-form,
.stammdaten-page .stamm-row-actions .inline-form {
  display: inline-flex;
  align-items: center;
  margin: 0;
}

/* Farbklassen gelten auf der gesamten Stammdatenseite konsistent, nicht nur
   in der Objektliste. */
.stammdaten-page .action-edit {
  background: var(--green-tint);
  border-color: #b7d6c2;
  color: var(--green-deep);
}
.stammdaten-page .action-edit:hover {
  background: #d7ebde;
  color: var(--green-deep);
}
.stammdaten-page .action-inserat {
  background: var(--paper);
  border-color: var(--paper-line);
  color: var(--ink-soft);
}
.stammdaten-page .action-inserat:hover {
  background: #ecebed;
  color: var(--ink);
}
.stammdaten-page .action-deactivate {
  background: var(--error-tint);
  border-color: rgba(192,57,43,.24);
  color: var(--error);
}
.stammdaten-page .action-deactivate:hover {
  background: #f5d9d5;
  color: var(--error);
}
.stammdaten-page .action-activate {
  background: var(--green-tint);
  border-color: #b7d6c2;
  color: var(--green-deep);
}
.stammdaten-page .action-activate:hover {
  background: #d7ebde;
  color: var(--green-deep);
}

/* Plus-/Minus-Aktionen mit nur einem Symbol bleiben bewusst quadratisch,
   verwenden aber dieselbe Höhe wie die Text-Aktionen. */
.stammdaten-page .mietoption-batch-row .mietoption-remove-row {
  width: var(--stamm-row-action-height);
  min-width: var(--stamm-row-action-height);
  height: var(--stamm-row-action-height);
  min-height: var(--stamm-row-action-height);
  padding: 0;
  font-size: var(--stamm-row-action-font-size);
}

/* In mobilen, gestapelten Zeilen darf eine Text-Aktion die verfügbare Breite
   nutzen; innerhalb derselben Zeile bleiben gleichartige Aktionen gleich. */
@media (max-width: 640px) {
  .stammdaten-page .stamm-row-actions,
  .stammdaten-page .object-action-bar {
    align-items: stretch;
  }
  .stammdaten-page .stamm-row-action {
    width: 100%;
    min-width: 0;
  }
  .stammdaten-page .object-action-bar .inline-form,
  .stammdaten-page .stamm-row-actions .inline-form {
    width: 100%;
  }
  .stammdaten-page .object-action-bar .inline-form .stamm-row-action,
  .stammdaten-page .stamm-row-actions .inline-form .stamm-row-action {
    width: 100%;
  }
  .stammdaten-page .mietoption-batch-row .mietoption-remove-row {
    width: var(--stamm-row-action-height);
    min-width: var(--stamm-row-action-height);
  }
}
@media (max-width: 640px) {
  .stammdaten-page .anbieter-batch-row .anbieter-remove-row {
    width: var(--stamm-row-action-width);
    min-width: var(--stamm-row-action-width);
  }
}

/* ========================================================================== 
   V19 – amtliche Adressprüfung / Autocomplete
   ========================================================================== */
[data-address-group], .address-full-host { position: relative; }
.address-lookup-ui { position: relative; grid-column: 1 / -1; }
.address-suggestion-list {
  position: absolute;
  z-index: 240;
  left: 0;
  right: 0;
  top: 2px;
  max-height: 260px;
  overflow-y: auto;
  border: 1px solid #cfd8d2;
  border-radius: 7px;
  background: #fff;
  box-shadow: 0 14px 34px rgba(29,29,27,.14);
}
.address-suggestion {
  display: block;
  width: 100%;
  min-height: 40px;
  margin: 0;
  padding: 9px 12px;
  border: 0;
  border-bottom: 1px solid #edf0ee;
  border-radius: 0;
  background: #fff;
  color: var(--ink);
  text-align: left;
  text-transform: none;
  font-size: 13px;
  font-weight: 500;
  line-height: 1.35;
  box-shadow: none;
}
.address-suggestion:last-child { border-bottom: 0; }
.address-suggestion:hover,
.address-suggestion:focus { background: #f4f8f5; color: var(--ink); transform: none; }
.address-lookup-status {
  min-height: 18px;
  margin-top: 5px;
  color: var(--ink-soft);
  font-size: 12px;
  line-height: 1.4;
}
.address-lookup-status.is-ok { color: var(--green-deep); font-weight: 600; }
.address-lookup-status.is-warn { color: #9a3b31; }
.address-lookup-status.is-busy,
.address-lookup-status.is-hint { color: var(--ink-soft); }
.address-full-host .address-lookup-ui { margin-top: 0; }

/* ========================================================================== 
   V19 – einheitliche Tabellenfilter, Seitengrösse und Pagination
   ========================================================================== */
.table-tools-top,
.table-tools-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin: 10px 0;
}
.table-page-size {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  margin: 0;
  color: var(--ink-soft);
  font-size: 13px;
  font-weight: 500;
}
.table-page-size select {
  width: auto;
  min-width: 78px;
  height: 38px;
  margin: 0;
  padding: 6px 30px 6px 10px;
}
.table-generic-filter-row th { padding-top: 7px; padding-bottom: 9px; }
.table-generic-filter {
  width: 100%;
  min-width: 90px;
  height: 34px;
  margin: 0;
  padding: 6px 8px;
  font-size: 12px;
  font-weight: 400;
}
.table-tools-viewport {
  overflow-anchor: none;
  transition: min-height .12s ease;
}
.table-tools-summary { color: var(--ink-soft); font-size: 12.5px; }
.table-pagination { display: flex; align-items: center; justify-content: flex-end; gap: 5px; margin-left: auto; }
.table-page-button {
  width: 36px;
  min-width: 36px;
  height: 36px;
  min-height: 36px;
  margin: 0;
  padding: 0;
  border: 1px solid #d8ddda;
  border-radius: 5px;
  background: #f5f6f5;
  color: var(--ink-soft);
  font-size: 12.5px;
  font-weight: 600;
  text-transform: none;
  box-shadow: none;
}
.table-page-button:hover,
.table-page-button:focus { background: #e9efeb; color: var(--ink); transform: none; }
.table-page-button.is-active { border-color: var(--green); background: var(--green); color: #fff; }
.table-page-ellipsis { display: inline-grid; place-items: center; width: 22px; color: var(--ink-soft); }
[data-table-empty-row] td { padding: 18px 12px; color: var(--ink-soft); text-align: center; }
@media (max-width: 680px) {
  .table-tools-top, .table-tools-footer { align-items: flex-start; flex-direction: column; }
  .table-pagination { margin-left: 0; flex-wrap: wrap; justify-content: flex-start; }
}

.address-edit-block {
  margin: 14px 0;
  padding: 14px 16px 16px;
  border: 1px solid #dfe5e1;
  border-radius: 7px;
  background: #fafcfb;
}
.address-edit-block legend { padding: 0 6px; font-weight: 700; }
.address-edit-grid {
  display: grid;
  grid-template-columns: minmax(0,1fr) minmax(0,.72fr) minmax(0,1fr);
  gap: 10px 12px;
}
.address-edit-grid label { margin: 0; }
.address-edit-grid label:nth-child(1) { grid-column: 1 / -1; }
.address-edit-grid label:nth-child(4) { grid-column: 1 / 3; }
.address-edit-grid label:nth-child(5) { grid-column: 3 / 4; }
@media (max-width: 700px) {
  .address-edit-grid { grid-template-columns: 1fr 1fr; }
  .address-edit-grid label:nth-child(1), .address-edit-grid label:nth-child(4) { grid-column: 1 / -1; }
  .address-edit-grid label:nth-child(5) { grid-column: auto; }
}
@media (max-width: 520px) {
  .address-edit-grid { grid-template-columns: 1fr; }
  .address-edit-grid label:nth-child(n) { grid-column: auto; }
}

/* ========================================================================== 
   V20 – Autocomplete-/Tabellen-Feinschliff
   ========================================================================== */
.table-tools-top {
  justify-content: flex-end;
  margin-top: 8px;
  margin-bottom: 10px;
}
.table-tools-footer {
  justify-content: flex-end;
  flex-wrap: wrap;
  margin-top: 10px;
}
.table-tools-summary {
  margin-left: auto;
  text-align: right;
  white-space: nowrap;
}
.table-pagination {
  margin-left: 0;
}
@media (max-width: 680px) {
  .table-tools-top,
  .table-tools-footer {
    flex-direction: row;
    align-items: center;
    justify-content: flex-end;
    flex-wrap: wrap;
  }
  .table-pagination {
    margin-left: 0;
    justify-content: flex-end;
  }
}
.address-lookup-ui.is-field-popup { position: static; }
.address-lookup-ui.is-field-popup .address-suggestion-list { right: auto; }

/* ========================================================================== 
   V22 – Tabellenfooter links/rechts + optionale Veröffentlicht-Spalte
   ========================================================================== */
.object-column-toggles {
  gap: 16px;
  flex-wrap: wrap;
}
.object-list-table .optional-publish-col[hidden] {
  display: none !important;
}
.table-tools-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
  margin: 10px 0 0;
}
.table-tools-footer .table-page-size {
  flex: 0 0 auto;
  margin-right: auto;
}
.table-tools-footer-right {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 10px;
  margin-left: auto;
}
.table-tools-footer .table-tools-summary {
  margin-left: 0;
  text-align: right;
  white-space: nowrap;
}
.table-tools-footer .table-pagination {
  margin-left: 0;
}
@media (max-width: 680px) {
  .table-tools-footer {
    align-items: flex-start;
    flex-direction: column;
  }
  .table-tools-footer .table-page-size {
    margin-right: 0;
  }
  .table-tools-footer-right {
    width: 100%;
    margin-left: 0;
    justify-content: flex-end;
    flex-wrap: wrap;
  }
}

/* ========================================================================== 
   V23 – Primäre interne Aktionen im RESTAY-Grün
   ========================================================================== */
.admin-primary-action,
button.admin-primary-action,
a.btn.admin-primary-action {
  background: var(--green-deep);
  border-color: var(--green-deep);
  color: #fff;
  box-shadow: none;
}
.admin-primary-action:hover,
.admin-primary-action:focus-visible,
button.admin-primary-action:hover,
button.admin-primary-action:focus-visible,
a.btn.admin-primary-action:hover,
a.btn.admin-primary-action:focus-visible {
  background: var(--green);
  border-color: var(--green);
  color: #fff;
  box-shadow: 0 4px 12px rgba(46,126,80,.18);
}

/* ========================================================================== 
   V24 – kompakte Statusspalten in Stammdaten-Tabellen
   ========================================================================== */
.table-status-col {
  width: 96px;
  min-width: 96px;
  max-width: 108px;
  white-space: nowrap;
}
th.table-status-col,
td.table-status-col {
  padding-left: 10px;
  padding-right: 10px;
}
th.table-status-col select,
th.table-status-col input {
  width: 100%;
  min-width: 0;
}


/* ========================================================================== 
   V25 – einheitliche Bearbeiten-/Inserat-/Entfernen-Aktionen
   ========================================================================== */
/* Bearbeiten ist portalweit eine neutrale, hellgraue Aktion. Die Objekt- und
   Objektverantwortlichen-Liste sowie Bearbeiten-Schalter in Dossier,
   Besichtigungen und Nutzerverwaltung verwenden dieselbe Darstellung. */
.stammdaten-page .action-edit,
.admin-edit-action,
a.btn.admin-edit-action,
button.admin-edit-action {
  box-sizing: border-box;
  width: 150px;
  min-width: 150px;
  height: 42px;
  min-height: 42px;
  padding: 0 14px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: var(--paper);
  border: 1px solid var(--paper-line);
  color: var(--ink-soft);
  font-family: inherit;
  font-size: 13px;
  font-weight: 500;
  line-height: 1.2;
  text-decoration: none;
  box-shadow: none;
}
.stammdaten-page .action-edit:hover,
.stammdaten-page .action-edit:focus-visible,
.admin-edit-action:hover,
.admin-edit-action:focus-visible,
a.btn.admin-edit-action:hover,
a.btn.admin-edit-action:focus-visible,
button.admin-edit-action:hover,
button.admin-edit-action:focus-visible {
  background: #ecebed;
  border-color: #d4d3d5;
  color: var(--ink);
  transform: none;
  box-shadow: none;
}

/* Inserat ist in Tabellen bewusst gelb, damit es sich klar von Bearbeiten
   (neutral) und Aktivieren/Deaktivieren (Statusaktion) unterscheidet. */
.stammdaten-page .action-inserat,
.object-action-bar .action-inserat {
  background: #fff4c7;
  border-color: #ead487;
  color: #765c00;
}
.stammdaten-page .action-inserat:hover,
.stammdaten-page .action-inserat:focus-visible,
.object-action-bar .action-inserat:hover,
.object-action-bar .action-inserat:focus-visible {
  background: #f8e69f;
  border-color: #d9bd58;
  color: #5d4800;
  transform: none;
  box-shadow: none;
}

/* Alle reinen Entfernen-Aktionen verwenden denselben kompakten Minus-Button.
   Das umfasst Anbieter-, Mietoptions- und Terminzeilen sowie Bildentfernung. */
.row-remove,
.stammdaten-page .anbieter-batch-row .anbieter-remove-row,
.stammdaten-page .mietoption-batch-row .mietoption-remove-row,
.remove-icon-action,
.termin-batch-row .row-remove {
  box-sizing: border-box;
  width: 42px;
  min-width: 42px;
  max-width: 42px;
  height: 42px;
  min-height: 42px;
  margin: 0;
  padding: 0;
  display: inline-grid;
  place-items: center;
  border: 1px solid var(--paper-line);
  border-radius: 4px;
  background: transparent;
  color: var(--error);
  font-family: inherit;
  font-size: 18px;
  font-weight: 600;
  line-height: 1;
  text-align: center;
  box-shadow: none;
}
.row-remove:hover,
.row-remove:focus-visible,
.stammdaten-page .anbieter-batch-row .anbieter-remove-row:hover,
.stammdaten-page .anbieter-batch-row .anbieter-remove-row:focus-visible,
.stammdaten-page .mietoption-batch-row .mietoption-remove-row:hover,
.stammdaten-page .mietoption-batch-row .mietoption-remove-row:focus-visible,
.remove-icon-action:hover,
.remove-icon-action:focus-visible,
.termin-batch-row .row-remove:hover,
.termin-batch-row .row-remove:focus-visible {
  background: var(--error-tint);
  border-color: rgba(192,57,43,.3);
  color: var(--error);
  transform: none;
  box-shadow: none;
}
/* Frühere mobile Regeln dürfen den kompakten Entfernen-Button nicht auf die
   ganze Zeilenbreite ziehen. */
@media (max-width: 640px) {
  .stammdaten-page .anbieter-batch-row .anbieter-remove-row,
  .stammdaten-page .mietoption-batch-row .mietoption-remove-row,
  .row-remove,
  .remove-icon-action,
  .termin-batch-row .row-remove {
    width: 42px;
    min-width: 42px;
    max-width: 42px;
  }
}

/* ========================================================================== 
   V26 – portalweite Aktions- und Upload-Standards
   ========================================================================== */
/* Primäre Aktionen (Speichern, Anlegen, Absenden, Hochladen, Freigeben usw.)
   sind portalweit RESTAY-grün. Semantische Klassen wie secondary/danger/
   ghost und die spezifischen Tabellenaktionen überschreiben dies bewusst. */
button:not(.secondary):not(.danger):not(.ghost):not(.row-remove):not(.doc-preview-close):not(.modal-ok-btn),
a.btn:not(.secondary):not(.danger):not(.ghost):not(.action-edit):not(.action-inserat):not(.action-activate):not(.action-deactivate) {
  background: var(--green-deep);
  border-color: var(--green-deep);
  color: #fff;
}
button:not(.secondary):not(.danger):not(.ghost):not(.row-remove):not(.doc-preview-close):not(.modal-ok-btn):hover,
button:not(.secondary):not(.danger):not(.ghost):not(.row-remove):not(.doc-preview-close):not(.modal-ok-btn):focus-visible,
a.btn:not(.secondary):not(.danger):not(.ghost):not(.action-edit):not(.action-inserat):not(.action-activate):not(.action-deactivate):hover,
a.btn:not(.secondary):not(.danger):not(.ghost):not(.action-edit):not(.action-inserat):not(.action-activate):not(.action-deactivate):focus-visible {
  background: var(--green);
  border-color: var(--green);
  color: #fff;
}

/* Bearbeiten ist überall dieselbe neutrale Aktion – unabhängig davon, ob
   der Auslöser ein Link oder Button ist. */
.action-edit,
.admin-edit-action,
a.btn.action-edit,
a.btn.admin-edit-action,
button.action-edit,
button.admin-edit-action {
  box-sizing: border-box;
  width: 150px;
  min-width: 150px;
  height: 42px;
  min-height: 42px;
  margin-top: 0;
  padding: 0 14px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: var(--paper);
  border: 1px solid var(--paper-line);
  color: var(--ink-soft);
  font-size: 13px;
  font-weight: 500;
  line-height: 1.2;
  text-decoration: none;
  box-shadow: none;
}
.action-edit:hover,
.action-edit:focus-visible,
.admin-edit-action:hover,
.admin-edit-action:focus-visible {
  background: #ecebed;
  border-color: #d4d3d5;
  color: var(--ink);
  transform: none;
  box-shadow: none;
}

/* Inserat-Aktionen sind portalweit gelb. */
.action-inserat,
a.btn.action-inserat,
button.action-inserat {
  background: #fff4c7;
  border-color: #ead487;
  color: #765c00;
}
.action-inserat:hover,
.action-inserat:focus-visible {
  background: #f8e69f;
  border-color: #d9bd58;
  color: #5d4800;
  transform: none;
  box-shadow: none;
}

/* Statusaktionen bleiben eindeutig. */
.action-activate,
button.action-activate,
a.btn.action-activate {
  background: var(--green-tint);
  border-color: #b9d9c4;
  color: var(--green-deep);
}
.action-activate:hover,
.action-activate:focus-visible {
  background: #d7ebde;
  border-color: #9cc8ab;
  color: var(--green-deep);
  transform: none;
}
.action-deactivate,
button.action-deactivate,
a.btn.action-deactivate {
  background: var(--error-tint);
  border-color: #ebc4bf;
  color: var(--error);
}
.action-deactivate:hover,
.action-deactivate:focus-visible {
  background: #f5d9d5;
  border-color: #dda69f;
  color: var(--error);
  transform: none;
}

/* Alle reinen Entfernen-Aktionen bleiben derselbe kompakte Minus-Button. */
.row-remove,
.remove-icon-action,
.anbieter-remove-row,
.mietoption-remove-row {
  width: 42px !important;
  min-width: 42px !important;
  max-width: 42px !important;
  height: 42px !important;
  min-height: 42px !important;
  padding: 0 !important;
  margin: 0 !important;
  display: inline-grid !important;
  place-items: center;
  background: transparent !important;
  border: 1px solid var(--paper-line) !important;
  color: var(--error) !important;
  font-size: 18px !important;
  line-height: 1 !important;
  box-shadow: none !important;
}
.row-remove:hover,
.remove-icon-action:hover,
.anbieter-remove-row:hover,
.mietoption-remove-row:hover {
  background: var(--error-tint) !important;
  border-color: rgba(192,57,43,.3) !important;
}

/* Einheitliche Mehrfach-Upload-Komponente. */
.upload-selection-list {
  margin: 0;
  padding: 0;
  list-style: none;
  display: grid;
  gap: 5px;
}
.upload-selection-list li {
  padding: 5px 8px;
  border: 1px solid #cfe0d5;
  border-radius: var(--radius-sm);
  background: #f6fbf8;
  color: var(--green-deep);
  overflow-wrap: anywhere;
}
.current-document-list,
.dossier-document-list {
  display: grid;
  gap: 8px;
  margin: 10px 0;
}
.current-document-list .current-document {
  margin: 0;
}
.dossier-document-item {
  padding: 10px 12px;
  border: 1px solid var(--paper-line);
  border-radius: var(--radius-sm);
  background: var(--paper);
}
.dossier-document-actions,
.dossier-document-ki {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 7px;
  margin-top: 5px;
}
.admin-upload-card {
  margin-top: 12px;
}

/* ========================================================================== 
   V28 – neutrale Adressvorschläge + einzeln entfernbare Upload-Auswahl
   ========================================================================== */
button.address-suggestion,
.address-suggestion {
  background: #fff !important;
  color: var(--ink) !important;
  border: 0 !important;
  border-bottom: 1px solid #edf0ee !important;
  box-shadow: none !important;
}
button.address-suggestion:hover,
button.address-suggestion:focus-visible,
.address-suggestion:hover,
.address-suggestion:focus-visible {
  background: #f4f6f5 !important;
  color: var(--ink) !important;
  border-color: #e2e6e3 !important;
  transform: none !important;
}
.upload-selection-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
}
.upload-selection-item > span {
  min-width: 0;
  overflow-wrap: anywhere;
}
.upload-selection-remove {
  flex: 0 0 42px;
}
.current-document-actions .upload-document-remove {
  flex: 0 0 42px;
}

/* V28 – strukturierte Unternehmens-Kontaktdaten auch im internen Bereich */
.company-applicant-block {
  margin-top: 12px;
  padding-top: 12px;
  border-top: 1px solid var(--paper-line);
}
.company-applicant-block .checkbox-row { margin: 0; }
.company-organisation-field { display: none; margin-top: 12px; }
.company-applicant-block:has(input[name="ist_unternehmen"]:checked) .company-organisation-field { display: block; }
.admin-company-block .company-organisation-field { max-width: 520px; }

/* ========================================================================== 
   V30 – breite responsive Administration / einheitliche Admin-Kopfzeile
   ========================================================================== */
body.admin-page {
  width: min(1480px, calc(100vw - 40px));
  max-width: 1480px;
  margin: 28px auto 40px;
  padding: 0;
}
body.admin-page > .card,
body.admin-page > .admin-panel,
body.admin-page > .admin-tabs,
body.admin-page > header,
body.admin-page > .err,
body.admin-page > .ok,
body.admin-page > .warn,
body.admin-page > h1,
body.admin-page > h2,
body.admin-page > p {
  width: 100%;
}
.admin-header {
  min-height: 76px;
  margin-bottom: 28px;
  padding: 0 0 16px;
  align-items: flex-start;
}
.admin-header > div:first-child {
  min-height: 52px;
  justify-content: flex-start;
}
.admin-header .brand-logo {
  height: 24px;
}
.admin-header .brand-title {
  min-height: 22px;
  display: flex;
  align-items: center;
}
.admin-header .headerright {
  min-height: 32px;
  padding-top: 5px;
  align-items: center;
}

/* Zugangsdaten: Kontaktdaten analog zum restlichen Admin-Formularlayout. */
.admin-contact-block {
  margin: 4px 0 18px;
}
.admin-contact-grid {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}
.access-data-row td {
  vertical-align: top;
}
.access-link-action-row td {
  padding-top: 10px;
  padding-bottom: 12px;
}
.access-link-row {
  display: grid;
  grid-template-columns: minmax(320px, 1fr) auto;
  align-items: end;
  gap: 12px 18px;
}
.access-link-value input[readonly] {
  width: 100%;
  margin: 0;
  background: #fff;
}
.access-link-actions {
  justify-content: flex-end;
  flex-wrap: nowrap;
}
.access-link-actions .admin-edit-action {
  flex: 0 0 150px;
}
.table-filter-disabled {
  background: #fafbfa;
}

@media (max-width: 1100px) {
  body.admin-page {
    width: min(100%, calc(100vw - 28px));
  }
  .admin-contact-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .access-link-row {
    grid-template-columns: 1fr;
    align-items: start;
  }
  .access-link-actions {
    justify-content: flex-start;
  }
}
@media (max-width: 700px) {
  body.admin-page {
    width: 100%;
    margin: 16px auto 28px;
    padding: 0 14px;
  }
  .admin-header {
    min-height: 0;
    margin-bottom: 20px;
    gap: 14px;
  }
  .admin-header .headerright {
    width: 100%;
    justify-content: flex-end;
    padding-top: 0;
  }
  .admin-contact-grid {
    grid-template-columns: 1fr;
  }
  .access-link-actions {
    flex-wrap: wrap;
  }
  .access-link-actions .admin-edit-action {
    width: 150px;
    min-width: 150px;
  }
}

/* Dossier-Dokumentvorschau darf durch die breitere Admin-Regel nicht wieder
   auf die normale Admin-Maximalbreite begrenzt werden. */
body.admin-page.doc-preview-open {
  width: auto;
  max-width: none;
  margin-left: 24px;
  margin-right: min(48vw, 700px);
}
@media (max-width: 900px) {
  body.admin-page.doc-preview-open {
    width: 100%;
    margin: 0;
    padding: 0 14px;
    max-width: none;
  }
}

/* ========================================================================== 
   V31 – ruhige Status-/Aktionssprache, stabile Adminbreite, einheitliche Plus-Aktionen
   ========================================================================== */
html { scrollbar-gutter: stable; }

/* Status-Badges werden generell in den weicheren Tints dargestellt. Die
   bisherigen "strong" Klassen bleiben aus Rückwärtskompatibilität bestehen,
   sehen aber nicht mehr wie Primärbuttons aus. */
.badge-strong-green {
  background: var(--green-tint) !important;
  color: var(--green-deep) !important;
  border: 1px solid #c9dfd1 !important;
}
.badge-strong-red {
  background: var(--error-tint) !important;
  color: var(--error) !important;
  border: 1px solid #ebc4bf !important;
}

/* Bearbeiten, Inserat und Deaktivieren sind neutrale Verwaltungsaktionen.
   Nur "Aktivieren" ist als positive Aktion schwach grün hervorgehoben. */
.action-inserat,
a.btn.action-inserat,
button.action-inserat,
.action-deactivate,
a.btn.action-deactivate,
button.action-deactivate {
  background: var(--paper) !important;
  border-color: var(--paper-line) !important;
  color: var(--ink-soft) !important;
  box-shadow: none !important;
}
.action-inserat:hover,
.action-inserat:focus-visible,
.action-deactivate:hover,
.action-deactivate:focus-visible {
  background: #ecebed !important;
  border-color: #d4d3d5 !important;
  color: var(--ink) !important;
  transform: none !important;
  box-shadow: none !important;
}
.action-activate,
a.btn.action-activate,
button.action-activate {
  background: var(--green-tint) !important;
  border-color: #c9dfd1 !important;
  color: var(--green-deep) !important;
  box-shadow: none !important;
}

/* Gleichartige "+ hinzufügen"-Aktionen sind bewusst weiss/neutral. */
.admin-add-action,
button.admin-add-action,
a.btn.admin-add-action {
  box-sizing: border-box;
  min-height: 42px;
  margin-top: 0;
  background: #fff !important;
  border: 1px solid var(--paper-line) !important;
  color: var(--ink) !important;
  box-shadow: none !important;
  font-size: 13px;
  font-weight: 500;
}
/* Textlänge bestimmt die Breite; gleiche Innenabstände für beide Add-Aktionen. */
.stammdaten-page .stamm-row-action.admin-add-action {
  width: max-content;
  min-width: 0;
  flex: 0 0 auto;
  padding: 0 12px;
}
.admin-add-action:hover,
.admin-add-action:focus-visible {
  background: var(--paper) !important;
  border-color: #cfd3d0 !important;
  color: var(--ink) !important;
  transform: none !important;
  box-shadow: none !important;
}

/* Termin-Stapelzeilen: Minus exakt auf Höhe der einzeiligen Controls. */
.termin-batch-row .row-remove {
  width: 42px !important;
  min-width: 42px !important;
  max-width: 42px !important;
  height: 42px !important;
  min-height: 42px !important;
  align-self: end;
  margin: 0 0 0 0 !important;
}

/* Schlanker Details-Link statt zusätzlichem Aktionsbutton. */
.table-detail-link {
  display: inline-block;
  margin-top: 3px;
  color: var(--green-deep);
  font-size: 12.5px;
  font-weight: 500;
  text-decoration: none;
}
.table-detail-link:hover,
.table-detail-link:focus-visible { text-decoration: underline; }

/* Generierte Links: zweite Zeile enthält nur noch die beiden Aktionen. */
.access-link-actions {
  justify-content: flex-start;
  width: 100%;
}
.access-link-action-row td { padding-top: 7px; }

/* Unternehmensblock auch bei der Termin-Anmeldung. */
.viewing-company-block:has(input[name="anm_ist_unternehmen"]:checked) .company-organisation-field {
  display: block;
}
.viewing-contact-grid { align-items: end; }

/* V33 – Tabellenstatus portalweit wie in der internen Objektliste. */
table .badge,
table .status-pill {
  display: inline-block;
  width: auto;
  margin: 0;
  padding: 3px 11px;
  border: 1px solid var(--paper-line);
  border-radius: var(--radius-pill);
  font-family: var(--font-mono);
  font-size: 11px;
  font-weight: 400;
  line-height: 1.65;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  white-space: normal;
  vertical-align: middle;
}
table .badge-green,
table .status-done {
  background: var(--green-tint);
  color: var(--green-deep);
  border-color: #c9dfd1;
}
table .badge-red {
  background: var(--error-tint);
  color: var(--error);
  border-color: #ebc4bf;
}
table .badge-grey,
table .status-pending {
  background: var(--paper);
  color: var(--ink-soft);
  border-color: var(--paper-line);
}

/* Abschnitt 103: objektartabhängige Felder in der Inserat-Maske sicher ausblenden (label/fieldset-Regeln überschreiben sonst [hidden]). */
[data-art-groups][hidden],[data-art-label][hidden]{display:none !important}

/* ==========================================================================
   Abschnitt 107: Mietoptionen-Liste, Terminfilter, Auswahlfelder, Bedienung auf Touch-Geräten
   (Android, iOS, Windows: nur Standard-Eingaben, keine Hover-Abhängigkeit)
   ========================================================================== */
.vorl-batch-row {
  display: grid;
  grid-template-columns: minmax(180px,1.8fr) minmax(110px,.9fr) minmax(90px,.6fr) minmax(100px,.7fr) minmax(110px,.8fr) auto;
  gap: 0 12px;
  align-items: end;
  padding: 12px 0;
  border-top: 1px solid var(--paper-line);
}
.vorl-batch-row:first-child { border-top: none; }
.vorl-batch-row label { margin: 0; }
.vorl-batch-row input, .vorl-batch-row select { margin-bottom: 0; }
.vorl-batch-row .row-remove {
  margin: 0; padding: 9px 12px; min-width: 42px; align-self: end;
  background: transparent; color: var(--error); border-color: var(--paper-line);
}
.vorl-batch-row .row-remove:hover { background: var(--error-tint); box-shadow: none; transform: none; }
@media (max-width: 1050px) {
  .vorl-batch-row { grid-template-columns: 1fr 1fr 1fr auto; }
  .vorl-batch-row .vorl-titel { grid-column: 1 / -1; margin-bottom: 8px; }
  .vorl-batch-row .row-remove { grid-column: 4; }
}
@media (max-width: 640px) {
  .vorl-batch-row { grid-template-columns: 1fr 1fr; gap: 10px 12px; padding: 16px 0; }
  .vorl-batch-row .vorl-titel { grid-column: 1 / -1; margin-bottom: 0; }
  .vorl-batch-row .row-remove { grid-column: 1 / -1; width: 100%; }
}

.termin[hidden] { display: none !important; }
.termin-filter {
  display: grid;
  grid-template-columns: minmax(220px, 2fr) minmax(130px, 1fr) minmax(130px, 1fr) minmax(130px, 1fr);
  gap: 0 12px;
  align-items: end;
  margin: 12px 0 4px;
  padding: 14px 16px;
  background: var(--paper);
  border: 1px solid var(--paper-line);
  border-radius: var(--radius-lg);
}
.termin-filter label { margin-top: 0; }
.termin-filter .tf-actions { grid-column: 1 / -1; display: flex; align-items: center; gap: 16px; flex-wrap: wrap; margin-top: 12px; }
.termin-filter .tf-check { display: inline-flex; align-items: center; gap: 8px; margin: 0; font-weight: 400; }
.termin-filter .tf-check input { width: 20px; height: 20px; min-height: 0; margin: 0; }
.termin-filter .tf-actions button { margin-top: 0; }
.tf-count { margin: 10px 0 0; }
@media (max-width: 900px) {
  .termin-filter { grid-template-columns: 1fr 1fr; }
  .termin-filter .tf-objekt { grid-column: 1 / -1; }
  .termin-filter label { margin-top: 10px; }
}
@media (max-width: 480px) {
  .termin-filter { grid-template-columns: 1fr; padding: 12px; }
  .termin-filter .tf-actions button { width: 100%; }
}

/* Auswahllisten: ganze Liste scrollbar, grosse Tippflächen auf Touch-Geräten */
.ac-list { max-height: min(320px, 45vh); -webkit-overflow-scrolling: touch; overscroll-behavior: contain; }
.ac-wrap input { cursor: text; }

/* Touch-Geräte (Android, iOS, Windows-Tablets/-Handys): mindestens 16 px in Eingabefeldern, damit
   iOS beim Antippen nicht hineinzoomt, und Tippflächen von mindestens 44 px. */
@media (pointer: coarse), (max-width: 680px) {
  input[type=text], input[type=email], input[type=tel], input[type=date],
  input[type=time], input[type=number], input[type=url], input[type=search], input[type=password], input[type=month],
  input[type=datetime-local], select, textarea { font-size: 16px; min-height: 44px; }
  button, a.btn { min-height: 44px; }
  .ac-item { padding: 12px 12px; min-height: 44px; display: flex; align-items: center; font-size: 16px; border-bottom: 1px solid var(--paper-line); }
  .ac-item:last-child { border-bottom: 0; }
  .ac-empty { padding: 12px; font-size: 15px; }
  .termin-head { flex-direction: column; }
}

/* ==========================================================================
   V47 – Aufgaben (intern/aufgaben.php, Stammdaten-Tab «Aufgaben»)
   ========================================================================== */
.aufgaben-page { --aufg-red: #C0392B; --aufg-red-tint: #FBEAEA; --aufg-amber: #9A4A07; --aufg-amber-tint: #FDEBD3; }

/* Farben (Status/Prioritäten, in den Stammdaten wählbar) */
.aufg-c-grau    { --c-fg: #5B625F; --c-bg: #EEEEEE; --c-edge: #A9AEAB; }
.aufg-c-blau    { --c-fg: #1F5FA8; --c-bg: #E3EEF9; --c-edge: #3B82D0; }
.aufg-c-tuerkis { --c-fg: #0F766E; --c-bg: #DDF3F0; --c-edge: #14A89B; }
.aufg-c-gruen   { --c-fg: #26704A; --c-bg: #E3F1E8; --c-edge: #49B16D; }
.aufg-c-gelb    { --c-fg: #8A5F0C; --c-bg: #FBF1DC; --c-edge: #D9A21B; }
.aufg-c-orange  { --c-fg: #9A4A07; --c-bg: #FDEBD3; --c-edge: #EE8A1F; }
.aufg-c-rot     { --c-fg: #B3261E; --c-bg: #FBE3E1; --c-edge: #D8453B; }
.aufg-c-violett { --c-fg: #6B3FA0; --c-bg: #EEE6F7; --c-edge: #8E5BCB; }
.aufg-badge, .aufg-prio-dot {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 3px 10px; border-radius: var(--radius-pill);
  font-size: 12px; font-weight: 600; line-height: 1.4;
  color: var(--c-fg); background: var(--c-bg);
}
.aufg-badge::before { content: ''; width: 7px; height: 7px; border-radius: 50%; background: var(--c-edge); }
.aufg-badge-prio { background: var(--c-fg); color: #fff; }
.aufg-badge-prio::before { content: '⚑'; width: auto; height: auto; background: none; font-size: 11px; }
.aufg-prio-dot { background: none; padding-left: 0; font-weight: 400; color: var(--ink-soft); }
.aufg-prio-dot::before { content: ''; width: 7px; height: 7px; border-radius: 2px; background: var(--c-edge); }

/* Werkzeugleiste, Kennzahlen, Filter */
.aufg-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-bottom: 16px; }
.aufg-scope { display: inline-flex; background: var(--white); border: 1px solid var(--paper-line); border-radius: var(--radius-lg); padding: 3px; gap: 2px; }
.aufg-scope a { padding: 9px 18px; border-radius: 6px; color: var(--ink-soft); text-decoration: none; font-weight: 600; font-size: 14px; min-height: 40px; display: inline-flex; align-items: center; }
.aufg-scope a:hover { color: var(--ink); }
.aufg-scope a.is-active { background: var(--ink); color: #fff; }
a.btn.aufg-new { text-decoration: none; display: inline-flex; align-items: center; min-height: 44px; }
.aufg-kpis { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; margin-bottom: 16px; }
.aufg-kpi { display: flex; align-items: baseline; gap: 10px; background: var(--white); border: 1px solid var(--paper-line); border-radius: var(--radius-lg); padding: 12px 16px; text-decoration: none; color: var(--ink-soft); font-size: 13.5px; }
.aufg-kpi:hover { border-color: var(--ink-soft); }
.aufg-kpi-n { font-family: var(--font-heading); font-size: 26px; line-height: 1; color: var(--ink); }
.aufg-kpi.is-red { border-color: var(--aufg-red); background: var(--aufg-red-tint); }
.aufg-kpi.is-red .aufg-kpi-n { color: var(--aufg-red); }
.aufg-kpi.is-amber { border-color: #E3B36B; background: var(--aufg-amber-tint); }
.aufg-kpi.is-amber .aufg-kpi-n { color: var(--aufg-amber); }
.aufg-filter { padding: 12px 16px; margin-bottom: 8px; }
.aufg-filter summary { cursor: pointer; font-weight: 600; min-height: 32px; display: flex; align-items: center; }
.aufg-filter-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 0 14px; margin-top: 10px; }
.aufg-filter-actions { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; margin-top: 4px; }
.aufg-filter-actions a.btn { text-decoration: none; }
.aufg-count { margin: 8px 2px 12px; }

/* Kacheln */
.aufg-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(290px, 1fr)); gap: 16px; margin-bottom: 24px; }
.aufg-group-title { display: flex; align-items: center; gap: 10px; font-size: 16px; margin: 22px 0 12px; }
.aufg-tile {
  position: relative; display: flex; flex-direction: column; gap: 8px;
  background: var(--white); border: 1px solid var(--paper-line); border-left: 4px solid var(--c-edge, var(--paper-line));
  border-radius: var(--radius-lg); padding: 14px 16px 12px;
  transition: box-shadow .15s ease, transform .15s ease;
}
.aufg-tile:hover { box-shadow: 0 6px 18px rgba(29,29,27,.10); transform: translateY(-1px); }
.aufg-edge-grau { --c-edge: #C9CDCA; } .aufg-edge-blau { --c-edge: #3B82D0; } .aufg-edge-tuerkis { --c-edge: #14A89B; } .aufg-edge-gruen { --c-edge: #49B16D; }
.aufg-edge-gelb { --c-edge: #D9A21B; } .aufg-edge-orange { --c-edge: #EE8A1F; } .aufg-edge-rot { --c-edge: #D8453B; } .aufg-edge-violett { --c-edge: #8E5BCB; }
.aufg-tile-badges { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.aufg-tile-title { margin: 0; font-family: var(--font-body); font-size: 16px; font-weight: 600; line-height: 1.3; overflow-wrap: anywhere; }
.aufg-tile-title a { color: var(--ink); text-decoration: none; }
.aufg-tile-title a::after { content: ''; position: absolute; inset: 0; border-radius: var(--radius-lg); } /* ganze Kachel klickbar */
.aufg-parent { margin: 0; color: var(--ink-soft); font-size: 12.5px; }
.aufg-meta { display: flex; flex-wrap: wrap; gap: 6px 12px; align-items: center; font-size: 13px; color: var(--ink-soft); }
.aufg-objekt { max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.aufg-due { font-weight: 600; color: var(--ink); }
.aufg-due-none { font-weight: 400; color: var(--ink-soft); }
.aufg-due-today { color: var(--aufg-amber); }
.aufg-due-over { color: var(--aufg-red); }
.aufg-due-over::before { content: '⚠ '; }
.aufg-progress { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--ink-soft); }
.aufg-progress-bar { flex: 1; height: 6px; background: var(--paper); border-radius: 3px; overflow: hidden; }
.aufg-progress-bar > span { display: block; height: 100%; background: var(--green); }
.aufg-tile-foot { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: auto; padding-top: 4px; }
.aufg-tile-foot .aufg-quick, .aufg-sublist .aufg-quick { position: relative; z-index: 1; margin: 0; }

/* Kennzeichnung: überfällig / prioritär / erledigt */
.aufg-tile.is-hot { box-shadow: 0 0 0 1px var(--c-edge) inset; border-left-width: 6px; }
.aufg-tile.is-over { background: var(--aufg-red-tint); border-color: #E7A19B; border-left-color: var(--aufg-red); }
.aufg-tile.is-over.is-hot { box-shadow: 0 0 0 1px var(--aufg-red) inset; }
.aufg-tile.is-done { opacity: .62; }
.aufg-tile.is-done .aufg-tile-title a { text-decoration: line-through; }

/* Avatare */
.aufg-avatars { display: inline-flex; align-items: center; }
.aufg-avatar { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: 50%; font-size: 11px; font-weight: 700; color: #fff; border: 2px solid var(--white); margin-left: -5px; flex: none; }
.aufg-avatars .aufg-avatar:first-child { margin-left: 0; }
.aufg-avatar.aufg-av-small { width: 30px; height: 30px; margin-left: 0; }
.aufg-av-0 { background: #2F6FB8; } .aufg-av-1 { background: #0B7A70; } .aufg-av-2 { background: #26704A; } .aufg-av-3 { background: #8A6A00; }
.aufg-av-4 { background: #B35900; } .aufg-av-5 { background: #C0392B; } .aufg-av-6 { background: #7A45B8; } .aufg-av-7 { background: #5B625F; }
.aufg-av-more { background: var(--paper-line); color: var(--ink); }
.aufg-unassigned { font-size: 12.5px; }

/* Erledigt-Kreis */
button.aufg-check { position: relative; width: 26px; height: 26px; min-height: 0; padding: 0; border-radius: 50%; background: var(--white) !important; border: 2px solid var(--paper-line) !important; color: #fff !important; font-size: 15px; line-height: 1; box-shadow: none; display: inline-flex; align-items: center; justify-content: center; }
.aufg-check::after { content: ''; position: absolute; inset: -9px; } /* 44px Trefferfläche für Touch */
button.aufg-check:hover { border-color: var(--green-deep) !important; background: var(--green-tint) !important; transform: none; box-shadow: none; }
button.aufg-check.is-on { background: var(--green-deep) !important; border-color: var(--green-deep) !important; }

.aufg-empty { text-align: center; padding: 32px 16px; }

/* Detailseite */
.aufg-crumbs { margin: 0 0 14px; font-size: 13.5px; color: var(--ink-soft); overflow-wrap: anywhere; }
.aufg-crumbs a { color: var(--ink-soft); }
.aufg-detail { display: grid; grid-template-columns: minmax(0, 1fr) 340px; gap: 20px; align-items: start; }
.aufg-detail-main { display: flex; flex-direction: column; gap: 16px; min-width: 0; }
.aufg-detail-side { display: flex; flex-direction: column; gap: 16px; position: sticky; top: 12px; }
.aufg-detail .card { margin: 0; }
.aufg-detail.is-over #aufg-form { border-left: 4px solid var(--aufg-red); }
.aufg-titel-input { font-size: 18px; font-weight: 600; }
.aufg-form-actions { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; }
.aufg-form-actions a.btn { text-decoration: none; }
.aufg-info { margin: 12px 0 0; }
.aufg-chips { border: 0; margin: 0 0 10px; padding: 0; min-width: 0; display: flex; flex-direction: column; gap: 6px; }
.aufg-chips legend { padding: 0; font-size: 13px; font-weight: 600; margin-bottom: 6px; }
.aufg-chip { display: flex; align-items: center; gap: 10px; margin: 0; padding: 6px 10px; min-height: 44px; border: 1px solid var(--paper-line); border-radius: var(--radius-lg); background: var(--white); font-weight: 400; cursor: pointer; }
.aufg-chip:has(input:checked) { border-color: var(--green-deep); background: var(--green-tint); }
.aufg-chip input { width: 18px; height: 18px; margin: 0; flex: none; }
.aufg-chip .aufg-avatar { margin-left: 0; }
.aufg-side-actions { display: flex; flex-direction: column; gap: 10px; }
.aufg-side-actions h3 { margin: 0; font-size: 15px; }
.aufg-side-actions a.btn, .aufg-side-actions button { width: 100%; justify-content: center; text-align: center; text-decoration: none; display: inline-flex; align-items: center; min-height: 44px; }
.aufg-action { border: 1px solid var(--paper-line); border-radius: var(--radius-lg); padding: 0 12px; background: var(--white); }
.aufg-action summary { cursor: pointer; font-weight: 600; min-height: 44px; display: flex; align-items: center; }
.aufg-action form { padding-bottom: 12px; }
.aufg-check-label { display: flex; align-items: center; gap: 8px; font-weight: 400; min-height: 32px; }
.aufg-check-label input { width: 18px; height: 18px; }
.aufg-sublist { list-style: none; margin: 0 0 12px; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.aufg-sublist li { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 4px 12px; align-items: center; padding: 8px 10px; border: 1px solid var(--paper-line); border-radius: var(--radius-lg); background: var(--white); }
.aufg-sublist li.is-over { background: var(--aufg-red-tint); border-color: #E7A19B; }
.aufg-sublist li.is-done .aufg-sub-title { text-decoration: line-through; color: var(--ink-soft); }
.aufg-sub-title { font-weight: 600; color: var(--ink); text-decoration: none; overflow-wrap: anywhere; }
.aufg-sub-meta { grid-column: 2; display: flex; flex-wrap: wrap; gap: 6px 12px; align-items: center; font-size: 13px; }
.aufg-sub-add { display: grid; grid-template-columns: minmax(0, 1fr) 170px auto; gap: 8px; align-items: center; margin-bottom: 8px; }
.aufg-sub-add input, .aufg-sub-add button { margin: 0; }
.aufg-comment-form { display: flex; flex-direction: column; gap: 8px; align-items: flex-start; margin-bottom: 16px; }
.aufg-comment-form textarea { width: 100%; }
.aufg-log { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 14px; }
.aufg-log li { display: grid; grid-template-columns: 30px minmax(0, 1fr); gap: 10px; }
.aufg-log p { margin: 0; }
.aufg-log-head { font-size: 13.5px; }
.aufg-comment { background: var(--paper); border-radius: var(--radius-lg); padding: 8px 12px; margin-top: 4px !important; overflow-wrap: anywhere; }

/* Stammdaten-Tab */
@media (max-width: 900px) {
  .aufg-detail { grid-template-columns: minmax(0, 1fr); }
  .aufg-detail-main { display: contents; }
  .aufg-detail-main > #aufg-form { order: 1; }
  .aufg-detail-side { order: 2; position: static; }
  .aufg-detail-main > #untertasks { order: 3; }
  .aufg-detail-main > #verlauf { order: 4; }
  .aufg-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 680px) {
  .aufg-grid { grid-template-columns: minmax(0, 1fr); gap: 12px; }
  .aufg-toolbar { flex-direction: column; align-items: stretch; }
  .aufg-scope { display: grid; grid-template-columns: repeat(3, 1fr); }
  .aufg-scope a { justify-content: center; padding: 9px 6px; font-size: 13.5px; }
  a.btn.aufg-new { justify-content: center; }
  .aufg-sub-add { grid-template-columns: minmax(0, 1fr); }
  .aufg-filter-actions button, .aufg-filter-actions a.btn { flex: 1; text-align: center; justify-content: center; min-height: 44px; }
}
.aufg-chips legend { text-transform: none; letter-spacing: 0; color: var(--ink); font-family: var(--font-body); font-size: 13px; }
/* V68: Aufgaben-Stammdaten wie die übrigen Stammdaten-Tabs (Zeilen ohne Box, Trennlinie, 42px-Buttons) */
.aufg-stamm-rows { display: flex; flex-direction: column; margin: 12px 0 18px; }
.aufg-stamm-row { display: grid; grid-template-columns: 42px 42px minmax(150px, 1.4fr) minmax(150px, 1.4fr) repeat(4, minmax(100px, .8fr)) 42px; gap: 0 12px; align-items: end; padding: 12px 0; border-top: 1px solid var(--paper-line); }
.aufg-stamm-row:first-child { border-top: none; }
.aufg-stamm-row label { margin: 0; }
.aufg-stamm-row input, .aufg-stamm-row select { margin-bottom: 0; }
.aufg-stamm-move { display: contents; }
button.row-move { width: 42px; min-width: 42px; height: 42px; min-height: 42px; padding: 0; margin: 0; display: inline-grid; place-items: center; font-size: 12px; line-height: 1; }
.aufg-person-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 4px 16px; margin: 0 0 14px; }
.aufg-person-grid .checkbox-row { margin: 0; align-items: center; }
.aufg-person-grid .checkbox-row input { margin: 0; }
@media (max-width: 1100px) {
  .aufg-stamm-row { grid-template-columns: 42px 42px minmax(0, 1fr) minmax(0, 1fr) 42px; gap: 10px 12px; }
  .aufg-stamm-de { grid-column: 3 / 5; }
  .aufg-stamm-en { grid-column: 3 / 5; }
}
@media (max-width: 680px) {
  .aufg-stamm-row { grid-template-columns: 42px 42px minmax(0, 1fr) 42px; }
  .aufg-stamm-de, .aufg-stamm-en { grid-column: 1 / -1; }
  .aufg-stamm-row > label:not(.aufg-stamm-de):not(.aufg-stamm-en) { grid-column: 1 / -1; }
}

/* ==========================================================================
   V48 – Rechte, Nutzerverwaltung, Anmeldung
   ========================================================================== */
.aufg-viewonly { margin: 0 0 14px; }
.recht-matrix { border: 1px solid var(--paper-line); border-radius: var(--radius-lg); padding: 12px 16px 6px; margin: 12px 0 16px; min-width: 0; }
.recht-matrix legend { font-weight: 600; padding: 0 6px; }
.recht-matrix[disabled] { opacity: .5; }
.recht-zeile { display: grid; grid-template-columns: minmax(150px, 1fr) minmax(180px, 1.2fr); gap: 12px; align-items: center; margin: 0 0 10px; }
.recht-zeile > span { font-weight: 400; }
.recht-zeile select { margin: 0; }
.check-label { display: flex; align-items: center; gap: 10px; flex-direction: row; min-height: 44px; font-weight: 400; }
.check-label input { width: 20px; height: 20px; margin: 0; flex: none; }
.nutzer-table td { vertical-align: top; }
.nutzer-actions { display: flex; flex-wrap: wrap; gap: 6px; }
.nutzer-actions form { margin: 0; }
.nutzer-actions .btn, .nutzer-actions button { min-height: 40px; }
@media (max-width: 680px) { .recht-zeile { grid-template-columns: 1fr; gap: 4px; } }

/* ==========================================================================
   V48 – Schäden (intern/schaeden.php, intern/schaden.php) und Nur-Lese-Ansicht
   ========================================================================== */
.schaeden-page { --aufg-red: #C0392B; --aufg-red-tint: #FBEAEA; --aufg-amber: #9A4A07; --aufg-amber-tint: #FDEBD3; }
.aufg-readonly .aufg-new, .aufg-readonly .aufg-quick, .aufg-readonly .aufg-side-actions, .aufg-readonly .aufg-sub-add,
.aufg-readonly .aufg-comment-form, .aufg-readonly #aufg-form button[type="submit"], .aufg-readonly .aufg-detail a.btn.secondary { display: none; }
.aufg-schaden-link { margin: 0 0 12px; }
.sch-intro { margin: 0; flex: 1; }
.sch-toolbar-btns { display: inline-flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.sch-kpis { grid-template-columns: repeat(6, minmax(0, 1fr)); }
.sch-kpis .aufg-kpi { flex-direction: column; align-items: flex-start; gap: 4px; }
.sch-kpi-chf { font-size: 19px; }
.aufg-filter-foot { margin: 10px 0 0; }

.sch-table-card { padding: 0; overflow-x: auto; }
.sch-table { width: 100%; border-collapse: collapse; font-size: 14px; }
.sch-table th { text-align: left; padding: 10px 12px; background: var(--paper); border-bottom: 1px solid var(--paper-line); font-size: 12px; text-transform: uppercase; letter-spacing: .04em; color: var(--ink-soft); white-space: nowrap; }
.sch-table td { padding: 10px 12px; border-bottom: 1px solid var(--paper-line); vertical-align: top; }
.sch-table .num { text-align: right; white-space: nowrap; }
.sch-table tr.is-hot td:first-child { box-shadow: inset 3px 0 0 var(--aufg-amber); }
.sch-table tr.is-notfall { background: var(--aufg-red-tint); }
.sch-table tr.is-notfall td:first-child { box-shadow: inset 4px 0 0 var(--aufg-red); }
.sch-table tr.is-done td { color: var(--ink-soft); }
.sch-table a { color: var(--ink); font-weight: 600; text-decoration: none; }
.sch-table a:hover { text-decoration: underline; }
.sch-col-titel { min-width: 200px; }
.sch-col-titel .muted { display: block; font-size: 12.5px; font-weight: 400; margin-top: 2px; }
.sch-nr { font-family: var(--font-heading); letter-spacing: .02em; white-space: nowrap; }

.sch-head { margin-bottom: 16px; }
.sch-head.is-notfall { border-left: 4px solid var(--aufg-red); background: var(--aufg-red-tint); }
.sch-head-top { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 8px; }
.sch-head-title { margin: 0 0 4px; }
.sch-head-meta { margin: 0 0 8px; }
.sch-task-link { margin: 0 0 12px; }
.sch-stepper { list-style: none; display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 6px; margin: 14px 0 6px; padding: 0; counter-reset: none; }
.sch-step form { margin: 0; }
.sch-step-btn { display: flex; flex-direction: column; align-items: center; gap: 6px; width: 100%; padding: 8px 4px; background: transparent; border: 0; color: var(--ink-soft); text-align: center; font: inherit; font-size: 12.5px; cursor: default; position: relative; }
button.sch-step-btn { cursor: pointer; min-height: 44px; }
button.sch-step-btn:hover .sch-step-dot { border-color: var(--ink); color: var(--ink); }
.sch-step-dot { width: 30px; height: 30px; border-radius: 50%; border: 2px solid var(--paper-line); background: var(--white); display: inline-flex; align-items: center; justify-content: center; font-weight: 700; font-size: 13px; }
.sch-step-label { line-height: 1.25; }
.sch-step.is-done .sch-step-dot { background: #2E7D4F; border-color: #2E7D4F; color: #fff; }
.sch-step.is-current .sch-step-dot { background: var(--ink); border-color: var(--ink); color: #fff; }
.sch-step.is-current .sch-step-btn { color: var(--ink); font-weight: 700; }
.sch-step:not(:last-child) .sch-step-btn::after { content: ""; position: absolute; top: 23px; left: calc(50% + 20px); right: calc(-50% + 20px); height: 2px; background: var(--paper-line); }
.sch-step.is-done:not(:last-child) .sch-step-btn::after { background: #2E7D4F; }
.sch-verwerfen { margin-top: 6px; }
.sch-verwerfen button { min-height: 36px; font-size: 13px; }

.sch-form h2 { margin-top: 0; }
.sch-form h3 { margin: 18px 0 8px; }
.sch-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 12px 16px; margin-bottom: 12px; }
.sch-grid label, .sch-form > label { margin: 0 0 12px; }
.sch-grid label { margin: 0; }
.sch-actions { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; margin-top: 8px; }
.sch-dl { display: grid; grid-template-columns: auto 1fr; gap: 6px 12px; margin: 0; font-size: 13.5px; }
.sch-dl dt { color: var(--ink-soft); }
.sch-dl dd { margin: 0; text-align: right; font-weight: 600; word-break: break-word; }

.sch-file-grid { list-style: none; display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 12px; margin: 0 0 16px; padding: 0; }
.sch-file { border: 1px solid var(--paper-line); border-radius: var(--radius-lg); background: var(--white); overflow: hidden; display: flex; flex-direction: column; }
.sch-file-thumb { display: flex; align-items: center; justify-content: center; aspect-ratio: 4 / 3; background: var(--paper); }
.sch-file-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.sch-file-pdf { font-family: var(--font-heading); font-size: 22px; color: var(--ink-soft); }
.sch-file-info { display: flex; flex-direction: column; gap: 3px; padding: 8px 10px 10px; font-size: 12.5px; min-width: 0; }
.sch-file-name { font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sch-file-links { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
.sch-file-links form { margin: 0; display: inline; }
.sch-file-links .link-danger { background: none; border: 0; padding: 0; min-height: 0; color: var(--aufg-red); font: inherit; text-decoration: underline; cursor: pointer; width: auto; }
.sch-upload { display: grid; grid-template-columns: minmax(140px, 200px) 1fr; gap: 12px; align-items: end; border-top: 1px solid var(--paper-line); padding-top: 14px; }
.sch-upload p, .sch-upload button { grid-column: 1 / -1; margin: 0; }
.sch-upload button { justify-self: start; }

@media (max-width: 1100px) { .sch-kpis { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 900px) { .schaden-wrap.aufg-detail .aufg-detail-main { display: flex; } }
@media (max-width: 680px) {
  .sch-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .sch-toolbar-btns { width: 100%; }
  .sch-toolbar-btns > a { flex: 1; text-align: center; justify-content: center; min-height: 44px; display: inline-flex; align-items: center; }
  .sch-stepper { grid-template-columns: repeat(3, minmax(0, 1fr)); row-gap: 14px; }
  .sch-step:not(:last-child) .sch-step-btn::after { display: none; }
  .sch-upload { grid-template-columns: minmax(0, 1fr); }
  .sch-table-card { overflow: visible; background: transparent; border: 0; box-shadow: none; }
  .sch-table, .sch-table tbody, .sch-table tr, .sch-table td { display: block; width: 100%; }
  .sch-table thead { position: absolute; left: -9999px; }
  .sch-table tr { background: var(--white); border: 1px solid var(--paper-line); border-radius: var(--radius-lg); margin-bottom: 12px; padding: 6px 4px; }
  .sch-table tr.is-notfall { background: var(--aufg-red-tint); border-color: #E7A19B; }
  .sch-table td { border: 0; padding: 5px 12px; display: flex; justify-content: space-between; gap: 12px; text-align: right; }
  .sch-table td::before { content: attr(data-label); color: var(--ink-soft); font-size: 12px; text-transform: uppercase; letter-spacing: .04em; text-align: left; flex: 0 0 38%; padding-top: 2px; }
  .sch-table tr.is-hot td:first-child, .sch-table tr.is-notfall td:first-child { box-shadow: none; }
  .sch-col-titel { flex-wrap: wrap; }
}

/* V48 Korrekturen: Schaden-Buttons gegen die globale Button-Regel absichern */
.sch-step form { display: block; }
button.sch-step-btn, .sch-step-btn { background: transparent !important; color: var(--ink-soft) !important; border: 0 !important; box-shadow: none !important; width: 100% !important; min-width: 0 !important; padding: 8px 4px !important; font-weight: 400 !important; border-radius: 0 !important; }
.sch-step.is-current .sch-step-btn { color: var(--ink) !important; font-weight: 700 !important; }
button.sch-step-btn:hover .sch-step-dot { border-color: var(--ink); color: var(--ink); }
.sch-step.is-done .sch-step-dot, .sch-step.is-current .sch-step-dot { color: #fff; }
.sch-file-links button.link-danger { background: none !important; border: 0 !important; padding: 0 !important; min-height: 0 !important; width: auto !important; min-width: 0 !important; color: var(--aufg-red) !important; font: inherit !important; text-decoration: underline; box-shadow: none !important; }
.sch-form input[type="datetime-local"], .sch-form input[type="date"] { width: 100%; min-height: 44px; box-sizing: border-box; font: inherit; }
.schaeden-page .aufg-log li.is-comment .aufg-comment { background: var(--paper); }
@media (max-width: 680px) {
  .sch-file-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
  .sch-file-thumb { aspect-ratio: 1 / 1; }
}
.nutzer-actions { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.nutzer-actions form { margin: 0; }
@media (max-width: 680px) {
  .nutzer-table, .nutzer-table tbody, .nutzer-table tr, .nutzer-table td { display: block; width: 100%; }
  .nutzer-table tr:has(> th) { position: absolute; left: -9999px; }
  .nutzer-table tr { border: 1px solid var(--paper-line); border-radius: var(--radius-lg); background: var(--white); margin-bottom: 12px; padding: 6px 4px; }
  .nutzer-table td { border: 0; padding: 5px 12px; display: flex; justify-content: space-between; gap: 12px; text-align: right; }
  .nutzer-table td[data-label]::before { content: attr(data-label); color: var(--ink-soft); font-size: 12px; text-transform: uppercase; letter-spacing: .04em; text-align: left; flex: 0 0 34%; }
  .nutzer-table td.nutzer-actions { justify-content: flex-start; padding-top: 10px; }
}

/* ==== V49: Mitarbeiter, Absenzen, Zeiterfassung, Absenz-Stammdaten, Mailvorlagen ==== */
.pe-kopf h2 { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin: 0 0 10px; }
.pe-tabs { display: flex; flex-wrap: wrap; gap: 8px; }
.pe-tabs a { display: inline-flex; align-items: center; min-height: 44px; padding: 0 16px; border: 1px solid var(--paper-line); border-radius: var(--radius-sm); background: var(--white); color: var(--ink); text-decoration: none; font-weight: 600; }
.pe-tabs a.is-active, .pe-tabs a[aria-current="page"] { background: var(--green-tint); border-color: var(--green); color: var(--green-deep); }
.pe-filter { display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end; }
.pe-filter label { flex: 1 1 200px; margin: 0; }
.pe-filter button { min-height: 44px; }
.pe-geb { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
.pe-soll { margin: 14px 0; }
.pe-soll-grid { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 8px; margin: 8px 0; }
.pe-soll-grid label { margin: 0; }
.pe-soll-grid label span { display: block; font-size: 12px; color: var(--ink-soft); overflow: hidden; text-overflow: ellipsis; }
.pe-soll-grid input { width: 100%; text-align: right; }
.pe-audit td, .pe-audit th { font-size: 13px; }

.az-farbe { display: inline-block; width: 14px; height: 14px; border-radius: 50%; vertical-align: -2px; border: 1px solid rgba(0,0,0,.15); }
.az-checks { display: grid; gap: 2px; margin: 10px 0; }
.az-vorschlag { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 16px; margin: 8px 0 12px; }
.az-page h4 { margin: 18px 0 6px; }
.az-page input[type="color"] { width: 64px; height: 44px; padding: 2px; }

.ab-kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 10px; margin: 8px 0 14px; }
.ab-kpis > div { background: var(--paper); border: 1px solid var(--paper-line); border-radius: var(--radius-lg); padding: 10px 12px; display: flex; flex-direction: column; gap: 2px; }
.ab-kpis strong { font-size: 20px; font-family: var(--font-heading); }
.ab-kpis .ab-kpi-rest { background: var(--green-tint); border-color: var(--green); }
.ab-genehmigen form { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin: 0; }
.ab-kal-wrap { max-width: 100%; }
.ab-kal { border-collapse: collapse; font-size: 12px; min-width: 760px; }
.ab-kal th, .ab-kal td { border: 1px solid var(--paper-line); padding: 2px 3px; text-align: center; min-width: 22px; height: 28px; }
.ab-kal th.ab-kal-name, .ab-kal td.ab-kal-name { text-align: left; min-width: 130px; white-space: nowrap; position: sticky; left: 0; background: var(--white); z-index: 1; }
.ab-kal .ab-we { background: var(--paper); }
.ab-kal .ab-ft { background: var(--amber-tint); }
.ab-chip { display: block; width: 100%; height: 18px; border-radius: 3px; opacity: .95; }
.ab-chip-offen { opacity: .4; background-image: repeating-linear-gradient(45deg, transparent 0 4px, rgba(255,255,255,.7) 4px 8px); }

.ze-stempel .ze-laeuft { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; }
.ze-start-form { display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end; }
.ze-start-form label { flex: 1 1 220px; margin: 0; }
.ze-neg { color: var(--error); }
.ze-zuschlag-zeiten { margin: 0 0 10px; }
.ze-warnungen ul { margin: 6px 0 0 18px; padding: 0; }
.ze-tage tr.ze-we td { background: var(--paper); }
.ze-tage tr.ze-ft td { background: var(--amber-tint); }
.ze-tage tr.ze-heute td:first-child { box-shadow: inset 3px 0 0 var(--green); }
.ze-eintrag { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; padding: 2px 0; }
.ze-eintrag .btn, .ze-eintrag button { min-height: 36px; }

.mv-sprachwahl { display: flex; gap: 8px; align-items: center; }
.mv-form textarea { width: 100%; font-family: var(--font-body); }
.mv-ph-block { display: flex; flex-wrap: wrap; gap: 6px; margin: 8px 0 12px; }
.mv-ph-btn { min-height: 36px; font-size: 12px; padding: 0 10px; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }
.mv-vorschau { background: var(--paper); border: 1px solid var(--paper-line); border-radius: var(--radius-lg); padding: 12px 14px; margin: 12px 0; }
.mv-pre { white-space: pre-wrap; margin: 0; font-family: var(--font-body); font-size: 13px; }

@media (max-width: 680px) {
  .pe-soll-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .az-vorschlag { grid-template-columns: 1fr; }
  .pe-liste, .pe-liste tbody, .pe-liste tr, .pe-liste td,
  .pe-audit, .pe-audit tbody, .pe-audit tr, .pe-audit td,
  .az-arten, .az-arten tbody, .az-arten tr, .az-arten td,
  .ze-tage, .ze-tage tbody, .ze-tage tr, .ze-tage td { display: block; width: 100%; }
  .pe-liste tr:has(> th), .pe-audit tr:has(> th), .az-arten tr:has(> th), .ze-tage tr:has(> th) { position: absolute; left: -9999px; }
  .pe-liste tr, .pe-audit tr, .az-arten tr, .ze-tage tr { border: 1px solid var(--paper-line); border-radius: var(--radius-lg); background: var(--white); margin-bottom: 12px; padding: 6px 4px; }
  .pe-liste td, .pe-audit td, .az-arten td, .ze-tage td { border: 0; padding: 5px 12px; display: flex; justify-content: space-between; gap: 12px; text-align: right; }
  .pe-liste td[data-label]::before, .pe-audit td[data-label]::before, .az-arten td[data-label]::before, .ze-tage td[data-label]::before { content: attr(data-label); color: var(--ink-soft); font-size: 12px; text-transform: uppercase; letter-spacing: .04em; text-align: left; flex: 0 0 34%; }
  .ze-tage tr.ze-we, .ze-tage tr.ze-ft { background: var(--paper); }
}
.pe-page .grid, .az-page .grid, .ab-page .grid, .ze-page .grid { align-items: start; }
.pe-soll-grid input { min-width: 0; }
.pe-page .grid > *, .az-page .grid > *, .ab-page .grid > *, .ze-page .grid > * { min-width: 0; }
.pe-page input, .pe-page select, .az-page input, .az-page select, .ab-page input, .ab-page select, .ze-page input, .ze-page select { max-width: 100%; box-sizing: border-box; }
.ze-tage .admin-edit-action { width: auto; min-width: 44px; padding: 0 12px; }
.ze-eintrag .admin-edit-action { width: auto; min-width: 0; }
@media (max-width: 680px) {
  .ze-tage tr { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 14px; padding: 8px 12px; }
  .ze-tage td { display: block; width: auto; padding: 0; text-align: left; }
  .ze-tage td.ze-c-leer { display: none; }
  .ze-tage td[data-label]::before { display: block; margin-bottom: 1px; }
  .ze-tage td:first-child { flex: 1 1 100%; font-size: 15px; }
  .ze-tage td:first-child::before { display: none; }
  .ze-tage td:nth-child(2) { flex: 1 1 100%; }
  .ze-tage td:last-child { margin-left: auto; }
  .ze-tage tr.ze-we-leer { padding: 4px 12px; opacity: .7; }
}
@media (max-width: 680px) {
  .ze-tage td:first-child { flex: 1 1 auto; order: 1; }
  .ze-tage td:last-child { order: 2; margin-left: 0; }
  .ze-tage td:not(:first-child):not(:last-child) { order: 3; }
  .ze-tage td:nth-child(2) { flex: 1 1 100%; }
  .ze-tage td .btn.admin-edit-action { width: auto !important; min-width: 44px !important; padding: 0 14px !important; }
}

/* V52: Mietverhältnisse */
.mv-page .mv-person { padding: 10px 0; border-bottom: 1px solid var(--paper-line); }
.mv-page .mv-person:last-of-type { border-bottom: 0; }
.mv-page .mv-anpassung { padding: 12px 0; border-bottom: 1px solid var(--paper-line); }
.mv-page .mv-aktionen { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.mv-page .mv-aktionen form { margin: 0; }
.mv-page tr.mv-aktuell td { background: #f3f8f1; }
.mv-page details > summary { cursor: pointer; padding: 6px 0; font-weight: 600; }
.mv-page details[open] > summary { margin-bottom: 8px; }
.mv-page .sch-kpis { grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); }
.mv-page .aufg-kpi-n { font-size: 20px; }
.mv-page ul.warn { margin: 6px 0 6px 18px; padding: 0; }

/* V53: CRM, Gemeinde-Meldungen, Nebenkosten */
.crm-tabs { display: flex; flex-wrap: wrap; gap: 8px; margin: 0 0 14px; }
.crm-tabs .btn { min-height: 40px; }
.crm-page details > summary, .mv-page details > summary { cursor: pointer; padding: 6px 0; font-weight: 600; }
.crm-page details[open] > summary { margin-bottom: 8px; }
.crm-page .sch-kpis { grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); }
.crm-page .aufg-kpi-n { font-size: 20px; }
.crm-page pre.gmm-text { white-space: pre-wrap; font: inherit; background: #f7f7f2; border: 1px solid var(--paper-line); border-radius: 6px; padding: 10px 12px; margin: 6px 0; }
.crm-page textarea#gmm-text { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 13px; line-height: 1.45; }
.mv-page td.r, .mv-page th.r { text-align: right; }
.mv-page td input[type="text"] { width: 100%; min-width: 0; }
@media (max-width: 680px) {
  .nk-pos thead { display: none; }
  .nk-pos, .nk-pos tbody, .nk-pos tr, .nk-pos td { display: block; width: 100%; }
  .nk-pos tr { padding: 8px 0; border-bottom: 1px solid var(--paper-line); }
  .nk-pos td { padding: 3px 0; border: 0; text-align: left; }
  .nk-pos td[data-label]::before { content: attr(data-label); display: block; font-size: 12px; color: #666; margin-bottom: 2px; }
  .nk-pos td input[type="text"] { width: 100%; }
  .nk-pos td.r:empty { display: none; }
}

/* V54: Offertwesen (Kalkulation, Lieferanten, Preise, Offerten) und Spesen */
.badge-amber { display: inline-block; padding: 3px 11px; border-radius: var(--radius-pill); font-size: 11px; text-transform: uppercase; letter-spacing: 0.05em; background: var(--amber-tint); color: var(--amber); }
.kk-page .sch-kpis, .kk-page .kk-kpis { grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); }
.kk-page .aufg-kpi-n { font-size: 20px; }
.kk-page details > summary { cursor: pointer; padding: 6px 0; font-weight: 600; }
.kk-page details[open] > summary { margin-bottom: 8px; }
.kk-page td.r, .kk-page th.r { text-align: right; }
.kk-page tr.kk-aktiv td { background: #f3f8f1; }
.kk-page tr.kk-phase td { color: #777; background: #f8f8f4; }
.kk-page .kk-summe { font-weight: 400; margin-left: 8px; }
.kk-page .kk-actions { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 10px; margin: 10px 0; }
.kk-page .kk-actions form { margin: 0; }
.kk-page .kk-actions .inline-label { margin: 0; display: flex; align-items: center; gap: 6px; }
.kk-page .kk-pruefung { list-style: none; margin: 6px 0 14px; padding: 0; }
.kk-page .kk-pruefung li { padding: 6px 10px; margin: 4px 0; border-left: 4px solid var(--amber); background: var(--amber-tint); border-radius: 4px; }
.kk-page .kk-pruefung li.kk-chk-rot { border-left-color: var(--error); background: var(--error-tint); }
.kk-page .kk-pos, .kk-page .kk-gruppe { padding: 10px 0 12px; border-bottom: 1px solid var(--paper-line); }
.kk-page .kk-pos:last-of-type, .kk-page .kk-gruppe:last-of-type { border-bottom: 0; }
.kk-page .kk-row { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 8px 12px; align-items: end; }
.kk-page .kk-row label { margin-top: 0; min-width: 0; }
.kk-page .kk-row label > span { display: block; font-size: 12px; color: var(--ink-soft); margin-bottom: 2px; }
.kk-page .kk-row input[type="text"], .kk-page .kk-row input[type="number"], .kk-page .kk-row input[type="date"], .kk-page .kk-row select { width: 100%; min-width: 0; }
.kk-page .kk-row .kk-c-bez, .kk-page .kk-row .kk-c-lief, .kk-page .kk-row .kk-c-notiz { grid-column: span 2; }
.kk-page .kk-row .kk-c-var { align-self: center; }
.kk-page .kk-grid-gruppe { grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); }
.kk-page .kk-lief-hinweis { margin: 4px 0 0; }
.kk-page fieldset.kk-fieldset { border: 1px solid var(--paper-line); border-radius: 6px; padding: 8px 12px 10px; margin: 12px 0 0; }
.kk-page fieldset.kk-fieldset legend { padding: 0 6px; font-weight: 600; }
.kk-page fieldset.kk-fieldset .check-label { margin-top: 6px; }
.kk-page .kk-monatstabelle { font-size: 13px; }
.kk-page .inline-form { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 10px; margin: 8px 0; }
.kk-page .inline-form label { margin-top: 0; }
@media (max-width: 860px) {
  .kk-page .kk-row { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .kk-page .kk-row .kk-c-bez, .kk-page .kk-row .kk-c-lief, .kk-page .kk-row .kk-c-notiz { grid-column: 1 / -1; }
}
@media (max-width: 520px) {
  .kk-page .kk-row { grid-template-columns: 1fr; }
  .kk-page .kk-actions > *, .kk-page .kk-actions .btn, .kk-page .kk-actions button { width: 100%; }
}

/* V55: Projekte und Leistungserfassung */
.proj-bar { display: inline-block; vertical-align: middle; width: 90px; height: 8px; border-radius: 4px; background: var(--paper-line, #ddd); overflow: hidden; margin-right: 6px; }
.proj-bar-fill { display: block; height: 100%; background: var(--green, #2e7d4f); }
.proj-bar.is-amber .proj-bar-fill { background: var(--amber, #c98a00); }
.proj-bar.is-red .proj-bar-fill { background: var(--error, #b3261e); }
.proj-neg { color: var(--error, #b3261e); }
.kk-page .proj-art-row { padding: 6px 0; }
.kk-page .proj-art-row .grid { grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); }
.kk-page .aufg-kpi .proj-bar { width: 100%; max-width: 160px; display: block; margin: 4px 0 2px; }

/* V56: Debitoren – Rechnungen, QR-Rechnung, Mahnwesen */
.kk-page .deb-jahr { width: 90px; }
.kk-page table.deb-pos input[type="text"] { width: 100%; min-width: 0; }
.kk-page table.deb-pos input.deb-kurz { max-width: 110px; }
.kk-page table.deb-pos td { vertical-align: top; }
.kk-page .deb-aktionen { display: flex; flex-wrap: wrap; gap: 6px; min-width: 150px; }
.kk-page .deb-aktionen .inline-form { margin: 0; }
.kk-page table.deb-summen { width: auto; min-width: 280px; margin-left: auto; }
.kk-page table.deb-summen td.r { padding-left: 24px; white-space: nowrap; }
.kk-page .deb-fakten { grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); margin-bottom: 8px; }
.kk-page textarea { max-width: 100%; }
@media (max-width: 600px) {
  .kk-page table.deb-summen { width: 100%; min-width: 0; }
  .kk-page table.deb-pos input.deb-kurz { max-width: none; }
}

/* V58 Kreditoren: Detailtabelle (Bezeichnung links, Wert rechts), Auswahlliste des Zahlungslaufs */
.kk-page table.kred-kv { width: 100%; border-collapse: collapse; margin-top: 8px; }
.kk-page table.kred-kv th { text-align: left; font-weight: 600; width: 32%; padding: 6px 12px 6px 0; vertical-align: top; white-space: normal; }
.kk-page table.kred-kv td { padding: 6px 0; vertical-align: top; }
.kk-page table.kred-kv th, .kk-page table.kred-kv td { border-bottom: 1px solid rgba(0, 0, 0, .08); background: none; }
.kk-page .kred-wahl { width: 28px; }
@media (max-width: 640px) {
  .kk-page table.kred-kv th { width: 40%; }
}

/* V61: Kontoauszug-Abgleich – Tabellen auf dem Handy als Karten (Auswahlfeld der Rechnung bleibt sichtbar) */
@media (max-width: 680px) {
  .bk-tab, .bk-tab tbody, .bk-tab tr, .bk-tab td { display: block; width: 100%; }
  .bk-tab tr:has(> th) { position: absolute; left: -9999px; }
  .bk-tab tr { border: 1px solid var(--paper-line); border-radius: var(--radius-lg); background: var(--white); margin-bottom: 12px; padding: 6px 4px; }
  .bk-tab td { border: 0; padding: 5px 12px; display: flex; justify-content: space-between; align-items: center; gap: 12px; text-align: right; }
  .bk-tab td[data-label]::before { content: attr(data-label); color: var(--ink-soft); font-size: 12px; text-transform: uppercase; letter-spacing: .04em; text-align: left; flex: 0 0 34%; }
  .bk-tab td select { max-width: 100%; min-width: 0; flex: 1 1 60%; }
}

/* V62: FiBu-Journal, MWST – Betragsspalten rechtsbündig, Summenzeile hervorgehoben */
.fj-page th.r, .fj-page td.r { text-align: right; white-space: nowrap; }
.fj-page tr.fj-total td { border-top: 2px solid var(--paper-line); background: var(--paper-soft, rgba(0, 0, 0, .03)); }
.fj-page .card form.grid { align-items: end; }
.fj-page form.grid .aufg-form-actions { grid-column: 1 / -1; }
@media (max-width: 680px) {
  .fj-page td.r { white-space: normal; }
  .fj-page .card form.grid, .fj-page .card .grid { grid-template-columns: 1fr; }
}

/* V63: Mieterwechsel und Mietzinsdepot */
.wc-page .wc-check { list-style: none; margin: 0 0 12px; padding: 0; display: grid; gap: 8px; }
.wc-page .wc-check li { display: flex; flex-wrap: wrap; gap: 4px 10px; align-items: baseline; }
.wc-page .wu-block { margin: 10px 0; border: 1px solid var(--paper-line, #d9d9d9); border-radius: 8px; padding: 8px 12px; }
.wc-page .wu-block summary { cursor: pointer; display: flex; flex-wrap: wrap; gap: 6px 12px; align-items: center; }
.wc-page .wu-zeile { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.wc-page fieldset { border: 1px solid var(--paper-line, #d9d9d9); border-radius: 8px; margin: 10px 0; padding: 8px 12px; }
@media (max-width: 640px) { .wc-page .wu-zeile { grid-template-columns: 1fr; } }

/* V64: Vorabprüfung Periodenabschluss */
.fj-page .fa-check { list-style: none; margin: 0 0 12px; padding: 0; display: grid; gap: 8px; }
.fj-page .fa-check li { display: flex; flex-wrap: wrap; gap: 4px 10px; align-items: baseline; }

/* ===== V65 Einkauf und Lager ===== */
.ek-page .ek-kz { list-style: none; padding: 0; margin: 0; display: flex; flex-wrap: wrap; gap: 8px 28px; }
.ek-page .ek-kz strong { font-size: 1.25rem; }
.ek-page .ek-buchen { margin: 0 0 10px; border: 1px solid var(--paper-line); border-radius: 8px; padding: 6px 12px; }
.ek-page .ek-buchen > summary { cursor: pointer; font-weight: 600; padding: 4px 0; }
.ek-page .ek-pos input[type="text"], .ek-page .ek-pos select { width: 100%; min-width: 4.5rem; }
.ek-page .ek-pos td:nth-child(3) input { min-width: 12rem; }
.ek-page .ek-storno { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 8px; margin-top: 8px; }
.ek-page .ek-storno label { flex: 1 1 18rem; }
.ek-page .ek-we { border-top: 1px solid var(--paper-line); padding-top: 6px; margin-top: 6px; }
.ek-page .ek-summen { margin: 8px 0 0 auto; }
.ek-page textarea[readonly], .ek-page input[readonly] { background: var(--paper); }

/* ===== V66 Lohn und E-Banking ===== */
.lohn-grp th { background: var(--surface-2, #f3f3f3); font-size: .85em; text-align: left; }
.lohn-sum td { border-top: 2px solid var(--border, #bbb); }
.lohn-jahr table.bk-tab th.r, .lohn-jahr table.bk-tab td.r { white-space: nowrap; }
@media print { .lohn-jahr .crm-tabs, .lohn-jahr form, .lohn-jahr .hint { display: none; } }

/* ==========================================================================
   V67 – Aufgaben: Board, Tabelle mit Direktbearbeitung, Ansichtswechsel
   ========================================================================== */
.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }
#aufg-live { transition: opacity .12s; }
#aufg-live.is-loading { opacity: .55; pointer-events: none; }
.aufg-toolbar { gap: 10px 14px; }
.aufg-views a { padding: 9px 14px; }
.aufg-hint { margin: 0 0 10px; font-size: 13px; }
.aufg-toast { position: fixed; left: 50%; bottom: 20px; transform: translateX(-50%); background: var(--ink); color: #fff; padding: 10px 18px; border-radius: var(--radius-lg); font-size: 14px; z-index: 50; box-shadow: 0 6px 18px rgba(0,0,0,.25); max-width: calc(100vw - 32px); }
.aufg-toast.is-err { background: var(--error); }
.aufg-toast[hidden] { display: none; }

/* Board */
.aufg-board { display: flex; gap: 14px; align-items: flex-start; overflow-x: auto; padding-bottom: 14px; margin-bottom: 20px; scroll-snap-type: x proximity; }
.aufg-col { flex: 0 0 300px; min-width: 0; background: var(--paper); border: 1px solid var(--paper-line); border-top: 4px solid var(--c-edge, #A9AEAB); border-radius: var(--radius-lg); display: flex; flex-direction: column; max-height: calc(100vh - 180px); scroll-snap-align: start; transition: box-shadow .12s, background .12s; }
.aufg-col.is-closed { background: #F0F2F0; }
.aufg-col.is-over-col { box-shadow: 0 0 0 3px var(--c-edge, var(--green)) inset; background: var(--white); }
.aufg-col-head { display: flex; align-items: center; gap: 8px; margin: 0; padding: 12px 14px 8px; font-size: 14px; font-family: var(--font-body); font-weight: 700; }
.aufg-col-dot { width: 9px; height: 9px; border-radius: 50%; background: var(--c-edge); flex: none; }
.aufg-col-n { margin-left: auto; font-weight: 600; font-size: 12px; background: var(--white); border: 1px solid var(--paper-line); border-radius: var(--radius-pill); padding: 1px 9px; color: var(--ink-soft); }
.aufg-col-body { padding: 4px 10px 12px; display: flex; flex-direction: column; gap: 10px; overflow-y: auto; min-height: 90px; }
.aufg-col-empty { margin: 8px 0; text-align: center; font-size: 13px; display: none; }
.aufg-col-body:not(:has(.aufg-card)) .aufg-col-empty { display: block; }
.aufg-col-more { margin: 0; font-size: 12.5px; text-align: center; }
.aufg-card { position: relative; display: flex; gap: 6px; background: var(--white); border: 1px solid var(--paper-line); border-left: 5px solid var(--c-edge, #C9CDCA); border-radius: var(--radius-lg); padding: 10px 10px 10px 6px; cursor: grab; touch-action: pan-y; user-select: none; -webkit-user-select: none; }
.aufg-readonly .aufg-card { cursor: default; padding-left: 10px; }
.aufg-card:hover { box-shadow: 0 4px 12px rgba(29,29,27,.10); }
.aufg-card.is-hot { box-shadow: 0 0 0 1px var(--c-edge) inset; }
.aufg-card.is-over { background: var(--aufg-red-tint); border-color: #E7A19B; border-left-color: var(--aufg-red); }
.aufg-card.is-done { opacity: .66; }
.aufg-card.is-done .aufg-card-title a { text-decoration: line-through; }
.aufg-card.is-dragging { opacity: .35; }
.aufg-card.is-saving { opacity: .6; }
.aufg-grip { flex: none; width: 18px; display: flex; align-items: flex-start; justify-content: center; color: var(--ink-soft); font-size: 16px; line-height: 1.2; touch-action: none; cursor: grab; padding-top: 1px; }
.aufg-card-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 6px; }
.aufg-card-title { margin: 0; font-family: var(--font-body); font-size: 14.5px; font-weight: 600; line-height: 1.3; overflow-wrap: anywhere; }
.aufg-card-title a { color: var(--ink); text-decoration: none; }
.aufg-card-title a:hover { text-decoration: underline; }
.aufg-card .aufg-tile-foot { flex-wrap: wrap; }
.aufg-card-status { width: auto; max-width: 120px; min-height: 30px; padding: 2px 6px; font-size: 12.5px; margin: 0; }
.aufg-ghost { position: fixed; z-index: 60; pointer-events: none; margin: 0; opacity: .92; transform: rotate(1.5deg); box-shadow: 0 14px 30px rgba(0,0,0,.28); cursor: grabbing; }
body.aufg-dragging { cursor: grabbing; user-select: none; -webkit-user-select: none; }
body.aufg-dragging * { cursor: grabbing !important; }

/* Tabelle mit Direktbearbeitung */
.aufg-tab-wrap { margin-bottom: 20px; }
.aufg-tab { width: 100%; border-collapse: collapse; background: var(--white); border: 1px solid var(--paper-line); border-radius: var(--radius-lg); }
.aufg-tab th { text-align: left; font-size: 12px; text-transform: uppercase; letter-spacing: .04em; color: var(--ink-soft); padding: 10px 8px; border-bottom: 1px solid var(--paper-line); white-space: nowrap; }
.aufg-tab td { padding: 6px 8px; border-bottom: 1px solid var(--paper-line); vertical-align: middle; }
.aufg-tab tr.is-done td { background: #F6F7F6; }
.aufg-tab tr.is-done .aufg-inl-titel { text-decoration: line-through; color: var(--ink-soft); }
.aufg-tab tr.is-over td:first-child { box-shadow: 4px 0 0 var(--aufg-red) inset; }
.aufg-th-check, .aufg-tab td:first-child { width: 44px; }
.aufg-tab .aufg-quick { margin: 0; }
.aufg-tab .aufg-parent { display: block; margin-top: 2px; }
.aufg-inl { margin: 0; min-height: 36px; padding: 4px 8px; font-size: 14px; background: transparent; border-color: transparent; width: 100%; }
.aufg-inl:hover { border-color: var(--paper-line); background: var(--white); }
.aufg-inl:focus { border-color: var(--green-deep); background: var(--white); }
.aufg-inl-titel { font-weight: 600; min-width: 220px; }
.aufg-inl-datum { min-width: 140px; }
select.aufg-sel { appearance: auto; width: auto; min-width: 130px; color: var(--c-fg); background: var(--c-bg); border-color: transparent; font-weight: 600; }
.aufg-pers { position: relative; }
.aufg-pers summary { cursor: pointer; list-style: none; min-height: 36px; display: flex; align-items: center; padding: 2px 4px; border: 1px solid transparent; border-radius: var(--radius); }
.aufg-pers summary::-webkit-details-marker { display: none; }
.aufg-pers summary:hover { border-color: var(--paper-line); background: var(--white); }
.aufg-pers[open] summary { border-color: var(--green-deep); background: var(--white); }
.aufg-pers-list { position: absolute; z-index: 20; top: 100%; left: 0; min-width: 230px; max-height: 280px; overflow-y: auto; background: var(--white); border: 1px solid var(--paper-line); border-radius: var(--radius-lg); box-shadow: 0 10px 24px rgba(0,0,0,.16); padding: 6px; }
.aufg-pers-opt { display: flex; align-items: center; gap: 8px; padding: 6px 8px; margin: 0; min-height: 40px; border-radius: var(--radius); font-weight: 400; cursor: pointer; }
.aufg-pers-opt:hover { background: var(--paper); }
.aufg-pers-opt input { width: 18px; height: 18px; margin: 0; flex: none; }
.aufg-pers-opt .aufg-avatar { margin-left: 0; width: 24px; height: 24px; font-size: 10px; }
.aufg-td-objekt { max-width: 200px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 13px; color: var(--ink-soft); }
.aufg-td-act { white-space: nowrap; text-align: right; }
.aufg-save { font-size: 12.5px; color: var(--green-deep); font-weight: 600; margin-right: 6px; }
a.btn.aufg-open { text-decoration: none; display: inline-flex; align-items: center; min-height: 34px; padding: 0 12px; }

@media (max-width: 900px) {
  .aufg-views { order: 3; }
  .aufg-col { flex-basis: 82vw; max-height: none; }
  .aufg-tab thead { display: none; }
  .aufg-tab, .aufg-tab tbody, .aufg-tab tr, .aufg-tab td { display: block; width: 100%; }
  .aufg-tab tr { border-bottom: 6px solid var(--paper); padding: 8px 4px; }
  .aufg-tab td { border: 0; padding: 4px 8px; display: grid; grid-template-columns: 90px minmax(0, 1fr); gap: 8px; align-items: center; }
  .aufg-tab td::before { content: attr(data-label); font-size: 12px; color: var(--ink-soft); font-weight: 600; }
  .aufg-tab td:first-child, .aufg-tab td.aufg-td-act { width: 100%; }
  .aufg-td-act { text-align: left; }
}
@media (max-width: 680px) {
  .aufg-views { display: grid; grid-template-columns: repeat(3, 1fr); }
  .aufg-views a { justify-content: center; padding: 9px 6px; }
}

/* V67 – Startseite: Kachel-Gruppen (Farben über die .aufg-c-* Paletten) */
.home-grp { margin: 0 0 26px; }
.home-grp-title { display: flex; align-items: center; gap: 10px; margin: 0 0 12px; font-size: 17px; font-family: var(--font-heading); color: var(--c-fg); }
.home-grp-dot { width: 12px; height: 12px; border-radius: 3px; background: var(--c-edge); flex: none; }
.home-tiles { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: 14px; }
.home-tile { display: flex; flex-direction: column; gap: 6px; padding: 16px 16px 14px; background: var(--white); border: 1px solid var(--paper-line); border-top: 5px solid var(--c-edge); border-radius: var(--radius-lg); text-decoration: none; color: var(--ink); min-height: 110px; transition: box-shadow .12s, transform .12s, background .12s; }
.home-tile:hover, .home-tile:focus-visible { background: var(--c-bg); box-shadow: 0 6px 18px rgba(29,29,27,.12); transform: translateY(-2px); }
.home-tile:focus-visible { outline: 3px solid var(--c-edge); outline-offset: 2px; }
.home-tile-title { font-weight: 700; font-size: 16px; color: var(--c-fg); overflow-wrap: anywhere; }
.home-tile-desc { font-size: 13.5px; color: var(--ink-soft); line-height: 1.4; }
.home-tile-stat { margin-top: auto; font-size: 12.5px; font-weight: 600; color: var(--c-fg); background: var(--c-bg); border-radius: var(--radius-pill); padding: 3px 10px; align-self: flex-start; }
@media (max-width: 680px) { .home-tiles { grid-template-columns: minmax(0, 1fr); gap: 10px; } .home-tile { min-height: 0; } }

/* V67 – Abteilungen */
.abt-form { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; margin: 0; }
.abt-form input.abt-name, .abt-tab input.abt-name { width: 260px; max-width: 100%; margin: 0; }
.abt-aktiv { display: inline-flex; align-items: center; gap: 8px; margin: 0; font-weight: 400; min-height: 44px; }
.abt-aktiv input { width: 20px; height: 20px; margin: 0; }
.abt-form button { margin: 0; }
.abt-tab { width: 100%; border-collapse: collapse; }
.abt-tab th { text-align: left; font-size: 12px; text-transform: uppercase; letter-spacing: .04em; color: var(--ink-soft); padding: 8px; border-bottom: 1px solid var(--paper-line); }
.abt-tab th.r, .abt-tab td.r { text-align: right; }
.abt-block > tr > td { padding: 6px 8px; border-bottom: 1px solid var(--paper-line); vertical-align: middle; }
.abt-th-pfeil, .abt-pfeil { width: 48px; }
button.abt-toggle { width: 36px; min-width: 0; min-height: 36px; padding: 0; margin: 0; background: var(--white) !important; border: 1px solid var(--paper-line) !important; color: var(--ink) !important; border-radius: var(--radius); font-size: 16px; line-height: 1; display: inline-flex; align-items: center; justify-content: center; box-shadow: none; transform: none; }
button.abt-toggle:hover { background: var(--green-tint) !important; border-color: var(--green-deep) !important; }
.abt-toggle span { display: inline-block; transition: transform .12s; }
.abt-toggle.is-open span { transform: rotate(90deg); }
.abt-toggle[disabled] { opacity: .35; }
.abt-detail[hidden] { display: none; }
.abt-detail > td { background: var(--paper); border-bottom: 1px solid var(--paper-line); padding: 8px 12px; }
.abt-ma { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 4px; }
.abt-aktion { text-align: right; white-space: nowrap; }
.abt-aktion button { margin: 0; }
@media (max-width: 680px) {
  .abt-tab thead { display: none; }
  .abt-tab, .abt-block, .abt-block tr, .abt-block td { display: block; width: 100%; }
  .abt-block { border-bottom: 6px solid var(--paper); padding: 6px 0; }
  .abt-block > tr > td { border: 0; }
  .abt-aktion { text-align: left; }
  .abt-detail[hidden] { display: none; }
}

/* V67: Auswahllisten-Pflege */
.al-neu { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 12px; margin: 0; }
.al-neu label { margin: 0; min-width: 220px; flex: 1 1 220px; }
.al-neu button { margin: 0; }
.al-tabs { margin: 8px 0 12px; }
.al-tab { width: 100%; border-collapse: collapse; }
.al-tab th { text-align: left; font-size: 12px; text-transform: uppercase; letter-spacing: .04em; color: var(--ink-soft); padding: 8px; border-bottom: 1px solid var(--paper-line); }
.al-tab th.r, .al-tab td.r { text-align: right; }
.al-tab td { padding: 6px 8px; border-bottom: 1px solid var(--paper-line); vertical-align: middle; }
.al-tab input[type="text"], .al-tab select { width: 100%; min-width: 150px; margin: 0; }
.al-tab tr.al-inaktiv td input[type="text"] { opacity: .6; }
.al-pos { width: 84px; white-space: nowrap; }
.al-mv { display: inline-flex; gap: 4px; margin: 0; }
button.al-pfeil { width: 34px; min-width: 0; min-height: 34px; padding: 0; margin: 0; background: var(--white) !important; border: 1px solid var(--paper-line) !important; color: var(--ink) !important; border-radius: var(--radius); box-shadow: none; transform: none; }
button.al-pfeil[disabled] { opacity: .3; }
.al-aktion { white-space: nowrap; text-align: right; }
.al-aktion button, .al-aktion form { display: inline-block; margin: 0 0 0 6px; }
.al-aktion button[disabled] { opacity: .45; cursor: not-allowed; }
@media (max-width: 760px) {
  .al-tab thead { display: none; }
  .al-tab, .al-tab tbody, .al-tab tr, .al-tab td { display: block; width: 100%; }
  .al-tab tr { border-bottom: 6px solid var(--paper); padding: 6px 0; }
  .al-tab td { border: 0; }
  .al-aktion { text-align: left; }
}

/* V67: Vorschlagsfeld (Stil der Objektsuche) */
.vs-wrap { display: block; }
.vs-item { display: flex; flex-direction: column; gap: 2px; align-items: flex-start; }
.vs-item .vs-info { font-size: 12px; }
.vs-hint { margin: 4px 0 0; font-size: 13px; }
.vs-hint[hidden] { display: none; }

/* V67: Schaden – Lieferantenvorschläge, Auftragsanfrage, Videos */
.sch-lieferant h3 { margin: 18px 0 6px; }
.sch-lief-gewaehlt { border: 1px solid var(--paper-line); border-left: 4px solid var(--green-deep); border-radius: var(--radius); padding: 10px 14px; margin: 8px 0 14px; background: var(--green-tint); }
.sch-lief-gewaehlt h3 { margin-top: 0; }
.sch-lief-grid { list-style: none; margin: 8px 0 14px; padding: 0; display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 12px; }
.sch-lief-karte { position: relative; border: 1px solid var(--paper-line); border-radius: var(--radius); padding: 12px 14px; display: flex; flex-direction: column; gap: 6px; background: var(--white); }
.sch-lief-karte.is-gewaehlt { border-color: var(--green-deep); box-shadow: 0 0 0 2px var(--green-tint) inset; }
.sch-lief-rang { position: absolute; top: 8px; right: 12px; font-size: 12px; color: var(--ink-soft); font-weight: 600; }
.sch-lief-kontakt { font-size: 13px; word-break: break-word; }
.sch-lief-gruende { list-style: none; margin: 2px 0 6px; padding: 0; font-size: 13px; display: flex; flex-direction: column; gap: 2px; }
.sch-lief-gruende li::before { content: "✓ "; color: var(--green-deep); font-weight: 700; }
.sch-lief-gruende li.muted::before { content: ""; }
.sch-lief-karte form { margin-top: auto; }
.sch-lief-karte button { margin: 0; width: 100%; }
.sch-lief-suche { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 12px; margin: 6px 0 4px; }
.sch-lief-suche label { margin: 0; flex: 1 1 280px; }
.sch-lief-suche button { margin: 0; }
.sch-anfrage .sa-medien { border: 1px solid var(--paper-line); border-radius: var(--radius); padding: 8px 12px; margin: 8px 0; }
.sch-anfrage .sa-medien .check-label { display: flex; margin: 2px 0; }
.sch-next { background: var(--green-tint); border-left: 3px solid var(--green-deep); padding: 8px 12px; border-radius: var(--radius); }
.sch-file-thumb { position: relative; }
.sch-file-thumb video { width: 100%; height: 100%; object-fit: cover; display: block; background: #111; }
.sch-file-play { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; color: #fff; font-size: 28px; text-shadow: 0 1px 6px rgba(0,0,0,.6); pointer-events: none; }
.sch-melder-hint { grid-column: 1 / -1; margin: 0; font-size: 13px; }

/* ==========================================================================
   V68 – Einheitliches Design der internen Seiten
   Vorlage: Stammdaten, Zugangsdaten und Besichtigungsverwaltung.
   Alle Regeln gelten nur für interne Seiten (body.admin-page), damit das
   öffentliche Portal unverändert bleibt. Spezifität bewusst niedrig
   (:where), damit seitenspezifische Layouts (Kalender, Raster) bestehen
   bleiben, aber Farben, Grössen, Schriften und Abstände einheitlich sind.
   ========================================================================== */

/* --- Suchfelder sehen aus wie alle anderen Eingabefelder ------------------ */
:where(body.admin-page) input[type=search] {
  width: 100%;
  box-sizing: border-box;
  min-height: 42px;
  padding: 9px 11px;
  margin-top: 5px;
  font-size: 15px;
  font-family: inherit;
  background: var(--white);
  border: 1px solid var(--paper-line);
  border-radius: var(--radius);
  color: var(--ink);
  -webkit-appearance: none;
  appearance: none;
}
:where(body.admin-page) input[type=search]::placeholder,
:where(body.admin-page) input::placeholder { color: #8a918d; opacity: 1; }
:where(body.admin-page) input[type=search]::-webkit-search-cancel-button { cursor: pointer; }

/* --- Reiterleisten (Module) und Statusfilter wie die Stammdaten-Tabs -------- */
body.admin-page .crm-tabs {
  display: flex;
  flex-wrap: nowrap;
  gap: 6px;
  margin: 0 0 18px;
  padding: 5px;
  overflow-x: auto;
  border: 1px solid var(--paper-line);
  border-radius: 8px;
  background: #fff;
  scrollbar-width: thin;
}
body.admin-page .crm-tabs a,
body.admin-page .crm-tabs a.btn,
body.admin-page .crm-tabs a.btn.secondary {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  box-sizing: border-box;
  min-height: 40px;
  height: auto;
  margin: 0;
  padding: 9px 15px;
  border: 1px solid transparent;
  border-radius: 5px;
  background: transparent;
  color: var(--ink-soft);
  font-size: 14.5px;
  font-weight: 600;
  line-height: 1.2;
  text-decoration: none;
  white-space: nowrap;
  box-shadow: none;
  transform: none;
}
body.admin-page .crm-tabs a:hover,
body.admin-page .crm-tabs a:focus-visible,
body.admin-page .crm-tabs a.btn:hover,
body.admin-page .crm-tabs a.btn.secondary:hover,
body.admin-page .crm-tabs a.btn:focus-visible {
  color: var(--ink);
  background: var(--paper);
  border-color: var(--paper-line);
  box-shadow: none;
  transform: none;
}
body.admin-page .crm-tabs a.admin-primary-action,
body.admin-page .crm-tabs a.btn.admin-primary-action,
body.admin-page .crm-tabs a[aria-current="page"] {
  color: #fff;
  background: var(--green-deep);
  border-color: var(--green-deep);
}
body.admin-page .crm-tabs a.admin-primary-action:hover,
body.admin-page .crm-tabs a[aria-current="page"]:hover {
  color: #fff;
  background: var(--green-deep);
  border-color: var(--green-deep);
}
/* Statusfilter innerhalb einer Karte: dieselbe Leiste, aber ohne Aussenabstand nach unten zu gross. */
body.admin-page .card .crm-tabs { margin: 14px 0 6px; }

/* --- Schaltflächen: eine Höhe, eine Schriftgrösse je Rolle ----------------- */
body.admin-page button,
body.admin-page a.btn,
body.admin-page input[type=submit] {
  box-sizing: border-box;
  min-height: 42px;
  line-height: 1.2;
  border-radius: var(--radius-sm);
}
body.admin-page a.btn { height: auto; padding-top: 0; padding-bottom: 0; }
/* Neutrale Schaltflächen (Abbrechen, Filtern, Export, + Neu …): weiss, 13 px. */
body.admin-page button.secondary,
body.admin-page a.btn.secondary {
  background: #fff;
  border-color: var(--paper-line);
  color: var(--ink);
  font-size: 13px;
  box-shadow: none;
}
body.admin-page button.secondary:hover,
body.admin-page a.btn.secondary:hover { background: var(--paper); border-color: #cfd3d0; transform: none; box-shadow: none; }
/* Bearbeiten/Details: überall dieselbe neutrale hellgraue Aktion. */
body.admin-page a.btn.admin-edit-action:not(.n1):not(.n2):not(.n3):not(.n4):not(.n5),
body.admin-page button.admin-edit-action:not(.n1):not(.n2):not(.n3):not(.n4):not(.n5),
body.admin-page a.btn.action-edit:not(.n1):not(.n2):not(.n3):not(.n4):not(.n5),
body.admin-page button.action-edit:not(.n1):not(.n2):not(.n3):not(.n4):not(.n5) {
  background: var(--paper);
  border: 1px solid var(--paper-line);
  color: var(--ink-soft);
  font-size: 13px;
  box-shadow: none;
}
body.admin-page a.btn.admin-edit-action:not(.n1):not(.n2):not(.n3):not(.n4):not(.n5):hover,
body.admin-page button.admin-edit-action:not(.n1):not(.n2):not(.n3):not(.n4):not(.n5):hover,
body.admin-page a.btn.action-edit:not(.n1):not(.n2):not(.n3):not(.n4):not(.n5):hover,
body.admin-page button.action-edit:not(.n1):not(.n2):not(.n3):not(.n4):not(.n5):hover {
  background: #ecebed;
  border-color: #d4d3d5;
  color: var(--ink);
  transform: none;
  box-shadow: none;
}
/* Löschen/Entfernen mit Bestätigung: zurückhaltend rot (wie der Minus-Button). */
body.admin-page button.danger,
body.admin-page a.btn.danger {
  background: #fff;
  border-color: #ebc4bf;
  color: var(--error);
  font-size: 13px;
  box-shadow: none;
}
body.admin-page button.danger:hover,
body.admin-page a.btn.danger:hover,
body.admin-page button.danger:focus-visible {
  background: var(--error-tint);
  border-color: rgba(192,57,43,.35);
  color: var(--error);
  transform: none;
  box-shadow: none;
}
/* Kleine Symbol-Schaltflächen (Pfeile, Auf-/Zuklappen) = Grösse des Minus-Buttons. */
body.admin-page button.al-pfeil,
body.admin-page button.abt-toggle {
  width: 42px;
  min-width: 42px;
  height: 42px;
  min-height: 42px;
  border-radius: var(--radius);
}
/* "+ Neu …": Klappzeile (details/summary) sieht aus wie "+ hinzufügen". */
body.admin-page details > summary {
  list-style: none;
  cursor: pointer;
}
body.admin-page details > summary::-webkit-details-marker { display: none; }
body.admin-page details > summary {
  display: inline-flex;
  align-items: center;
  box-sizing: border-box;
  min-height: 42px;
  padding: 0 14px;
  background: #fff;
  border: 1px solid var(--paper-line);
  border-radius: var(--radius-sm);
  color: var(--ink);
  font-size: 13px;
  font-weight: 500;
}
body.admin-page details > summary strong { font-weight: 500; font-size: 13px; }
body.admin-page details > summary:hover { background: var(--paper); border-color: #cfd3d0; }
body.admin-page details[open] > summary { margin-bottom: 14px; }

/* --- Tabellen: Kopf 11 px, Zeilen 14 px, gleiche Zellabstände --------------- */
:where(body.admin-page) table { font-size: 14px; margin-top: 12px; }
:where(body.admin-page) th {
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--ink-soft);
  padding: 9px 10px;
}
:where(body.admin-page) td { padding: 11px 10px; font-size: 14px; }
:where(body.admin-page) td.muted, :where(body.admin-page) td .muted { font-size: 13px; }
:where(body.admin-page) tbody tr:hover { background: #fafbfa; }
body.admin-page .table-scroll { overflow-x: auto; }
/* Tabellenzeilen-Aktionen nebeneinander mit gleichem Abstand. */
body.admin-page td .inline-form { display: inline-flex; margin: 0; vertical-align: middle; }
body.admin-page td button, body.admin-page td a.btn { margin-top: 0; }

/* --- Karten, Überschriften, Hinweise ----------------------------------------- */
body.admin-page .card h2 { font-size: 17px; margin: 0 0 10px; }
body.admin-page .card h3 { font-size: 15px; margin: 0 0 8px; }
body.admin-page > p.muted,
body.admin-page > p.hint,
body.admin-page > p.sub {
  box-sizing: border-box;
  margin: 18px 0 0;
  padding: 16px 24px;
  background: var(--white);
  border: 1px solid var(--paper-line);
  border-left: 1px solid var(--paper-line);
  border-radius: var(--radius-lg);
  color: var(--ink-soft);
  font-size: 13.5px;
}
body.admin-page .hint { border-radius: var(--radius); }
body.admin-page .card form > label:first-child { margin-top: 0; }
body.admin-page .card > .aufg-form-actions,
body.admin-page .card form > .aufg-form-actions { margin-top: 16px; }

/* --- Statusanzeigen als Badge ----------------------------------------------- */
body.admin-page .badge, body.admin-page .status-pill { font-family: var(--font-mono); }

/* --- Eingabereihen: Hinzufügen/Entfernen wie in den Stammdaten --------------- */
body.admin-page .row-remove,
body.admin-page button.remove-icon-action { margin-top: 0; }

/* Zeilenaktionen in Tabellen: alle neutralen Aktionen hellgrau wie "Bearbeiten". */
body.admin-page td button.secondary,
body.admin-page td a.btn.secondary,
body.admin-page td button.danger,
body.admin-page td a.btn.danger {
  background: var(--paper);
  border-color: var(--paper-line);
  color: var(--ink-soft);
  font-size: 13px;
}
body.admin-page td button.danger,
body.admin-page td a.btn.danger { color: var(--error); }
body.admin-page td button.secondary:hover,
body.admin-page td a.btn.secondary:hover,
body.admin-page td button.danger:hover,
body.admin-page td a.btn.danger:hover { background: #ecebed; border-color: #d4d3d5; color: var(--ink); }
body.admin-page td button.danger:hover,
body.admin-page td a.btn.danger:hover { color: var(--error); }

/* Kennzahlen-Kacheln: Abstand zu den Karten wie zwischen Karten. */
body.admin-page .aufg-kpis { margin: 18px 0 0; }
body.admin-page > .card + .aufg-kpis { margin-top: 18px; }

/* Filter-/Suchformulare: zweispaltig mit Beschriftung über dem Feld (wie Stammdaten). */
body.admin-page form.inline-form[role=search],
body.admin-page .card > form.inline-form[method=get] {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0 16px;
  align-items: end;
  margin: 0 0 8px;
}
body.admin-page form.inline-form[role=search] > label,
body.admin-page .card > form.inline-form[method=get] > label { margin-top: 0; }
body.admin-page form.inline-form[role=search] > button,
body.admin-page .card > form.inline-form[method=get] > button { justify-self: start; margin-top: 16px; }
@media (max-width: 700px) {
  body.admin-page form.inline-form[role=search],
  body.admin-page .card > form.inline-form[method=get] { grid-template-columns: 1fr; }
}

/* Aufgaben: Ansichts- und Bereichsumschalter wie die Stammdaten-Tabs (aktiv = RESTAY-Grün). */
body.admin-page .aufg-scope {
  gap: 6px;
  padding: 5px;
  border-radius: 8px;
}
body.admin-page .aufg-scope a {
  padding: 9px 15px;
  border: 1px solid transparent;
  border-radius: 5px;
  font-size: 14.5px;
  line-height: 1.2;
}
body.admin-page .aufg-scope a:hover { color: var(--ink); background: var(--paper); border-color: var(--paper-line); }
body.admin-page .aufg-scope a.is-active,
body.admin-page .aufg-scope a.is-active:hover { background: var(--green-deep); border-color: var(--green-deep); color: #fff; }

/* V68: Personal – Checkbox «Ist Vorgesetzte/r» neben dem Auswahlfeld, Stundenansatz (nur Anzeige) */
body.admin-page .grid > label.pe-ist-vorg { display: flex; flex-direction: row; align-items: center; gap: 10px; align-self: end; min-height: 42px; margin: 0 0 14px; font-weight: 400; }
body.admin-page .grid > label.pe-ist-vorg input { width: auto; margin: 0; flex: none; }
input[readonly][id="pe-l_stundenansatz"] { background: var(--paper, #f4f4f4); color: var(--ink-soft, #555); }
[hidden] { display: none !important; }
body.admin-page .grid > label.pe-ist-vorg { justify-content: flex-start; }
/* Checkbox-Felder in Formular-Rastern: Kästchen und Text in einer Zeile, linksbündig, auf Höhe der Eingabefelder */
body.admin-page .grid > label:has(> input[type="checkbox"]) { flex-direction: row; align-items: center; justify-content: flex-start; align-self: end; gap: 10px; min-height: 42px; margin: 0; font-weight: 400; text-align: left; }
body.admin-page .grid > label:has(> input[type="checkbox"]) input { width: auto; margin: 0; flex: none; }
body.admin-page .grid > label.pe-ist-vorg { margin: 0; }

/* ===== V69 ===== */
/* Logo im Seitenkopf: Link zur internen Startseite */
.admin-header a.brand-home { display: inline-flex; align-items: center; line-height: 0; text-decoration: none; border-radius: 4px; }
.admin-header a.brand-home:focus-visible { outline: 2px solid var(--green-deep, #2f6b4f); outline-offset: 3px; }

/* Formular-Raster: Felder, die nebeneinanderstehen, beginnen immer auf gleicher Höhe.
   Hinweistexte stehen unter dem Feld und verschieben die Nachbarzelle nicht (früher: Zellen unten ausgerichtet). */
body.admin-page .grid,
body.admin-page .field-grid { align-items: start; }
body.admin-page .grid > label,
body.admin-page .field-grid > label,
body.admin-page .admin-equal-fields label { justify-content: flex-start; align-self: start; }
body.admin-page .grid > label > small,
body.admin-page .grid > label > .hint,
body.admin-page .grid > label > .muted { display: block; margin: 5px 0 0; line-height: 1.35; font-size: 12.5px; }
body.admin-page .fj-page .card form.grid,
body.admin-page.fj-page .card form.grid { align-items: start; }
/* Abstand zwischen den Feldzeilen kommt vom Raster, nicht vom Label-Abstand: so beginnen alle Zellen einer Zeile exakt gleich hoch. */
body.admin-page .grid,
body.admin-page .field-grid { row-gap: 14px; }
body.admin-page .grid > label,
body.admin-page .field-grid > label,
body.admin-page .grid > .mv-einheit-feld > label { margin-top: 0; }
body.admin-page .grid > .mv-einheit-feld { min-width: 0; }
body.admin-page .mv-einheit-feld > label { display: flex; flex-direction: column; justify-content: flex-start; }
body.admin-page .mv-einheit-feld > label > input[name="einheit_frei"] { margin-top: 6px; }

/* Aufgaben: «Erledigt»-Kreis (V69) – gleich gross in Board, Tabelle, Kachel und Unteraufgaben; das Häkchen kommt aus CSS und ist immer sichtbar (grau = offen, grün = erledigt). */
body.admin-page button.aufg-check { position: relative; flex: none; box-sizing: border-box; width: 28px; height: 28px; min-width: 28px; min-height: 28px; padding: 0; margin: 0; border-radius: 50%; display: inline-grid; place-items: center; font-size: 0; line-height: 1; box-shadow: none; transform: none; }
body.admin-page button.aufg-check::before { content: ''; width: 6px; height: 11px; border: solid #B5BCB8; border-width: 0 2px 2px 0; transform: translateY(-1px) rotate(45deg); }
body.admin-page button.aufg-check:hover::before { border-color: var(--green-deep); }
body.admin-page button.aufg-check.is-on::before { border-color: #fff; }
body.admin-page .aufg-card .aufg-tile-foot { display: flex; flex-wrap: nowrap; align-items: center; gap: 8px; margin-top: 6px; padding-top: 0; }
body.admin-page .aufg-card .aufg-tile-foot .aufg-avatars { flex: none; }
body.admin-page .aufg-card .aufg-tile-foot .aufg-quick { flex: none; margin-left: auto; }
body.admin-page .aufg-card .aufg-card-status { flex: 1 1 auto; min-width: 0; max-width: none; width: 100%; min-height: 32px; height: 32px; padding: 0 28px 0 10px; font-size: 13px; }
body.admin-page .aufg-card .aufg-tile-foot .aufg-avatars + .aufg-card-status { width: auto; }
body.admin-page .aufg-card .aufg-tile-foot { flex-wrap: wrap; row-gap: 6px; }
body.admin-page .aufg-card .aufg-tile-foot .aufg-avatars { flex: 1 1 auto; min-width: 0; }
body.admin-page .aufg-card .aufg-card-status,
body.admin-page .aufg-card .aufg-tile-foot .aufg-avatars + .aufg-card-status { flex: none; width: 150px; max-width: 100%; }
body.admin-page .aufg-card .aufg-tile-foot .aufg-quick { margin-left: 0; }
body.admin-page .aufg-card .aufg-tile-foot { flex-wrap: nowrap; }
body.admin-page .aufg-card .aufg-tile-foot .aufg-avatars { flex: 1 1 0; }
body.admin-page .aufg-card .aufg-card-status,
body.admin-page .aufg-card .aufg-tile-foot .aufg-avatars + .aufg-card-status { flex: 0 1 150px; width: 150px; min-width: 96px; }
body.admin-page .aufg-card .aufg-tile-foot .aufg-avatars { flex: none; }
body.admin-page .aufg-card .aufg-card-status,
body.admin-page .aufg-card .aufg-tile-foot .aufg-avatars + .aufg-card-status { flex: 1 1 110px; width: auto; max-width: 150px; min-width: 96px; margin-left: auto; }
body.admin-page .aufg-card .aufg-card-status,
body.admin-page .aufg-card .aufg-tile-foot .aufg-avatars + .aufg-card-status { flex: none; width: 132px; min-width: 0; max-width: 132px; margin-left: auto; padding-right: 24px; }
body.admin-page .aufg-card .aufg-tile-foot .aufg-avatars { flex: 1 1 auto; min-width: 0; }

/* Aufgaben-Board: «+» rechts oben in der Spalte (Anzahl links davon) – neue Aufgabe direkt in diesem Status */
body.admin-page .aufg-col-head { gap: 8px; }
body.admin-page .aufg-col-head .aufg-col-n { margin-left: auto; }
body.admin-page button.aufg-col-add { flex: none; width: 28px; height: 28px; min-width: 28px; min-height: 28px; padding: 0; margin: 0; border-radius: 50%; display: inline-grid; place-items: center; font-size: 18px; font-weight: 600; line-height: 1; background: var(--white) !important; color: var(--ink-soft) !important; border: 1px solid var(--paper-line) !important; box-shadow: none; transform: none; }
body.admin-page button.aufg-col-add:hover,
body.admin-page button.aufg-col-add[aria-expanded="true"] { background: var(--green-deep) !important; border-color: var(--green-deep) !important; color: #fff !important; }
body.admin-page .aufg-col-form { display: grid; gap: 8px; margin: 0; padding: 4px 10px 8px; }
body.admin-page .aufg-col-form[hidden] { display: none; }
body.admin-page .aufg-col-form input[type="text"] { margin: 0; width: 100%; }
body.admin-page .aufg-col-form-btns { display: flex; gap: 8px; }
body.admin-page .aufg-col-form-btns button { min-height: 36px; padding: 0 14px; font-size: 13px; }

/* Alle Feldtypen gleich hoch und gleich gestaltet (früher fehlten Monat, Datum+Zeit, Suche, Passwort, Woche). */
body.admin-page input[type=month], body.admin-page input[type=week], body.admin-page input[type=datetime-local],
body.admin-page input[type=search], body.admin-page input[type=password] {
  width: 100%; box-sizing: border-box; min-height: 42px; padding: 9px 11px; font-size: 15px; margin-top: 5px; font-family: inherit;
  background: var(--white); border: 1px solid var(--paper-line); border-radius: var(--radius); color: var(--ink);
}

/* Zeilen verschieben (V69): Griff, gezogene Zeile, Hinweis */
body.admin-page button.sort-handle { flex: none; width: 28px; height: 36px; min-width: 28px; min-height: 36px; padding: 0; margin: 0; display: inline-grid; place-items: center; background: transparent !important; border: 0 !important; box-shadow: none; transform: none; color: var(--ink-soft) !important; cursor: grab; touch-action: none; border-radius: var(--radius-sm); vertical-align: middle; }
body.admin-page button.sort-handle span { width: 10px; height: 16px; background-image: radial-gradient(circle, currentColor 1.4px, transparent 1.6px); background-size: 5px 5.3px; opacity: .55; }
body.admin-page button.sort-handle:hover span, body.admin-page button.sort-handle:focus-visible span { opacity: 1; }
body.admin-page button.sort-handle:hover { background: var(--paper) !important; }
body.admin-page button.sort-handle:active { cursor: grabbing; }
[data-sortable] > .is-dragging { position: relative; z-index: 5; background: var(--white); box-shadow: 0 8px 22px rgba(0,0,0,.18); outline: 2px solid var(--green-deep); outline-offset: -2px; opacity: .97; will-change: transform; }
tbody[data-sortable] > tr.is-dragging > td { background: var(--white); }
table[data-sortable] > tbody.is-dragging > tr > td { background: var(--white); }
body.sort-dragging, body.sort-dragging * { cursor: grabbing !important; user-select: none; -webkit-user-select: none; }
[data-sortable].is-saving { opacity: .75; }
.sort-toast { position: fixed; left: 50%; bottom: 24px; transform: translateX(-50%); z-index: 90; background: var(--ink); color: #fff; padding: 10px 18px; border-radius: var(--radius-pill); font-size: 14px; box-shadow: 0 6px 18px rgba(0,0,0,.25); }
.sort-toast.is-err { background: #B3261E; }
.sort-toast[hidden] { display: none; }
body.admin-page .al-pos { width: 44px; }
body.admin-page .abt-pfeil { white-space: nowrap; width: 76px; }
/* Zeilen mit Griff in den Stammdaten-Listen: Griff links, Felder daneben */
body.admin-page .aufg-stamm-row > button.sort-handle,
body.admin-page .vorl-batch-row > button.sort-handle,
body.admin-page .mietoption-batch-row > button.sort-handle { align-self: center; }
/* Zeilenlisten mit Griff: der Griff steht links ausserhalb des Rasters, die Spalten der Felder bleiben unverändert. */
body.admin-page .aufg-stamm-row, body.admin-page .vorl-batch-row, body.admin-page .mietoption-batch-row { position: relative; padding-left: 34px; }
body.admin-page .aufg-stamm-row > button.sort-handle, body.admin-page .vorl-batch-row > button.sort-handle, body.admin-page .mietoption-batch-row > button.sort-handle { position: absolute; left: 0; top: 50%; transform: translateY(-50%); }
body.admin-page .aufg-stamm-row { grid-template-columns: minmax(150px, 1.4fr) minmax(150px, 1.4fr) repeat(4, minmax(100px, .8fr)) 42px; }
@media (max-width: 1100px) {
  body.admin-page .aufg-stamm-row { grid-template-columns: repeat(2, minmax(0, 1fr)) 42px; }
  body.admin-page .aufg-stamm-de, body.admin-page .aufg-stamm-en { grid-column: 1 / 3; }
}
@media (max-width: 680px) {
  body.admin-page .aufg-stamm-row { grid-template-columns: minmax(0, 1fr); }
  body.admin-page .aufg-stamm-row > * { grid-column: 1 / -1; }
  body.admin-page .aufg-stamm-row > .row-remove { width: 100%; }
}
body.admin-page .grid > *, body.admin-page .field-grid > * { min-width: 0; }
body.admin-page .grid input, body.admin-page .grid select { min-width: 0; max-width: 100%; }
@media (max-width: 560px) { body.admin-page .grid:not(.masterdata-grid-3) { grid-template-columns: minmax(0, 1fr); } }

/* ==========================================================================
   V70 – Adressen (zentrales Adressbuch): Typ-Schilder, Filterleiste, Typauswahl
   ========================================================================== */
.adr-page .adr-typ { display: inline-block; padding: 3px 11px; border-radius: var(--radius-pill); font-size: 11px; text-transform: uppercase; letter-spacing: 0.05em; background: var(--paper); color: var(--ink-soft); border: 1px solid var(--paper-line); margin: 0 2px 2px 0; }
.adr-page .adr-typ-debitor, .adr-page .adr-typ-mietende { background: var(--green-tint); color: var(--green-deep); border-color: transparent; }
.adr-page .adr-typ-kreditor, .adr-page .adr-typ-lieferant { background: var(--amber-tint); color: var(--amber); border-color: transparent; }
.adr-page .adr-typ-objekt { background: #E3EDF5; color: #24506F; border-color: transparent; }
.adr-page .adr-typ-eigentuemer { background: #F6E7DD; color: #8A4B22; border-color: transparent; }
.adr-page .adr-typ-amt { background: #E3E8F3; color: #2E4272; border-color: transparent; }
.crm-amtsart[hidden] { display: none; }
.adr-page .adr-typ-mitarbeitende { background: #ECE6F4; color: #4B3A6B; border-color: transparent; }
.adr-page .adr-typ-keiner { background: transparent; border-style: dashed; }
.adr-filter { display: flex; flex-wrap: wrap; gap: 8px; margin: 0 0 14px; }
.adr-filter .btn { white-space: nowrap; }
.adr-filter .adr-n { display: inline-block; min-width: 1.6em; margin-left: 6px; padding: 0 6px; border-radius: var(--radius-pill); background: rgba(0, 0, 0, 0.08); font-size: 12px; text-align: center; }
.adr-page .adr-typen { border: 1px solid var(--paper-line); border-radius: 10px; padding: 10px 14px; margin: 12px 0; }
.adr-page .adr-typen legend { padding: 0 6px; font-weight: 600; }
.adr-page .adr-typen .check-label { display: flex; align-items: flex-start; gap: 8px; margin: 6px 0; }
.adr-page .adr-typen input:disabled + span { opacity: 0.7; }
.adr-page tr.adr-inaktiv td { opacity: 0.65; }
.adr-page .adr-verwendung { margin: 0 0 12px; padding-left: 20px; }
.adr-page .adr-verwendung li { margin: 4px 0; }
@media (max-width: 560px) { .adr-filter .btn { flex: 1 1 auto; text-align: center; } }

/* V72 – Stammdaten & Einstellungen je Gruppe */
.kf-crumb { margin: 0 0 6px; font-size: 13px; color: var(--ink-soft); }
.kf-crumb a { color: inherit; }
.kf-tabs .kf-link { margin-left: 6px; }
.kf-page .kf-tiles { margin-top: 10px; }

/* V76 – Medien verkleinern (assets/medien.js) und Admin-Werkzeug «Speicherplatz sparen» */
.medien-status { margin: 6px 0 0; font-size: 13px; }
.medien-status[hidden], .medien-abbruch[hidden] { display: none !important; }
.medien-abbruch { margin: 6px 0 0 8px; padding: 4px 10px; font-size: 13px; }
.mo-page [hidden] { display: none !important; }
.mo-quellen { border: 0; padding: 0; margin: 0 0 10px; }
.mo-quellen .check-label { display: flex; margin: 4px 0; }

/* V80: Belegliste (Suche, Adresse, Mietverhältnis) – auf dem Handy als Karten, Auswahlkästchen und Knöpfe bleiben sichtbar */
.bs-tabelle td.r, .bs-tabelle th.r { text-align: right; white-space: nowrap; }
.bs-tabelle tr.bs-mahnung td:first-child { box-shadow: inset 3px 0 0 var(--amber, #d9a441); }
@media (max-width: 680px) {
  .bs-tabelle, .bs-tabelle tbody, .bs-tabelle tr, .bs-tabelle td { display: block; width: 100%; }
  .bs-tabelle thead { position: absolute; left: -9999px; }
  .bs-tabelle tr { border: 1px solid var(--paper-line); border-radius: var(--radius-lg); background: var(--white); margin-bottom: 12px; padding: 6px 4px; }
  .bs-tabelle td { border: 0; padding: 5px 12px; display: flex; justify-content: space-between; align-items: center; gap: 12px; text-align: right; flex-wrap: wrap; }
  .bs-tabelle td[data-label]::before { content: attr(data-label); color: var(--ink-soft); font-size: 12px; text-transform: uppercase; letter-spacing: .04em; text-align: left; flex: 0 0 34%; }
  .bs-tabelle td.kred-wahl { justify-content: flex-start; }
  .bs-tabelle .deb-aktionen { min-width: 0; width: 100%; }
}

/* V81: automatische Preise in der Kalkulation */
.kk-auto-stand { margin: .25rem 0 .75rem; }
.kk-auto-box { margin: .5rem 0 1rem; padding: .6rem .8rem; border-left: 3px solid #1f8f5f; background: rgba(31,143,95,.06); border-radius: 0 6px 6px 0; }
.kk-auto-zeilen { margin: .4rem 0 0; padding-left: 1.1rem; font-size: .92rem; }
.kk-auto-zeilen li { margin: .15rem 0; }
.kk-auto-gruppe-stand { margin: .3rem 0 0; }
input.kk-auto-feld[readonly] { background: rgba(31,143,95,.08); cursor: not-allowed; }
.kk-verlauf td small { overflow-wrap: anywhere; }
.kk-verlauf td.r, .kk-verlauf th.r { text-align: right; white-space: nowrap; }
#kp-auto-card h3 { margin-top: 1.4rem; }
#kk-auto-verlauf summary .muted { margin-left: .4em; }
@media (max-width: 680px) {
  .kk-verlauf, .kk-verlauf tbody, .kk-verlauf tr, .kk-verlauf td { display: block; width: 100%; }
  .kk-verlauf thead { position: absolute; left: -9999px; }
  .kk-verlauf tr { border: 1px solid var(--paper-line); border-radius: var(--radius-lg); background: var(--white); margin-bottom: 12px; padding: 6px 4px; }
  .kk-verlauf td { border: 0; padding: 5px 12px; display: flex; justify-content: space-between; align-items: center; gap: 12px; text-align: right; flex-wrap: wrap; }
  .kk-verlauf td[data-label]::before { content: attr(data-label); color: var(--ink-soft); font-size: 12px; text-transform: uppercase; letter-spacing: .04em; text-align: left; flex: 0 0 34%; }
}

/* V83: Sicherheit, «Heute zu tun», Suche, Konfliktschutz */
.kpi-row { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 10px; margin: .75rem 0 1rem; }
.kpi { display: flex; flex-direction: column; gap: 2px; padding: 10px 12px; border: 1px solid var(--paper-line); border-radius: var(--radius-lg); background: var(--white); }
.kpi-n { font-family: var(--font-heading); font-size: 1.6rem; line-height: 1.1; }
.kpi-l { color: var(--ink-soft); font-size: .8rem; }
.kpi.is-red { border-color: var(--error); background: var(--error-tint); }
.kpi.is-red .kpi-n { color: var(--error); }
.sicherheit-page td.num { text-align: right; white-space: nowrap; }
.sicherheit-page .grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 16px; }
.sicherheit-page .ok { color: var(--green-deep); }
.sicherheit-page .err { color: var(--error); }
.heute-liste { list-style: none; margin: .5rem 0 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 8px; }
.heute-liste a { display: flex; align-items: center; gap: 10px; padding: 8px 12px; border: 1px solid var(--paper-line); border-left-width: 4px; border-radius: var(--radius-lg); background: var(--white); color: var(--ink); text-decoration: none; min-height: 44px; }
.heute-liste a:hover, .heute-liste a:focus-visible { border-color: var(--green-deep); }
.heute-n { font-family: var(--font-heading); font-size: 1.3rem; min-width: 2ch; text-align: right; }
.heute-t { font-size: .92rem; line-height: 1.25; }
.heute-rot a { border-left-color: var(--error); }
.heute-gelb a { border-left-color: #d9a441; }
.heute-blau a { border-left-color: #4a7fb5; }
.suche-form { display: flex; gap: 8px; flex-wrap: wrap; }
.suche-form input[type=search] { flex: 1 1 240px; min-width: 0; }
.suche-treffer { list-style: none; margin: 0; padding: 0; }
.suche-treffer li a { display: block; padding: 8px 4px; border-bottom: 1px solid var(--paper-line); text-decoration: none; color: var(--ink); min-height: 44px; }
.suche-treffer li a:hover, .suche-treffer li a:focus-visible { background: var(--green-tint); }
.sic-cron { white-space: pre-wrap; overflow-wrap: anywhere; word-break: break-all; font-size: 12.5px; }
.heute-card { margin-bottom: 20px; }

/* V84: Grafiken Sicherheit (geprüfte Palette, siehe sicherheit-charts.php) */
.sic-chart { --sic-s1: #2a78d6; --sic-s2: #eb6834; --sic-s3: #1baf7a; --sic-s4: #eda100; --sic-surface: #ffffff; margin: .25rem 0 1rem; }
.sic-leiste { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 4px 16px; align-items: center; }
.sic-ansicht { display: flex; align-items: center; gap: 6px; }
.sic-svg { display: block; width: 100%; height: auto; min-width: 520px; }
.sic-svg-balken { min-width: 340px; max-width: 560px; }
.sicherheit-page .grid { grid-template-columns: repeat(auto-fit, minmax(340px, 1fr)); }
.sic-chart-scroll { overflow-x: auto; }
.sic-chart .s1 { fill: var(--sic-s1); } .sic-chart .s2 { fill: var(--sic-s2); } .sic-chart .s3 { fill: var(--sic-s3); } .sic-chart .s4 { fill: var(--sic-s4); }
.sic-grid { stroke: #e3e5e4; stroke-width: 1; } .sic-axis { stroke: var(--paper-line); stroke-width: 1; }
.sic-tick, .sic-lbl { fill: var(--ink-soft); font-size: 11px; font-family: var(--font-body); }
.sic-val { fill: var(--ink); font-size: 12px; font-weight: 600; font-family: var(--font-body); }
.sic-hit { fill: transparent; }
.sic-col:hover .sic-hit, .sic-row:hover .sic-hit { fill: rgba(29, 29, 27, .06); }
.sic-legende { display: flex; flex-wrap: wrap; gap: 4px 18px; list-style: none; margin: .25rem 0 .5rem; padding: 0; font-size: .85rem; }
.sic-swatch { display: inline-block; width: 12px; height: 12px; border-radius: 2px; margin-right: 6px; vertical-align: -1px; }
.sic-swatch.s1 { background: #2a78d6; } .sic-swatch.s2 { background: #eb6834; } .sic-swatch.s3 { background: #1baf7a; } .sic-swatch.s4 { background: #eda100; }
.sicherheit-page th.num { text-align: right; }
figure.sic-chart { margin-left: 0; margin-right: 0; overflow-x: auto; }
.sic-schritte li { margin-bottom: 4px; }
.sic-schluessel { border: 1px solid var(--amber); background: var(--amber-tint); border-radius: var(--radius-lg); padding: 10px 14px; margin: .75rem 0; }
.sic-schluessel-feld { width: 100%; font-family: ui-monospace, Menlo, Consolas, monospace; font-size: .85rem; word-break: break-all; }
.sic-empfaenger { border: 1px solid var(--paper-line); border-radius: var(--radius-lg); margin: .75rem 0; padding: 8px 14px; }

/* V84: Bearbeitungsschutz */
.bs-banner { margin: 10px 0 14px; padding: 10px 14px; border: 1px solid var(--amber); background: var(--amber-tint); border-radius: var(--radius-lg); }
.bs-banner.bs-fremd { border-color: var(--error); background: var(--error-tint); }
.bs-banner p { margin: 4px 0; }
.bs-aktionen { display: flex; flex-wrap: wrap; gap: 8px; }
.bs-gesperrt { opacity: .5; cursor: not-allowed; }
.bs-flash { margin: 10px 0; }

/* V85: Mindest-Tippfläche 24 × 24 px (WCAG 2.2, 2.5.8) für Links in Tabellen und aufklappbare Bereiche */
td a:not(.btn):not(.badge), th a:not(.btn) { display: inline-block; min-height: 24px; padding-block: 2px; box-sizing: border-box; }
summary { padding-block: 3px; }
.langswitch a { display: inline-block; min-width: 24px; min-height: 24px; text-align: center; box-sizing: border-box; }

/* V86: Suchfelder der Verwaltungsseiten auf Touch-Geräten ebenfalls 16 px (iOS zoomt sonst beim Antippen hinein). */
@media (pointer: coarse), (max-width: 680px) {
  :where(body.admin-page) input[type=search] { font-size: 16px; min-height: 44px; }
}

/* V87: Spaltenwahl der Tabellen (assets/table-tools.js) */
.col-off { display: none !important; }
.table-tools-top { display: flex; justify-content: flex-end; margin: 0 0 .35rem; }
.table-cols { position: relative; }
.table-cols > summary { list-style: none; cursor: pointer; display: inline-block; padding: .3rem .7rem; border: 1px solid var(--paper-line); border-radius: 2px; background: var(--white); font-size: .875rem; }
.table-cols > summary::-webkit-details-marker { display: none; }
.table-cols[open] > summary { border-color: var(--green-deep, #26704A); }
.table-cols-menu { position: absolute; right: 0; z-index: 30; min-width: 14rem; max-height: 22rem; overflow: auto; margin-top: .2rem; padding: .6rem .75rem; background: var(--white); border: 1px solid var(--paper-line); border-radius: 2px; box-shadow: 0 6px 20px rgba(0,0,0,.14); display: grid; gap: .35rem; }
.table-cols-menu .check-label { display: flex; gap: .5rem; align-items: center; font-size: .875rem; }
.table-cols-menu .btn { margin-top: .35rem; }

/* V87 – CRM Sales */
.sales-ansicht { margin-left: auto; display: inline-flex; gap: 6px; }
.sales-board { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(250px, 1fr); gap: 12px; overflow-x: auto; padding-bottom: 12px; margin-bottom: 12px; align-items: start; }
.sales-col { background: var(--paper); border: 1px solid var(--paper-line); border-radius: var(--radius-lg); padding: 10px; min-height: 120px; }
.sales-col.is-over { border-color: var(--green-deep); box-shadow: 0 0 0 2px var(--green-tint); }
.sales-col header h2 { font-size: 15px; margin: 0 0 2px; display: flex; justify-content: space-between; gap: 8px; }
.sales-col-n { background: var(--white); border: 1px solid var(--paper-line); border-radius: 10px; padding: 0 8px; font-size: 12px; }
.sales-col-gewonnen header h2 { color: var(--green-deep); }
.sales-col-verloren header h2 { color: var(--error); }
.sales-card { background: var(--white); border: 1px solid var(--paper-line); border-radius: var(--radius-lg); padding: 10px 12px; margin-top: 10px; cursor: grab; }
.sales-card.is-dragging { opacity: .5; }
.sales-card h3 { font-size: 14.5px; margin: 0 0 4px; }
.sales-card p { margin: 3px 0; font-size: 13px; }
.sales-faellig { color: var(--error); font-weight: 600; }
.sales-move { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.sales-move select { flex: 1; min-width: 0; }
.sales-move button { padding: 4px 10px; flex: 0 0 auto; }
.sales-leer { margin-top: 12px; }
.sales-stepper { display: flex; flex-wrap: wrap; gap: 6px; margin: 8px 0 14px; }
.sales-stepper form { display: inline; }
.sales-stepper .is-aktuell { background: var(--green-deep); color: #fff; border-color: var(--green-deep); }
.sales-2col { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 16px; }
.sales-liste { list-style: none; margin: 0; padding: 0; }
.sales-liste li { padding: 8px 0; border-top: 1px solid var(--paper-line); }
.sales-liste li:first-child { border-top: 0; }
.sales-meta { color: var(--ink-soft); font-size: 12.5px; }
.sales-prep-item { border: 1px solid var(--paper-line); border-left-width: 5px; border-radius: var(--radius-lg); padding: 10px 14px; margin: 8px 0; background: var(--white); }
.sales-prep-item.is-hoch { border-left-color: var(--error); }
.sales-prep-item.is-mittel { border-left-color: #E3B36B; }
.sales-prep-item.is-tief { border-left-color: var(--paper-line); }
.sales-prep-item h3 { font-size: 14px; margin: 0 0 3px; display: flex; gap: 8px; align-items: baseline; flex-wrap: wrap; }
.sales-prep-item p { margin: 2px 0; white-space: pre-wrap; }
.sales-punkte { letter-spacing: 2px; color: var(--green-deep); font-size: 12px; }
.sales-notiz { width: 100%; min-height: 220px; font-family: inherit; }
.sales-monat { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 4px; margin: 10px 0; }
.sales-monat .sales-tag { background: var(--white); border: 1px solid var(--paper-line); border-radius: 6px; min-height: 84px; padding: 4px 6px; font-size: 12px; overflow: hidden; }
.sales-monat .sales-tag.is-heute { border-color: var(--green-deep); box-shadow: 0 0 0 1px var(--green-deep); }
.sales-monat .sales-tag.is-fremd { background: var(--paper); color: var(--ink-soft); }
.sales-monat .sales-kopf { font-weight: 600; text-align: center; color: var(--ink-soft); }
.sales-eintrag { display: block; margin-top: 3px; padding: 1px 5px; border-radius: 4px; background: var(--green-tint); color: var(--green-deep); text-decoration: none; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sales-eintrag.t-geburtstag { background: #FBEFD8; color: #8A5A00; }
.sales-eintrag.t-wiedervorlage { background: var(--paper); border: 1px solid var(--paper-line); color: var(--ink); }
.sales-eintrag.t-aufgabe { background: var(--error-tint); color: var(--error); }
.sales-transkript { white-space: pre-wrap; max-height: 460px; overflow: auto; background: var(--paper); border: 1px solid var(--paper-line); border-radius: var(--radius-lg); padding: 12px; font-size: 13.5px; }
@media (max-width: 760px) {
  .sales-2col { grid-template-columns: 1fr; }
  .sales-board { grid-auto-columns: minmax(80vw, 1fr); }
  .sales-monat { grid-template-columns: 1fr; }
  .sales-monat .sales-kopf { display: none; }
  .sales-monat .sales-tag { min-height: 0; }
  .sales-ansicht { margin-left: 0; }
}

/* V89: Kontaktdaten einer Adresse als bearbeitbare Tabelle «Feld | Wert» */
.adr-kontakt-tabelle { width: 100%; border-collapse: collapse; }
.adr-kontakt-tabelle th[scope="row"] { text-align: left; font-weight: 600; width: 30%; min-width: 9rem; vertical-align: middle; padding: .35rem .6rem .35rem 0; }
.adr-kontakt-tabelle td { padding: .25rem 0; }
.adr-kontakt-tabelle td input[type="text"], .adr-kontakt-tabelle td input[type="email"], .adr-kontakt-tabelle td select, .adr-kontakt-tabelle td textarea { width: 100%; max-width: 40rem; box-sizing: border-box; }
.adr-kontakt-tabelle thead th { text-align: left; }
@media (max-width: 600px) {
  .adr-kontakt-tabelle th[scope="row"] { width: 38%; min-width: 0; }
}

/* V91: Spesen als Tabelle (wie die Objekte-Tabellen); Details/Bearbeiten klappen unter der Zeile auf */
.sp-tabelle .sp-detail td { padding-top: 0; border-top: 0; }
.sp-tabelle .sp-detail summary { cursor: pointer; font-size: .9rem; color: var(--muted, #666); }
.sp-tabelle .sp-detail details[open] summary { margin-bottom: 8px; }
.sp-tabelle .sp-detail form.kk-pos { border-bottom: 0; }
@media (max-width: 720px) { .sp-tabelle .sp-detail td { display: block; } }
