/* Auto-Text-Inflation auf echten Mobilgeraeten (Chrome/WebKit blaehen Text in
   breiten Block-Containern automatisch auf) unterbinden — sonst ist z.B. der
   Modal-Titel auf dem S22 viel groesser als die gesetzte font-size. Greift nur
   gegen das ungewollte Aufblasen, aendert keine explizit gesetzten Groessen.
   In der DevTools-Emulation unsichtbar (nur auf echten Touch-Geraeten aktiv). */
html {
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
}

@media (orientation: landscape) {  }
@media (orientation: portrait) {  }

/* Smartphones hochkant (Portrait) bis iPhone SE, Galaxy S Mini

@media (max-width: 480px) {  }
  
*/

:root {
  --bg: rgba(0, 71, 76, 0.2);
  --bg-lightblack: rgba(0, 0, 0, 0.8);
  --bg-green: rgba(0, 71, 76, 1);
  --fc-today-bg-color: #0e2648 !important;

  --main: #f5a623 !important;
  --main_connect: #f5a623af !important;
  --white: #fff !important;
  --darkgreen: #004f51 !important;

  --darkblue: #0a0f24 !important;
  --darkGray: #1F1F1F !important;


  --darkViolet: #181432 !important;
  --lightViolet: #2c203f !important;
  --darkRose: #88545d !important;
  --middleRose: #683347 !important;
  --lightRose: #88545d !important;

  --test: #1f2336 !important;
  /* --lightBlue: #0e2648 !important; */
  --lightred: #eb5543 !important;
  --darkred: #781b10 !important;
  --darkyellow: #dbbc0d !important;
  --grey: #2f3742 !important;

  --border: 3px;

  --font-xxl: 2rem !important;
  --font-xl: 1.5rem !important;
  --font-lg: 1.25rem !important;
  --font-sm: 1rem !important;
  --font-md: 0.75rem !important;
  --lineheight: 25px;
}

/* Default: Desktop sichtbar, Mobile versteckt */
.desktop_view { display: block; }
.mobile_view { display: none; }

/* Mobile Breakpoint (< 992px) - aktiviert Mobile-Ansicht */
@media (max-width: 991px) {
  .desktop_view { display: none !important; }
  .desktop_view:has(.guest-page-layout) { display: block !important; }
  .mobile_view { display: block !important; }

  /* Desktop Navigation verstecken */
  .navigation { display: none !important; }

  /* Basis-Schriftgroesse mobil auf 14px angleichen (wie jd-mail). Partner stand
     ohne diese Regel auf Browser-Default 16px -> alle rem-Werte ~14% groesser,
     u.a. der Dashboard-Header 8px hoeher als bei Mail. 14px bringt die gesamte
     Mobile-UI auf denselben Massstab wie Mail. */
  html, body {
    font-size: 14px;
    scrollbar-width: none !important;        /* Firefox */
    -ms-overflow-style: none !important;     /* alte Edge/IE */
  }
  html::-webkit-scrollbar,
  body::-webkit-scrollbar {
    display: none !important;                /* Chrome/Safari */
    width: 0 !important;
    height: 0 !important;
  }

  /* Detail-Modal: der Header-Strich (span.border-span direkt unter dem Titel) soll
     weiter vom Titel weg. Der Strich hat Inline-Style margin-top:1rem — mit
     !important auf 1.75rem erhoehen. Gilt im gesamten Mobil/Tablet-Bereich (<=991px),
     da die 768px-Regel bei 769-991px nicht greift und dort nur der Inline-Wert wirkt. */
  .lazy-nl-modal .border-span,
  [id^="getNewsletterData"] .border-span {
    margin-top: 1.75rem !important;
  }

  /* Header-Toggle-Label "Öffentlich" (oben links) 1:1 an den "Spamtest"-Toggle
     angleichen. Betrifft ALLE Modals mit so einem Header-Toggle (Detail-Modal
     getNewsletterData UND Bearbeiten-Modal setNewsletterPage) — daher .modal als
     Anker, nicht nur getNewsletterData/.lazy-nl-modal.
     1) font-size 0.92rem (Inline 1rem/16px war groesser als Spamtest 0.92rem). */
  .modal .switch-button.position-absolute > label {
    font-size: 0.92rem !important;
  }
  /* 2) Im disabled-Fall liegt opacity:0.5 (inline) auf dem GANZEN Container -> das
     Label wirkte blass/kleiner als der voll deckende Spamtest. opacity vom Container
     nehmen und NUR auf den Schalter (.switch-outer) legen: Label voll deckend
     (= wie Spamtest), Toggle sieht weiter deaktiviert aus. */
  .modal .switch-button.position-absolute.disabled-toggle {
    opacity: 1 !important;
  }
  .modal .switch-button.position-absolute.disabled-toggle > .switch-outer {
    opacity: 0.5 !important;
  }
}

/* Smartphones quer + große Smartphones (iPhone 14 Pro Max, Galaxy S24 Ultra) */
@media (max-width: 768px) {
  /* iOS-sicher: Dokument scrollt NICHT, innerer Container (.div_light_mobile) scrollt.
     Ohne das bricht position:fixed;bottom:0 auf iOS Safari bei langen Seiten
     (Adressleisten-Collapse verschiebt den Layout-Viewport -> Nav wandert mit). */
  html, body {
      height: 100vh !important;                /* Fallback aelteres iOS */
      height: 100dvh !important;               /* modernes iOS: stabile Viewport-Hoehe */
      min-height: 0 !important;
      overflow: hidden !important;             /* KEIN Dokument-Scroll -> fixed bleibt stabil */
      overflow-x: hidden !important;
      margin: 0 !important;
      /* Page-Scrollbalken ausblenden (Scroll-Funktion bleibt) */
      scrollbar-width: none !important;        /* Firefox */
      -ms-overflow-style: none !important;     /* alte Edge/IE */
  }
  html::-webkit-scrollbar,
  body::-webkit-scrollbar {
      display: none !important;                /* Chrome/Safari */
      width: 0 !important;
      height: 0 !important;
  }

  .mc_a_row {
    top: 3rem;
    left: 0rem;
    padding: 1rem;
    width: 100%;
    /* height: 31rem !important; */
    /* Background-Override ENTFERNT: der alte linear-gradient + bg_poly.svg
       ueberdeckte den schoenen SVG-data-URI-Polygon-Hintergrund aus styles.css
       (Desktop) mit einem durchscheinenden alten CI-Bild. Jetzt greift mobil
       derselbe Modal-Hintergrund wie auf Desktop / wie bei jd-mail. */
  }

  .box_histroy_count {
    background-color: var(--darkblue) !important;
    min-height: 5rem;
    min-width: 5rem;
    border: solid 1px var(--darkgreen);
    border-radius: var(--border);
    overflow-y: auto;
    overflow-x: hidden;
    padding: 0.5rem !important;
    margin-top: 1rem;
    background-image: 
    linear-gradient(rgba(10, 15, 36, 0.7), rgba(10, 15, 36, 0.4)),  /* dunkler Overlay */
    url('../svg/bg_poly.svg');
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
  }

}

@media (hover: none) and (pointer: coarse) {

  button { padding: 1rem 2rem; }
}

.choose-adspace {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;       /* volle Breite */
  z-index: 9999;     /* damit es über allem liegt */
}

.navigation-mobile {
  position: fixed;
  bottom: 0;
  left: 0;
  width: 100%;       /* volle Breite */
  min-height: 1rem;  /* Höhe */
  background-color: var(--darkblue);
  z-index:9999;     /* damit es über allem liegt */
}


.newsletter-carusell-row{
  position: relative;
  background-color: var(--darkblue);
  border-radius: var(--border);
  border: 2px solid var(--darkgreen);
  height: 25rem !important;
  width: 100%;
  background-image:
  linear-gradient(rgba(10, 15, 36, 0.7), rgba(10, 15, 36, 0.4)),  /* dunkler Overlay */
  url('../svg/bg_poly_new.png');
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
}

/* =============================================================================
   MOBILE MODAL STYLES
   Fullscreen Modals auf Mobile Geräten
   ============================================================================= */

@media (max-width: 768px) {
  .modal {
    padding: 0 !important;
  }

  .modal-dialog,
  .modal-dialog.modal-hcenter {
    position: fixed !important;
    top: 0 !important;
    left: 0 !important;
    right: 0 !important;
    bottom: 0 !important;
    margin: 0 !important;
    max-width: 100% !important;
    width: 100% !important;
    height: 100% !important;
    transform: none !important;
    overflow-y: auto !important;
  }

  .modal-content {
    position: relative !important;
    border-radius: 0 !important;
    border: none !important;
    min-height: 100vh;
    width: 100% !important;
    max-width: 100% !important;
    overflow-y: auto !important;
  }

  .mc_a,
  .mc_a_row {
    position: relative !important;
    top: 0 !important;
    left: 0 !important;
    right: 0 !important;
    width: 100% !important;
    max-width: 100% !important;
    margin: 0 !important;
    padding: 3rem 1.25rem 4rem 1.25rem !important;
    transform: none !important;
    border-radius: 0 !important;
    overflow-y: auto !important;
    min-height: 100vh;
    scrollbar-width: none;
    -ms-overflow-style: none;
  }

  .mc_a::-webkit-scrollbar,
  .mc_a_row::-webkit-scrollbar,
  .modal::-webkit-scrollbar,
  .modal-dialog::-webkit-scrollbar {
    display: none;
  }

  .modal,
  .modal-dialog {
    scrollbar-width: none;
    -ms-overflow-style: none;
  }

  /* Modal Header zentriert */
  .modal-header-wrapper {
    position: relative;
    z-index: 10;
    width: 100% !important;
    display: flex !important;
    flex-direction: column !important;
    align-items: center !important;
    justify-content: center !important;
    text-align: center !important;
    padding-right: 0 !important;
  }

  .modal-header-wrapper h2,
  .modal-header-wrapper .header-style {
    width: 100% !important;
    text-align: center !important;
  }

  /* Border-Span volle Breite */
  .mc_a .border-span,
  .mc_a_row .border-span {
    width: 100%;
    margin-top: 0.5rem !important;
    margin-bottom: 0.5rem !important;
  }

  /* Formulare im Modal volle Breite */
  .mc_a form,
  .mc_a_row form {
    width: 100% !important;
    max-width: 100% !important;
  }

  /* Alle Row und Col Elemente im Modal */
  .mc_a .row:not(.blacklist-entry-content):not(.blacklist-header-row),
  .mc_a_row .row:not(.blacklist-entry-content):not(.blacklist-header-row) {
    width: 100% !important;
    margin-left: 0 !important;
    margin-right: 0 !important;
    flex-direction: column !important;
    gap: 0.5rem !important;
  }

  .mc_a .col:not(.blacklist-entry-value):not(.blacklist-entry-date):not(.blacklist-entry-actions),
  .mc_a_row .col:not(.blacklist-entry-value):not(.blacklist-entry-date):not(.blacklist-entry-actions),
  .mc_a .row:not(.blacklist-header-row):not(.blacklist-entry-content) > [class*="col-"]:not(.blacklist-entry-value):not(.blacklist-entry-date):not(.blacklist-entry-actions),
  .mc_a_row .row:not(.blacklist-header-row):not(.blacklist-entry-content) > [class*="col-"]:not(.blacklist-entry-value):not(.blacklist-entry-date):not(.blacklist-entry-actions) {
    width: 100% !important;
    max-width: 100% !important;
    flex: none !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
  }

  /* Blacklist Header Row */
  .mc_a .blacklist-header-row,
  .mc_a_row .blacklist-header-row {
    display: flex !important;
    flex-direction: row !important;
    flex-wrap: wrap !important;
    align-items: center !important;
    gap: 0.5rem !important;
    padding: 0 0.5rem !important;
  }

  .mc_a .blacklist-header-row > [class*="col-"],
  .mc_a_row .blacklist-header-row > [class*="col-"] {
    padding: 0 !important;
    font-size: 0.75rem !important;
    color: rgba(255, 255, 255, 0.6) !important;
  }

  .mc_a .blacklist-header-row > .col-3,
  .mc_a_row .blacklist-header-row > .col-3 {
    flex: 1 !important;
    max-width: none !important;
    width: auto !important;
    text-align: left !important;
  }

  .mc_a .blacklist-header-row > .col-7,
  .mc_a_row .blacklist-header-row > .col-7 {
    flex: 0 0 auto !important;
    max-width: none !important;
    width: auto !important;
  }

  .mc_a .blacklist-header-row > .col-2,
  .mc_a_row .blacklist-header-row > .col-2 {
    flex: 0 0 36px !important;
    max-width: none !important;
    width: 36px !important;
  }

  /* Blacklist Einträge: Row als Flex-Row statt Column */
  .mc_a .blacklist-entry-content,
  .mc_a_row .blacklist-entry-content {
    display: flex !important;
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    align-items: center !important;
    width: 100% !important;
    gap: 0.5rem !important;
    padding: 0 0.5rem !important;
  }

  .mc_a .blacklist-entry-value,
  .mc_a_row .blacklist-entry-value {
    flex: 1 !important;
    min-width: 0 !important;
    max-width: none !important;
    font-size: 0.8rem !important;
    word-break: break-all !important;
    text-align: left !important;
    padding: 0 !important;
  }

  .mc_a .blacklist-entry-date,
  .mc_a_row .blacklist-entry-date {
    flex: 0 0 auto !important;
    width: auto !important;
    max-width: none !important;
    font-size: 0.75rem !important;
    color: rgba(255, 255, 255, 0.6) !important;
    padding: 0 !important;
  }

  .mc_a .blacklist-entry-actions,
  .mc_a_row .blacklist-entry-actions {
    flex: 0 0 auto !important;
    width: 36px !important;
    max-width: none !important;
    padding: 0 !important;
  }

  /* Blacklist Delete Button - wie X-Button */
  .blacklist-delete-btn {
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    width: 32px !important;
    height: 32px !important;
    background: #0a0f24 !important;
    border: none !important;
    border-radius: 3px !important;
    color: #fff !important;
    font-size: 0.85rem !important;
    padding: 0 !important;
    margin-right: 1rem !important;
    cursor: pointer !important;
  }

  .blacklist-delete-btn:hover,
  .blacklist-delete-btn:active {
    border-color: #f44336 !important;
    color: #f44336 !important;
  }

  /* Form-Elemente volle Breite */
  .mc_a .form-select,
  .mc_a_row .form-select,
  .mc_a select,
  .mc_a_row select,
  .mc_a .input-basic,
  .mc_a_row .input-basic,
  .mc_a input[type="text"],
  .mc_a_row input[type="text"],
  .mc_a input[type="date"],
  .mc_a_row input[type="date"] {
    width: 100% !important;
    max-width: 100% !important;
    box-sizing: border-box !important;
  }

  /* Einheitliche Abstände zwischen Formular-Elementen */
  .mc_a .row,
  .mc_a_row .row {
    margin-top: 0 !important;
    margin-bottom: 0.75rem !important;
  }

  .mc_a .row:last-child,
  .mc_a_row .row:last-child {
    margin-bottom: 0 !important;
  }

  /* Header-Style auf Mobile */
  .mc_a .header-style,
  .mc_a_row .header-style {
    font-size: 1.25rem !important;
    letter-spacing: 0.15rem !important;
  }

  /* Kampagnen-Detail-Modal-Titel (Lazy-Modal): so gross wie die Tab-Schrift
     (0.8rem) — auf echten Touch-Geraeten wirkte 1.25rem (+ Font-Boosting) viel
     zu gross. Fett + letter-spacing bleibt, damit er als Ueberschrift lesbar ist. */
  .lazy-nl-modal h2.header-style {
    font-size: 0.8rem !important;
  }

  /* Submit Button Abstand */
  .mc_a .btn_main,
  .mc_a_row .btn_main {
    margin-top: 0.75rem !important;
    width: 100% !important;
  }

  /* =============================================================================
     MOBILE CLOSE BUTTON für Modals
     ============================================================================= */
  .modal-close-mobile {
    display: flex !important;
    position: fixed;
    top: 0.75rem;
    right: 1.5rem;
    width: 36px;
    height: 36px;
    align-items: center;
    justify-content: center;
    background: rgba(10, 15, 36, 0.8);
    border: 1px solid #88545d;
    border-radius: 3px;
    color: #fff;
    font-size: 1rem;
    cursor: pointer;
    z-index: 9999;
    padding: 0;
  }

  .modal-close-mobile:hover,
  .modal-close-mobile:active {
    background: rgba(136, 84, 93, 0.5);
    border-color: #fff;
  }

  /* =============================================================================
     NEWSLETTER MODAL: Upload-Buttons + Sub-Tabs Fix
     ============================================================================= */

  /* Upload-Buttons: nicht mehr absolute, zentriert als eigene Zeile */
  .mc_a .nav-tabs .nav-item.position-absolute,
  .mc_a_row .nav-tabs .nav-item.position-absolute {
    position: static !important;
    top: auto !important;
    right: auto !important;
    width: 100% !important;
    margin-bottom: 0.5rem;
    display: flex !important;
    justify-content: center !important;
    flex-wrap: wrap;
  }

  /* Upload-Button Labels kleiner */
  .mc_a .custom-file label,
  .mc_a_row .custom-file label {
    font-size: 0.75rem !important;
    padding: 0.3rem 0.5rem !important;
  }

  /* Nav-Tabs auf Mobile: mehrzeilig (Profil hat 4 Tabs, Editor-Modals 5+) */
  .mc_a .nav-tabs,
  .mc_a_row .nav-tabs {
    flex-wrap: wrap !important;
    font-size: 0.8rem !important;
    margin-bottom: 0.5rem !important;
  }

  /* "Öffentlich"-Toggle im Detail-Modal: auf Desktop absolut oben rechts
     (Inline top:2rem;right:2rem). Auf Mobile oben LINKS auf Hoehe des
     X-Buttons (top:8px;right:8px) als Gegenstueck zum X. Switch oben, Label
     "Öffentlich" klein DARUNTER (column) — daneben wuerde es den zentrierten
     Titel ueberlappen, deshalb gestapelt und schmal gehalten. */
  .lazy-nl-modal form > .switch-button.position-absolute {
    position: absolute !important;
    top: 0.8rem !important;
    left: 0.875rem !important;
    right: auto !important;
    margin: 0 !important;
    flex-direction: column !important;
    align-items: center !important;
    gap: 0.15rem !important;
    z-index: 6 !important;
  }
  /* "Öffentlich"-Label (form > switch-button im Modal-Header): war 0.6rem (winzig).
     Auf 0.92rem = exakt wie der Spamtest-Toggle. (User-Wunsch: 1:1 wie Spamtest.) */
  .lazy-nl-modal form > .switch-button.position-absolute > label {
    display: block !important;
    font-size: 0.92rem !important;
    line-height: 1 !important;
    white-space: nowrap !important;
  }

  /* Header-Trennstrich (.border-span): liegt im flex-column-Container und
     kollabiert dort auf 0 (height wird zur schrumpfbaren Main-Size) -> der
     rosé Strich war unsichtbar. flex-shrink:0 + min-height fixen das.
     margin-top 1.75rem = Abstand zum Titel (User wollte den Strich weiter vom
     Titel weg). Konsistent mit der 991px-Regel oben. */
  .lazy-nl-modal .border-span {
    flex-shrink: 0 !important;
    min-height: 2px !important;
    margin-top: 1.75rem !important;
  }

  /* Blacklisten-Tab: Pills NICHT als 4-Spalten-Grid (Namen brechen um / werden
     abgeschnitten), sondern 1 Item pro Zeile ueber volle Breite, linksbuendig
     als Card mit Check-Icon links. (Inline-width wurde im Markup entfernt, daher
     greift dieses width:100% jetzt.) */
  [id^="blacklists"] .bl-update-item {
    width: 100% !important;
    text-align: left !important;
    padding: 0.7rem 0.75rem 0.7rem 2rem !important;
    margin: 0 !important;
    background: color-mix(in srgb, var(--darkblue) 75%, transparent) !important;
    border-radius: var(--border) !important;
    box-sizing: border-box !important;
  }
  [id^="blacklists"] .bl-update-item .fa-check {
    left: 0.7rem !important;
  }

  /* ── Zielgruppe-Tab: kompaktes Layout (User-Wunsch 27.06.) ──────────────────
     Anders als die uebrigen Form-Reihen sollen die Zielgruppe-Reihen NICHT
     gestapelt werden, sondern eng am Desktop bleiben:
       - Alter:  Geschlecht / von / bis / Minus  in EINER Zeile, Plus drunter.
       - PLZ:    von / bis / Minus               in EINER Zeile, Plus drunter.
       - Toggle: PLZ-Bereiche + Bundeslaender    in EINER Zeile.
       - Bundeslaender: ein Bundesland pro Zeile.
     Die generische .mc_a .row (flex-wrap) wuerde alles stapeln -> hier per
     flex-wrap:nowrap + schmaleren Spalten zurueckgeholt. */

  /* WICHTIG zur Spezifitaet: Die generische Regel oben
       .mc_a .col:not(.blacklist-entry-value):not(.blacklist-entry-date):not(.blacklist-entry-actions)
     hat width:100% + flex:none mit Spezifitaet (0,5,0). Um sie hier zu schlagen,
     muessen die folgenden .col-Regeln MINDESTENS (0,5,0) erreichen -> deshalb
     .mc_a/.mc_a_row davor + dieselbe :not()-Kette anhaengen (das [id^=..]-Attribut
     + .row geben zusaetzliches Gewicht). Sonst bleiben die Spalten bei width:100%
     und stapeln trotz flex-wrap:nowrap. */

  /* Alters-Range-Reihen: 4 Elemente nebeneinander (Geschlecht/von/bis/Minus).
     Gilt fuer Edit-Tab (ageRangesTg) UND Erstellen-Modal (ageRangesSet).
     flex-direction:row MUSS gesetzt werden (mit :not()-Kette fuer Spezifitaet),
     sonst gewinnt die generische .mc_a .row:not()...{flex-direction:column} und
     stapelt die Felder trotz nowrap. */
  .mc_a [id^="ageRanges"] > .row:not(.blacklist-entry-content):not(.blacklist-header-row),
  .mc_a_row [id^="ageRanges"] > .row:not(.blacklist-entry-content):not(.blacklist-header-row) {
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    align-items: center !important;
    width: 100% !important;
    gap: 0.3rem !important;
    margin-bottom: 0.3rem !important;
  }
  .mc_a [id^="ageRanges"] > .row > .col:not(.blacklist-entry-value):not(.blacklist-entry-date):not(.blacklist-entry-actions),
  .mc_a_row [id^="ageRanges"] > .row > .col:not(.blacklist-entry-value):not(.blacklist-entry-date):not(.blacklist-entry-actions) {
    flex: 1 1 0 !important;
    width: auto !important;
    max-width: none !important;
    min-width: 0 !important;
    padding: 0 !important;
  }
  /* Dritte .col (Bis-Input + Minus): Bis fuellt, Minus bleibt schmal rechts. */
  .mc_a [id^="ageRanges"] > .row > .col:nth-child(3),
  .mc_a_row [id^="ageRanges"] > .row > .col:nth-child(3) {
    display: flex !important;
    align-items: center !important;
    gap: 0.3rem !important;
  }
  .mc_a [id^="ageRanges"] > .row > .col:nth-child(3) > div,
  .mc_a_row [id^="ageRanges"] > .row > .col:nth-child(3) > div {
    flex: 1 1 0 !important;
    min-width: 0 !important;
  }

  /* PLZ-Range-Reihen: von / bis / Minus nebeneinander (Markup: 2 .col + Minus
     direkt als Row-Kind). */
  .mc_a [id^="plzRanges"] > .row:not(.blacklist-entry-content):not(.blacklist-header-row),
  .mc_a_row [id^="plzRanges"] > .row:not(.blacklist-entry-content):not(.blacklist-header-row) {
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    align-items: center !important;
    width: 100% !important;
    gap: 0.3rem !important;
    margin-bottom: 0.3rem !important;
  }
  .mc_a [id^="plzRanges"] > .row > .col:not(.blacklist-entry-value):not(.blacklist-entry-date):not(.blacklist-entry-actions),
  .mc_a_row [id^="plzRanges"] > .row > .col:not(.blacklist-entry-value):not(.blacklist-entry-date):not(.blacklist-entry-actions) {
    flex: 1 1 0 !important;
    width: auto !important;
    max-width: none !important;
    min-width: 0 !important;
    padding: 0 !important;
  }

  /* Minus-Buttons (Alter + PLZ) + die Plus-Buttons: quadratisch 40x40, Icon
     mittig. Die Buttons tragen padding:16px 32px + die Icons haben Inline-
     margin-Hacks (margin-top/left) zur Pseudo-Zentrierung -> beides neutralisieren,
     sonst ragt das Icon raus (scrollWidth>clientWidth-Falle). flex:0 0 40px haelt
     sie schmal, damit die Eingabefelder den Platz bekommen. */
  [id^="ageRanges"] .remove-age-row,
  [id^="plzRanges"] .remove-plz-row,
  [id^="addAgeRange"],
  [id^="addPlzRange"] {
    flex: 0 0 40px !important;
    width: 40px !important;
    height: 40px !important;
    padding: 0 !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
  }
  [id^="ageRanges"] .remove-age-row > i,
  [id^="plzRanges"] .remove-plz-row > i,
  [id^="addAgeRange"] > i,
  [id^="addPlzRange"] > i {
    margin: 0 !important;
  }

  /* In den schmalen Von/Bis-Feldern die Icons (User / Location-Pin) ausblenden —
     auf 375px ueberlappen sie sonst mit der Zahl/dem Placeholder. */
  [id^="ageRanges"] .col .fa-user,
  [id^="plzRanges"] .col .fa-location-dot {
    display: none !important;
  }

  /* Toggle-Zeile PLZ-Bereiche + Bundeslaender: nebeneinander statt gestapelt.
     Die zwei Toggle-Buttons liegen je in einer .col einer .row -> Eltern-.row
     ueber :has() greifen und auf nowrap zwingen. */
  .mc_a .row:has(> .col > [id^="plzToggle"]):not(.blacklist-entry-content):not(.blacklist-header-row),
  .mc_a_row .row:has(> .col > [id^="plzToggle"]):not(.blacklist-entry-content):not(.blacklist-header-row) {
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    align-items: center !important;
    gap: 0.3rem !important;
  }
  .mc_a .row:has(> .col > [id^="plzToggle"]) > .col:not(.blacklist-entry-value):not(.blacklist-entry-date):not(.blacklist-entry-actions),
  .mc_a_row .row:has(> .col > [id^="plzToggle"]) > .col:not(.blacklist-entry-value):not(.blacklist-entry-date):not(.blacklist-entry-actions) {
    flex: 1 1 0 !important;
    width: auto !important;
    max-width: none !important;
    min-width: 0 !important;
    padding: 0 !important;
  }

  /* Bundeslaender-Chips: ein Bundesland pro Zeile (statt 4 nebeneinander).
     Die Breite liegt jetzt in der Klasse .bl-pill-w (styles.css: calc(25%)) statt
     inline am Chip -> hier per Media-Query auf 100% ueberschreibbar. */
  .bl-pill-w {
    width: 100% !important;
  }

  /* CSV-Button (Zielgruppe-Tab) oben rechts in die Ecke, auf Hoehe der
     "Zielgruppe hinzufuegen"-Checkbox. Die Checkbox-Zeile ist das ERSTE Element
     im Tab-Pane (margin-top:0.5rem, Checkbox --size:28px), die CSV-Zeile sitzt im
     targetContainer direkt darunter. CSV absolut an den oberen rechten Rand des
     Panes setzen, auf top:0.5rem (= Checkbox-Zeilen-Oberkante). Der Pane bekommt
     position:relative. */
  [id^="targetgroup"].tab-pane {
    position: relative !important;
  }
  /* Edit-Tab (targetContainerTg): CSV-Button absolut oben rechts auf Checkbox-
     Hoehe (dort ist die Ecke frei). */
  [id^="targetContainerTg"] .plz-csv-row {
    position: absolute !important;
    top: -0.5rem !important;
    right: 0 !important;
    margin-bottom: 0 !important;
    z-index: 2 !important;
  }
  /* Erstellen-Modal (targetContentSet*): CSV-Zeile bleibt IM FLUSS (oben rechts
     waere die Modal-Ecke, da sitzt schon der ×-Button) — nur die Button-GROESSE
     an den Edit-Tab angleichen, an natuerlicher Stelle (in der Zielgruppe-Box). */
  [id^="targetContentSet"] .plz-csv-row {
    justify-content: flex-end !important;
  }
  /* CSV-Button selbst auf Checkbox-Hoehe (32px) + Referenz-Breite (3.5rem), mittig.
     Gilt fuer Edit-Tab UND Erstellen-Modal -> identische Groesse. */
  [id^="targetContainerTg"] .plz-csv-row .plz-csv-label,
  [id^="targetContainerSet"] .plz-csv-row .plz-csv-label,
  [id^="targetContentSet"] .plz-csv-row .plz-csv-label {
    height: 32px !important;
    min-width: 3.5rem !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    margin: 0 !important;
    font-size: 0.9rem !important;
  }

  /* Tab-Leisten im Detail-Modal (Haupt-Leiste mit 17 Tabs UND die inneren
     Sub-Leisten: WM-Leiste, HTML/TEXT/Details/Ranking/Spamtest): NICHT umbrechen,
     sondern einzeilig horizontal scrollbar. Der angeschnittene letzte Tab gibt
     den Scroll-Hinweis. Scrollbar versteckt (Projekt-Standard). */
  .lazy-nl-modal ul.nav-tabs,
  .m-as-modal ul.nav-tabs,
  [id^="setNewsletter"] ul.nav-tabs {
    flex-wrap: nowrap !important;
    overflow-x: auto !important;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    /* Flex-Container nimmt die Hoehe der list-item-Kinder nicht automatisch an
       (kollabiert sonst auf ~1px) -> min-height erzwingen. */
    min-height: 42px !important;
    align-items: flex-start !important;
  }
  /* Leisten mit eingebetteten Upload-Buttons (.nav-item.position-absolute, z.B.
     HTML/TEXT/Details/Ranking/Spamtest): die Upload-Buttons (HTML/Bilder hochladen)
     als eigene Zeile OBEN positionieren, damit die echten Tabs darunter einzeilig
     scrollen koennen. WICHTIG: Upload absolut relativ zum DIREKTEN ul-Eltern (der
     NICHT scrollt) — NICHT zur scrollenden ul, sonst scrollen die Upload-Buttons
     mit. Gilt fuer initial gerenderte WM (ul direkt in .tab-pane) UND neu per "+"
     hinzugefuegte WM (ul liegt dann in .row/.tab-pane-content). Die ul bleibt
     static + padding-top schafft den Platz fuer die Upload-Zeile. */
  .lazy-nl-modal :is(.tab-pane, .row, .tab-pane-content):has(> ul.nav-tabs > .nav-item.position-absolute),
  [id^="setNewsletter"] :is(.tab-pane, .row, .tab-pane-content):has(> ul.nav-tabs > .nav-item.position-absolute) {
    position: relative !important;
  }
  .lazy-nl-modal ul.nav-tabs:has(.nav-item.position-absolute),
  [id^="setNewsletter"] ul.nav-tabs:has(.nav-item.position-absolute) {
    position: static !important;
    /* margin-top:0 — die ul hat sonst mt-1, dadurch saesse die absolut oben
       positionierte Upload-Zeile relativ zum ul-Border zu hoch (zu grosse Luecke
       zu den Tabs). padding-top schafft genau den Platz fuer die Upload-Zeile
       (~35px hoch) + ~8px Abstand zu den Tabs. */
    margin-top: 0 !important;
    padding-top: 2.7rem !important;
  }
  .lazy-nl-modal ul.nav-tabs > .nav-item.position-absolute,
  [id^="setNewsletter"] ul.nav-tabs > .nav-item.position-absolute {
    position: absolute !important;
    top: 0 !important;
    left: 0 !important;
    right: 0 !important;
    width: 100% !important;
    display: flex !important;
    flex-wrap: wrap !important;
    justify-content: center !important;
    gap: 0.5rem !important;
    margin: 0 !important;
  }
  /* Nur die Haupt-Leiste (direktes Kind von .mc_a_row/.mc_a) braucht Abstand zum
     Header-Strich; die inneren Sub-Leisten nicht. */
  .lazy-nl-modal .mc_a_row > ul.nav-tabs,
  .lazy-nl-modal .mc_a > ul.nav-tabs,
  .m-as-modal .mc_a_row > ul.nav-tabs,
  .m-as-modal .mc_a > ul.nav-tabs {
    margin-top: 0.5rem !important;
  }

  .lazy-nl-modal ul.nav-tabs::-webkit-scrollbar,
  .m-as-modal ul.nav-tabs::-webkit-scrollbar,
  [id^="setNewsletter"] ul.nav-tabs::-webkit-scrollbar {
    display: none;
  }

  /* Echte Tabs (nicht die Upload-nav-item) nicht schrumpfen lassen. */
  .lazy-nl-modal ul.nav-tabs > li:not(.position-absolute),
  .m-as-modal ul.nav-tabs > li:not(.position-absolute),
  [id^="setNewsletter"] ul.nav-tabs > li:not(.position-absolute) {
    flex: 0 0 auto !important;
  }

  .lazy-nl-modal ul.nav-tabs > li > .nav-link,
  .m-as-modal ul.nav-tabs > li > .nav-link,
  [id^="setNewsletter"] ul.nav-tabs > li > .nav-link {
    white-space: nowrap !important;
  }

  /* Tab-Content: kein festes padding-left */
  .mc_a .tab-content,
  .mc_a_row .tab-content {
    padding-left: 0 !important;
    padding-right: 0 !important;
  }

  /* Row im Tab-Content: kein festes padding-left */
  .mc_a .tab-pane .row,
  .mc_a_row .tab-pane .row,
  .mc_a .tab-pane-content .row,
  .mc_a_row .tab-pane-content .row {
    padding-left: 0 !important;
    padding-right: 0 !important;
  }

  /* TEXT-Textarea: volle Breite statt 91rem */
  .mc_a .textarea,
  .mc_a_row .textarea,
  .mc_a textarea.textarea,
  .mc_a_row textarea.textarea {
    width: 100% !important;
    max-width: 100% !important;
    height: 20rem !important;
    box-sizing: border-box !important;
    margin-left: 0 !important;
  }

  /* TinyMCE Editor: volle Breite + Parent-Container */
  .mc_a .d-flex.justify-content-center:has(.tox-tinymce),
  .mc_a_row .d-flex.justify-content-center:has(.tox-tinymce) {
    width: 100% !important;
  }

  .mc_a .tox-tinymce,
  .mc_a_row .tox-tinymce {
    width: 100% !important;
    max-width: 100% !important;
    box-shadow: rgba(0, 0, 0, 0.4) 0px 2px 4px, rgba(0, 0, 0, 0.3) 0px 7px 13px -3px, rgba(0, 0, 0, 0.2) 0px -3px 0px inset !important;
  }

  /* Link/Bild-Container: volle Breite */
  .mc_a .link-container,
  .mc_a_row .link-container,
  .mc_a .image-container,
  .mc_a_row .image-container {
    max-width: 100% !important;
    margin-left: 0 !important;
  }

  /* Negative margins entfernen */
  .mc_a .d-flex.justify-content-center textarea,
  .mc_a_row .d-flex.justify-content-center textarea {
    margin-left: 0 !important;
  }

  /* Parameterliste + Dynamische Inhalte: 2 pro Reihe statt 4 */
  .mc_a .copy-wrapper,
  .mc_a_row .copy-wrapper {
    width: calc(50% - 0.25rem) !important;
  }

  /* Öffentlich-Toggle auf Mobile: rechts, 40% kleiner, scrollt mit */
  .mc_a .checkbox-wrapper-8.position-absolute,
  .mc_a_row .checkbox-wrapper-8.position-absolute {
    position: relative !important;
    top: auto !important;
    left: auto !important;
    right: auto !important;
    display: flex !important;
    align-items: center !important;
    justify-content: flex-end !important;
    gap: 0.3rem !important;
    margin-bottom: 0.5rem;
    transform: scale(0.6);
    transform-origin: right center;
  }

  /* Details-Wrapper Margins */
  .mc_a .details-wrapper .col,
  .mc_a_row .details-wrapper .col,
  .mc_a .details-wrapper- .col,
  .mc_a_row .details-wrapper- .col {
    margin-left: 0 !important;
  }

  /* WM Tab Namen kleiner */
  .mc_a .editTabName,
  .mc_a_row .editTabName {
    font-size: 0.85rem !important;
  }

  /* DYNAMIC: Gap zwischen Alle-Zeile und Bedingungen angleichen (0.5rem statt 0.75rem) */
  .mc_a .tab-pane > .row,
  .mc_a_row .tab-pane > .row {
    margin-bottom: 0.5rem !important;
  }

  /* Tab-Pane: TinyMCE-Abstand zu Tabs auf 0.5rem (mt-1 + JS margin entfernen) */
  .mc_a .tab-pane > .d-flex.mt-1,
  .mc_a_row .tab-pane > .d-flex.mt-1 {
    margin-top: 0 !important;
  }

  .mc_a .tab-pane .tox-tinymce,
  .mc_a_row .tab-pane .tox-tinymce {
    margin-top: 0 !important;
  }

  /* DYNAMIC: Von/Bis Labels vor Wochentag-Selects */
  [class*="day-col-1"]::before,
  [class*="day-col-2"]::before {
    display: block;
    font-size: 0.75rem;
    color: rgba(255, 255, 255, 0.6);
    margin-bottom: 0.25rem;
    text-align: center;
  }

  [class*="day-col-1"]::before {
    content: "Von";
  }

  [class*="day-col-2"]::before {
    content: "Bis";
  }

  /* =============================================================================
     DYNAMIC: Bedingungs-Zeilen - Minus-Button neben Select statt ueberlappend
     ============================================================================= */
  .mc_a .container-fluid.position-relative:has(.removeButton),
  .mc_a_row .container-fluid.position-relative:has(.removeButton) {
    display: flex !important;
    align-items: flex-start !important;
    gap: 0.5rem !important;
    padding-right: 0 !important;
    margin-top: 0.5rem !important;
    margin-bottom: 0 !important;
  }

  .mc_a .container-fluid.position-relative:has(.removeButton) > .row,
  .mc_a_row .container-fluid.position-relative:has(.removeButton) > .row {
    width: 100% !important;
    flex: 1 !important;
    min-width: 0 !important;
    margin-bottom: 0 !important;
  }

  .mc_a .container-fluid.position-relative:has(.removeButton) > .position-absolute,
  .mc_a_row .container-fluid.position-relative:has(.removeButton) > .position-absolute {
    position: relative !important;
    right: auto !important;
    top: auto !important;
    flex-shrink: 0 !important;
    margin-top: 0.25rem;
  }
}

/* Desktop: Close-Button versteckt */
.modal-close-mobile {
  display: none;
}

/* ========================================
   GUEST PAGE - ALLGEMEIN (alle Breakpoints)
   ======================================== */

/*
 * Problem 1: .div_light_desktop > * setzt z-index: 1 auf .guest-page-layout.
 * Dadurch liegt der gesamte Gast-Inhalt unter Bootstrap-Backdrop (z-index: 1040/1050).
 * Fix: .guest-page-layout auf z-index: 2000 anheben → über jedem Backdrop.
 */
.guest-page-layout {
    position: relative !important;
    z-index: 2000 !important;
}

/*
 * Problem 2: Breakpoint-Regeln in styles.css setzen transform: translateX(-50%)
 * auf .mc_a bei 992–1399px (ohne !important). Unser Media-Query-Override hat
 * nur left und width, nicht transform. → Modal-Content verschiebt sich ~45vw nach
 * links, Tabs landen off-screen und sind unklickbar.
 * Fix: transform: none !important für alle .guest-modal .mc_a.
 */
.guest-modal .mc_a {
    left: 0 !important;
    width: 100% !important;
    transform: none !important;
}

/* ========================================
   GUEST PAGE - DESKTOP
   ======================================== */

/* ≥ 1200px: Zwei-Spalten Layout — Sidetext 35%, Modal 65% */
@media (min-width: 1200px) {
    .guest-page-layout {
        display: flex;
        align-items: flex-start;
        min-height: 100vh;
    }

    .guest-sidetext-col {
        width: 25%;
        flex-shrink: 0;
        padding: 2rem 1rem;
    }

    .guest-sidetext-col .guest-sidetext {
        position: relative !important;
        top: auto !important;
        left: auto !important;
        right: auto !important;
        max-width: none !important;
    }

    .guest-modal-col {
        width: 75%;
        position: relative;
    }

    .guest-modal-col .guest-modal {
        position: relative !important;
        display: block !important;
    }

    .guest-modal-col .guest-modal .mc_a {
        left: 0 !important;
        width: 100% !important;
    }

    .guest-modal-col .guest-modal .modal-dialog {
        max-width: calc(100% - 2rem);
        width: calc(100% - 2rem);
        margin: 1.75rem 1rem;
    }
}

/* 992px–1199px: Sidetext ausblenden, Modal 100% */
@media (min-width: 992px) and (max-width: 1199px) {
    .guest-sidetext-col {
        display: none;
    }

    .guest-modal-col {
        width: 100% !important;
    }

    .guest-modal {
        position: relative !important;
        display: block !important;
        width: 100%;
    }

    .guest-modal .mc_a {
        left: 0 !important;
        width: 100% !important;
    }

    .guest-modal .modal-dialog {
        max-width: 100%;
        width: 100%;
        margin: 1rem;
    }
}

/* < 992px: Sidetext ausblenden, Modal fullwidth */
@media (max-width: 991px) {
    .guest-sidetext-col {
        display: none;
    }

    .guest-modal {
        position: relative !important;
        display: block !important;
        width: 100%;
    }

    .guest-modal .mc_a {
        left: 0 !important;
        width: 100% !important;
    }

    .guest-modal .modal-dialog {
        max-width: 100%;
        width: 100%;
        margin: 0;
    }
}

/* ========================================
   GUEST PAGE - MOBILE
   ======================================== */

@media (max-width: 768px) {

    /* Fullscreen Modal */
    .guest-modal .modal-dialog {
        margin: 0;
        max-width: 100%;
        width: 100%;
    }

    .guest-modal .modal-content {
        border-radius: 0;
        min-height: 100vh;
        padding: 1rem 1rem 4rem 1rem;
    }

    /* 7 Tabs horizontal scrollbar */
    .guest-modal .nav-tabs {
        flex-wrap: nowrap;
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
        scrollbar-width: none;
    }

    .guest-modal .nav-tabs::-webkit-scrollbar {
        display: none;
    }

    .guest-modal .nav-tabs .nav-link {
        white-space: nowrap;
        font-size: 0.75rem;
        padding: 0.35rem 0.6rem;
    }

    /* Textareas responsive */
    .guest-modal textarea.textarea {
        width: 100% !important;
        min-height: 15rem !important;
        box-sizing: border-box;
    }

    /* Info Icon + Panel */
    .guest-info-toggle {
        top: 0.5rem !important;
        left: 0.5rem !important;
    }

    .guest-info-panel {
        top: 3.5rem !important;
        left: 0.5rem !important;
        max-width: calc(100vw - 1rem) !important;
    }

    /* Titel-Abstand: .mc_a/.mc_a_row erzwingt in diesem Breakpoint
       padding-top:3rem via !important (generische Modal-Kopf-Polsterung fuer
       ALLE Modals) — fuer den Gastzugang/Report zu groß gegen den Titel.
       Auf 1rem reduziert, border-span oben/unten ebenfalls 1rem, damit alle
       drei Abstaende (oben->Titel, Titel->Trenner, Trenner->Tabs) gleich
       UND tatsaechlich 1rem sind (User-Korrektur 14.07.: erstes Angleichen
       an die 3rem war zu groß). */
    .guest-modal .modal-content {
        padding-top: 1rem !important;
    }
    .guest-modal .border-span {
        margin-top: 1rem !important;
        margin-bottom: 1rem !important;
    }
}








/* =============================================================================
   4.1 LOGIN MOBILE (m-login-*) — eingefuehrt 2026-05-20
   Strikt getrennt vom Desktop-Login. Eigenes Markup im mobile_content-Block,
   eigene Klassen. Doku: [[UI Mobile#🟡 Login-Seite]]
   ============================================================================= */
@media (max-width: 991px) {

  /* Vollbild-Container, vertikal zentriert, ohne top:Xrem-Hacks */
  .m-login-screen {
    min-height: 100dvh;
    min-height: 100vh; /* Fallback fuer alte iOS */
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: 2rem 1.5rem;
    box-sizing: border-box;
    position: relative;
    z-index: 2;
  }

  /* Logo-Block */
  .m-login-logo {
    width: 100%;
    max-width: 22rem;
    margin-bottom: 2.5rem;
    display: flex;
    justify-content: center;
  }
  .m-login-logo img {
    width: 60%;
    max-width: 12rem;
    height: auto;
    display: block;
  }

  /* Form-Container */
  .m-login-form {
    width: 100%;
    max-width: 22rem;
    display: flex;
    flex-direction: column;
    gap: 0.85rem;
  }

  /* Remember-Me-Zeile */
  .m-remember {
    display: flex;
    align-items: center;
    gap: 0.65rem;
    margin-bottom: 0.5rem;
    cursor: pointer;
    user-select: none;
  }
  .m-remember-text {
    color: rgba(255, 255, 255, 0.75);
    font-size: 0.9rem;
  }

  /* Animierte Checkbox (Reuse Pattern aus Desktop, mobil-tauglich) */
  .m-checkbox {
    position: relative;
    width: 26px;
    height: 26px;
    display: inline-flex;
    flex-shrink: 0;
  }
  .m-checkbox input {
    position: absolute;
    opacity: 0;
    inset: 0;
    width: 100%;
    height: 100%;
    margin: 0;
    cursor: pointer;
    z-index: 2;
  }
  .m-checkbox svg {
    width: 100%;
    height: 100%;
    border: 2px solid rgba(255, 255, 255, 0.35);
    border-radius: 6px;
    padding: 3px;
    background: rgba(255, 255, 255, 0.04);
    box-sizing: border-box;
    transition: all 0.18s ease;
  }
  .m-checkbox svg path {
    fill: none;
    stroke: #fff;
    stroke-width: 6;
    stroke-linecap: round;
    stroke-linejoin: round;
    stroke-dasharray: 100;
    stroke-dashoffset: 100;
    transition: stroke-dashoffset 0.25s ease;
  }
  .m-checkbox input:checked + svg {
    border-color: var(--darkRose);
    background: var(--darkRose);
  }
  .m-checkbox input:checked + svg path {
    stroke-dashoffset: 0;
  }

  /* Inputs: input-basic-Look (analog Dashboard-Header-Selector)
     var(--darkblue) Background, transparent Border, box-shadow inset+drop
     !important noetig, weil globales .input-basic in styles.css mit !important arbeitet */
  .m-input {
    width: 100% !important;
    height: 48px !important;
    padding: 0 1rem !important;
    font-size: 16px !important;
    color: var(--white) !important;
    background-color: var(--darkblue) !important;
    border: 1px solid transparent !important;
    border-radius: var(--border) !important;
    box-shadow: rgba(0, 0, 0, 0.4) 0px 2px 4px,
                rgba(0, 0, 0, 0.3) 0px 7px 13px -3px,
                rgba(0, 0, 0, 0.2) 0px -3px 0px inset !important;
    box-sizing: border-box;
    -webkit-appearance: none;
    appearance: none;
    transition: border-color 0.15s ease;
  }
  .m-input:focus {
    outline: none;
    border-color: var(--darkRose) !important;
  }
  .m-input::placeholder {
    color: var(--white);
    opacity: 1;
  }

  /* Buttons (Primary, Secondary, Link) — 48px Hoehe, voll-breit, untereinander, kein Border */
  .m-btn {
    width: 100%;
    height: 48px;
    padding: 0 1rem;
    font-size: 1rem;
    font-weight: 500;
    color: var(--white);
    border-radius: var(--border);
    border: none;
    cursor: pointer;
    transition: background 0.15s ease, transform 0.05s ease;
    -webkit-tap-highlight-color: transparent;
  }
  .m-btn:active { transform: scale(0.98); }

  .m-btn-primary {
    background: var(--darkRose);
  }
  .m-btn-primary:hover { background: var(--lightRose); }

  .m-btn-secondary {
    background: color-mix(in srgb, var(--darkblue) 75%, transparent);
    color: var(--white);
  }
  .m-btn-secondary:hover {
    background: var(--darkblue);
  }

  .m-btn-link {
    width: 100%;
    margin-top: 0.35rem;
    padding: 0.5rem;
    background: none;
    border: none;
    color: var(--white);
    font-size: 0.9rem;
    text-align: center;
    cursor: pointer;
    text-decoration: none;
    -webkit-tap-highlight-color: transparent;
  }
  .m-btn-link:hover { color: var(--darkRose); }

  /* Loading-Overlay Mobile (kleiner als Desktop) */
  .m-login-overlay {
    display: none;
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.92);
    z-index: 99999;
    justify-content: center;
    align-items: center;
    flex-direction: column;
  }
  .m-login-overlay.is-active { display: flex; }
  .m-login-overlay-inner {
    text-align: center;
    color: #fff;
  }
  .m-login-overlay img {
    width: 120px;
    height: auto;
    animation: bounce 1.875s ease-in-out infinite;
    margin-bottom: 24px;
  }
  .m-login-overlay h3 {
    margin: 0 0 16px;
    font-size: 1.1rem;
    font-weight: 400;
    opacity: 0.9;
  }
  .m-login-overlay-progress {
    width: 160px;
    height: 4px;
    background: rgba(255, 255, 255, 0.15);
    border-radius: 2px;
    overflow: hidden;
    margin: 0.75rem auto 0;
  }
  .m-login-overlay-progress > div {
    width: 30%;
    height: 100%;
    background: linear-gradient(90deg, transparent, var(--darkRose), transparent);
    animation: loading 2.5s ease-in-out infinite;
    border-radius: 2px;
  }
}


/* =============================================================================
   4.2 DASHBOARD MOBILE (m-dash-*) — eingefuehrt 2026-05-20
   Eigenes Mobile-Body-Markup statt geteilter dash-*-Klassen.
   Doku: [[UI Mobile#🟡 Dashboard]]
   ============================================================================= */
@media (max-width: 991px) {

  .m-dash {
    padding: 0.75rem;
    padding-bottom: 6rem; /* Platz fuer Bottom-Nav */
  }

  /* Sektion — gleicher Abstand zwischen Sections wie zwischen Cards in einem Grid (0.6rem) */
  .m-dash-section {
    margin-bottom: 0.6rem;
  }
  .m-dash-section:last-child {
    margin-bottom: 0;
  }

  .m-dash-section-title {
    /* !important noetig — globales h2 in styles.css setzt margin-bottom: 0 !important
       Margins kompakt damit zwischen Sections gleicher Abstand wie zwischen Cards (0.6rem) */
    margin-top: 0 !important;
    margin-right: 0 !important;
    margin-bottom: 0.6rem !important;
    margin-left: 0.15rem !important;
    font-size: 0.8rem !important;
    font-weight: 600;
    color: var(--white);
    text-transform: uppercase;
    letter-spacing: 0.7px;
    display: flex;
    align-items: center;
    gap: 0.5rem;
  }
  .m-dash-section-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 1.4rem;
    height: 1.4rem;
    padding: 0 0.5rem;
    border-radius: 1rem;
    background: var(--darkRose);
    color: var(--white);
    font-size: 0.7rem;
    font-weight: 700;
    text-transform: none;
    letter-spacing: 0;
  }

  /* KPI Grid */
  .m-dash-kpi-grid {
    display: grid;
    gap: 0.6rem;
  }
  .m-dash-kpi-grid-2 {
    grid-template-columns: 1fr 1fr;
  }

  /* KPI Card — analog Desktop (.dash-kpi-card):
     Label oben + Wert mitte, alles zentriert
     Markup ist <icon, value, label> → column-reverse zeigt Label zuerst (oben), Value danach
     CI-konform: var(--darkblue) 75% transparent, KEIN Border, KEIN Shadow */
  .m-dash-kpi-card {
    background: color-mix(in srgb, var(--darkblue) 75%, transparent);
    border: none;
    border-radius: var(--border);
    padding: 0.75rem 0.75rem;
    box-shadow: none;
    display: flex;
    flex-direction: column-reverse;   /* Label oben, Value mitte/unten */
    align-items: center;               /* horizontal zentriert */
    justify-content: center;           /* vertikal zentriert */
    text-align: center;
    min-height: 4.2rem;
    position: relative;
    overflow: hidden;
    transition: background-color 0.2s ease;
  }
  .m-dash-kpi-card:hover {
    background: var(--darkblue);
  }
  /* compact-Klasse bleibt aus Markup-Gruenden, ist aber jetzt identisch zur normalen Card */
  .m-dash-kpi-card-compact {
    min-height: 4.2rem;
    padding: 0.75rem 0.75rem;
  }
  .m-dash-kpi-card-wide {
    grid-column: span 2;
  }

  /* KPI-Icons komplett ausgeblendet — User-Feedback 2026-05-20 */
  .m-dash-kpi-icon {
    display: none !important;
  }

  .m-dash-kpi-value {
    font-size: 1.25rem;
    font-weight: 700;
    color: var(--white);
    line-height: 1;
    display: flex;
    align-items: baseline;
    justify-content: center;
    gap: 0.2rem;
    margin-top: 0.4rem; /* Abstand zum Label oben (column-reverse: Label "vor" Value) */
  }
  .m-dash-kpi-unit {
    font-size: 0.75em;
    font-weight: 500;
    color: rgba(255, 255, 255, 0.6);
    margin-left: 0.1rem;
  }

  .m-dash-kpi-label {
    font-size: 0.78rem;
    color: var(--white); /* analog Desktop: Label weiss, nicht hellgrau */
    margin: 0;
  }

  /* Top 3 */
  .m-dash-top3 {
    background: color-mix(in srgb, var(--darkblue) 88%, transparent);
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: var(--border);
    overflow: hidden;
  }
  .m-dash-top3-row {
    display: flex;
    align-items: center;
    gap: 0.85rem;
    padding: 0.85rem 1rem;
    border-bottom: 1px solid rgba(255, 255, 255, 0.05);
  }
  .m-dash-top3-row:last-child {
    border-bottom: none;
  }
  .m-dash-top3-rank {
    font-size: 1.5rem;
    line-height: 1;
    flex-shrink: 0;
  }
  .m-dash-top3-info {
    flex: 1;
    min-width: 0;
  }
  .m-dash-top3-name {
    color: var(--white);
    font-weight: 500;
    font-size: 0.95rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .m-dash-top3-meta {
    margin-top: 0.25rem;
    display: flex;
    gap: 1rem;
    color: rgba(255, 255, 255, 0.55);
    font-size: 0.8rem;
  }
  .m-dash-top3-meta i {
    margin-right: 0.3rem;
    color: rgba(255, 255, 255, 0.4);
  }

  /* Generische Listen (Freigaben / Anfragen) */
  .m-dash-list {
    background: color-mix(in srgb, var(--darkblue) 88%, transparent);
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: var(--border);
    overflow: hidden;
  }
  .m-dash-list-item {
    padding: 0.85rem 1rem;
    border-bottom: 1px solid rgba(255, 255, 255, 0.05);
  }
  .m-dash-list-item:last-child {
    border-bottom: none;
  }
  .m-dash-list-item-title {
    color: var(--white);
    font-weight: 500;
    font-size: 0.95rem;
  }
  .m-dash-list-item-meta {
    margin-top: 0.25rem;
    color: rgba(255, 255, 255, 0.55);
    font-size: 0.82rem;
  }

  /* Empty-State (CI-konform: weiss, NICHT grau — [[UI Listen-Patterns]]) */
  .m-dash-empty {
    padding: 1.25rem 1rem;
    text-align: center;
    color: var(--white);
    font-size: 0.85rem;
    background: color-mix(in srgb, var(--darkblue) 88%, transparent);
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: var(--border);
  }

  /* Chart-Karte — CI-konform analog KPI-Cards (75% transparent, KEIN Border) */
  .m-dash-chart-card {
    background: color-mix(in srgb, var(--darkblue) 75%, transparent);
    border: none;
    border-radius: var(--border);
    padding: 0.85rem 0.75rem 1rem;
  }
  .m-dash-chart-canvas-wrap {
    position: relative;
    width: 100%;
    height: 260px;
  }
  .m-dash-chart-canvas-wrap canvas {
    width: 100% !important;
    height: 100% !important;
  }

  /* Top 3 Card — CI-konform: 75% transparent, KEIN Border, KEIN Shadow (wie KPI-Cards) */
  .m-dash-top3-card {
    background: color-mix(in srgb, var(--darkblue) 75%, transparent);
    border: none;
    border-radius: var(--border);
    overflow: hidden;
  }
  .m-dash-top3-toolbar {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    padding: 0.75rem;
  }
  /* Period-Dropdown im input-basic-Look (analog Header-Selector / dash-mobile-selector) */
  .m-dash-top3-period {
    width: 100%;
    height: 40px;
    padding: 0.5rem 0.75rem;
    padding-right: 2.25rem;
    background-color: var(--darkblue);
    border: 1px solid transparent;
    border-radius: var(--border);
    color: var(--white);
    font-size: 0.9rem;
    box-shadow: rgba(0, 0, 0, 0.4) 0px 2px 4px,
                rgba(0, 0, 0, 0.3) 0px 7px 13px -3px,
                rgba(0, 0, 0, 0.2) 0px -3px 0px inset;
    appearance: none;
    -webkit-appearance: none;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23ffffff' d='M6 8L1 3h10z'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 0.85rem center;
  }
  .m-dash-top3-period:focus {
    outline: none;
    border-color: var(--darkRose);
  }
  .m-dash-top3-period option {
    background: var(--darkblue);
    color: var(--white);
  }
  .m-dash-top3-tabs {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 0.4rem;
  }
  .m-dash-top3-tab {
    height: 40px;
    padding: 0 0.75rem;
    background: transparent;
    border: 1px solid rgba(255, 255, 255, 0.18);
    border-radius: var(--border);
    color: rgba(255, 255, 255, 0.7);
    font-size: 0.85rem;
    cursor: pointer;
    transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease;
    -webkit-tap-highlight-color: transparent;
  }
  .m-dash-top3-tab:active { transform: scale(0.98); }
  .m-dash-top3-tab.active {
    background: var(--darkRose);
    border-color: var(--darkRose);
    color: var(--white);
    font-weight: 500;
  }

  .m-dash-top3-list {
    /* Container fuer die Items */
  }
  .m-dash-top3-item {
    padding: 0.85rem 0.85rem;
    border-bottom: 1px solid rgba(255, 255, 255, 0.05);
  }
  .m-dash-top3-item:first-child {
    padding-top: 0.5rem; /* enger an Toolbar dran */
  }
  .m-dash-top3-item:last-child {
    border-bottom: none;
  }
  .m-dash-top3-head {
    display: grid;
    grid-template-columns: auto 1fr auto;
    gap: 0.6rem;
    align-items: center;
    margin-bottom: 0.55rem;
  }
  .m-dash-top3-medal {
    font-size: 1.35rem;
    line-height: 1;
  }
  .m-dash-top3-name {
    color: var(--white);
    font-weight: 500;
    font-size: 0.95rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .m-dash-top3-start {
    color: var(--white);
    font-size: 0.78rem;
    white-space: nowrap;
  }
  .m-dash-top3-stats {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr 1fr;
    gap: 0.4rem;
  }
  .m-dash-top3-stat {
    text-align: center;
    background: rgba(0, 0, 0, 0.2);
    border-radius: var(--border);
    padding: 0.5rem 0.2rem;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
  }
  /* Label oben, Wert unten — analog KPI-Cards */
  .m-dash-top3-stat-lbl {
    display: block;
    order: 1;
    color: var(--white);
    font-size: 0.7rem;
    margin-bottom: 0.25rem;
  }
  .m-dash-top3-stat-val {
    display: block;
    order: 2;
    color: var(--white);
    font-weight: 700;
    font-size: 1rem;
    line-height: 1;
  }

  /* === Widget-Sections (Anfragen + Freigaben) — full-width, voll interaktiv === */
  /* Container im KPI-Card-Look (75% transparent darkblue, kein Border) */
  .m-dash-widget-section .m-dash-widget-body {
    background: color-mix(in srgb, var(--darkblue) 75%, transparent);
    border: none;
    border-radius: var(--border);
    padding: 0.6rem;
  }
  /* Items: Flex-Column — Status-Icon, Inputs, Action-Row (alles zentriert) */
  .m-dash-widget-section .accordion-item {
    background: rgba(0, 0, 0, 0.18) !important;
    border: 1px solid rgba(255, 255, 255, 0.04) !important;
    border-radius: var(--border) !important;
    padding: 0.5rem !important;
    margin-bottom: 0.4rem !important;
  }
  .m-dash-widget-section .accordion-item:last-child {
    margin-bottom: 0 !important;
  }
  /* container-fluid → Flex-Column + Wrap, KEIN absolutes Layout im Mobile */
  .m-dash-widget-section .accordion-item .container-fluid {
    display: flex !important;
    flex-flow: row wrap !important;
    align-items: center !important;
    justify-content: center !important;
    gap: 0.3rem !important;
    padding: 0 !important;
    position: static !important;
  }
  /* Status-Icon (Freigaben) als eigene volle Zeile oben, zentriert */
  .m-dash-widget-section .accordion-item .container-fluid > .position-absolute:not(.btn_add):not(.btn_delete) {
    position: static !important;
    transform: none !important;
    top: auto !important;
    left: auto !important;
    right: auto !important;
    flex: 0 0 100% !important;
    width: 100% !important;
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    margin: 0.5rem 0 0 0 !important;
    padding: 0 !important;
    font-size: 1.1rem;
    order: 0;
  }
  .m-dash-widget-section .accordion-item .container-fluid > .position-absolute:not(.btn_add):not(.btn_delete) > i {
    margin: 0 auto !important;
    display: inline-block;
  }
  /* Inputs: alle in EINER Reihe (Kampagne | Werbefläche | Alias / Volume / Payout) */
  .m-dash-widget-section .accordion-item .col-lg-1,
  .m-dash-widget-section .accordion-item .col-lg-2,
  .m-dash-widget-section .accordion-item .col-lg-3,
  .m-dash-widget-section .accordion-item .col-lg-4,
  .m-dash-widget-section .accordion-item .col-lg-5,
  .m-dash-widget-section .accordion-item .col-lg-6 {
    flex: 1 1 0 !important;
    display: block !important;
    width: auto !important;
    vertical-align: initial !important;
    margin: 0 !important;
    order: 1;
    min-width: 0;
  }
  .m-dash-widget-section .accordion-item .px-1 {
    padding-left: 0 !important;
    padding-right: 0 !important;
  }
  /* Inputs Look */
  .m-dash-widget-section .accordion-item .form-control {
    background: rgba(0, 0, 0, 0.15) !important;
    border: 1px solid transparent !important;
    color: var(--white) !important;
    font-size: 0.85rem !important;
    height: 2.1rem !important;
    padding: 0.25rem 0.5rem !important;
    box-shadow: none !important;
    text-align: center !important;
  }
  .m-dash-widget-section .accordion-item .form-control[readonly][disabled] {
    opacity: 1;
    cursor: default;
  }
  /* Action-Buttons: aus absoluter Position raus, als zentrierte Button-Row in EIGENER Zeile (order:2) */
  .m-dash-widget-section .accordion-item .btn_add,
  .m-dash-widget-section .accordion-item .btn_delete,
  .m-dash-widget-section .accordion-item .container-fluid > button {
    position: static !important;
    transform: none !important;
    right: auto !important;
    top: auto !important;
    width: 2.2rem !important;
    height: 2.2rem !important;
    min-width: 2.2rem !important;
    flex: 0 0 auto !important;
    margin: 0 !important;
    order: 2;
  }
  /* "Spacer" vor dem ersten Button: full-width Zeilenumbruch erzwingen,
     damit alle Buttons in EIGENER Reihe stehen */
  .m-dash-widget-section .accordion-item .container-fluid > button:first-of-type {
    margin-left: 0 !important;
  }
  .m-dash-widget-section .accordion-item .container-fluid::before {
    content: '';
    flex: 0 0 100%;
    height: 0;
    order: 1;
  }
  /* Empty-State */
  .m-dash-widget-section .dash-adv-empty {
    padding: 1rem 0.5rem;
    text-align: center;
    color: var(--white);
    font-size: 0.85rem;
  }
}

/* =============================================================================
   4.3 SUBNAV — Mobile Top-Nav für Unterseiten (m-subnav-*)
   Partner-Variante: Akzent var(--darkRose). Aufbau analog Mail (Doku in
   [[UI Mobile Dashboard#🔴 Subnav-Pattern m-subnav]]).
   ============================================================================= */
@media (max-width: 991px) {
  body.has-subnav .mobile-icons-bar { display: none !important; }
  body.has-subnav .mobile-content-wrapper { padding-top: 0 !important; }

  .m-subnav {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    padding: 0.75rem;
    background-color: var(--darkblue);
    z-index: 9998;
    border-bottom: 1px solid rgba(255, 255, 255, 0.08);
  }
  .m-subnav-row {
    display: flex;
    gap: 0.5rem;
    align-items: center;
  }
  .m-subnav-row + .m-subnav-row {
    margin-top: 0.5rem;
  }
  .m-subnav-title {
    flex: 1;
    min-width: 0;            /* darf schrumpfen — sonst drückt langer Text die Icons raus */
    white-space: nowrap;     /* NIE umbrechen: Subnav-Höhe bleibt geräteunabhängig konstant
                                (Listen-margin-top rechnet mit fester Höhe, Gotcha #13) */
    overflow: hidden;
    text-overflow: ellipsis; /* langer Zusatz (AdSpace-/Kundenname) wird mit … gekappt */
    font-size: 1rem;
    font-weight: 600;
    color: #fff;
    text-transform: uppercase;
    letter-spacing: 0.5px;
  }
  /* Aktuell ausgewählter Kunde/Werbefläche neben dem Titel (klein, grau, mit
     Mittelpunkt-Trenner) — wie bei jd-mail. */
  .m-subnav-subtitle {
    display: inline;
    margin-left: 0.5rem;
    font-size: 0.7rem;
    font-weight: 400;
    text-transform: none;
    letter-spacing: 0;
    color: rgba(255, 255, 255, 0.6);
    white-space: nowrap;
  }
  /* Header-Icon-Buttons (Anfragen/Glocke/Profil): Anfragen+Glocke sind <div>,
     Profil ist <button> → bekommt durch die generische `@media(hover:none)
     button{padding:1rem 2rem}`-Regel zu viel Breite (64px statt 40px). Hier
     fix 40×40 ohne Padding erzwingen, damit alle 3 gleich breit sind. */
  .m-subnav-row .btn_add {
    width: 40px !important;
    height: 40px !important;
    min-width: 40px !important;
    flex: 0 0 40px !important;
    padding: 0 !important;
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
  }
  .m-subnav-selector,
  .m-subnav-search {
    flex: 1;
    padding: 0.5rem 0.75rem;
    background-color: var(--darkblue);
    border: 1px solid transparent;
    border-radius: var(--border);
    color: var(--white);
    font-size: 0.85rem;
    box-shadow: rgba(0, 0, 0, 0.4) 0px 2px 4px,
                rgba(0, 0, 0, 0.3) 0px 7px 13px -3px,
                rgba(0, 0, 0, 0.2) 0px -3px 0px inset;
  }
  .m-subnav-selector {
    appearance: none;
    -webkit-appearance: none;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23ffffff' d='M6 8L1 3h10z'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 0.75rem center;
    padding-right: 2rem;
  }
  .m-subnav-selector:focus,
  .m-subnav-search:focus {
    outline: none;
    border-color: var(--darkRose);
  }
  .m-subnav-badge {
    position: absolute;
    top: -5px;
    right: -5px;
    background-color: #f44336;
    color: #fff;
    font-size: 0.65rem;
    font-weight: 600;
    min-width: 16px;
    height: 16px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0 4px;
  }
  .m-subnav-filter-toggle {
    position: relative;
    width: 40px;
    height: 40px;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
  }
  .m-subnav-filter-panel {
    display: none;
    margin-top: 0.6rem;
    background: color-mix(in srgb, var(--darkblue) 92%, transparent);
    border: none;
    border-radius: var(--border);
    padding: 0.75rem;
  }
  .m-subnav-filter-panel.is-open {
    display: block;
  }
  .m-subnav-filter-section {
    margin-bottom: 0.85rem;
  }
  .m-subnav-filter-section:last-of-type {
    margin-bottom: 0;
  }
  .m-subnav-filter-label {
    display: block;
    color: rgba(255, 255, 255, 0.7);
    font-size: 0.72rem;
    text-transform: uppercase;
    letter-spacing: 0.4px;
    margin-bottom: 0.4rem;
  }
  .m-subnav-filter-row {
    display: flex;
    flex-wrap: wrap;
    gap: 0.6rem 1rem;
    align-items: center;
  }
  .m-subnav-filter-row .checkbox-wrapper-23 {
    flex-shrink: 0;
  }
  .m-subnav-filter-item {
    display: flex;
    align-items: center;
    gap: 0.5rem;
  }
  .m-subnav-filter-item span {
    color: #fff;
    font-size: 0.9rem;
    cursor: pointer;
  }
  /* Status-Icon-Farben in Filter-Items (Pflicht: !important damit globale Vererbung weicht).
     Plattform-unabhängig (Türkis für closed/approved auch bei Partner) — siehe Desktop. */
  .m-status-icon-turquoise { color: #00cbb5 !important; }
  .m-status-icon-orange { color: #ff9800 !important; }
  .m-status-icon-yellow { color: #f5c419 !important; }
  .m-status-icon-favorite { color: #d4b40d !important; }
  .m-subnav-filter-footer {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-top: 0.85rem;
    padding-top: 0.6rem;
    border-top: 1px solid rgba(255, 255, 255, 0.08);
  }
  .m-subnav-filter-count {
    color: #fff;
    font-size: 0.85rem;
  }
  .m-subnav-filter-reset {
    background: none;
    border: none; /* rahmenlos — User-Wunsch 03.07.2026 */
    color: #fff;
    border-radius: var(--border);
    padding: 0.35rem 0.75rem;
    font-size: 0.8rem;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
  }
  .m-subnav-filter-reset:active {
    background: rgba(255, 255, 255, 0.08);
  }
  .m-subnav-search-wrap {
    position: relative;
    flex: 1;
  }
  .m-subnav-search {
    width: 100%;
  }
  .m-subnav-search-reset {
    position: absolute;
    right: 0.5rem;
    top: 50%;
    transform: translateY(-50%);
    color: rgba(255, 255, 255, 0.55);
    cursor: pointer;
    display: none;
  }
  .m-subnav-search-wrap.has-value .m-subnav-search-reset {
    display: block;
  }
  .m-subnav-content {
    padding-top: 4.5rem;
    padding-bottom: 5rem;
    min-height: 100vh;
  }
  .m-subnav-content.has-row2 {
    padding-top: 7rem;
  }
}


/* =============================================================================
   4.4 USER-SETTINGS MODAL (Mobile-Override)
   Standard-Mobile-Modals sind Fullscreen (mc_a_row), aber #userSettings
   soll wie ein klassisches Modal aussehen (1rem Rand drumrum, abgerundete Ecken).
   Pattern dokumentiert in [[UI Mobile Modals]].
   ============================================================================= */
@media (max-width: 991px) {
  /* Bottom-Nav + Top-Header bei offenem Modal komplett verstecken (sonst opakes Background
     ueberlagert den Backdrop optisch — z:9998/9999 ist auch ohne Override hoeher als manche Modals). */
  body.modal-open .nav-mobile-bottom,
  body.modal-open .dash-mobile-header,
  body.modal-open .m-subnav {
    display: none !important;
  }
  #userSettings.modal,
  #getRequest.modal,
  #getMessage.modal,
  #getTestaddresses.modal,
  #setNewsletterPage.modal,
  #setDynamicPage.modal,
  #setClientPage.modal,
  #setAdSpacePage.modal,
  #setBlacklistPage.modal,
  /* Nav-Drawer-Set-Modals (uebers Hauptmenue-Untermenue "Erstellen" getriggert).
     Sie tragen .position-absolute.dont-close-nav -> z-index:2000 (Desktop-Nav-
     Kontext) und fielen mobil unter das Backdrop (10005) = nur dunkler Overlay. */
  #setNewsletter.modal,
  #setClient.modal,
  #setAdSpace.modal,
  #setBlacklist.modal,
  #setBlacklistEntry.modal,
  [id^="getBlacklistData"].modal,
  [id^="setEntry"].modal,
  [id^="setPixel"].modal,
  #setDynamicNav.modal,
  #getFreigabecenter.modal,
  #getReport.modal,
  #updateSystems.modal,
  .m-as-modal.modal {
    padding: 0.875rem !important; /* 14px — exakt wie jd-mail (Dialog left/top 14) */
    z-index: 10010 !important;
  }
  /* Set-/Erstellen-Modals (Kampagne/Dynamik/Kunde/Werbeflaeche/Blacklist) sind
     statisch im DOM (kein lazy-nl-modal) und bekamen von Bootstrap nur z-index:1055
     bzw. 2000 (dont-close-nav) -> fielen unter das Backdrop (10005) und waren mobil
     unsichtbar. Hier ueber den Backdrop gehoben (10010) + der Dialog auf position:
     relative, damit er im 10010-Kontext des .modal bleibt (sonst eigener Stacking-
     Kontext via position:fixed/absolute). Beide Modal-Familien: ...Page (Subnav-Plus)
     UND die Nav-Drawer-Varianten ohne "Page". */
  #setNewsletterPage .modal-dialog,
  #setDynamicPage .modal-dialog,
  #setClientPage .modal-dialog,
  #setAdSpacePage .modal-dialog,
  #setBlacklistPage .modal-dialog,
  #setNewsletter .modal-dialog,
  #setClient .modal-dialog,
  #setAdSpace .modal-dialog,
  #setBlacklist .modal-dialog,
  #setBlacklistEntry .modal-dialog,
  [id^="getBlacklistData"] .modal-dialog,
  [id^="setEntry"] .modal-dialog,
  [id^="setPixel"] .modal-dialog,
  #setDynamicNav .modal-dialog,
  #getFreigabecenter .modal-dialog,
  #getReport .modal-dialog,
  #updateSystems .modal-dialog {
    position: relative !important;
    top: auto !important;
    left: auto !important;
    right: auto !important;
    bottom: auto !important;
    transform: none !important;
  }
  /* Werbeflächen-Detail-/Anfragen-Modal (mobil an <body> geklont, Marker m-as-modal):
     .modal-dialog ist position:fixed (Desktop-styles.css) → eigener Stacking-Kontext
     mit z-index:auto, fällt unter das Backdrop (10005). position:relative hält ihn
     im 10010-Kontext des .modal. (Gleiches Pattern wie .lazy-nl-modal .modal-dialog.) */
  .m-as-modal .modal-dialog,
  .lazy-cl-modal .modal-dialog,
  [id^="getClient"] .modal-dialog,
  [id^="previewCreative"] .modal-dialog {
    position: relative !important;
    top: auto !important;
    left: auto !important;
    right: auto !important;
    bottom: auto !important;
    transform: none !important;
  }
  /* Lazy-Newsletter-Modals (Vorschau/Versendungen/Testmail/Öffnen/Publisher) werden
     mobil an <body> reparentet (siehe getNewsletter.tpl). Sie bekommen von Bootstrap
     nur z-index:1055 — das globale Backdrop liegt aber auf 10005 und würde sie
     verdecken. Gegenregel wie bei den Header-Modals: über den Backdrop heben. */
  .lazy-nl-modal.modal,
  .lazy-dy-modal.modal,
  .lazy-cl-modal.modal,
  /* Nach dem Lazy-Replace traegt das ECHTE Dynamic-Modal die lazy-dy-Klasse NICHT
     mehr (outerHTML-Ersatz durch die normale Modal-Definition) — deshalb zusaetzlich
     ueber die ID-Praefixe matchen. */
  [id^="previewDynamicData"].modal,
  [id^="getDynamicData"].modal,
  [id^="getClient"].modal,
  [id^="previewCreative"].modal {
    z-index: 10010 !important;
    padding: 0.875rem !important; /* 14px Rand drumrum — exakt wie Header-Modals/Mail */
  }
  /* ── Lazy-Modals (Vorschau/Öffnen/Testmail/Versendungen) komplett im Mail-Stil ──
     Vorher: Content randlos (volle Viewport-Breite), eckig, Padding 48/20/64px,
     ×-Button fixed + gefüllt 36px. Jetzt 1:1 wie die Header-Modals. */
  .lazy-nl-modal .modal-content,
  .lazy-nl-modal .mc_a_row,
  .lazy-dy-modal .modal-content,
  .lazy-dy-modal .mc_a_row,
  .lazy-cl-modal .modal-content,
  .lazy-cl-modal .mc_a_row,
  [id^="getClient"] .modal-content,
  [id^="getClient"] .mc_a_row,
  [id^="previewCreative"] .modal-content,
  [id^="previewCreative"] .mc_a_row,
  [id^="previewDynamicData"] .modal-content,
  [id^="previewDynamicData"] .mc_a_row,
  [id^="getDynamicData"] .modal-content,
  [id^="getDynamicData"] .mc_a_row,
  #setDynamicPage .modal-content,
  #setDynamicPage .mc_a_row,
  #setClientPage .modal-content,
  #setClientPage .mc_a_row,
  #setAdSpacePage .modal-content,
  #setAdSpacePage .mc_a_row,
  .m-as-modal .modal-content,
  .m-as-modal .mc_a_row,
  #setBlacklist .modal-content,
  #setBlacklist .mc_a,
  #setBlacklistEntry .modal-content,
  #setBlacklistEntry .mc_a,
  [id^="getBlacklistData"] .modal-content,
  [id^="setEntry"] .modal-content,
  [id^="setPixel"] .modal-content,
  #getFreigabecenter .modal-content,
  #getFreigabecenter .mc_a,
  #getReport .modal-content,
  #getReport .mc_a,
  #updateSystems .modal-content,
  #updateSystems .mc_a {
    border-radius: var(--border) !important;
    min-height: 0 !important;
    height: auto !important;
    max-height: calc(100vh - 1.75rem) !important;
    padding: 1.1rem 0.875rem !important;
    overflow-y: auto !important;
  }
  /* Header bekommt rechts Platz für den ×-Button (40px + Rand ≈ 3.5rem) */
  .lazy-nl-modal .modal-header-wrapper,
  .lazy-dy-modal .modal-header-wrapper,
  .lazy-cl-modal .modal-header-wrapper,
  [id^="getClient"] .modal-header-wrapper,
  [id^="previewCreative"] .modal-header-wrapper,
  [id^="previewDynamicData"] .modal-header-wrapper,
  [id^="getDynamicData"] .modal-header-wrapper,
  #setDynamicPage .modal-header-wrapper,
  #setClientPage .modal-header-wrapper,
  #setAdSpacePage .modal-header-wrapper,
  .m-as-modal .modal-header-wrapper,
  #setBlacklist .modal-header-wrapper,
  #setBlacklistEntry .modal-header-wrapper,
  [id^="getBlacklistData"] .modal-header-wrapper,
  [id^="setEntry"] .modal-header-wrapper,
  [id^="setPixel"] .modal-header-wrapper,
  #updateSystems .modal-header-wrapper,
  #updateSystems > .modal-dialog > .modal-content > div[style*="flex-direction: column"] {
    padding-right: 3.5rem !important;
    position: static !important;
  }
  /* m-as-modal: der Header-Wrapper ist flex-column + align-items:center → er
     zentriert relativ zur eigenen Breite. Mit nur padding-right (×-Button) waere
     der Raum asymmetrisch und der Titel saesse 28px links der Modal-Mitte.
     Symmetrisches padding-left gleicht das aus → Titel exakt mittig.
     #updateSystems hat denselben ungeklammerten Header-Div wie das getAdSpaceData-Modal
     (kein .modal-header-wrapper, nur der Inline-Style) → gleiches Muster. */
  .m-as-modal .modal-header-wrapper,
  .lazy-dy-modal .modal-header-wrapper,
  .lazy-cl-modal .modal-header-wrapper,
  [id^="getClient"] .modal-header-wrapper,
  [id^="previewCreative"] .modal-header-wrapper,
  [id^="previewDynamicData"] .modal-header-wrapper,
  [id^="getDynamicData"] .modal-header-wrapper,
  #setDynamicPage .modal-header-wrapper,
  #setClientPage .modal-header-wrapper,
  #setAdSpacePage .modal-header-wrapper,
  #setBlacklist .modal-header-wrapper,
  #setBlacklistEntry .modal-header-wrapper,
  [id^="getBlacklistData"] .modal-header-wrapper,
  [id^="setEntry"] .modal-header-wrapper,
  [id^="setPixel"] .modal-header-wrapper,
  #updateSystems > .modal-dialog > .modal-content > div[style*="flex-direction: column"] {
    padding-left: 3.5rem !important;
  }
  /* ×-Button: aus fixed/gefüllt → absolut im Modal, transparent + box-shadow,
     var(--border), 40px, hover darkRose — identisch zu den Header-Modals. */
  .lazy-nl-modal .modal-close-mobile,
  .lazy-dy-modal .modal-close-mobile,
  .lazy-cl-modal .modal-close-mobile,
  [id^="getClient"] .modal-close-mobile,
  [id^="previewCreative"] .modal-close-mobile,
  [id^="previewDynamicData"] .modal-close-mobile,
  [id^="getDynamicData"] .modal-close-mobile,
  #setDynamicPage .modal-close-mobile,
  #setClientPage .modal-close-mobile,
  #setAdSpacePage .modal-close-mobile,
  .m-as-modal .modal-close-mobile,
  [id^="setNewsletter"] .modal-close-mobile,
  #setBlacklist .modal-close-mobile,
  #setBlacklistEntry .modal-close-mobile,
  [id^="getBlacklistData"] .modal-close-mobile,
  [id^="setEntry"] .modal-close-mobile,
  [id^="setPixel"] .modal-close-mobile,
  #getTestaddresses .modal-close-mobile,
  #getFreigabecenter .modal-close-mobile,
  #getReport .modal-close-mobile,
  #updateSystems .modal-close-mobile {
    position: absolute !important;
    top: 0.5rem !important;
    right: 0.5rem !important;
    width: 40px !important;
    height: 40px !important;
    background-color: transparent !important;
    border: none !important;
    border-radius: var(--border) !important;
    color: var(--white) !important;
    box-shadow: rgba(0, 0, 0, 0.4) 0px 2px 4px,
                rgba(0, 0, 0, 0.3) 0px 7px 13px -3px,
                rgba(0, 0, 0, 0.2) 0px -3px 0px inset !important;
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    z-index: 5 !important;
    font-size: 1rem !important;
    transition: background-color 0.15s ease !important;
  }
  /* getAdSpaceData-Detail-Modal + updateSystems: der X-Button steht im DOM VOR dem
     Header-Div (z-index:10) und wurde bei z-index:5 von diesem ueberdeckt → nicht
     klickbar. Ueber den Header-Wrapper heben. */
  .m-as-modal .modal-close-mobile,
  #updateSystems .modal-close-mobile {
    z-index: 20 !important;
  }
  .lazy-nl-modal .modal-close-mobile:hover,
  .lazy-dy-modal .modal-close-mobile:hover,
  .lazy-cl-modal .modal-close-mobile:hover,
  [id^="getClient"] .modal-close-mobile:hover,
  [id^="previewCreative"] .modal-close-mobile:hover,
  [id^="previewDynamicData"] .modal-close-mobile:hover,
  [id^="getDynamicData"] .modal-close-mobile:hover,
  #setDynamicPage .modal-close-mobile:hover,
  #setClientPage .modal-close-mobile:hover,
  #setAdSpacePage .modal-close-mobile:hover,
  .m-as-modal .modal-close-mobile:hover,
  [id^="setNewsletter"] .modal-close-mobile:hover,
  #setBlacklist .modal-close-mobile:hover,
  #setBlacklistEntry .modal-close-mobile:hover,
  [id^="getBlacklistData"] .modal-close-mobile:hover,
  [id^="setEntry"] .modal-close-mobile:hover,
  [id^="setPixel"] .modal-close-mobile:hover,
  #getTestaddresses .modal-close-mobile:hover,
  #getFreigabecenter .modal-close-mobile:hover,
  #getReport .modal-close-mobile:hover,
  #updateSystems .modal-close-mobile:hover {
    background-color: var(--darkRose) !important;
    color: var(--white) !important;
  }
  /* Blacklist-Modals: Header-Trennstrich gegen flex-Kollaps sichern (Gotcha #130)
     + Formular-Feinschliff fürs Erstellen-Modal */
  #setBlacklist .border-span,
  #setBlacklistEntry .border-span,
  [id^="getBlacklistData"] .border-span,
  [id^="setEntry"] .border-span,
  [id^="setPixel"] .border-span,
  .lazy-dy-modal .border-span,
  #setDynamicPage .border-span,
  #setAdSpacePage .border-span,
  [id^="previewDynamicData"] .border-span,
  [id^="getDynamicData"] .border-span,
  #getFreigabecenter .border-span,
  #getReport .border-span,
  #updateSystems .border-span {
    flex-shrink: 0 !important;
    min-height: 2px !important;
  }
  /* ── Externe Versandsysteme-Modal (#updateSystems, nur Publisher) ──────────
     Editierbarer Tab-Titel (<h3 contenteditable>) analog Blacklist-Detail-Modal
     kompakter, damit mehrere Systeme nebeneinander/umgebrochen Platz finden. */
  #updateSystems ul.nav-tabs .nav-link h3 {
    font-size: 0.95rem !important;
    margin: 0 !important;
  }
  /* Parameter-Felder: Platzhalter-Text (z.B. "##ONLINEVIEW##") bricht auf 350px
     leicht um → zentriert bleibt es lesbar, aber kleinere Schrift vermeidet
     Umbruch bei den längeren Platzhaltern (##UNSUBSCRBIED##, ##ONLINEVIEW##). */
  #updateSystems input.input-basic {
    font-size: 0.85rem !important;
  }
  /* Inline-display:none des Desktop-JS respektieren — generische Row-Regeln koennten
     sonst JS-versteckte Bereiche wieder aufdecken (PLZ-Länder-Row, Typ-Spalte,
     Fehler-Box). Gotcha-#131-Familie. */
  #setBlacklist [style*="display: none"],
  #setBlacklistEntry [style*="display: none"],
  [id^="getBlacklistData"] [style*="display: none"],
  [id^="setEntry"] [style*="display: none"],
  #setDynamicPage [style*="display: none"],
  [id^="getDynamicData"] [style*="display: none"] {
    display: none !important;
  }
  /* Leeren Kunden-Select (User ohne Kunden) mobil ausblenden — tote 10rem-Box.
     :has() darf nicht verschachtelt werden → Zwei-Regel-Muster: erst verstecken,
     bei vorhandenen Optionen wieder zeigen (spätere Regel gewinnt). */
  #setBlacklist .tooltip-container:has(select[name="client_ids[]"]),
  [id^="getBlacklistData"] .tooltip-container:has(select[name="client_ids[]"]) {
    display: none !important;
  }
  #setBlacklist .tooltip-container:has(select[name="client_ids[]"] option),
  [id^="getBlacklistData"] .tooltip-container:has(select[name="client_ids[]"] option) {
    display: block !important;
  }
  #setBlacklist input.half-gar,
  #setBlacklistEntry input.half-gar,
  [id^="getBlacklistData"] input.half-gar,
  [id^="setEntry"] input.half-gar {
    width: 100% !important;
  }
  #setBlacklist select[name="client_ids[]"],
  [id^="getBlacklistData"] select[name="client_ids[]"] {
    height: 10rem !important;
  }
  /* Feld-Breiten vereinheitlichen: Select/Container exakt so breit wie das Name-Feld */
  #setBlacklist .tooltip-container,
  [id^="getBlacklistData"] .tooltip-container {
    width: 100% !important;
    padding: 0 !important;
    margin: 0 !important;
    display: block;
  }
  #setBlacklist select.form-select,
  [id^="getBlacklistData"] select.form-select {
    width: 100% !important;
    max-width: 100% !important;
    margin: 0 !important;
  }
  #setBlacklist .btn_main,
  #setBlacklistEntry .btn_main,
  [id^="getBlacklistData"] .btn_main,
  [id^="setEntry"] .btn_main {
    width: 100% !important;
    margin-top: 1rem !important;
  }

  /* ── Blacklist-Detail-Modal (Einträge/Verlauf/Einstellungen) — Inhalt mobil ── */
  /* Download-Button: sitzt absolut oben rechts und kollidiert mit dem Close-Button → daneben */
  [id^="getBlacklistData"] form:has(> .js-download-overlay) {
    top: 0.5rem !important;
    right: 3.5rem !important;
  }
  /* Tab-Leiste: umbrechen + kompakte Titel; Abstand zur Pane exakt 1rem */
  [id^="getBlacklistData"] ul.nav-tabs {
    flex-wrap: wrap !important;
    margin-bottom: 1rem !important;
  }
  /* Wrapper des (mobil versteckten) Einträge-Spalten-Headers kollabieren + Container-Reste,
     sonst stapeln sich margin-top 1rem + Padding zum sichtbaren Riesen-Abstand */
  [id^="blFolderPaneEntries-"] > div[style*="margin-top"] {
    margin-top: 0 !important;
  }
  [id^="blacklistEntriesContainer-"] .blacklist-entry-row:first-child {
    margin-top: 0 !important;
  }
  [id^="blFolderPaneSettings-"] > div[style*="padding"] {
    padding-top: 0 !important;
  }
  [id^="getBlacklistData"] ul.nav-tabs .nav-link h3 {
    font-size: 0.95rem !important;
    margin: 0 !important;
  }
  /* Spalten-Header (Einträge + Verlauf) ausblenden — Labels kommen per ::before an die Cards */
  [id^="getBlacklistData"] .container-fluid:has(> .row.blacklist-header-row) {
    display: none !important;
  }
  [id^="blFolderPaneLog-"] > .container-fluid {
    display: none !important;
  }
  /* Zeilen (Einträge + Verlauf) → Card-Stack (Pattern 1, [[UI Mobile Listen & Tabs]]) */
  [id^="getBlacklistData"] .blacklist-entry-row {
    background: color-mix(in srgb, var(--darkblue) 75%, transparent) !important;
    border-radius: var(--border) !important;
    padding: 0.6rem 0.75rem !important;
    margin-bottom: 0.5rem !important;
  }
  [id^="getBlacklistData"] .blacklist-entry-row .row {
    display: flex !important;
    flex-direction: column !important;
    padding: 0 !important;
    margin: 0 !important;
  }
  [id^="getBlacklistData"] .blacklist-entry-row .row > [class*="col-"] {
    display: flex !important;
    flex: 0 0 100% !important;
    max-width: 100% !important;
    width: 100% !important;
    align-items: center !important;
    justify-content: space-between !important;
    padding: 0.3rem 0 !important;
    margin: 0 !important;
    gap: 0.75rem !important;
    text-align: left !important;
    color: var(--white);
    font-size: 0.85rem;
    word-break: break-word;
  }
  [id^="getBlacklistData"] .blacklist-entry-row [class*="col-"]::before {
    flex: 0 0 auto;
    color: var(--white);
    font-size: 0.72rem;
    text-transform: uppercase;
    letter-spacing: 0.3px;
  }
  /* Einträge-Zellen (haben Klassen) */
  [id^="getBlacklistData"] .blacklist-entry-row .blacklist-entry-value::before { content: "Wert"; }
  [id^="getBlacklistData"] .blacklist-entry-row .blacklist-entry-date::before { content: "Erstellt"; }
  /* Verlauf-Zellen (ohne Klassen → Spalten-Reihenfolge) */
  [id^="blacklistLogContainer-"] .blacklist-entry-row .row > [class*="col-"]:nth-child(1)::before { content: "Zeitpunkt"; }
  [id^="blacklistLogContainer-"] .blacklist-entry-row .row > [class*="col-"]:nth-child(2)::before { content: "Aktion"; }
  [id^="blacklistLogContainer-"] .blacklist-entry-row .row > [class*="col-"]:nth-child(3)::before { content: "Details"; }
  [id^="blacklistLogContainer-"] .blacklist-entry-row .row > [class*="col-"]:nth-child(4)::before { content: "Wer"; }
  /* Löschen-Spalte: Button rechts, kein Label — Spezifität muss die generische
     col-Regel (0,4,0) schlagen, sonst bleibt space-between */
  [id^="getBlacklistData"] .blacklist-entry-row .row > [class*="col-"].blacklist-entry-actions {
    justify-content: flex-end !important;
  }
  /* Delete-Form (Mail-Variante) nicht auf volle Breite strecken */
  [id^="getBlacklistData"] .blacklist-entry-row .blacklist-entry-actions form {
    width: auto !important;
    margin: 0 !important;
    display: inline-flex !important;
  }
  /* Löschen-Button kompakt (34x34-Paket wie Listen-Aktionen) */
  [id^="getBlacklistData"] .blacklist-entry-row .btn_delete,
  [id^="getBlacklistData"] .blacklist-entry-row .blacklist-delete-btn {
    width: 34px !important;
    height: 34px !important;
    min-width: 34px !important;
    min-height: 34px !important;
    padding: 0 !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
  }
  [id^="getBlacklistData"] .blacklist-entry-row .btn_delete > i,
  [id^="getBlacklistData"] .blacklist-entry-row .blacklist-delete-btn > i {
    margin: 0 !important;
  }
  /* Scroll-Container: erzwungenes padding-right schneidet Cards ab */
  [id^="blacklistEntriesContainer-"],
  [id^="blacklistLogContainer-"] {
    padding-right: 0 !important;
  }
  /* Einträge-hinzufügen-Modal: Textarea volle Breite */
  [id^="setEntry"] textarea,
  #setBlacklistEntry textarea {
    width: 100% !important;
  }
  /* "Öffentlich"-Toggle (get_a) + "Spamtest"-Toggle (sendTest): per Inline-Style
     position:absolute top:2rem right:2rem -> kollidiert mobil mit Titel + ×-Button.
     Aus dem absoluten Fluss lösen, als eigene zentrierte Reihe unter den Header. */
  /* Toggles (Spamtest im Testmail-, Öffentlich im Detail-Modal): wie jd-mail
     absolut OBEN LINKS in der Ecke lassen (statt zentriert), nur von rechts nach
     links verschieben — kollidiert sonst mit dem ×-Button. Label bleibt unter dem
     Toggle (column, wie Mail). */
  .lazy-nl-modal .switch-button.position-absolute,
  [id^="setNewsletter"] .switch-button.position-absolute {
    right: auto !important;
    left: 1rem !important;
    top: 1.6rem !important;   /* wie jd-mail — etwas mehr Abstand zum Modal-Rand */
    margin: 0 !important;
    z-index: 6 !important;
  }
  /* ── KPI-Kacheln (.box_histroy_count) im Modal-Tab — Layout 1:1 wie jd-mail
     (luftige Karten, gefuellt-transparent, KEIN Border, normaler Case,
     zentriert), aber Partner-Farben/-Akzent bleiben. Inhalte/KPIs unveraendert.
     Jede .row mit KPI-Kacheln wird ein 2-Spalten-Grid. */
  .lazy-nl-modal .row:has(.box_histroy_count),
  .m-as-modal .row:has(.box_histroy_count),
  [id^="getLeadloungeData"] .row:has(.box_histroy_count) {
    display: grid !important;
    grid-template-columns: repeat(2, 1fr) !important;
    gap: 0.5rem !important;
    margin: 0 0 0.75rem 0 !important;
  }
  /* Abstand vom ersten Inhalt jedes Tabs zur Tab-Leiste darüber (1rem, konsistent
     über alle Tabs) — nur getAdSpaceData-Detail (.m-as-modal), nicht NL/fc. */
  .m-as-modal .tab-content > .tab-pane.show.active > .container-fluid:first-child,
  .m-as-modal .tab-content > .tab-pane.show.active > .row:first-child,
  .m-as-modal .tab-content > .tab-pane.show.active > ul.nav-tabs:first-child,
  .m-as-modal .tab-content > .tab-pane.show.active > form > ul.nav-tabs {
    margin-top: 1rem !important;
  }
  .lazy-nl-modal .box_histroy_count,
  .m-as-modal .box_histroy_count,
  #setAdSpacePage .box_histroy_count,
  [id^="getLeadloungeData"] .box_histroy_count {
    margin: 0 !important;        /* inline margin-left/right:1rem neutralisieren */
    min-height: 4rem !important;
    min-width: 0 !important;
    padding: 0.75rem !important;
    background: color-mix(in srgb, var(--darkblue) 75%, transparent) !important;
    border: none !important;     /* kein Mail-Tuerkis-Rahmen (var(--darkgreen)) */
    border-radius: var(--border) !important;
    display: flex !important;
    flex-direction: column !important;
    justify-content: center !important;
    align-items: center !important;
    text-align: center !important;
  }
  /* Ungerade letzte Kachel (z.B. "Restliches Volumen" in einer 3er-Row, oder
     eine Einzel-Kachel) ueber die volle Breite statt halb mit Leerraum. */
  .lazy-nl-modal .row:has(.box_histroy_count) > .box_histroy_count:last-child:nth-child(odd),
  .m-as-modal .row:has(.box_histroy_count) > .box_histroy_count:last-child:nth-child(odd),
  [id^="getLeadloungeData"] .row:has(.box_histroy_count) > .box_histroy_count:last-child:nth-child(odd) {
    grid-column: 1 / -1 !important;
  }
  /* ── Zielgruppe-Tab (Publisher-Sicht): Alters-Reihen (Geschlecht/Alter von/Alter bis)
     durchgehend 3-spaltig in EINER Zeile. Das generische 2-Spalten-KPI-Grid (oben) wuerde
     daraus sonst "2 + 1 full-width" machen. Selektor MUSS `.row...:has(.box_histroy_count)`
     enthalten, damit die Spezifitaet (0,4,0) die generische `.row:has(.box_histroy_count)`-
     Regel (0,3,0) schlaegt — sonst gewinnt das 2-Spalten-Grid. Gilt nur fuer .tg-age-row. */
  .lazy-nl-modal .row.tg-age-row:has(.box_histroy_count) {
    grid-template-columns: repeat(3, 1fr) !important;
  }
  .lazy-nl-modal .row.tg-age-row:has(.box_histroy_count) > .box_histroy_count:last-child:nth-child(odd) {
    grid-column: auto !important;
  }
  .lazy-nl-modal .box_histroy_count h1,
  .m-as-modal .box_histroy_count h1,
  #setAdSpacePage .box_histroy_count h1,
  [id^="getLeadloungeData"] .box_histroy_count h1 {
    font-size: 0.75rem !important;
    text-transform: none !important;
    letter-spacing: normal !important;
    color: rgba(255, 255, 255, 0.7) !important;
    opacity: 1 !important;
    margin: 0 0 0.25rem 0 !important;
    width: 100% !important;
    text-align: center !important;
  }
  .lazy-nl-modal .box_histroy_count h2,
  .m-as-modal .box_histroy_count h2,
  #setAdSpacePage .box_histroy_count h2,
  [id^="getLeadloungeData"] .box_histroy_count h2 {
    color: var(--white) !important;
    margin: 0 !important;
    width: 100% !important;
    text-align: center !important;
  }
  .lazy-nl-modal .box_histroy_count h2,
  [id^="getLeadloungeData"] .box_histroy_count h2 {
    font-size: 1.25rem !important;
  }
  /* ── AdSpace-Erstellen (#setAdSpacePage): Laender-Panes durchgehend 2-spaltig ──
     Struktur je Laender-Tab: pane > (container-fluid > row mit 2-3 Kacheln)* mit
     h3-Zwischenueberschriften. Damit ALLE KPI-/Alters-Kacheln paarweise fliessen
     (statt 2+1 pro 3er-Reihe), den aktiven Pane zum 2-Grid machen + container-fluid
     und row per display:contents aufloesen -> jede .box_histroy_count wird direktes
     Grid-Item. NUR .show.active (sonst ueberschreibt display:grid das Bootstrap-
     display:none der inaktiven Laender-Panes -> Gotcha #122). h3 ueber volle Breite. */
  #setAdSpacePage .tab-pane[id^="setAdSpace_"].show.active {
    display: grid !important;
    grid-template-columns: repeat(2, 1fr) !important;
    gap: 0.5rem !important;
    align-content: start !important;
  }
  #setAdSpacePage .tab-pane[id^="setAdSpace_"].show.active > .container-fluid,
  #setAdSpacePage .tab-pane[id^="setAdSpace_"].show.active > .container-fluid > .row {
    display: contents !important;
  }
  #setAdSpacePage .tab-pane[id^="setAdSpace_"].show.active > h3 {
    grid-column: 1 / -1 !important;
    margin: 0.5rem 0 0.25rem 0 !important;
  }
  /* ── User-Tab: Alters-Kacheln durchgehend 2-spaltig ──
     Markup: Gender-Pane (#male…/#female…) > 4× .container-fluid > 1× .row > 3× .col.
     Mit dem Standard-2er-Grid pro .row entstaende ueberall "2 + 1 volle Breite"
     (18-20|20-25, dann 25-30 allein). Stattdessen den Gender-Pane zum durchgehenden
     2-Spalten-Grid machen und .container-fluid + .row per display:contents aufloesen
     -> alle 12 Alters-Kacheln werden direkte Grid-Items, fliessen 2-spaltig.
     (Pattern 2 aus [[UI Mobile Listen & Tabs]].) */
  /* WICHTIG: display:grid NUR auf den AKTIVEN Gender-Pane (.show.active). Ohne
     diese Einschraenkung ueberschreibt display:grid!important das Bootstrap-
     display:none der INAKTIVEN Panes -> der versteckte Maenner-Pane bleibt im
     Layout und schiebt die Frauen-Kacheln um seine Hoehe (~530px) nach unten. */
  /* male/female = Alters-Kacheln, domain = Domain-Provider-Kacheln (Sub-Tab
     "Domains" im User-Tab) — identische 3er-Reihen-Struktur, durchgehend
     2-spaltig fliessen lassen (sonst 2+1-Versatz). */
  .m-as-modal [id^="user-adspace"] .tab-pane[id^="male"].show.active,
  .m-as-modal [id^="user-adspace"] .tab-pane[id^="female"].show.active,
  .m-as-modal [id^="user-adspace"] [id^="domain"].show.active {
    display: grid !important;
    grid-template-columns: repeat(2, 1fr) !important;
    gap: 0.5rem !important;
  }
  .m-as-modal [id^="user-adspace"] .tab-pane[id^="male"].show.active > .container-fluid,
  .m-as-modal [id^="user-adspace"] .tab-pane[id^="female"].show.active > .container-fluid,
  .m-as-modal [id^="user-adspace"] [id^="domain"].show.active > .container-fluid,
  .m-as-modal [id^="user-adspace"] .tab-pane[id^="male"].show.active > .container-fluid > .row,
  .m-as-modal [id^="user-adspace"] .tab-pane[id^="female"].show.active > .container-fluid > .row,
  .m-as-modal [id^="user-adspace"] [id^="domain"].show.active > .container-fluid > .row {
    display: contents !important;
  }
  /* Alters-Kacheln: Inline-margins (margin-left/right:1rem) neutralisieren, sonst
     sprengen sie das Grid. (Die generische .box_histroy_count-Regel setzt margin:0,
     aber die Inline-Styles haben Vorrang -> hier mit !important nachziehen.) */
  .m-as-modal [id^="user-adspace"] .box_histroy_count {
    margin: 0 !important;
  }
  /* Schrift der Zahlen vereinheitlichen: die globale Desktop-Regel
     `.box_histroy_count h2 { font-size:2rem !important }` (styles.css) macht die
     Alters-Werte mobil zu gross + uneinheitlich gegenueber den oberen KPI-Kacheln.
     Im m-as-modal alle KPI-/Alters-Zahlen kompakt (1rem — User-Wunsch, vorher
     1.25rem war zu gross). h2 UND input. Spezifitaet 0,3,0 / 0,4,0 schlaegt die
     globale 0,2,0. (Inline-font-size wurde dafuer aus dem Template entfernt.) */
  .m-as-modal .tab-pane .box_histroy_count h2,
  .m-as-modal .tab-pane .box_histroy_count input,
  .m-as-modal [id^="user-adspace"] .box_histroy_count h2,
  .m-as-modal [id^="user-adspace"] .box_histroy_count input {
    font-size: 1rem !important;
  }
  /* Alters-/Länder-Kacheln in den inneren Panes liegen zwei .tab-pane tief.
     Die styles.css-Regel `.box_histroy_count h2 { 2rem }` gewinnt dort trotz
     .m-as-modal (Kaskaden-Reihenfolge). Mit .tab-pane .tab-pane-Kette (0,4,1). */
  .m-as-modal .tab-pane .tab-pane .box_histroy_count h2,
  .m-as-modal .tab-pane .tab-pane .box_histroy_count input {
    font-size: 1rem !important;
  }
  /* Die generische Modal-Regel `.row:has(.box_histroy_count) > .box_histroy_count
     :last-child:nth-child(odd) { grid-column:1/-1 }` (Spezifitaet 0,6,0) macht hier
     jede 3. Alters-Kachel (letztes Kind ihrer 3er-.row) full-width — quer durch das
     durchgehende Gender-Grid. Im aufgeloesten (display:contents) Gender-Grid mit
     HOEHERER Spezifitaet (0,7,0: zusaetzlicher .row-Schritt + :has) neutralisieren,
     damit alle Alters-Kacheln normal 2-spaltig fliessen. */
  .m-as-modal [id^="user-adspace"] .tab-pane[id^="male"].show.active > .container-fluid > .row:has(.box_histroy_count) > .box_histroy_count,
  .m-as-modal [id^="user-adspace"] .tab-pane[id^="female"].show.active > .container-fluid > .row:has(.box_histroy_count) > .box_histroy_count,
  .m-as-modal [id^="user-adspace"] [id^="domain"].show.active > .container-fluid > .row:has(.box_histroy_count) > .box_histroy_count {
    grid-column: auto !important;
  }
  /* Laender-KPI-Row (Volumen|Maenner|Frauen, 3 Kacheln direkt im Laender-Pane):
     ebenfalls durchgehend 2-spaltig statt "2 + 1". .container-fluid + .row aufloesen.
     Nur AKTIVER Laender-Pane (.show.active), sonst nehmen versteckte AT/CH-Panes Platz. */
  .m-as-modal [id^="user-adspace"] .tab-pane[id^="german"].show.active > .container-fluid,
  .m-as-modal [id^="user-adspace"] .tab-pane[id^="austria"].show.active > .container-fluid,
  .m-as-modal [id^="user-adspace"] .tab-pane[id^="schwitz"].show.active > .container-fluid {
    display: grid !important;
    grid-template-columns: repeat(2, 1fr) !important;
    gap: 0.5rem !important;
    margin-bottom: 0.5rem !important;
  }
  .m-as-modal [id^="user-adspace"] .tab-pane[id^="german"].show.active > .container-fluid > .row,
  .m-as-modal [id^="user-adspace"] .tab-pane[id^="austria"].show.active > .container-fluid > .row,
  .m-as-modal [id^="user-adspace"] .tab-pane[id^="schwitz"].show.active > .container-fluid > .row {
    display: contents !important;
  }
  /* Frauen (3. = letzte Laender-KPI-Kachel) ueber die volle Breite statt halb leer. */
  .m-as-modal [id^="user-adspace"] .tab-pane[id^="german"].show.active > .container-fluid > .row > .box_histroy_count:last-child:nth-child(odd),
  .m-as-modal [id^="user-adspace"] .tab-pane[id^="austria"].show.active > .container-fluid > .row > .box_histroy_count:last-child:nth-child(odd),
  .m-as-modal [id^="user-adspace"] .tab-pane[id^="schwitz"].show.active > .container-fluid > .row > .box_histroy_count:last-child:nth-child(odd) {
    grid-column: 1 / -1 !important;
  }

  /* ── Kategorien-Tab: Kategorie-Kacheln durchgehend 2-spaltig ──
     Markup: Kategorie-Pane (#categorie-adspace…) > N× .container-fluid > 1× .row > 3× .col.
     Gleiches "2 + 1"-Problem wie beim User-Tab. Pane zum durchgehenden 2-Spalten-Grid,
     .container-fluid + .row per display:contents aufloesen → alle Kacheln fliessen
     fortlaufend 2-spaltig. (Pattern 2 aus [[UI Mobile Listen & Tabs]].) */
  /* NUR der AKTIVE Kategorien-Pane wird Grid (.show.active) — sonst ueberschreibt
     display:grid!important das Bootstrap-display:none des INAKTIVEN Panes, und der
     unsichtbare Kategorien-Pane (~2700px hoch) schiebt die nachfolgenden Tab-Panes
     (Laender/Verlauf) massiv nach unten -> riesiger Leerraum vor dem Inhalt. */
  .m-as-modal [id^="categorie-adspace"].show.active {
    display: grid !important;
    grid-template-columns: repeat(2, 1fr) !important;
    gap: 0.5rem !important;
  }
  .m-as-modal [id^="categorie-adspace"].show.active > .container-fluid,
  .m-as-modal [id^="categorie-adspace"].show.active > .container-fluid > .row {
    display: contents !important;
  }
  .m-as-modal [id^="categorie-adspace"] .box_histroy_count {
    margin: 0 !important;
  }
  /* Die generische "letzte ungerade Kachel = full-width"-Regel (0,6,0) neutralisieren
     (sie macht sonst jede 3. Kachel jeder 3er-.row full-width). Hoehere Spezifitaet. */
  .m-as-modal [id^="categorie-adspace"].show.active > .container-fluid > .row:has(.box_histroy_count) > .box_histroy_count {
    grid-column: auto !important;
  }

  /* ── Länder-Tab: Bundesländer-Kacheln durchgehend 2-spaltig ──
     Markup: Länder-Pane (#lands-adspace…) > Land-Sub-Tabs (DE/AT/CH) > Gesamt/Mann/Frau-
     Sub-Tabs (#lands-total-… / #lands-male-… / #lands-female-…) > N× .container-fluid >
     1× .row > 3× .col. Gleiches "2 + 1"-Problem. Nur den AKTIVEN inneren Pane
     (.show.active) zum durchgehenden 2-Spalten-Grid machen — sonst nehmen die versteckten
     Gesamt/Mann/Frau- bzw. AT/CH-Panes Platz und schieben den Inhalt nach unten. */
  .m-as-modal [id^="lands-total-"].show.active,
  .m-as-modal [id^="lands-male-"].show.active,
  .m-as-modal [id^="lands-female-"].show.active {
    display: grid !important;
    grid-template-columns: repeat(2, 1fr) !important;
    gap: 0.5rem !important;
  }
  .m-as-modal [id^="lands-total-"].show.active > .container-fluid,
  .m-as-modal [id^="lands-male-"].show.active > .container-fluid,
  .m-as-modal [id^="lands-female-"].show.active > .container-fluid,
  .m-as-modal [id^="lands-total-"].show.active > .container-fluid > .row,
  .m-as-modal [id^="lands-male-"].show.active > .container-fluid > .row,
  .m-as-modal [id^="lands-female-"].show.active > .container-fluid > .row {
    display: contents !important;
  }
  .m-as-modal [id^="lands-total-"] .box_histroy_count,
  .m-as-modal [id^="lands-male-"] .box_histroy_count,
  .m-as-modal [id^="lands-female-"] .box_histroy_count {
    margin: 0 !important;
  }
  /* Generische full-width-Regel neutralisieren (jede 3. Kachel sonst full-width). */
  .m-as-modal [id^="lands-total-"].show.active > .container-fluid > .row:has(.box_histroy_count) > .box_histroy_count,
  .m-as-modal [id^="lands-male-"].show.active > .container-fluid > .row:has(.box_histroy_count) > .box_histroy_count,
  .m-as-modal [id^="lands-female-"].show.active > .container-fluid > .row:has(.box_histroy_count) > .box_histroy_count {
    grid-column: auto !important;
  }

  /* ── Verlauf-Tab: 8-Spalten-Kampagnen-Tabelle → Card-Stack ──
     Markup (per AJAX, buildList in getAdSpaces.tpl): Header-Leiste (Gradient-Box mit
     8 col-Labels) + pro Kampagne .accordion-item > .container-fluid > .row > 8× col-N >
     input.form-control[readonly]. Auf 390px viel zu breit. Pattern 1 aus
     [[UI Mobile Listen & Tabs]]: Header ausblenden, jede Zeile als Card stapeln,
     Label→Wert via ::before. Scope: .adspace-verlauf-container im m-as-modal. */
  /* Header-Leiste (die Gradient-Box mit den 8 Spaltentiteln) ausblenden.
     WICHTIG: NICHT die .tab-content (Client-Tab-Wrapper) treffen! Die Header-Box ist
     ein <div> mit Inline-Gradient-Background, ohne .tab-content/.nav-tabs/.accordion-item.
     Erkennungsmerkmal: enthaelt .container-fluid > .row mit col-divs, ist aber selbst
     KEINE .tab-content und liegt direkt vor dem Scroll-Container im Client-Pane. */
  .m-as-modal .adspace-verlauf-container [style*="linear-gradient"]:has(> .container-fluid > .row > [class*="col-"]) {
    display: none !important;
  }
  /* Scroll-Container darf nicht abschneiden + volle Breite. */
  .m-as-modal .adspace-verlauf-container [style*="overflow-y"] {
    padding-right: 0 !important;
    max-height: 60vh !important;
  }
  /* Jede Kampagne → Card. */
  .m-as-modal .adspace-verlauf-container .accordion-item {
    background: color-mix(in srgb, var(--darkblue) 75%, transparent) !important;
    border-radius: var(--border) !important;
    padding: 0.6rem 0.75rem !important;
    margin-bottom: 0.5rem !important;
  }
  .m-as-modal .adspace-verlauf-container .accordion-item .container-fluid {
    padding: 0 !important;
  }
  /* Zeile entstapeln: Label→Wert untereinander. */
  .m-as-modal .adspace-verlauf-container .accordion-item .row {
    display: flex !important;
    flex-direction: column !important;
    padding: 0 !important;
    margin: 0 !important;
    align-items: stretch !important;
    gap: 0 !important;
  }
  /* Jede Zelle (col-N): Label links + Wert rechts. */
  .m-as-modal .adspace-verlauf-container .accordion-item .row > [class*="col-"] {
    display: flex !important;
    flex: 0 0 100% !important;
    max-width: 100% !important;
    width: 100% !important;
    align-items: center !important;
    justify-content: space-between !important;
    padding: 0.3rem 0 !important;
    margin: 0 !important;
    gap: 0.75rem !important;
    text-align: left !important;
  }
  /* Labels via ::before (Reihenfolge = Header-Spalten:
     Name/Paymodel/Start/Ziel-Leads/Öffnungen/Öffner/Klicks/Klicker). */
  .m-as-modal .adspace-verlauf-container .accordion-item .row > [class*="col-"]:nth-child(1)::before { content: "Name"; }
  .m-as-modal .adspace-verlauf-container .accordion-item .row > [class*="col-"]:nth-child(2)::before { content: "Paymodel"; }
  .m-as-modal .adspace-verlauf-container .accordion-item .row > [class*="col-"]:nth-child(3)::before { content: "Start"; }
  .m-as-modal .adspace-verlauf-container .accordion-item .row > [class*="col-"]:nth-child(4)::before { content: "Ziel/Leads"; }
  .m-as-modal .adspace-verlauf-container .accordion-item .row > [class*="col-"]:nth-child(5)::before { content: "Öffnungen"; }
  .m-as-modal .adspace-verlauf-container .accordion-item .row > [class*="col-"]:nth-child(6)::before { content: "Öffner"; }
  .m-as-modal .adspace-verlauf-container .accordion-item .row > [class*="col-"]:nth-child(7)::before { content: "Klicks"; }
  .m-as-modal .adspace-verlauf-container .accordion-item .row > [class*="col-"]:nth-child(8)::before { content: "Klicker"; }
  .m-as-modal .adspace-verlauf-container .accordion-item .row > [class*="col-"]::before {
    flex: 0 0 auto !important;
    color: var(--white) !important;
    font-size: 0.72rem !important;
    text-transform: uppercase !important;
    letter-spacing: 0.3px !important;
    opacity: 0.75 !important;
  }
  /* Werte (readonly input) rechtsbündig, kein Input-Look. */
  .m-as-modal .adspace-verlauf-container .accordion-item input.form-control {
    flex: 1 1 auto !important;
    min-width: 0 !important;
    width: auto !important;
    background: transparent !important;
    border: none !important;
    box-shadow: none !important;
    color: var(--white) !important;
    text-align: right !important;
    padding: 0 !important;
    margin: 0 !important;
    height: auto !important;
    min-height: 0 !important;
    font-size: 0.85rem !important;
    line-height: 1.35 !important;
  }

  /* ── Header & Footer-Tab, Versandsysteme-Block (nur Publisher, mail_id==0) ──
     Pro System eine .row > 2 sichtbare .col (Systemname-Input + Tag-Input je
     nach Header/Footer-Typ). Auf 390px teilen sich die 2 Felder ~350px → eng.
     Die .col im Scroll-Container (overflow-y, max-height:7.5rem) untereinander
     stapeln, Inputs voll breit. Scope: header-footer-adspace-Pane. */
  .m-as-modal [id^="header-footer-adspace"] [style*="overflow-y"] > .row {
    flex-direction: column !important;
    gap: 0.4rem !important;
  }
  .m-as-modal [id^="header-footer-adspace"] [style*="overflow-y"] > .row > .col {
    width: 100% !important;
    max-width: 100% !important;
    flex: 0 0 100% !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
  }
  /* Geräte-Vorschau-Umschalter (Desktop/Tablet/Mobile) im Editor ausblenden —
     mobil ist die Vorschau ohnehin schmal (immer Mobil-Ansicht). Die Buttons
     werden per JS (footer.tpl addResponsiveButtons) in einen barWrapper
     (width:100%;display:flex;justify-content:center) > bar (display:flex;
     justify-content:center) > .btn_add > i.fa-desktop injiziert. Beide Ebenen
     abdecken (den Wrapper der die bar mit fa-desktop enthält). */
  .m-as-modal [id^="header-footer-adspace"] div:has(> div > .btn_add > .fa-desktop),
  .m-as-modal [id^="header-footer-adspace"] div[style*="justify-content: center"]:has(> .btn_add > .fa-desktop) {
    display: none !important;
  }
  /* Vorschau-Modal: Geräte-Umschalt-Buttons (Desktop/Tablet/Mobile) ausblenden —
     auf Mobil ist die Vorschau ohnehin schmal (iframe width:100% = Modal-Breite).
     Desktop behält die Buttons (nur mobil per Media-Query verborgen). */
  .lazy-nl-modal .preview-device-btns {
    display: none !important;
  }

  /* ── Publisher-Tab (nur jd-partner) ──────────────────────────────────────
     Aufbau: nl-pub-tabs (Publisher-Auswahl) → KPI-Kacheln (Volumen/Start/
     Payout/Kosten/Leads/Öffnungen/Klicks) → bei Status a/e/f Inputs + Buttons.
     KPI-Kacheln/Buttons greifen bereits über die generischen .lazy-nl-modal-
     und .mc_a_row-Regeln. Hier nur die Publisher-Sonderfälle. */

  /* Publisher-Auswahl-Leiste wie alle anderen Tab-Leisten horizontal scrollbar
     (kann viele Publisher enthalten). nl-pub-tabs ist KEINE .position-absolute-
     Leiste, daher reicht die generische ul.nav-tabs-Regel — hier nur abgesichert. */
  .lazy-nl-modal ul.nl-pub-tabs {
    flex-wrap: nowrap !important;
    overflow-x: auto !important;
    margin-top: 0.5rem !important;
  }

  /* Volumen/Payout-Input im Status a/e/f: width:101% (inline) → 100% kappen,
     sonst minimaler Sub-Pixel-Überstand in der zentrierten Flex-Kachel.
     Schriftgröße leicht reduzieren, damit lange Zahlen (z.B. 1.000.000) reinpassen. */
  .lazy-nl-modal .box_histroy_count input[name="volume"],
  .lazy-nl-modal .box_histroy_count input[name="payout"] {
    width: 100% !important;
    max-width: 100% !important;
    font-size: 1.5rem !important;
  }

  /* WM-Test-Toggle: im Desktop absolut (top:50% right:2rem) über die Kachel
     gelegt — auf Mobil schwebt er sonst über Input/Verfügbar-Hinweis. Statisch
     zentriert unter den Kachel-Inhalt setzen (Kachel ist flex-column). */
  .lazy-nl-modal .box_histroy_count .switch-button {
    position: static !important;
    transform: none !important;
    top: auto !important;
    right: auto !important;
    margin-top: 0.6rem !important;
  }

  /* Speichern/Annehmen (.btn_main) + Löschen (.btn_deleted) im Publisher-Tab:
     Desktop-Stil hat border-top (var(--middleRose) / var(--darkred)) als
     Trennstrich. Auf Mobil stapeln die Buttons (full width) → zwei Striche
     übereinander wirken störend. Top-Border entfernen. */
  .lazy-nl-modal [id^="publisher"] .btn_main,
  .lazy-nl-modal [id^="publisher"] .btn_deleted,
  .lazy-nl-modal [id^="publisher"] .btn_delete_big,
  .lazy-nl-modal [id^="id-pub-"] .btn_main,
  .lazy-nl-modal [id^="id-pub-"] .btn_deleted,
  .lazy-nl-modal [id^="id-pub-"] .btn_delete_big {
    border-top: none !important;
  }

  /* ── Versendungen-Modal (setSendoutsAll): Provider-Toggles als 2er-Grid ──
     Vorher: 8 Provider (Apple/Freenet/GMX/…) je in eigener Reihe (col block,
     volle Breite) → riesige Höhe. Wie Mail: 2 Provider pro Reihe, kompakt. */
  .lazy-nl-modal [id^="send-form-news"] .row:has(input[name="apple"]),
  .lazy-nl-modal [id^="setSendoutsAll"] .row:has(input[name="apple"]) {
    display: grid !important;
    grid-template-columns: 1fr 1fr !important;
    gap: 0.35rem 0.75rem !important;
    margin-bottom: 8px !important; /* einheitliches 8px-Raster */
  }
  .lazy-nl-modal .row:has(input[name="apple"]) > .col {
    width: auto !important;
    max-width: none !important;
    flex: none !important;
    padding: 0.4rem 0.2rem !important;
  }
  /* Provider-Label kompakter (vorher font-size:1.2rem + margin-bottom:1rem) */
  .lazy-nl-modal .row:has(input[name="apple"]) > .col > div:first-child {
    font-size: 0.95rem !important;
    margin-bottom: 0.4rem !important;
  }
  /* Versendungen-Form: einheitliches 8px-Raster zwischen allen Blöcken (vorher
     gemischt 12px rows / 16px sendtime / 8px tab+selects → wirkt ungleichmäßig).
     Alle direkten Form-Kinder + Submit-Button auf 8px. */
  .lazy-nl-modal [id^="send-form-news"] > .row,
  .lazy-nl-modal [id^="send-form-news"] > .sendtime-container,
  .lazy-nl-modal [id^="send-form-news"] > div[id^="localpartContainer"] {
    margin-top: 0 !important;
    margin-bottom: 8px !important;
  }
  .lazy-nl-modal [id^="send-form-news"] > .btn_main {
    margin-top: 8px !important;
  }
  /* Selects im Quick-Segment/Status-Tabset gleichmäßig 8px (tooltip-container) */
  .lazy-nl-modal [id^="send-form-news"] .tab-content .tooltip-container {
    margin-bottom: 8px !important;
  }
  /* ── Testmail-Modal (sendTestmail): Multi-Selects (V/N, Testadressen) sind
     size=8 → 240px hoch, auch bei nur 1-3 Optionen. Auf moderate Höhe begrenzen
     (scrollbar bei vielen, Mehrfachauswahl bleibt). Abstände einheitlich 8px.
     Das .modal selbst trägt die ID sendTestmail{id} → Selektor OHNE Leerzeichen
     zur .lazy-nl-modal-Kombination, hier direkt per ID-Präfix. */
  [id^="sendTestmail"].modal select[multiple],
  [id^="formTestmailSend"] select[multiple] {
    height: auto !important;
    max-height: 9.5rem !important;   /* ~5 sichtbare Reihen, dann scrollt es */
    min-height: 2.5rem !important;
  }
  /* Abstand trägt die .row (8px). Die innere .tooltip-container bekommt 0, sonst
     addieren sich beide zu 16px. */
  [id^="sendTestmail"].modal .row {
    margin-bottom: 8px !important;
    margin-top: 0 !important;
  }
  [id^="sendTestmail"].modal .row .tooltip-container {
    margin-bottom: 0 !important;
    margin-top: 0 !important;
  }
  [id^="sendTestmail"].modal .btn_main {
    margin-top: 8px !important;
  }

  /* =========================================================
     Spamtest-Auswertung mobil — die 3-Spalten-Tabelle (Score | Name |
     Beschreibung mit festen flex-Werten) ist auf schmalen Viewports unlesbar.
     Mobil wird daraus pro Regel eine kompakte Karte: Score-Badge + Name fett
     oben, Beschreibung links darunter. Greift für beide Render-Pfade
     (Testmail-Modal #spamresult-* und Bearbeiten-Tab #spamtest-tab-result-*).
     1:1 von jd-mail übernommen (identische Render-Struktur). */

  /* Score-Legende: umbrechen lassen statt nebeneinander quetschen */
  [id^="spamresult-"] [style*="inline-flex"][style*="gap:1.5rem"],
  [id^="spamtest-tab-result-"] [style*="inline-flex"][style*="gap:1.5rem"] {
    flex-wrap: wrap !important;
    justify-content: center !important;
    gap: 0.5rem 1rem !important;
  }
  /* Tabellen-Kopfzeile (Score | Name | Beschreibung) ausblenden */
  [id^="spamresult-"] .request-header,
  [id^="spamtest-tab-result-"] .request-header {
    display: none !important;
  }
  /* Jede Regel-Zeile: aus der Flex-Row eine Karte machen */
  [id^="spamresult-"] .accordion-item > div[style*="display:flex"],
  [id^="spamtest-tab-result-"] .accordion-item > div[style*="display:flex"] {
    flex-direction: column !important;
    align-items: stretch !important;
    gap: 0.25rem !important;
    padding: 0.85rem 0.9rem !important;
  }
  /* 1. Kind = Score-Badge: kompakt, linksbündig, farbiger Pill.
     Höhere Spezifität (.accordion-item zweimal) nötig, da die Partner-Inline-Styles
     text-align:center !important tragen — sonst gewinnt das Inline-!important. */
  [id^="spamresult-"] .accordion-item.accordion-item > div[style*="display:flex"] > div:nth-child(1),
  [id^="spamtest-tab-result-"] .accordion-item.accordion-item > div[style*="display:flex"] > div:nth-child(1) {
    flex: 0 0 auto !important;
    align-self: flex-start !important;
    text-align: left !important;
    font-weight: 700 !important;
    font-size: 0.95rem !important;
    line-height: 1.3 !important;
    height: auto !important;
    background: rgba(0, 0, 0, 0.3) !important;
    border-radius: var(--border) !important;
    padding: 0.1rem 0.5rem !important;
    min-width: 0 !important;
  }
  /* 2. Kind = Name: linksbündig, fett, volle Breite */
  [id^="spamresult-"] .accordion-item.accordion-item > div[style*="display:flex"] > div:nth-child(2),
  [id^="spamtest-tab-result-"] .accordion-item.accordion-item > div[style*="display:flex"] > div:nth-child(2) {
    flex: 1 1 auto !important;
    text-align: left !important;
    font-weight: 600 !important;
    word-break: break-word !important;
  }
  /* 3. Kind = Beschreibung (+ optionaler Fix-Hinweis): linksbündig */
  [id^="spamresult-"] .accordion-item.accordion-item > div[style*="display:flex"] > div:nth-child(3),
  [id^="spamtest-tab-result-"] .accordion-item.accordion-item > div[style*="display:flex"] > div:nth-child(3) {
    flex: 1 1 auto !important;
    text-align: left !important;
    color: rgba(255, 255, 255, 0.85) !important;
  }
  [id^="spamresult-"] .accordion-item.accordion-item > div[style*="display:flex"] > div:nth-child(3) > div,
  [id^="spamtest-tab-result-"] .accordion-item.accordion-item > div[style*="display:flex"] > div:nth-child(3) > div {
    text-align: left !important;
  }

  /* ── Versendungen-Tab (id-so-*): 7-Spalten-Tabelle (Datum|Uhrzeit|Status|
     Öffnungen|Öffner|Klicks|Klicker) ist auf 334px unlesbar — Header klebt
     zusammen, Zellen zu schmal. Mobil: Kopfzeile ausblenden, jede Job-Zeile als
     Karte mit Label:Wert-Paaren (2-Spalten-Grid). Labels per ::before, da die
     JS-gerenderten Zellen keine eigenen Labels im DOM haben. */

  /* Kopfzeile (request-header mit den 7 Spalten-Titeln) ausblenden */
  [id^="id-so-"] .request-header {
    display: none !important;
  }

  /* Job-Zeile (.accordion-item) als abgesetzte Karte */
  [id^="id-so-"] [class*="sendouts-result"] .accordion-item {
    background: color-mix(in srgb, var(--darkblue) 75%, transparent) !important;
    border-radius: var(--border) !important;
    margin-bottom: 0.5rem !important;
    overflow: hidden !important;
  }

  /* Job-Zeile: aus der Flex-Row eine Karte machen (2-Spalten-Grid) */
  [id^="id-so-"] [class*="sendouts-result"] .accordion-item > div[style*="display: flex"] {
    display: grid !important;
    grid-template-columns: 1fr 1fr !important;
    gap: 0.4rem 0.75rem !important;
    padding: 0.85rem 0.9rem !important;
    align-items: stretch !important;
  }
  /* Jede Zelle: Wert linksbündig, darüber das Label (::before) */
  [id^="id-so-"] [class*="sendouts-result"] .accordion-item > div[style*="display: flex"] > div {
    flex: none !important;
    text-align: left !important;
    font-size: 0.9rem !important;
    color: var(--white) !important;
    min-width: 0 !important;
    display: flex !important;
    flex-direction: column !important;
    gap: 0.1rem !important;
    word-break: break-word !important;
  }
  [id^="id-so-"] [class*="sendouts-result"] .accordion-item > div[style*="display: flex"] > div::before {
    font-size: 0.65rem !important;
    color: rgba(255, 255, 255, 0.55) !important;
    text-transform: uppercase !important;
    letter-spacing: 0.02em !important;
  }
  /* Spalten-Labels (Reihenfolge der 7 Zellen) */
  [id^="id-so-"] [class*="sendouts-result"] .accordion-item > div[style*="display: flex"] > div:nth-child(1)::before { content: "Datum"; }
  [id^="id-so-"] [class*="sendouts-result"] .accordion-item > div[style*="display: flex"] > div:nth-child(2)::before { content: "Uhrzeit"; }
  /* Status über volle Breite (eigene Zeile) */
  [id^="id-so-"] [class*="sendouts-result"] .accordion-item > div[style*="display: flex"] > div:nth-child(3) {
    grid-column: 1 / -1 !important;
  }
  [id^="id-so-"] [class*="sendouts-result"] .accordion-item > div[style*="display: flex"] > div:nth-child(3)::before { content: "Status"; }
  [id^="id-so-"] [class*="sendouts-result"] .accordion-item > div[style*="display: flex"] > div:nth-child(4)::before { content: "Öffnungen"; }
  [id^="id-so-"] [class*="sendouts-result"] .accordion-item > div[style*="display: flex"] > div:nth-child(5)::before { content: "Öffner"; }
  [id^="id-so-"] [class*="sendouts-result"] .accordion-item > div[style*="display: flex"] > div:nth-child(6)::before { content: "Klicks"; }
  [id^="id-so-"] [class*="sendouts-result"] .accordion-item > div[style*="display: flex"] > div:nth-child(7)::before { content: "Klicker"; }

  /* Scroll-Container der Versendungs-Liste (inline overflow-y:auto, max-height:36rem):
     Scrollbalken ausblenden — konsistent mit dem restlichen Modal (mc_a_row hat
     scrollbar-width:none). Scroll bleibt funktional bei vielen Versendungen. */
  [id^="id-so-"] > div[style*="overflow-y: auto"] {
    scrollbar-width: none !important;
    -ms-overflow-style: none !important;
  }
  [id^="id-so-"] > div[style*="overflow-y: auto"]::-webkit-scrollbar {
    display: none !important;
    width: 0 !important;
    height: 0 !important;
  }

  /* ── WM-Kontroller-Tab (wmcontroller-*): Liste aus Publisher-Name + WM-Select.
     Desktop: 2 Spalten (Name-Input | Select) nebeneinander. Mobil zwingt
     .mc_a_row .row diese auf column (gestapelt) + .col auf width:100% → Name-Input
     sah aus wie leerer Kasten, Karte unnötig hoch. Mobil zurück auf EINE Zeile:
     Name links (als Überschrift, kein Input-Look), Dropdown rechts. Kompakte Karte.
     Plus Scrollbalken weg + Button ohne Strich. */

  /* Scroll-Container: Scrollbalken ausblenden (wie Versendungen) */
  [id^="wmcontroller"] form > div[style*="overflow-y: auto"] {
    scrollbar-width: none !important;
    -ms-overflow-style: none !important;
    padding-right: 0 !important;
  }
  [id^="wmcontroller"] form > div[style*="overflow-y: auto"]::-webkit-scrollbar {
    display: none !important;
    width: 0 !important;
    height: 0 !important;
  }

  /* Jede Publisher-Zeile als kompakte Karte — Name | Dropdown nebeneinander.
     .mc_a_row VORANGESTELLT: die generische .mc_a_row .row:not(...) {flex-direction
     :column} / .mc_a_row .col {width:100%} ist sonst spezifischer und gewinnt —
     mit dem mc_a_row-Präfix übertrumpfen wir sie. */
  .modal-content.mc_a_row [id^="wmcontroller"] .row.align-items-stretch {
    background: color-mix(in srgb, var(--darkblue) 75%, transparent) !important;
    border-radius: var(--border) !important;
    padding: 0.5rem 0.6rem !important;
    margin: 0 0 0.5rem 0 !important;
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    align-items: stretch !important;
    gap: 0.5rem !important;
  }

  /* Name-Spalte: 42% Breite (mc_a_row .col width:100% überschreiben). */
  .mc_a_row [id^="wmcontroller"] .row.align-items-stretch > .col:first-child {
    width: 42% !important;
    max-width: 42% !important;
    flex: 0 0 42% !important;
  }
  /* Dropdown-Spalte: Rest */
  .mc_a_row [id^="wmcontroller"] .row.align-items-stretch > .col:last-child {
    width: 58% !important;
    max-width: 58% !important;
    flex: 1 1 58% !important;
  }

  /* Publisher-Name: read-only Input bekommt denselben Kasten-Look wie das Select
     daneben (Hintergrund + Box-Shadow + 40px Höhe), sonst wirkt die linke Seite
     niedriger/schmaler als das Dropdown rechts (transparenter Text vs. Kasten). */
  [id^="wmcontroller"] .row.align-items-stretch .col:first-child input[type="text"] {
    background: #0a0f24 !important;
    box-shadow: rgba(0,0,0,0.4) 0px 2px 4px 0px, rgba(0,0,0,0.3) 0px 7px 13px -3px, rgba(0,0,0,0.2) 0px -3px 0px 0px inset !important;
    border: none !important;
    border-radius: var(--border) !important;
    text-align: left !important;
    font-weight: 600 !important;
    font-size: 0.85rem !important;
    height: 40px !important;
    width: 100% !important;
    padding: 8px 0.75rem !important;
    display: flex !important;
    align-items: center !important;
    color: var(--white) !important;
    pointer-events: none !important;
  }

  /* WM-Select volle Breite der rechten Spalte */
  [id^="wmcontroller"] .row.align-items-stretch .col:last-child .wmc-select {
    width: 100% !important;
  }

  /* Speichern-Button: kein Trennstrich (top-border) */
  [id^="wmcontroller"] .btn_main {
    border-top: none !important;
  }

  /* ── Sub-Ids-Tab (subids-*): strukturell identisch zum WM-Kontroller —
     Liste aus Publisher-Name (read-only Input) + Sub-ID-Wert (Input). Gleiche
     Mobil-Behandlung: jede Zeile eine Karte, Name links | Wert rechts, beide
     gleich hohe Kästen. Scrollbalken weg + Button ohne Strich.
     Höhere Spezifität (.mc_a_row + [id^subids] + .tab-pane) nötig, da die Row
     hier nur .row trägt (kein .align-items-stretch wie beim WM-Kontroller). */

  /* Scroll-Container: Scrollbalken ausblenden */
  [id^="subids"] div[style*="overflow-y: auto"] {
    scrollbar-width: none !important;
    -ms-overflow-style: none !important;
    padding-right: 0 !important;
  }
  [id^="subids"] div[style*="overflow-y: auto"]::-webkit-scrollbar {
    display: none !important;
    width: 0 !important;
    height: 0 !important;
  }

  /* Jede Zeile als kompakte Karte — Name | Wert nebeneinander */
  .modal-content.mc_a_row [id^="subids"] .tab-pane .row {
    background: color-mix(in srgb, var(--darkblue) 75%, transparent) !important;
    border-radius: var(--border) !important;
    padding: 0.5rem 0.6rem !important;
    margin: 0 0 0.5rem 0 !important;
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    align-items: stretch !important;
    gap: 0.5rem !important;
  }
  .mc_a_row [id^="subids"] .tab-pane .row > .col:first-child {
    width: 42% !important;
    max-width: 42% !important;
    flex: 0 0 42% !important;
  }
  .mc_a_row [id^="subids"] .tab-pane .row > .col:last-child {
    width: 58% !important;
    max-width: 58% !important;
    flex: 1 1 58% !important;
  }

  /* Publisher-Name: read-only Input bekommt Kasten-Look (= Wert-Input rechts) */
  [id^="subids"] .tab-pane .row .col:first-child input[type="text"] {
    background: #0a0f24 !important;
    box-shadow: rgba(0,0,0,0.4) 0px 2px 4px 0px, rgba(0,0,0,0.3) 0px 7px 13px -3px, rgba(0,0,0,0.2) 0px -3px 0px 0px inset !important;
    border: none !important;
    border-radius: var(--border) !important;
    text-align: left !important;
    font-weight: 600 !important;
    font-size: 0.85rem !important;
    height: 40px !important;
    width: 100% !important;
    padding: 8px 0.75rem !important;
    margin: 0 !important;
    display: flex !important;
    align-items: center !important;
    color: var(--white) !important;
    pointer-events: none !important;
  }

  /* Sub-ID-Wert-Input (Multi): volle Breite je Feld, Zeilen stapeln untereinander. */
  [id^="subids"] .tab-pane .row .col:last-child .seg-subid-input {
    width: 100% !important;
    margin: 0 !important;
  }
  [id^="subids"] .tab-pane .row .col:last-child .seg-subid-row {
    display: flex !important;
    align-items: center !important;
    gap: 0.4rem !important;
    margin-bottom: 0.5rem !important;
  }
  [id^="subids"] .tab-pane .row .col:last-child .seg-subid-rows {
    width: 100% !important;
  }

  /* Speichern-Button: kein Trennstrich */
  [id^="subids"] .btn_main {
    border-top: none !important;
  }

  /* ── Report-Tab (reporting-*): strukturell identisch zu Sub-Ids/WM-Kontroller —
     Liste aus WM-Name (read-only Input) + Report-Wert (leads[]-Input). Jede Zeile
     eine Karte, Name links | Wert rechts, beide gleich hohe Kästen. Scrollbalken
     weg + Button ohne Strich.
     Nur die Eingabe-Panes ([id^="id-subids-"] INNERHALB von [id^="reporting"])
     anvisieren — der "Report senden"-Subtab (reportingsend-*) hat nur 1-Spalten-
     Rows (E-Mail/Link) und bleibt unberührt. */

  /* Scroll-Container: Scrollbalken ausblenden */
  [id^="reporting"] div[style*="overflow-y: auto"] {
    scrollbar-width: none !important;
    -ms-overflow-style: none !important;
    padding-right: 0 !important;
  }
  [id^="reporting"] div[style*="overflow-y: auto"]::-webkit-scrollbar {
    display: none !important;
    width: 0 !important;
    height: 0 !important;
  }

  /* Jede Zeile als kompakte Karte — Name | Wert nebeneinander */
  .modal-content.mc_a_row [id^="reporting"] [id^="id-subids-"] .row {
    background: color-mix(in srgb, var(--darkblue) 75%, transparent) !important;
    border-radius: var(--border) !important;
    padding: 0.5rem 0.6rem !important;
    margin: 0 0 0.5rem 0 !important;
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    align-items: stretch !important;
    gap: 0.5rem !important;
  }
  .mc_a_row [id^="reporting"] [id^="id-subids-"] .row > .col:first-child {
    width: 42% !important;
    max-width: 42% !important;
    flex: 0 0 42% !important;
  }
  .mc_a_row [id^="reporting"] [id^="id-subids-"] .row > .col:last-child {
    width: 58% !important;
    max-width: 58% !important;
    flex: 1 1 58% !important;
  }

  /* WM-Name: read-only Input bekommt Kasten-Look (= Wert-Input rechts) */
  [id^="reporting"] [id^="id-subids-"] .row .col:first-child input[type="text"] {
    background: #0a0f24 !important;
    box-shadow: rgba(0,0,0,0.4) 0px 2px 4px 0px, rgba(0,0,0,0.3) 0px 7px 13px -3px, rgba(0,0,0,0.2) 0px -3px 0px 0px inset !important;
    border: none !important;
    border-radius: var(--border) !important;
    text-align: left !important;
    font-weight: 600 !important;
    font-size: 0.85rem !important;
    height: 40px !important;
    width: 100% !important;
    padding: 8px 0.75rem !important;
    margin: 0 !important;
    display: flex !important;
    align-items: center !important;
    color: var(--white) !important;
    pointer-events: none !important;
  }

  /* Report-Wert-Input (leads[]): volle Breite, inline margin-bottom:1rem neutralisieren.
     Wrapper (.tooltip-container / position:relative fuer das %-Icon) auch volle Breite. */
  [id^="reporting"] [id^="id-subids-"] .row .col:last-child input[name="leads[]"],
  [id^="reporting"] [id^="id-subids-"] .row .col:last-child .input-basic {
    width: 100% !important;
    margin: 0 !important;
  }
  [id^="reporting"] [id^="id-subids-"] .row .col:last-child > div[style*="position: relative"],
  [id^="reporting"] [id^="id-subids-"] .row .col:last-child > .tooltip-container {
    width: 100% !important;
  }

  /* Speichern-Button: kein Trennstrich */
  [id^="reporting"] [id^="id-subids-"] .btn_main {
    border-top: none !important;
  }

  /* ── Report-Tab Publisher (id-report-*): 2 Zeilen à 2 Eingabefeldern
     (Öffnungen|Öffner, Klicks|Klicker). Desktop = 2 Felder pro .row;
     mobil zwingt die generische .col-Regel sie auf volle Breite → 4 Felder
     untereinander, ohne Labels (die stecken im Hover-.custom-tooltip).
     Fix: .row als 2-Spalten-Flex (je ~50%), Label aus dem Tooltip sichtbar
     ueber dem Input anzeigen. */
  .modal-content.mc_a_row [id^="id-report-"] .row:not(.blacklist-header-row):not(.blacklist-entry-content) {
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    gap: 0.5rem !important;
    margin: 0 0 0.5rem 0 !important;
  }
  .modal-content.mc_a_row [id^="id-report-"] .row > .col:not(.blacklist-entry-value):not(.blacklist-entry-date):not(.blacklist-entry-actions) {
    width: 50% !important;
    max-width: 50% !important;
    flex: 1 1 50% !important;
    padding: 0 !important;
  }
  /* tooltip-container: Label (custom-tooltip) ueber dem Input statt Hover.
     Reihenfolge im DOM ist Input -> Tooltip, daher column-reverse. */
  [id^="id-report-"] .tooltip-container {
    display: flex !important;
    flex-direction: column-reverse !important;
    gap: 0.2rem !important;
    width: 100% !important;
  }
  [id^="id-report-"] .tooltip-container .custom-tooltip {
    position: static !important;
    opacity: 1 !important;
    visibility: visible !important;
    transform: none !important;
    top: auto !important;
    left: auto !important;
    background: none !important;
    box-shadow: none !important;
    padding: 0 0 0 0.15rem !important;
    margin: 0 !important;
    width: 100% !important;
    text-align: left !important;
    font-size: 0.62rem !important;
    line-height: 1.2 !important;
    color: rgba(255, 255, 255, 0.55) !important;
    text-transform: uppercase !important;
    letter-spacing: 0.02em !important;
    white-space: normal !important;
  }
  /* Tooltip-Pfeil (::before/::after) ausblenden — als Label nicht gewollt */
  [id^="id-report-"] .tooltip-container .custom-tooltip::before,
  [id^="id-report-"] .tooltip-container .custom-tooltip::after {
    display: none !important;
  }
  /* Eingabefelder kompakt + volle Zellenbreite */
  [id^="id-report-"] .tooltip-container .input-basic,
  [id^="id-report-"] .tooltip-container input[type="number"] {
    width: 100% !important;
    margin: 0 !important;
    text-align: center !important;
    height: 40px !important;
  }
  /* Speichern-Button: kein Trennstrich */
  [id^="id-report-"] .btn_main {
    border-top: none !important;
  }

  /* ── Download-Tab Publisher (download-*): Tracking-Toggle (oben), 5 Select/Input-
     Zeilen (Versandsystem; Header|Header-Option; Footer|Footer-Option; Bilder-URL)
     + 4 Download-Buttons. Desktop: Header/Footer paarweise (2 .col), Buttons 4er-.row.
     Mobil: generische .col-Regel zwingt alles auf volle Breite (alles untereinander)
     + der position-absolute Tracking-Toggle kollidiert mit dem Modal-Header.
     Fix: Toggle in den Flow holen; Header/Footer-Paare nebeneinander; Buttons 2x2. */

  /* Tracking-Toggle oben LINKS im Modal positionieren (auf Titel-Hoehe). Da er im
     Download-Pane liegt, ist er automatisch NUR im Download-Tab sichtbar (andere Panes
     sind display:none). position:absolute relativ zum .modal-content (position:relative).
     Spezifitaet hoch (.modal-content.mc_a_row ... form >) damit es die 768px-Regel
     `.lazy-nl-modal form > .switch-button.position-absolute { position:absolute }` schlaegt.
     Label "Tracking" unter dem Schalter, damit es nicht ueber den Titel laeuft. */
  .modal-content.mc_a_row [id^="download"] form > .switch-button.position-absolute {
    position: absolute !important;
    top: 0.85rem !important;
    left: 0.85rem !important;
    right: auto !important;
    bottom: auto !important;
    margin: 0 !important;
    display: flex !important;
    flex-direction: column !important;
    align-items: center !important;
    gap: 0.25rem !important;
    width: auto !important;
    z-index: 5 !important;
  }
  .modal-content.mc_a_row [id^="download"] form > .switch-button.position-absolute > .switch-outer {
    margin-top: 0 !important;
  }
  /* Label "Tracking": lesbar, zentriert unter dem Schalter, nicht auf 0 kollabieren */
  .modal-content.mc_a_row [id^="download"] form > .switch-button.position-absolute > label {
    font-size: 0.8rem !important;
    font-weight: 500 !important;
    color: #fff !important;
    margin: 0 !important;
    padding: 0 !important;
    width: auto !important;
    white-space: nowrap !important;
    text-align: center !important;
    line-height: 1.2 !important;
  }

  /* Header|Header-Option und Footer|Footer-Option: 2 Selects nebeneinander.
     Versandsystem (1 col) + Bilder-URL (1 col) bleiben volle Breite. */
  .modal-content.mc_a_row [id^="download"] .row:not(.blacklist-header-row):not(.blacklist-entry-content) {
    flex-direction: row !important;
    flex-wrap: wrap !important;
    gap: 0.5rem !important;
    margin: 0 0 0.5rem 0 !important;
  }
  .modal-content.mc_a_row [id^="download"] .row > .col:not(.blacklist-entry-value):not(.blacklist-entry-date):not(.blacklist-entry-actions) {
    flex: 1 1 0 !important;
    min-width: 0 !important;
    padding: 0 !important;
  }
  /* Selects/Input volle Zellenbreite. Links ausgerichtet + schmales Padding, damit
     in den 2-spaltigen Header/Footer-Option-Selects mehr Text sichtbar ist
     (Schriftgroesse bleibt 16px wegen iOS-Zoom-Schutz). */
  [id^="download"] .row > .col .form-select,
  [id^="download"] .row > .col .input-basic,
  [id^="download"] .row > .col select,
  [id^="download"] .row > .col input[type="text"] {
    width: 100% !important;
    margin: 0 !important;
  }
  [id^="download"] .row > .col select.form-select {
    text-align: left !important;
    padding-left: 0.5rem !important;
    padding-right: 1.5rem !important;
  }

  /* Button-Zeile (4 Buttons: Komplettpaket|Werbemittel|Bilder|Blacklist) als 2x2-Grid */
  .modal-content.mc_a_row [id^="download"] .row:has(button[value="dl_all"]) {
    display: grid !important;
    grid-template-columns: 1fr 1fr !important;
    gap: 0.5rem !important;
    margin-top: 0.75rem !important;
  }
  .modal-content.mc_a_row [id^="download"] .row:has(button[value="dl_all"]) > .col:not(.blacklist-entry-value):not(.blacklist-entry-date):not(.blacklist-entry-actions) {
    width: auto !important;
    max-width: none !important;
    flex: none !important;
    padding: 0 !important;
  }
  /* Buttons: echter Button-Look, volle Zellenbreite, kein Trennstrich, kompakt */
  [id^="download"] .row .btn_main,
  [id^="download"] .row .tooltip-container {
    width: 100% !important;
    margin: 0 !important;
    border-top: none !important;
  }
  [id^="download"] .row .btn_main {
    padding: 0.6rem 0.4rem !important;
  }

  /* ── Abrechnung-Tab Publisher (invoice-*): readonly-Infofelder.
     Row1: E-Mail Buchhaltung | Auftragsnummer; Row2: Firma (voll); Row3: PLZ|Straße|Stadt.
     Desktop col-Layout, mobil alles untereinander + Labels nur als Hover-Tooltip (unsichtbar).
     Fix wie Report: 2 Felder pro Zeile (Row3 wrappt 2+1), Labels sichtbar ueber dem Feld. */
  .modal-content.mc_a_row [id^="invoice"] .row:not(.blacklist-header-row):not(.blacklist-entry-content) {
    flex-direction: row !important;
    flex-wrap: wrap !important;
    gap: 0.5rem !important;
    margin: 0 0 0.5rem 0 !important;
  }
  .modal-content.mc_a_row [id^="invoice"] .row > .col:not(.blacklist-entry-value):not(.blacklist-entry-date):not(.blacklist-entry-actions) {
    flex: 1 1 45% !important;
    min-width: 45% !important;
    max-width: none !important;
    padding: 0 !important;
  }
  /* tooltip-container: Label (custom-tooltip) sichtbar ueber dem Input (column-reverse) */
  [id^="invoice"] .tooltip-container {
    display: flex !important;
    flex-direction: column-reverse !important;
    gap: 0.2rem !important;
    width: 100% !important;
  }
  [id^="invoice"] .tooltip-container .custom-tooltip {
    position: static !important;
    opacity: 1 !important;
    visibility: visible !important;
    transform: none !important;
    top: auto !important;
    left: auto !important;
    background: none !important;
    box-shadow: none !important;
    padding: 0 0 0 0.15rem !important;
    margin: 0 !important;
    width: 100% !important;
    text-align: left !important;
    font-size: 0.62rem !important;
    line-height: 1.2 !important;
    color: rgba(255, 255, 255, 0.55) !important;
    text-transform: uppercase !important;
    letter-spacing: 0.02em !important;
    white-space: normal !important;
  }
  [id^="invoice"] .tooltip-container .custom-tooltip::before,
  [id^="invoice"] .tooltip-container .custom-tooltip::after {
    display: none !important;
  }
  [id^="invoice"] .tooltip-container .input-basic,
  [id^="invoice"] .tooltip-container input[type="text"] {
    width: 100% !important;
    margin: 0 !important;
    text-align: left !important;
  }

  /* ── Auftragsnummern-Tab (orders-*): strukturell identisch zu Sub-Ids/Report —
     Liste aus WM-Name (read-only Input) + Auftragsnummer (order_number[]-Input).
     Jede Zeile eine Karte, Name links | Wert rechts, beide gleich hohe Kästen.
     Scrollbalken weg + Button ohne Strich. */

  /* Scroll-Container: Scrollbalken ausblenden */
  [id^="orders"] form > div[style*="overflow-y: auto"] {
    scrollbar-width: none !important;
    -ms-overflow-style: none !important;
    padding-right: 0 !important;
  }
  [id^="orders"] form > div[style*="overflow-y: auto"]::-webkit-scrollbar {
    display: none !important;
    width: 0 !important;
    height: 0 !important;
  }

  /* Jede Zeile als kompakte Karte — Name | Wert nebeneinander.
     SPEZIFITAET (am Live-DOM verifiziert): Die generische column-Regel ist
     .mc_a_row .row:not(.blacklist-entry-content):not(.blacklist-header-row) → 0,4,0
     (2 Klassen + 2 :not()-Klassen-Argumente, KEIN Element → c=0).
     .mc_a_row [id^="orders"].tab-pane .row waere ebenfalls 0,4,0 → nur Gleichstand,
     gewinnt bloss durch spaetere Quellposition (fragil). Mit .modal-content davor
     (das Element traegt real .modal-content.mc_a_row) sind wir bei 0,5,0 und gewinnen
     REIHENFOLGE-UNABHAENGIG. Gleiche Haertung bei wmcontroller/subids/reporting. */
  .modal-content.mc_a_row [id^="orders"].tab-pane .row {
    background: color-mix(in srgb, var(--darkblue) 75%, transparent) !important;
    border-radius: var(--border) !important;
    padding: 0.5rem 0.6rem !important;
    margin: 0 0 0.5rem 0 !important;
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    align-items: stretch !important;
    gap: 0.5rem !important;
  }
  .mc_a_row [id^="orders"].tab-pane .row > .col:first-child {
    width: 42% !important;
    max-width: 42% !important;
    flex: 0 0 42% !important;
  }
  .mc_a_row [id^="orders"].tab-pane .row > .col:last-child {
    width: 58% !important;
    max-width: 58% !important;
    flex: 1 1 58% !important;
  }

  /* WM-Name: read-only Input bekommt Kasten-Look (= Wert-Input rechts) */
  [id^="orders"] .row .col:first-child input[type="text"] {
    background: #0a0f24 !important;
    box-shadow: rgba(0,0,0,0.4) 0px 2px 4px 0px, rgba(0,0,0,0.3) 0px 7px 13px -3px, rgba(0,0,0,0.2) 0px -3px 0px 0px inset !important;
    border: none !important;
    border-radius: var(--border) !important;
    text-align: left !important;
    font-weight: 600 !important;
    font-size: 0.85rem !important;
    height: 40px !important;
    width: 100% !important;
    padding: 8px 0.75rem !important;
    margin: 0 !important;
    display: flex !important;
    align-items: center !important;
    color: var(--white) !important;
    pointer-events: none !important;
  }

  /* Auftragsnummer-Wert-Input: volle Breite */
  [id^="orders"] .row .col:last-child input[name="order_number[]"] {
    width: 100% !important;
    margin: 0 !important;
  }

  /* Speichern-Button: kein Trennstrich */
  [id^="orders"] .btn_main {
    border-top: none !important;
  }

  /* ── Favoriten-Tab (favorits-*): komplexer als die Name|Wert-Tabs.
     Pro Favorit eine .row.mt-1 mit 5 Spalten: Name(readonly) | Datum-Select |
     Payout(€) | Volumen(Users) | Chevron-Toggle. Generisch werden die 5 Felder
     gestapelt (5 hohe Boxen pro Favorit, unzusammenhaengend).
     Mobil: jede .row.mt-1 = EINE Karte. Name + Chevron oben (volle Breite),
     darunter Datum / Payout / Volumen in EINER Reihe (3-Spalten-Grid) mit Labels.
     Dazu das aufklappbare Sendouts-Panel (9-Spalten-Tabelle) als Karten wie der
     Versendungen-Tab. Spezifitaet von Anfang an gehaertet (.modal-content.mc_a_row
     = 0,5,x > generische 0,4,0), reihenfolge-unabhaengig. */

  /* Scroll-Container: Scrollbalken ausblenden */
  [id^="favorits"] > form > div[style*="overflow-y: auto"] {
    scrollbar-width: none !important;
    -ms-overflow-style: none !important;
    padding-right: 0 !important;
  }
  [id^="favorits"] > form > div[style*="overflow-y: auto"]::-webkit-scrollbar {
    display: none !important;
    width: 0 !important;
    height: 0 !important;
  }

  /* Jede Favoriten-Zeile (.row.mt-1) als Karte: Grid mit 3 Feld-Spalten.
     position:relative fuer den absolut positionierten Chevron oben rechts. */
  .modal-content.mc_a_row [id^="favorits"] .row.mt-1 {
    display: grid !important;
    grid-template-columns: 1fr 1fr 1fr !important;
    gap: 0.5rem 0.6rem !important;
    background: color-mix(in srgb, var(--darkblue) 75%, transparent) !important;
    border-radius: var(--border) !important;
    padding: 0.85rem 0.9rem 0.75rem !important;
    margin: 0 0 0.6rem 0 !important;
    position: relative !important;
    align-items: end !important;
  }

  /* Spalte 1 = Name (readonly Input): volle Kartenbreite als Ueberschrift,
     Platz rechts fuer den Chevron freihalten. */
  .modal-content.mc_a_row [id^="favorits"] .row.mt-1 > .col:nth-child(1) {
    grid-column: 1 / -1 !important;
    width: auto !important;
    max-width: none !important;
    padding-right: 2rem !important;
  }
  [id^="favorits"] .row.mt-1 > .col:nth-child(1) input[type="text"] {
    background: transparent !important;
    box-shadow: none !important;
    border: none !important;
    text-align: left !important;
    font-weight: 700 !important;
    font-size: 0.95rem !important;
    color: var(--white) !important;
    padding: 0 !important;
    margin: 0 !important;
    height: auto !important;
    width: 100% !important;
    pointer-events: none !important;
  }

  /* Feld-Spalten (Datum=2, Payout=3, Volumen=4): je 1 Grid-Spalte, Label per ::before.
     mc_a_row .col {width:100%} ist hier ok — Grid bestimmt die Breite. */
  .modal-content.mc_a_row [id^="favorits"] .row.mt-1 > .col:nth-child(2),
  .modal-content.mc_a_row [id^="favorits"] .row.mt-1 > .col:nth-child(3),
  .modal-content.mc_a_row [id^="favorits"] .row.mt-1 > .col:nth-child(4) {
    width: auto !important;
    max-width: none !important;
    min-width: 0 !important;
    display: flex !important;
    flex-direction: column !important;
    gap: 0.2rem !important;
  }
  [id^="favorits"] .row.mt-1 > .col:nth-child(2)::before { content: "Datum"; }
  [id^="favorits"] .row.mt-1 > .col:nth-child(3)::before { content: "Payout"; }
  [id^="favorits"] .row.mt-1 > .col:nth-child(4)::before { content: "Volumen"; }
  [id^="favorits"] .row.mt-1 > .col:nth-child(2)::before,
  [id^="favorits"] .row.mt-1 > .col:nth-child(3)::before,
  [id^="favorits"] .row.mt-1 > .col:nth-child(4)::before {
    font-size: 0.62rem !important;
    color: rgba(255, 255, 255, 0.55) !important;
    text-transform: uppercase !important;
    letter-spacing: 0.02em !important;
    padding-left: 0.1rem !important;
  }

  /* Feld-Inputs/Selects: volle Spaltenbreite, kompakter, Icon-Platz rechts.
     Die inneren Wrapper (div[position:relative] / .tooltip-container) auf 100%. */
  [id^="favorits"] .row.mt-1 > .col:nth-child(2) > div,
  [id^="favorits"] .row.mt-1 > .col:nth-child(3) > div,
  [id^="favorits"] .row.mt-1 > .col:nth-child(4) > .tooltip-container {
    width: 100% !important;
  }
  [id^="favorits"] .row.mt-1 > .col:nth-child(2) .form-select,
  [id^="favorits"] .row.mt-1 > .col:nth-child(3) input[name="payout[]"],
  [id^="favorits"] .row.mt-1 > .col:nth-child(4) input[name="volume[]"] {
    width: 100% !important;
    padding-left: 0.4rem !important;
    padding-right: 1.3rem !important;
    font-size: 0.82rem !important;
  }
  /* Feld-Icons (Kalender/€/Users) naeher an den Rand + kleiner, sonst ueberdecken
     sie bei schmaler Spalte den Wert (Datum "25.06.2026" wurde abgeschnitten). */
  [id^="favorits"] .row.mt-1 > .col:nth-child(2) i,
  [id^="favorits"] .row.mt-1 > .col:nth-child(3) i,
  [id^="favorits"] .row.mt-1 > .col:nth-child(4) i {
    right: 0.45rem !important;
    font-size: 0.8rem !important;
  }

  /* Chevron-Spalte: absolut oben rechts in der Karte statt 5. Grid-Zelle. */
  .modal-content.mc_a_row [id^="favorits"] .row.mt-1 > .col:nth-child(5) {
    position: absolute !important;
    top: 0.7rem !important;
    right: 0.7rem !important;
    width: auto !important;
    max-width: none !important;
    padding: 0 !important;
    margin: 0 !important;
  }

  /* Inline-Volume-Fehler unter dem Volumen-Feld (volle Kartenbreite) */
  [id^="favorits"] .row.mt-1 > .col:nth-child(4) .fav-vol-error {
    grid-column: auto !important;
  }

  /* Sendouts-Panel (.fav-sendouts-panel): 9-Spalten-Tabelle wie Versendungen-Tab
     als Karten. Kopfzeile (request-header) ausblenden, Job-Zeilen als 2-Spalten-
     Grid mit ::before-Labels. */
  [id^="favorits"] .fav-sendouts-panel .request-header {
    display: none !important;
  }
  [id^="favorits"] .fav-sendouts-content .accordion-item {
    background: color-mix(in srgb, var(--darkblue) 60%, transparent) !important;
    border-radius: var(--border) !important;
    margin-bottom: 0.4rem !important;
    overflow: hidden !important;
  }
  [id^="favorits"] .fav-sendouts-content .accordion-item > div[style*="display: flex"] {
    display: grid !important;
    grid-template-columns: 1fr 1fr !important;
    gap: 0.4rem 0.75rem !important;
    padding: 0.75rem 0.85rem !important;
    align-items: stretch !important;
  }
  [id^="favorits"] .fav-sendouts-content .accordion-item > div[style*="display: flex"] > div {
    flex: none !important;
    text-align: left !important;
    font-size: 0.9rem !important;
    color: var(--white) !important;
    min-width: 0 !important;
    display: flex !important;
    flex-direction: column !important;
    gap: 0.1rem !important;
    word-break: break-word !important;
  }
  [id^="favorits"] .fav-sendouts-content .accordion-item > div[style*="display: flex"] > div::before {
    font-size: 0.62rem !important;
    color: rgba(255, 255, 255, 0.55) !important;
    text-transform: uppercase !important;
    letter-spacing: 0.02em !important;
  }
  /* Kampagne über volle Breite (eigene Zeile) */
  [id^="favorits"] .fav-sendouts-content .accordion-item > div[style*="display: flex"] > div:nth-child(1) {
    grid-column: 1 / -1 !important;
  }
  [id^="favorits"] .fav-sendouts-content .accordion-item > div[style*="display: flex"] > div:nth-child(1)::before { content: "Kampagne"; }
  [id^="favorits"] .fav-sendouts-content .accordion-item > div[style*="display: flex"] > div:nth-child(2)::before { content: "Datum"; }
  [id^="favorits"] .fav-sendouts-content .accordion-item > div[style*="display: flex"] > div:nth-child(3)::before { content: "Volumen"; }
  [id^="favorits"] .fav-sendouts-content .accordion-item > div[style*="display: flex"] > div:nth-child(4)::before { content: "Leads"; }
  [id^="favorits"] .fav-sendouts-content .accordion-item > div[style*="display: flex"] > div:nth-child(5)::before { content: "Ziel"; }
  [id^="favorits"] .fav-sendouts-content .accordion-item > div[style*="display: flex"] > div:nth-child(6)::before { content: "Öffnungen"; }
  [id^="favorits"] .fav-sendouts-content .accordion-item > div[style*="display: flex"] > div:nth-child(7)::before { content: "Öffner"; }
  [id^="favorits"] .fav-sendouts-content .accordion-item > div[style*="display: flex"] > div:nth-child(8)::before { content: "Klicks"; }
  [id^="favorits"] .fav-sendouts-content .accordion-item > div[style*="display: flex"] > div:nth-child(9)::before { content: "Klicker"; }

  /* Anfragen-Button: kein Trennstrich */
  [id^="favorits"] .btn_main {
    border-top: none !important;
  }

  /* ── Gast-Tab (guest-*): Einlade-Formular + Gast-Liste.
     Zeile 1 = E-Mail (1 Spalte, volle Breite — bleibt unveraendert).
     Zeile 2 = Name | Datum | Payout | Volumen (4 Spalten, generisch gestapelt).
     Mobil: Name volle Breite (Eingabefeld), darunter Datum/Payout/Volumen in
     EINER Reihe (3-Spalten-Grid mit Labels) — analog Favoriten-Feldzeile, aber
     OHNE Karten-Box (ist ein Eingabeformular, kein Listen-Item).
     Die 2. Zeile per :has(input[name="name"]) eindeutig treffen (1. Zeile = E-Mail
     bleibt unberuehrt). Spezifitaet gehaertet (.modal-content.mc_a_row). */

  /* Zweite Zeile (Name + Datum/Payout/Volumen) als Grid */
  .modal-content.mc_a_row [id^="guest"] .row.mt-1:has(input[name="name"]) {
    display: grid !important;
    grid-template-columns: 1fr 1fr 1fr !important;
    gap: 0.5rem 0.6rem !important;
    align-items: end !important;
  }
  /* Name-Spalte: volle Breite, normales Eingabefeld (kein Karten-Titel) */
  .modal-content.mc_a_row [id^="guest"] .row.mt-1:has(input[name="name"]) > .col:nth-child(1) {
    grid-column: 1 / -1 !important;
    width: auto !important;
    max-width: none !important;
  }
  /* Feld-Spalten (Datum=2, Payout=3, Volumen=4): je 1 Grid-Spalte mit Label */
  .modal-content.mc_a_row [id^="guest"] .row.mt-1:has(input[name="name"]) > .col:nth-child(2),
  .modal-content.mc_a_row [id^="guest"] .row.mt-1:has(input[name="name"]) > .col:nth-child(3),
  .modal-content.mc_a_row [id^="guest"] .row.mt-1:has(input[name="name"]) > .col:nth-child(4) {
    width: auto !important;
    max-width: none !important;
    min-width: 0 !important;
    display: flex !important;
    flex-direction: column !important;
    gap: 0.2rem !important;
  }
  [id^="guest"] .row.mt-1:has(input[name="name"]) > .col:nth-child(2)::before { content: "Datum"; }
  [id^="guest"] .row.mt-1:has(input[name="name"]) > .col:nth-child(3)::before { content: "Payout"; }
  [id^="guest"] .row.mt-1:has(input[name="name"]) > .col:nth-child(4)::before { content: "Volumen"; }
  [id^="guest"] .row.mt-1:has(input[name="name"]) > .col:nth-child(2)::before,
  [id^="guest"] .row.mt-1:has(input[name="name"]) > .col:nth-child(3)::before,
  [id^="guest"] .row.mt-1:has(input[name="name"]) > .col:nth-child(4)::before {
    font-size: 0.62rem !important;
    color: rgba(255, 255, 255, 0.55) !important;
    text-transform: uppercase !important;
    letter-spacing: 0.02em !important;
    padding-left: 0.1rem !important;
  }
  /* Innere Wrapper (div[position:relative]) auf volle Spaltenbreite */
  [id^="guest"] .row.mt-1:has(input[name="name"]) > .col:nth-child(2) > div,
  [id^="guest"] .row.mt-1:has(input[name="name"]) > .col:nth-child(3) > div,
  [id^="guest"] .row.mt-1:has(input[name="name"]) > .col:nth-child(4) > div {
    width: 100% !important;
  }
  [id^="guest"] .row.mt-1:has(input[name="name"]) > .col:nth-child(2) .form-select,
  [id^="guest"] .row.mt-1:has(input[name="name"]) > .col:nth-child(3) input[name="payout"],
  [id^="guest"] .row.mt-1:has(input[name="name"]) > .col:nth-child(4) input[name="volume"] {
    width: 100% !important;
    padding-left: 0.4rem !important;
    padding-right: 1.3rem !important;
    font-size: 0.82rem !important;
  }
  /* Feld-Icons naeher an den Rand + kleiner (sonst Datum abgeschnitten) */
  [id^="guest"] .row.mt-1:has(input[name="name"]) > .col:nth-child(2) i,
  [id^="guest"] .row.mt-1:has(input[name="name"]) > .col:nth-child(3) i,
  [id^="guest"] .row.mt-1:has(input[name="name"]) > .col:nth-child(4) i {
    right: 0.45rem !important;
    font-size: 0.8rem !important;
  }

  /* Gast-Liste (request-header 3 Spalten Name|E-Mail|Eingeladen am + request-row):
     Kopfzeile ausblenden, jede Zeile als Karte mit Label:Wert (2-Spalten-Grid). */
  [id^="guest"] .request-header {
    display: none !important;
  }
  [id^="guest"] .request-row {
    display: grid !important;
    grid-template-columns: 1fr 1fr !important;
    gap: 0.3rem 0.75rem !important;
    background: color-mix(in srgb, var(--darkblue) 60%, transparent) !important;
    border-radius: var(--border) !important;
    padding: 0.7rem 0.85rem !important;
    margin-bottom: 0.4rem !important;
    align-items: stretch !important;
  }
  [id^="guest"] .request-row > div {
    flex: none !important;
    text-align: left !important;
    font-size: 0.9rem !important;
    color: var(--white) !important;
    min-width: 0 !important;
    overflow: visible !important;
    white-space: normal !important;
    word-break: break-word !important;
    display: flex !important;
    flex-direction: column !important;
    gap: 0.1rem !important;
  }
  [id^="guest"] .request-row > div::before {
    font-size: 0.62rem !important;
    color: rgba(255, 255, 255, 0.55) !important;
    text-transform: uppercase !important;
    letter-spacing: 0.02em !important;
  }
  /* Name über volle Breite (eigene Zeile), E-Mail + Datum darunter */
  [id^="guest"] .request-row > div:nth-child(1) {
    grid-column: 1 / -1 !important;
  }
  [id^="guest"] .request-row > div:nth-child(1)::before { content: "Name"; }
  [id^="guest"] .request-row > div:nth-child(2)::before { content: "E-Mail"; }
  [id^="guest"] .request-row > div:nth-child(2) {
    grid-column: 1 / -1 !important;
  }
  [id^="guest"] .request-row > div:nth-child(3)::before { content: "Eingeladen am"; }
  /* Scroll-Container der Gast-Liste: Scrollbalken ausblenden */
  [id^="guest"] > div[style*="overflow-y: auto"] {
    scrollbar-width: none !important;
    -ms-overflow-style: none !important;
  }
  [id^="guest"] > div[style*="overflow-y: auto"]::-webkit-scrollbar {
    display: none !important;
    width: 0 !important;
    height: 0 !important;
  }

  /* Einladung-senden-Button: kein Trennstrich */
  [id^="guest"] .btn_main {
    border-top: none !important;
  }

  /* ── Testadressen-Tab (testaddresses-*): Tabelle Email|Anrede|Vorname|Nachname
     + Copy-Button. Desktop nutzt col-lg-* mit display:inline-block — mobil bricht
     das chaotisch um (Werte stehen zentriert untereinander). Fix wie Gast-Tab:
     Kopfzeile weg, jede Adress-Zeile als Karte mit Label:Wert-Paaren. */
  [id^="testaddresses"] .request-header {
    display: none !important;
  }
  /* Jede Adresse als Karte */
  [id^="testaddresses"] .accordion-item {
    padding: 0.7rem 0.85rem !important;
    margin-bottom: 0.5rem !important;
  }
  /* Container der 4 Spalten → 2-Spalten-Grid, Copy-Button rechts oben absolut */
  [id^="testaddresses"] .accordion-item > .container-fluid {
    display: grid !important;
    grid-template-columns: 1fr 1fr !important;
    gap: 0.5rem 0.75rem !important;
    padding-right: 3rem !important; /* Platz fuer den Copy-Button */
    position: relative !important;
  }
  /* Die col-lg-* Spalten: inline-block aufheben, als Label:Wert-Block */
  [id^="testaddresses"] .accordion-item > .container-fluid > [class*="col-lg-"] {
    display: flex !important;
    flex-direction: column !important;
    gap: 0.15rem !important;
    width: auto !important;
    max-width: none !important;
    padding: 0 !important;
    margin: 0 !important;
  }
  /* Label ueber dem Wert via ::before (Reihenfolge: Email, Anrede, Vorname, Nachname) */
  [id^="testaddresses"] .accordion-item > .container-fluid > [class*="col-lg-"]::before {
    font-size: 0.62rem !important;
    color: rgba(255, 255, 255, 0.55) !important;
    text-transform: uppercase !important;
    letter-spacing: 0.02em !important;
    padding-left: 0.15rem !important;
  }
  /* Email volle Breite (eigene Zeile oben) — rechts Platz lassen fuer Copy-Button */
  [id^="testaddresses"] .accordion-item > .container-fluid > [class*="col-lg-"]:nth-child(1) {
    grid-column: 1 / -1 !important;
    padding-right: 2.75rem !important;
  }
  [id^="testaddresses"] .accordion-item > .container-fluid > [class*="col-lg-"]:nth-child(1)::before { content: "E-Mail"; }
  [id^="testaddresses"] .accordion-item > .container-fluid > [class*="col-lg-"]:nth-child(2)::before { content: "Anrede"; }
  [id^="testaddresses"] .accordion-item > .container-fluid > [class*="col-lg-"]:nth-child(3)::before { content: "Vorname"; }
  [id^="testaddresses"] .accordion-item > .container-fluid > [class*="col-lg-"]:nth-child(4)::before { content: "Nachname"; }
  /* Die readonly-Inputs: linksbuendig, kompakt, volle Zellenbreite */
  [id^="testaddresses"] .accordion-item .form-control {
    text-align: left !important;
    font-size: 0.9rem !important;
    padding: 0.25rem 0.4rem !important;
    height: auto !important;
    width: 100% !important;
  }
  /* Copy-Button rechts oben in der Karte fixieren (statt mittig schwebend) */
  [id^="testaddresses"] .accordion-item .copy-email-btn {
    top: 0.7rem !important;
    right: 0.7rem !important;
    transform: none !important;
  }
  /* Scroll-Container: Scrollbalken ausblenden */
  [id^="testaddresses"] > div[style*="overflow-y: auto"] {
    scrollbar-width: none !important;
    -ms-overflow-style: none !important;
  }
  [id^="testaddresses"] > div[style*="overflow-y: auto"]::-webkit-scrollbar {
    display: none !important;
    width: 0 !important;
    height: 0 !important;
  }

  /* ── Status-Tab (closing-*): oben 2 globale Buttons (Alle abschliessen / Alle
     pausieren), darunter pro WM eine Zeile: Name + Button-Paar (Abschliessen /
     Pausieren) bzw. "Abgeschlossen".
     User-Wunsch: die btn_reserve-Buttons haben einen Trennstrich (border-bottom)
     -> entfernen. Dazu: jede WM-Zeile als Karte (Name + Buttons gehoeren zusammen),
     Scrollbalken weg. */

  /* Trennstrich (border-bottom) ALLER btn_reserve im Status-Tab entfernen
     (obere "Alle"-Buttons + die Buttons pro Zeile). */
  [id^="closing"] .btn_reserve {
    border-bottom: none !important;
  }

  /* Jede WM-Zeile als Karte — ALLES in EINER Zeile: Name | Abschliessen | Pausieren.
     Karten-Style wie die anderen Tabs (darkblue 75% transparent, kein Schatten). */
  .modal-content.mc_a_row [id^="closing"] [class^="row closing-row-"],
  .modal-content.mc_a_row [id^="closing"] [class*=" closing-row-"] {
    background: color-mix(in srgb, var(--darkblue) 75%, transparent) !important;
    border-radius: var(--border) !important;
    padding: 0.5rem 0.6rem !important;
    margin: 0 0 0.5rem 0 !important;
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    align-items: center !important;
    gap: 0.5rem !important;
  }
  /* Name-Spalte: schmaler, links.
     .modal-content.mc_a_row-Praefix noetig: die generische
     .mc_a_row .col:not()(:not()(:not() ist 0,5,0 (width:100%) und wuerde sonst
     gewinnen. Mit .modal-content + :first-child sind wir bei 0,6,0 > 0,5,0. */
  .modal-content.mc_a_row [id^="closing"] [class*="closing-row-"] > .col:first-child {
    width: 38% !important;
    max-width: 38% !important;
    flex: 0 0 38% !important;
    min-width: 0 !important;
  }
  /* Aktions-Spalte (Buttons): Rest */
  .modal-content.mc_a_row [id^="closing"] [class*="closing-row-"] > .col:last-child {
    width: auto !important;
    max-width: none !important;
    flex: 1 1 auto !important;
    min-width: 0 !important;
  }
  /* Name-Input: als Label (transparent, links, fett) statt Box, umbrechbar */
  [id^="closing"] [class*="closing-row-"] > .col:first-child input[type="text"] {
    background: transparent !important;
    box-shadow: none !important;
    border: none !important;
    text-align: left !important;
    font-weight: 600 !important;
    font-size: 0.82rem !important;
    color: var(--white) !important;
    padding: 0 0.1rem !important;
    height: auto !important;
    white-space: normal !important;
    pointer-events: none !important;
  }
  /* "Abgeschlossen"-Status (readonly Input in col 2): wie ein Label, nicht als Box */
  [id^="closing"] [class*="closing-row-"] > .col:last-child > input[type="text"][readonly] {
    background: transparent !important;
    box-shadow: none !important;
    border: none !important;
    text-align: left !important;
    color: var(--darkgreen) !important;
    font-weight: 600 !important;
    padding: 0 0.1rem !important;
    height: auto !important;
    pointer-events: none !important;
  }
  /* Button-Paar (Abschliessen/Pausieren) nebeneinander, volle Breite der Aktions-Spalte */
  [id^="closing"] [class*="closing-row-"] > .col:last-child > div[style*="display:flex"],
  [id^="closing"] [class*="closing-row-"] > .col:last-child > div[style*="display: flex"] {
    width: 100% !important;
  }
  /* Buttons im Paar kompakter, damit beide + Name in eine Zeile passen */
  [id^="closing"] [class*="closing-row-"] > .col:last-child .btn_reserve {
    font-size: 0.82rem !important;
    padding-left: 0.2rem !important;
    padding-right: 0.2rem !important;
    white-space: nowrap !important;
  }

  /* Scroll-Container: Scrollbalken ausblenden */
  [id^="closing"] > div[style*="overflow-y: auto"] {
    scrollbar-width: none !important;
    -ms-overflow-style: none !important;
    padding-right: 0 !important;
  }
  [id^="closing"] > div[style*="overflow-y: auto"]::-webkit-scrollbar {
    display: none !important;
    width: 0 !important;
    height: 0 !important;
  }

  /* ── Verlauf-Tab (history-*): 4-Spalten-Tabelle (Datum | Uhrzeit | Aktion | Wer),
     per AJAX als .accordion-item > div[display:flex] > div gerendert.
     Mobil: Kopfzeile weg, jede Zeile als Karte — Aktion prominent oben (volle
     Breite), darunter Datum / Uhrzeit / Wer als 3-Spalten-Grid mit Labels.
     Aktion per order:-1 nach oben holen (DOM-Reihenfolge ist Datum,Uhrzeit,Aktion,Wer). */

  /* Kopfzeile (request-header) ausblenden */
  [id^="history"] .request-header {
    display: none !important;
  }
  /* Verlauf-Zeile (.accordion-item) als Karte mit 3-Spalten-Grid */
  [id^="history"] [class*="history-result"] .accordion-item {
    background: color-mix(in srgb, var(--darkblue) 75%, transparent) !important;
    border-radius: var(--border) !important;
    margin-bottom: 0.5rem !important;
    overflow: hidden !important;
  }
  [id^="history"] [class*="history-result"] .accordion-item > div[style*="display: flex"] {
    display: grid !important;
    grid-template-columns: 1fr 1fr 1fr !important;
    gap: 0.35rem 0.6rem !important;
    padding: 0.75rem 0.85rem !important;
    align-items: stretch !important;
  }
  [id^="history"] [class*="history-result"] .accordion-item > div[style*="display: flex"] > div {
    flex: none !important;
    text-align: left !important;
    font-size: 0.85rem !important;
    color: var(--white) !important;
    min-width: 0 !important;
    display: flex !important;
    flex-direction: column !important;
    gap: 0.1rem !important;
    word-break: break-word !important;
  }
  [id^="history"] [class*="history-result"] .accordion-item > div[style*="display: flex"] > div::before {
    font-size: 0.62rem !important;
    color: rgba(255, 255, 255, 0.55) !important;
    text-transform: uppercase !important;
    letter-spacing: 0.02em !important;
  }
  /* Zell-Reihenfolge im DOM: 1=Datum, 2=Uhrzeit, 3=Aktion, 4=Wer.
     Aktion (3) als Erstes (order:-1) ueber volle Breite, etwas groesser. */
  [id^="history"] [class*="history-result"] .accordion-item > div[style*="display: flex"] > div:nth-child(3) {
    order: -1 !important;
    grid-column: 1 / -1 !important;
    font-size: 0.92rem !important;
    text-align: left !important;
    white-space: pre-line !important;
  }
  [id^="history"] [class*="history-result"] .accordion-item > div[style*="display: flex"] > div:nth-child(3)::before { content: "Aktion"; }
  [id^="history"] [class*="history-result"] .accordion-item > div[style*="display: flex"] > div:nth-child(1)::before { content: "Datum"; }
  [id^="history"] [class*="history-result"] .accordion-item > div[style*="display: flex"] > div:nth-child(2)::before { content: "Uhrzeit"; }
  [id^="history"] [class*="history-result"] .accordion-item > div[style*="display: flex"] > div:nth-child(4)::before { content: "Wer"; }
  /* Wer-Zelle: linksbuendig statt zentriert (Inline-Style text-align:center ueberschreiben) */
  [id^="history"] [class*="history-result"] .accordion-item > div[style*="display: flex"] > div:nth-child(4) {
    text-align: left !important;
  }

  /* Scroll-Container: Scrollbalken ausblenden. KEIN direktes-Kind (>), da der
     overflow-Container in den inneren Untertab-Panes (id-hist-general-* / id-hist-N)
     liegt, nicht direkt unter dem history-Pane. */
  [id^="history"] div[style*="overflow-y: auto"] {
    scrollbar-width: none !important;
    -ms-overflow-style: none !important;
  }
  [id^="history"] div[style*="overflow-y: auto"]::-webkit-scrollbar {
    display: none !important;
    width: 0 !important;
    height: 0 !important;
  }

  /* ── Einstellungen-Tab (settings-*): zwei Toggles (Freie WM Auswahl / Freie
     Tracking-Nutzung). Desktop: nebeneinander (flex gap:2rem flex-wrap).
     Mobil: untereinander stapeln, jeder Toggle als Karten-Zeile — Label links,
     Schalter rechts (Standard-Mobil-Settings-Look). */

  /* Toggle-Container: stapeln statt nebeneinander */
  .modal-content.mc_a_row [id^="settings"] form > div[style*="display: flex"][style*="flex-wrap"] {
    flex-direction: column !important;
    gap: 0.6rem !important;
    margin-top: 1rem !important;
    align-items: stretch !important;
  }
  /* Jeder Toggle als Karten-Zeile: volle Breite, Label links | Schalter rechts.
     height:auto/min-height:0 noetig: generische .switch-button {height:28px} wuerde
     sonst die Karte stauchen und Label + Toggle ueberlappen lassen. */
  [id^="settings"] form > div[style*="flex-wrap"] > .switch-button {
    width: 100% !important;
    max-width: 460px !important;
    height: auto !important;
    min-height: 0 !important;
    display: flex !important;
    flex-direction: row !important;
    align-items: center !important;
    background: color-mix(in srgb, var(--darkblue) 75%, transparent) !important;
    border-radius: var(--border) !important;
    padding: 0.85rem 0.9rem !important;
    margin: 0 !important;
    gap: 0.75rem !important;
  }
  /* Label nach links (im Markup steht .switch-outer vor dem label), nimmt den Platz */
  [id^="settings"] form > div[style*="flex-wrap"] > .switch-button > label {
    order: -1 !important;
    flex: 1 1 auto !important;
    font-size: 0.92rem !important;
    white-space: normal !important;
    margin: 0 !important;
  }
  /* Toggle bleibt rechts, feste Groesse */
  [id^="settings"] form > div[style*="flex-wrap"] > .switch-button > .switch-outer {
    flex: 0 0 auto !important;
  }

  /* Datum/Zeit-Reihe (.sendtime-row): Datum + Zeit + Plus in EINER Reihe halten,
     nicht umbrechen lassen (Plus rutscht sonst darunter). */
  .lazy-nl-modal .sendtime-row {
    flex-wrap: nowrap !important;
    gap: 0.4rem !important;
  }
  .lazy-nl-modal .sendtime-row input[type="date"],
  .lazy-nl-modal .sendtime-row input[type="time"] {
    flex: 1 1 0 !important;
    min-width: 0 !important;
  }
  .lazy-nl-modal .sendtime-row .btn_add {
    flex: 0 0 auto !important;
  }
  /* Plus-Buttons (Datum/Zeit + Localpart) sind durch den generischen
     @media(hover:none) button{padding:1rem 2rem}-Reset 64px breit -> wie Mail
     auf 40px quadratisch fixieren, Icon zentriert (inline margin-top/left killen). */
  .lazy-nl-modal .sendtime-row .btn_add,
  .lazy-nl-modal [id^="localpartContainer"] .btn_add,
  .lazy-nl-modal [id^="localpartContainer"] .col > .btn_add {
    width: 40px !important;
    min-width: 40px !important;
    height: 40px !important;
    padding: 0 !important;
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
  }
  .lazy-nl-modal .sendtime-row .btn_add i,
  .lazy-nl-modal [id^="localpartContainer"] .btn_add i {
    margin: 0 !important;
  }
  /* Localpart-Reihe: .col volle Breite + KEIN Bootstrap-Padding (sonst ist die
     Reihe 24px schmaler + eingerückt gegenüber der Datum/Zeit-Reihe). Input flex:1.
     Sowohl der localpartContainer als auch die umgebende .row.mt-1 tragen je 12px
     col/row-Padding → beide auf 0. */
  .lazy-nl-modal [id^="localpartContainer"],
  .lazy-nl-modal .row:has([id^="localpartContainer"]) {
    width: 100% !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
    margin-left: 0 !important;
    margin-right: 0 !important;
  }
  .lazy-nl-modal [id^="localpartContainer"] > .col {
    display: flex !important;
    width: 100% !important;
    max-width: 100% !important;
    flex: 1 1 100% !important;
    padding: 0 !important;        /* Bootstrap .col padding:0 12px neutralisieren */
    margin: 0 !important;
    gap: 0.5rem !important;
    align-items: center !important;
  }
  .lazy-nl-modal [id^="localpartContainer"] input[name="localpart[]"] {
    flex: 1 1 0 !important;
    min-width: 0 !important;
    width: auto !important;
  }
  /* Der .modal-dialog dieser Modals ist position:fixed (Desktop-styles.css) → er
     bildet einen eigenen Stacking-Kontext mit z-index:auto und löst sich aus dem
     z-index:10010 des .modal heraus, sodass das Backdrop (10005) ihn doch verdeckt.
     position:relative hält ihn im Stacking-Kontext des .modal (Fullscreen-Layout
     bleibt, da .mc_a_row die Maße trägt). */
  .lazy-nl-modal .modal-dialog,
  .lazy-dy-modal .modal-dialog,
  [id^="previewDynamicData"] .modal-dialog,
  [id^="getDynamicData"] .modal-dialog {
    position: relative !important;
    top: auto !important;
    left: auto !important;
    right: auto !important;
    bottom: auto !important;
    transform: none !important;
  }
  /* Backdrop wenn #userSettings offen ist — Bootstrap setzt die Backdrop ohne Modal-ID-Referenz,
     deshalb global hochziehen wenn das Modal offen ist via body.modal-open.
     Plus: top: 0 zuruecksetzen (Desktop-styles.css setzt top: unset, das sprengt Mobile-fixed-Position). */
  body.modal-open .modal-backdrop {
    z-index: 10005 !important;
    top: 0 !important;
    left: 0 !important;
    right: 0 !important;
    bottom: 0 !important;
    width: 100vw !important;
    height: 100vh !important;
    background: rgba(0, 0, 0, 0.75) !important;
    opacity: 1 !important;
  }
  #userSettings .modal-dialog,
  #userSettings .modal-dialog.modal-hcenter,
  #getRequest .modal-dialog,
  #getRequest .modal-dialog.modal-hcenter,
  #getMessage .modal-dialog,
  #getMessage .modal-dialog.modal-hcenter,
  #getTestaddresses .modal-dialog,
  #getTestaddresses .modal-dialog.modal-hcenter {
    position: relative !important;
    top: auto !important;
    left: auto !important;
    right: auto !important;
    bottom: auto !important;
    margin: 0 auto !important;
    width: 100% !important;
    max-width: 100% !important;
    height: auto !important;
    min-height: 0 !important;
    max-height: calc(100vh - 2rem) !important;
    overflow-y: auto !important;
    transform: none !important;
  }
  /* Content-Padding wie jd-mail (17.5px 14px ≈ 1.1rem 0.875rem) statt
     1.25rem 1rem, damit die Modal-Maße exakt zu Mail passen. */
  #userSettings .modal-content,
  #userSettings .mc_a_row,
  #getRequest .modal-content,
  #getRequest .mc_a_row,
  #getMessage .modal-content,
  #getMessage .mc_a_row,
  #getTestaddresses .modal-content,
  #getTestaddresses .mc_a {
    border-radius: var(--border) !important;
    min-height: 0 !important;
    height: auto !important;
    max-height: calc(100vh - 2rem) !important;
    padding: 1.1rem 0.875rem !important;
  }

  /* Plus-Button (Neue Adresse) mobil nach oben LINKS in die Modal-Ecke (User-Wunsch),
     gegenueber dem ×-Button. Maße + Positionierung EXAKT wie der ×-Button (jetzt in
     der btn_add-Look-Gruppe: absolute, 40×40, top:0.5rem) → beide auf gleicher Höhe,
     gleicher Look (transparent + box-shadow, kein Kasten/Border). */
  /* z-index 11 > modal-header-wrapper (z:10) — sonst ueberdeckt der Header den
     Button links und die Klicks gehen ins Leere (nicht zuverlässig klickbar). */
  #getTestaddresses .testaddress-new-btn {
    position: absolute !important;
    left: 0.5rem !important;
    right: auto !important;
    top: 0.5rem !important;
    width: 40px !important;
    height: 40px !important;
    min-width: 40px !important;
    min-height: 40px !important;
    background-color: transparent !important;
    border: none !important;
    border-radius: var(--border) !important;
    color: var(--white) !important;
    box-shadow: rgba(0, 0, 0, 0.4) 0px 2px 4px,
                rgba(0, 0, 0, 0.3) 0px 7px 13px -3px,
                rgba(0, 0, 0, 0.2) 0px -3px 0px inset !important;
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    z-index: 11 !important;
    font-size: 1rem !important;
    transition: background-color 0.15s ease !important;
  }
  #getTestaddresses .testaddress-new-btn:hover {
    background-color: var(--darkRose) !important;
    color: var(--white) !important;
  }

  /* ── Abstand Suchfeld → erste Adresse (war 0px, klebte) ── */
  #getTestaddresses #testaddressSearch,
  #getTestaddresses input[placeholder*="uch"] {
    margin-bottom: 0.75rem !important;
  }
  /* ── Anlege-Formular (AJAX „Neue Adresse", .row.mt-1 mit 3 .col Anrede/Vorname/
     Nachname): Spalten stapeln + Abstand dazwischen; E-Mail-Zeile (.ta-new-row)
     Abstand nach unten. NICHT die Adress-Zeilen (.boxBl/.addressSetClient_xx =
     .row.g-0) treffen. ── */
  #getTestaddresses .row.mt-1:not(.g-0) {
    flex-direction: column !important;
    margin-top: 0.5rem !important;   /* Abstand E-Mail-Feld → Anrede-Select */
  }
  #getTestaddresses .row.mt-1:not(.g-0) > .col + .col {
    margin-top: 0.5rem !important;   /* Abstand Anrede → Vorname → Nachname */
  }
  /* mehrere Anlege-Zeilen (Tab „Mehrere") voneinander abgrenzen */
  #getTestaddresses .ta-new-row + .ta-new-row {
    margin-top: 0.75rem !important;
    padding-top: 0.75rem !important;
    border-top: 1px solid rgba(255, 255, 255, 0.08) !important;
  }
  #getTestaddresses .nav-tabs {
    margin-bottom: 0.75rem !important;
  }

  /* ── Schriftgrößen exakt wie jd-mail ──────────────────────────────────────
     Partner hat html font-size 16px, Mail 14px → in den Modals ist Partner
     ~14% größer. Wir gleichen NUR die 3 Header-Modals an die Mail-px-Werte an
     (Plattform-weit bleibt Partner unverändert). Inputs bleiben 16px
     (iOS-Auto-Zoom-Schutz). */
  /* Header (Bootstrap calc-Wert → fest 17.5px wie Mail) */
  #userSettings h2.header-style,
  #getRequest h2.header-style,
  #getMessage h2.header-style {
    font-size: 17.5px !important;
  }
  /* Tab-Leiste (nav-link) → 11.9px */
  #userSettings .nav-tabs .nav-link,
  #getRequest .nav-tabs .nav-link,
  #getMessage .nav-tabs .nav-link {
    font-size: 11.9px !important;
  }
  /* Header-Action-Buttons (Alle gelesen/löschen) → 11.9px */
  #getMessage #btnMarkAllRead,
  #getMessage #btnDeleteAll {
    font-size: 11.9px !important;
  }
  /* Speichern-Button (Profil) → 14px */
  #userSettings #btnSaveProfile,
  #userSettings .btn_main {
    font-size: 14px !important;
  }
  /* form-control-Werte (readonly-Felder, Nachrichtentext, Anfrage-Zellen) → 13.3px.
     Echte editierbare Inputs bleiben 16px (iOS-Zoom). */
  #userSettings div.form-control,
  #getRequest .accordion-item input.form-control,
  #getRequest .accordion-item div.form-control,
  #getMessage .message-item div.form-control,
  #userSettings #userLogList input.form-control,
  #userSettings #userLogList div.form-control {
    font-size: 13.3px !important;
  }
  /* Labels (Profil-Felder, Switch-Labels) → 12.6px */
  #userSettings label {
    font-size: 12.6px !important;
  }
  /* Empty-State / Datum / kleine Texte → 13.3px */
  #getRequest .accordion-item,
  #getMessage .message-item {
    font-size: 13.3px !important;
  }
  /* Header bekommt rechts Platz fuer den Close-Button (40px + 2x 1rem ≈ 4rem).
     Gilt für alle 3 Header-Modals. */
  #userSettings .modal-header-wrapper,
  #getRequest .modal-header-wrapper,
  #getMessage .modal-header-wrapper {
    padding-right: 3.5rem !important;
    position: static !important; /* damit close-button-position relativ zu .modal-content rechnet */
  }
  /* Close-Button (X) im Modal positionieren statt fixed am Viewport
     + Look 1:1 wie btn_add (transparent bg, box-shadow, var(--border), hover: darkRose-bg).
     Gilt für alle 3 Header-Modals (Profil/Anfragen/Benachrichtigungen) — sonst
     behalten getRequest/getMessage den falschen gefüllten Rosa-Rand-Stil. */
  #userSettings .modal-close-mobile,
  #getRequest .modal-close-mobile,
  #getMessage .modal-close-mobile {
    position: absolute !important;
    top: 0.5rem !important;
    right: 0.5rem !important;
    width: 40px !important;
    height: 40px !important;
    background-color: transparent !important;
    border: none !important;
    border-radius: var(--border) !important;
    color: var(--white) !important;
    box-shadow: rgba(0, 0, 0, 0.4) 0px 2px 4px,
                rgba(0, 0, 0, 0.3) 0px 7px 13px -3px,
                rgba(0, 0, 0, 0.2) 0px -3px 0px inset !important;
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    z-index: 5 !important;
    font-size: 1rem !important;
    transition: background-color 0.15s ease !important;
  }
  #userSettings .modal-close-mobile:hover,
  #getRequest .modal-close-mobile:hover,
  #getMessage .modal-close-mobile:hover {
    background-color: var(--darkRose) !important;
    color: var(--white) !important;
  }
}

/* ===========================================================================
   MOBILE KAMPAGNEN-LISTE (getNewsletter, type=a) — portiert von jd-mail
   ---------------------------------------------------------------------------
   m-nl-* Card-Items + Accordion + Status-Dropdown. Akzentfarbe Partner-Rosa
   (var(--darkRose) #88545d) statt Mail-Türkis. Breakpoint 992px.
   Doku: Obsidian [[UI Mobile Listen & Tabs]] / [[UI Mobile]].
   =========================================================================== */
@media (max-width: 991px) {

  .m-nl-list {
    display: flex;
    flex-direction: column;
    gap: 8px; /* exakt wie jd-mail (dort 8.4px) — Partner-Root ist 16px, daher fix in px */
    /* gleicht das padding-top von .m-subnav-content.has-row2 aus (Partner hat
       hier 112px), sodass Nav→Item-Abstand = Item→Item-Abstand (8px), exakt
       wie bei jd-mail. -8rem trifft genau den 8px-Gap: die SICHTBARE Header-
       Unterkante (letzte m-subnav-row) liegt bei ~102px, die Header-Box geht
       aber wegen padding-bottom:12px bis 115px — der alte -7.2rem ließ diese
       12px als Überschuss stehen (21px statt 8px Abstand zum ersten Item). */
    margin-top: -8rem;
  }

  .m-nl-item {
    background: color-mix(in srgb, var(--darkblue) 75%, transparent);
    border: none;
    border-radius: var(--border);
    padding: 0.75rem 0.85rem;
    overflow: hidden;
    /* .accordion-item (Trick für Desktop-Handler-Reuse) bringt margin-top:0.5rem
       aus styles.css mit → würde den Item-Abstand auf 18px aufblähen. Neutralisieren,
       damit nur das 8px-listGap zählt (= jd-mail). */
    margin-top: 0 !important;
  }
  /* Erstes Item: 8px Abstand zur fixed Subnav (= Item→Item-Gap), sonst klebt es
     direkt an der Nav-Unterkante. Entspricht jd-mail (Nav→Item = Item→Item). */
  .m-nl-item:first-child {
    margin-top: 8px !important;
  }

  /* ── Kopf ── */
  .m-nl-head {
    display: flex;
    flex-wrap: nowrap;
    align-items: center;
    gap: 0.55rem;
    cursor: pointer;
  }
  .m-nl-status {
    display: inline-flex;
    align-items: center;
    justify-content: flex-start;
    gap: 0.5rem;
    flex: 0 0 auto;
    font-size: 0.95rem;
  }
  .m-nl-name {
    flex: 1 1 auto;
    min-width: 0;
    color: var(--white);
    font-weight: 500;
    font-size: 0.95rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .m-nl-flag-blacklist {
    color: var(--lightred);
    font-size: 1rem;
  }
  /* Zielgruppe-Indikator (Location-Icon) im Listenitem — weiss, analog Desktop. */
  .m-nl-flag-target {
    color: var(--white);
    font-size: 0.95rem;
  }
  .m-nl-paymodel {
    flex: 0 0 auto;
    color: var(--white);
    font-size: 0.65rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.4px;
    background: rgba(0, 0, 0, 0.25);
    border-radius: var(--border);
    padding: 0.15rem 0.45rem;
  }
  .m-nl-chev {
    flex: 0 0 auto;
    color: rgba(255, 255, 255, 0.55);
    font-size: 0.75rem;
    transition: transform 0.2s ease;
  }
  .m-nl-item.is-open .m-nl-chev {
    transform: rotate(180deg);
  }

  /* ── Stat-Reihe ── */
  .m-nl-stats {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    gap: 0.4rem;
    margin-top: 0.6rem;
  }
  .m-nl-stat {
    text-align: center;
    background: rgba(0, 0, 0, 0.2);
    border-radius: var(--border);
    padding: 0.5rem 0.2rem;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
  }
  .m-nl-stat-lbl {
    color: var(--white);
    font-size: 0.7rem;
    margin-bottom: 0.25rem;
  }
  .m-nl-stat-val {
    color: var(--white);
    font-weight: 700;
    font-size: 1rem;
    line-height: 1;
  }

  /* ── Detail (aufklappbar) ──
     Enthaelt seit 13.07.2026 NUR NOCH die Zusatz-Kennzahlen (Ziel/Leads, Unique-Zahlen,
     Start/Ende). Die Aktions-Reihe + das Status-Dropdown liegen jetzt AUSSERHALB und sind
     dauerhaft sichtbar (User-Wunsch: "die Buttons die ganze Zeit anzeigen"). Damit entfaellt
     auch die frueher noetige max-height-Sonderregel fuer das offene Dropdown — es kann in
     diesem overflow:hidden-Container gar nicht mehr abgeschnitten werden
     ([[UI Mobile Listen & Tabs]] Gotcha 1 ist hier strukturell geloest). */
  .m-nl-detail {
    max-height: 0;
    overflow: hidden;
    transition: max-height 0.28s ease, margin-top 0.28s ease;
    margin-top: 0;
  }
  .m-nl-item.is-open .m-nl-detail {
    max-height: 16rem;
    margin-top: 0.5rem;
  }
  .m-nl-detail-grid {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    gap: 0.4rem;
  }
  .m-nl-detail-cell {
    text-align: center;
    background: rgba(0, 0, 0, 0.2);
    border-radius: var(--border);
    padding: 0.5rem 0.2rem;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
  }
  .m-nl-detail-lbl {
    color: var(--white);
    font-size: 0.68rem;
    margin-bottom: 0.25rem;
  }
  .m-nl-detail-val {
    color: var(--white);
    font-weight: 700;
    font-size: 0.9rem;
    line-height: 1;
  }

  /* ── Aktions-Reihe ── */
  .m-nl-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.4rem;
    justify-content: center;
    margin-top: 0.6rem;
    padding-top: 0.6rem;
    border-top: 1px solid rgba(255, 255, 255, 0.06);
  }
  /* 34x34 quadratisch (identisch zu jd-mail, User-Standard 02.07.2026). padding:0 +
     min-height:34px neutralisieren die Touch-Regel @media(hover:none) button{padding:1rem 2rem}
     — sonst wird der Button auf echten Geraeten aufgeblaeht/verformt (Gotcha #113, im
     DevTools unsichtbar). 8 Icons (inkl. Kopieren) passen weiter in EINE Zeile:
     8×34 + 7×0.4rem(gap) ~317px < 333px Card-Breite. btn_add_ (Toggle-Aktiv)
     mit-selektieren (Gotcha #115). */
  .m-nl-actions .btn_add,
  .m-nl-actions .btn_add_,
  .m-nl-actions .btn_delete {
    width: 34px !important;
    height: 34px !important;
    min-width: 34px !important;
    min-height: 34px !important;
    padding: 0 !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    font-size: 1rem;
  }
  .m-nl-actions .btn_add > i,
  .m-nl-actions .btn_add_ > i,
  .m-nl-actions .btn_delete > i {
    margin: 0 !important;
  }
  /* Status-Bullhorn (.nl-btn-actions) ist im Desktop-styles.css per
     `.nl-btn-trash, .nl-btn-stamp, .nl-btn-flag, .nl-btn-actions { display:none }`
     versteckt (Desktop blendet sie per Hover ein). Mobil in der Aktions-Reihe
     wieder sichtbar machen, sonst fehlt der Status-Button. */
  .m-nl-actions .nl-btn-actions {
    display: flex !important;
    align-items: center;
    justify-content: center;
  }
  /* Lösch-Form wie ein normales Icon behandeln: feste 2.6rem-Kachel, damit
     sie sich in die Flex-Icon-Reihe einreiht statt (zu breit) in eine zweite
     Zeile umzubrechen und dort mittig-allein zu stehen. */
  .m-nl-actions .m-nl-trash {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2.4rem !important;
    height: 2.4rem !important;
    min-width: 2.4rem !important;
    flex: 0 0 auto;
    margin: 0;
    padding: 0;
  }
  .m-nl-actions .m-nl-trash .btn_delete {
    width: 100% !important;
    height: 100% !important;
    min-width: 0 !important;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0;
  }
  .m-nl-actions .m-nl-btn-disabled {
    opacity: 0.3;
    pointer-events: none;
    cursor: default;
  }

  /* ── Status-Dropdown (Alle abschließen / pausieren / fortsetzen) ──
     Volle-Breite-Block unter der Aktionsreihe (Desktop: schwebend). Der
     document-weite Handler togglet inline display:none/flex. Deckender
     Hintergrund + Rand, sonst verschmilzt es mit dem getönten Item
     (siehe [[UI Mobile Listen & Tabs]] Gotcha 2). */
  .m-nl-item .nl-actions-dropdown {
    width: 100% !important;
    margin: 0.6rem 0 0 0 !important;
    padding: 0.35rem !important;
    background: var(--darkblue) !important;
    border: 1px solid rgba(255, 255, 255, 0.12) !important;
    border-radius: var(--border) !important;
    box-shadow: rgba(0, 0, 0, 0.35) 0px 6px 16px -4px !important;
    flex-direction: column !important;
  }
  .m-nl-item .nl-actions-dropdown::before {
    content: "Status ändern";
    display: block;
    padding: 0.35rem 0.6rem 0.45rem;
    font-size: 0.72rem;
    text-transform: uppercase;
    letter-spacing: 0.3px;
    color: rgba(255, 255, 255, 0.55);
    border-bottom: 1px solid rgba(255, 255, 255, 0.08);
    margin-bottom: 0.25rem;
  }
  .m-nl-item .nl-actions-dropdown-item {
    color: var(--white);
    font-size: 0.9rem;
    padding: 0.7rem 0.7rem;
    border-radius: var(--border);
    cursor: pointer;
    display: flex;
    align-items: center;
  }
  .m-nl-item .nl-actions-dropdown-item:active {
    background-color: rgba(136, 84, 93, 0.25);
  }
  .m-nl-item .nl-actions-dropdown-item.nl-actions-disabled {
    opacity: 0.4;
    pointer-events: none;
  }
}

/* ===========================================================================
   KUNDEN-LISTE MOBIL (getClient) — m-cl-* Card-Items
   Struktur 1:1 wie m-nl-* (Kampagnen-Liste): Kopf (Name + Chevron) +
   Kategorie-Zeile + Stat-Reihe (Öffnungen-/Klicks-Rate, immer sichtbar) +
   aufklappbares Detail (Unique-Raten) + Aktions-Reihe (Kunde öffnen ->
   Lazy-Detail-Modal). Akzent Partner-Rosa (var(--darkRose)). Kunden zeigen
   2 KPIs -> Stat-/Detail-Grid ist 2-spaltig (m-nl: 3). Breakpoint 992px.
   Doku: Obsidian [[UI Mobile Listen & Tabs]] / [[UI Mobile]].
   =========================================================================== */
@media (max-width: 991px) {

  .m-cl-list {
    display: flex;
    flex-direction: column;
    gap: 8px;
    /* gleicht das padding-top von .m-subnav-content.has-row2 aus (wie m-nl-list) */
    margin-top: -8rem;
  }

  .m-cl-item {
    background: color-mix(in srgb, var(--darkblue) 75%, transparent);
    border: none;
    border-radius: var(--border);
    padding: 0.75rem 0.85rem;
    overflow: hidden;
  }

  /* ── Kopf: Name + Chevron ── */
  .m-cl-head {
    display: flex;
    flex-wrap: nowrap;
    align-items: center;
    gap: 0.55rem;
    cursor: pointer;
  }
  .m-cl-name {
    flex: 1 1 auto;
    min-width: 0;
    color: var(--white);
    font-weight: 500;
    font-size: 0.95rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .m-cl-chev {
    flex: 0 0 auto;
    color: rgba(255, 255, 255, 0.55);
    font-size: 0.75rem;
    transition: transform 0.2s ease;
  }
  .m-cl-item.is-open .m-cl-chev {
    transform: rotate(180deg);
  }

  /* ── Kategorie-Kachel (erstes KPI, immer sichtbar): volle Breite, linksbuendig,
     mehrere Kategorien duerfen umbrechen (nicht abschneiden). ── */
  .m-cl-cat-cell {
    background: rgba(0, 0, 0, 0.2);
    border-radius: var(--border);
    padding: 0.5rem 0.6rem;
    margin-top: 0.6rem;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    text-align: left;
  }
  .m-cl-cat-lbl {
    color: var(--white);
    font-size: 0.7rem;
    margin-bottom: 0.25rem;
  }
  .m-cl-cat-val {
    color: var(--white);
    font-weight: 700;
    font-size: 0.9rem;
    line-height: 1.35;
    white-space: normal;
  }
  .m-cl-cat-cell:not(:has(.m-cl-cat-val:not(:empty))) {
    display: none;
  }

  /* ── Stat-Reihe (immer sichtbar): 2-col Grid (OR/CR-Rate) ── */
  .m-cl-stats {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 0.4rem;
    margin-top: 0.6rem;
  }
  .m-cl-stat {
    text-align: center;
    background: rgba(0, 0, 0, 0.2);
    border-radius: var(--border);
    padding: 0.5rem 0.2rem;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
  }
  .m-cl-stat-lbl {
    color: var(--white);
    font-size: 0.7rem;
    margin-bottom: 0.25rem;
  }
  .m-cl-stat-val {
    color: var(--white);
    font-weight: 700;
    font-size: 1rem;
    line-height: 1;
  }
  .m-cl-stat-val .loader {
    width: 1rem;
    height: 1rem;
  }

  /* ── Detail (aufklappbar) ── */
  .m-cl-detail {
    max-height: 0;
    overflow: hidden;
    transition: max-height 0.28s ease, margin-top 0.28s ease;
    margin-top: 0;
  }
  .m-cl-item.is-open .m-cl-detail {
    max-height: 16rem;
    margin-top: 0.5rem;
  }
  .m-cl-detail-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 0.4rem;
  }
  .m-cl-detail-cell {
    text-align: center;
    background: rgba(0, 0, 0, 0.2);
    border-radius: var(--border);
    padding: 0.5rem 0.2rem;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
  }
  .m-cl-detail-lbl {
    color: var(--white);
    font-size: 0.68rem;
    margin-bottom: 0.25rem;
  }
  .m-cl-detail-val {
    color: var(--white);
    font-weight: 700;
    font-size: 0.9rem;
    line-height: 1;
  }
  /* ── Aktions-Reihe ── */
  .m-cl-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    justify-content: center;
    margin-top: 0.6rem;
    padding-top: 0.6rem;
    border-top: 1px solid rgba(255, 255, 255, 0.06);
  }
  .m-cl-actions .btn_add {
    width: 34px !important;
    height: 34px !important;
    min-width: 34px !important;
    min-height: 34px !important;   /* neutralisiert @media(hover:none) min-height:44px (Gotcha #113) */
    padding: 0 !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    font-size: 1rem;
  }
  .m-cl-actions .btn_add > i {
    margin: 0 !important;
  }
}

/* ===========================================================================
   WERBEFLÄCHEN-LISTE MOBIL (getAdSpaces, type a)
   m-as-* Card-Items + Accordion. Struktur 1:1 wie m-nl-* (Kampagnen-Liste),
   Akzent Partner-Rosa (var(--darkRose) #88545d). Breakpoint 992px.
   Doku: Obsidian [[UI Mobile Listen & Tabs]] / [[UI Mobile]].
   =========================================================================== */
@media (max-width: 991px) {

  .m-as-list {
    display: flex;
    flex-direction: column;
    gap: 8px;
    /* gleicht das padding-top von .m-subnav-content.has-row2 aus (Partner 112px),
       sodass Nav→Item-Abstand = Item→Item-Abstand (8px), exakt wie m-nl-list. */
    margin-top: -8rem;
  }

  .m-as-item {
    background: color-mix(in srgb, var(--darkblue) 75%, transparent);
    border: none;
    border-radius: var(--border);
    padding: 0.75rem 0.85rem;
    overflow: hidden;
    /* .accordion-item bringt margin-top:0.5rem aus styles.css mit → neutralisieren,
       damit nur das 8px-listGap zählt (= m-nl-item). */
    margin-top: 0 !important;
  }
  .m-as-item:first-child {
    margin-top: 8px !important;
  }

  /* ── Kopf ── */
  .m-as-head {
    display: flex;
    flex-wrap: nowrap;
    align-items: center;
    gap: 0.55rem;
    cursor: pointer;
  }
  .m-as-status {
    display: inline-flex;
    align-items: center;
    justify-content: flex-start;
    gap: 0.5rem;
    flex: 0 0 auto;
    font-size: 0.95rem;
  }
  /* JD-Mail-Logo (weiße Wortmarke, wie Desktop-Card) statt Icon */
  .m-as-flag-mail {
    height: 0.85rem;
    width: auto;
    display: block;
    flex: 0 0 auto;
  }
  /* Favoriten-Stern: klickbar (eigener Handler), darf NICHT auf-/zuklappen.
     Inaktiv = blass-grau, aktiv = gelb (wie Desktop .active-star). */
  .m-as-flag-fav {
    color: rgba(255, 255, 255, 0.35);
    font-size: 0.95rem;
    cursor: pointer;
    transition: color 0.15s ease;
  }
  .m-as-flag-fav.active-star {
    color: #f5c419;
  }
  .m-as-name {
    flex: 1 1 auto;
    min-width: 0;
    color: var(--white);
    font-weight: 500;
    font-size: 0.95rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .m-as-chev {
    flex: 0 0 auto;
    color: rgba(255, 255, 255, 0.55);
    font-size: 0.75rem;
    transition: transform 0.2s ease;
  }
  .m-as-item.is-open .m-as-chev {
    transform: rotate(180deg);
  }

  /* ── Stat-Reihe ── */
  .m-as-stats {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    gap: 0.4rem;
    margin-top: 0.6rem;
  }
  .m-as-stat {
    text-align: center;
    background: rgba(0, 0, 0, 0.2);
    border-radius: var(--border);
    padding: 0.5rem 0.2rem;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
  }
  .m-as-stat-lbl {
    color: var(--white);
    font-size: 0.7rem;
    margin-bottom: 0.25rem;
  }
  .m-as-stat-val {
    color: var(--white);
    font-weight: 700;
    font-size: 1rem;
    line-height: 1;
    min-height: 1rem;
  }
  /* Loader im Stat-Wert mittig + klein halten, bis die Zahl per AJAX kommt */
  .m-as-stat-val .loader,
  .m-as-detail-val .loader {
    margin: 0 auto;
    transform: scale(0.6);
  }

  /* ── Detail (aufklappbar) ── */
  .m-as-detail {
    max-height: 0;
    overflow: hidden;
    transition: max-height 0.28s ease, margin-top 0.28s ease;
    margin-top: 0;
  }
  .m-as-item.is-open .m-as-detail {
    max-height: 16rem;
    margin-top: 0.5rem;
  }
  .m-as-detail-grid {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    gap: 0.4rem;
  }
  .m-as-detail-cell {
    text-align: center;
    background: rgba(0, 0, 0, 0.2);
    border-radius: var(--border);
    padding: 0.5rem 0.2rem;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
  }
  .m-as-detail-lbl {
    color: var(--white);
    font-size: 0.68rem;
    margin-bottom: 0.25rem;
  }
  .m-as-detail-val {
    color: var(--white);
    font-weight: 700;
    font-size: 0.9rem;
    line-height: 1;
  }

  /* ── Aktions-Reihe ── */
  .m-as-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    align-items: center;
    justify-content: center;
    margin-top: 0.6rem;
    padding-top: 0.6rem;
    border-top: 1px solid rgba(255, 255, 255, 0.06);
  }
  .m-as-actions .btn_add {
    width: 2.6rem !important;
    height: 2.6rem !important;
    min-width: 2.6rem !important;
    font-size: 1rem;
    display: inline-flex;
    align-items: center;
    justify-content: center;
  }
  .m-as-actions .m-as-anfragen-btn {
    height: 2.6rem;
    padding: 0 1.1rem;
  }
}

/* ===========================================================================
   BLACKLIST-LISTE MOBIL (getBlacklist) — eingefuehrt 2026-07-03
   m-bl-* Card-Items + Accordion. Struktur 1:1 wie m-nl-* (Kampagnen-Liste),
   portiert von jd-mail: Kopf (Typ-Icon + Name + Hash-Badge + Chevron) +
   Stat-Reihe (Eintraege/Typ/Update) + aufklappbares Detail (Erstellt/Update)
   + Aktions-Reihe (Ansehen/Hinzufuegen/Loeschen, 34x34-Paket).
   Akzent Partner-Rosa (var(--darkRose) #88545d). Breakpoint 992px.
   Doku: Obsidian [[UI Mobile Listen & Tabs]] / [[UI Mobile]].
   =========================================================================== */
@media (max-width: 991px) {

  .m-bl-list {
    display: flex;
    flex-direction: column;
    gap: 8px; /* exakt wie m-nl-list (Partner: fix in px) */
    /* has-row2-padding-Ausgleich wie Partner-m-nl-list (-8rem, Partner-Subnav ist
       hoeher als bei jd-mail — NICHT den Mail-Wert -3.05rem uebernehmen).
       +8px: die Blacklist-Subnav hat eine Titel-Zeile statt des hoeheren
       AdSpace-Selectors (getNewsletter) — ohne Korrektur rutscht das erste Item
       8px zu weit hoch (gemessen: Referenz m-nl -4 vs. m-bl -12 zur Subnav-Box). */
    margin-top: calc(-8rem + 8px);
  }
  /* Empty-State (Text immer Weiss, nicht Grau) */
  .m-bl-list .dash-adv-empty {
    padding: 1rem 0.5rem;
    text-align: center;
    color: var(--white);
    font-size: 0.85rem;
  }

  /* ── Item-Card ── */
  .m-bl-item {
    background: color-mix(in srgb, var(--darkblue) 75%, transparent);
    border: none;
    border-radius: var(--border);
    padding: 0.75rem 0.85rem;
    overflow: hidden;
  }

  /* ── Kopf: Name | Hash-Badge | Chevron ── */
  .m-bl-head {
    display: flex;
    flex-wrap: nowrap;
    align-items: center;
    gap: 0.55rem;
    cursor: pointer;
  }
  .m-bl-name {
    flex: 1 1 auto;
    min-width: 0;
    color: var(--white);
    font-weight: 500;
    font-size: 0.95rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .m-bl-badge {
    flex: 0 0 auto;
    color: var(--white);
    font-size: 0.65rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.4px;
    background: rgba(0, 0, 0, 0.25);
    border-radius: var(--border);
    padding: 0.15rem 0.45rem;
  }
  .m-bl-chev {
    flex: 0 0 auto;
    color: rgba(255, 255, 255, 0.55);
    font-size: 0.75rem;
    transition: transform 0.2s ease;
  }
  .m-bl-item.is-open .m-bl-chev {
    transform: rotate(180deg);
  }

  /* ── Stat-Reihe (immer sichtbar): 3-col Grid ── */
  .m-bl-stats {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    gap: 0.4rem;
    margin-top: 0.6rem;
  }
  .m-bl-stat {
    text-align: center;
    background: rgba(0, 0, 0, 0.2);
    border-radius: var(--border);
    padding: 0.5rem 0.2rem;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
  }
  .m-bl-stat-lbl {
    color: var(--white);
    font-size: 0.7rem;
    margin-bottom: 0.25rem;
  }
  .m-bl-stat-val {
    color: var(--white);
    font-weight: 700;
    font-size: 1rem;
    line-height: 1;
  }

  /* ── Detail (aufklappbar) ── */
  .m-bl-detail {
    max-height: 0;
    overflow: hidden;
    transition: max-height 0.28s ease, margin-top 0.28s ease;
    margin-top: 0;
  }
  .m-bl-item.is-open .m-bl-detail {
    max-height: 16rem;
    margin-top: 0.5rem;
  }
  .m-bl-detail-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 0.4rem;
  }
  .m-bl-detail-cell {
    text-align: center;
    background: rgba(0, 0, 0, 0.2);
    border-radius: var(--border);
    padding: 0.5rem 0.2rem;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
  }
  .m-bl-detail-lbl {
    color: var(--white);
    font-size: 0.68rem;
    margin-bottom: 0.25rem;
  }
  .m-bl-detail-val {
    color: var(--white);
    font-weight: 700;
    font-size: 0.9rem;
    line-height: 1;
  }

  /* ── Aktions-Reihe ── */
  .m-bl-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    justify-content: center;
    margin-top: 0.6rem;
    padding-top: 0.6rem;
    border-top: 1px solid rgba(255, 255, 255, 0.06);
  }
  .m-bl-actions .btn_add,
  .m-bl-actions .btn_add_,
  .m-bl-actions .btn_delete {
    width: 34px !important;
    height: 34px !important;
    min-width: 34px !important;
    min-height: 34px !important;   /* neutralisiert @media(hover:none) min-height:44px (Gotcha #113) */
    padding: 0 !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    font-size: 1rem;
  }
  .m-bl-actions .btn_add > i,
  .m-bl-actions .btn_add_ > i,
  .m-bl-actions .btn_delete > i {
    margin: 0 !important;
  }
}

/* ===========================================================================
   DYNAMISCHE INHALTE MOBIL (getDynamic) — eingefuehrt 2026-07-03
   m-dyn-* Card-Items + Accordion, 1:1 nach dem m-bl-* Pattern (portiert von
   jd-mail): Kopf (Icon Globus/Ordner + Name + Tag-Badge + Chevron) +
   Stat-Reihe (Erstellt/Update) + aufklappbares Detail (Aktions-Reihe
   Vorschau/Bearbeiten/Loeschen, 34x34-Paket). Breakpoint 992px.
   Doku: Obsidian [[UI Mobile Listen & Tabs]] / [[UI Mobile]].
   =========================================================================== */
@media (max-width: 991px) {

  .m-dyn-list {
    display: flex;
    flex-direction: column;
    gap: 8px; /* exakt wie m-nl-/m-bl-list (Partner: fix in px) */
    /* has-row2-padding-Ausgleich wie m-bl-list (Partner-Subnav ist hoeher als
       bei jd-mail — NICHT den Mail-Wert -3.05rem uebernehmen). +8px wie m-bl
       (Titel-Zeile statt AdSpace-Selector). Titel ist seit dem nowrap-Fix
       immer einzeilig → Höhe geräteunabhängig konstant (Ziel -4px zur
       Subnav-Box wie m-bl-Referenz). Gotcha #13: gegen Referenzseite messen. */
    margin-top: calc(-8rem + 8px);
  }

  /* ── Item-Card ── */
  .m-dyn-item {
    background: color-mix(in srgb, var(--darkblue) 75%, transparent);
    border: none;
    border-radius: var(--border);
    padding: 0.75rem 0.85rem;
    overflow: hidden;
  }

  /* ── Kopf: Icon | Name | Tag-Badge | Chevron ── */
  .m-dyn-head {
    display: flex;
    flex-wrap: nowrap;
    align-items: center;
    gap: 0.55rem;
  }
  .m-dyn-status {
    display: inline-flex;
    align-items: center;
    justify-content: flex-start;
    gap: 0.5rem;
    flex: 0 0 auto;
    font-size: 0.95rem;
  }
  .m-dyn-status i {
    color: rgba(255, 255, 255, 0.75);
  }
  .m-dyn-name {
    flex: 1 1 auto;
    min-width: 0;
    color: var(--white);
    font-weight: 500;
    font-size: 0.95rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .m-dyn-badge {
    flex: 0 0 auto;
    max-width: 8rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    color: var(--white);
    font-size: 0.65rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.4px;
    background: rgba(0, 0, 0, 0.25);
    border-radius: var(--border);
    padding: 0.15rem 0.45rem;
  }
  /* ── Stat-Reihe (immer sichtbar): 2-col Grid ── */
  .m-dyn-stats {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 0.4rem;
    margin-top: 0.6rem;
  }
  .m-dyn-stat {
    text-align: center;
    background: rgba(0, 0, 0, 0.2);
    border-radius: var(--border);
    padding: 0.5rem 0.2rem;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
  }
  .m-dyn-stat-lbl {
    color: var(--white);
    font-size: 0.7rem;
    margin-bottom: 0.25rem;
  }
  .m-dyn-stat-val {
    color: var(--white);
    font-weight: 700;
    font-size: 1rem;
    line-height: 1;
  }

  /* ── Aktions-Reihe (immer sichtbar) ── */
  .m-dyn-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    justify-content: center;
    margin-top: 0.6rem;
    padding-top: 0.6rem;
    border-top: 1px solid rgba(255, 255, 255, 0.06);
  }
  .m-dyn-actions .btn_add,
  .m-dyn-actions .btn_delete {
    width: 34px !important;
    height: 34px !important;
    min-width: 34px !important;
    min-height: 34px !important;   /* neutralisiert @media(hover:none) min-height:44px (Gotcha #113) */
    padding: 0 !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    font-size: 1rem;
  }
  .m-dyn-actions .btn_add > i,
  .m-dyn-actions .btn_delete > i {
    margin: 0 !important;
  }
  .m-dyn-actions form {
    width: auto !important;
    margin: 0 !important;
  }

  /* ── Bedingungs-Zeilen in den Erstellen-/Bearbeiten-Modals ──
     Die .col-Spalten einer Bedingung (Auswahl/Kampagne/Status/Von/Bis) stapeln
     mobil untereinander, hatten aber 0px Abstand (klebten aneinander). Das
     main-Feld ist immer die erste sichtbare Spalte → jede weitere bekommt Luft. */
  #setDynamicPage [class*="inputGroupDynamic-"] .col + .col,
  [id^="getDynamicData"] [class*="inputGroupDynamic-"] .col + .col {
    margin-top: 0.5rem;
  }
  /* Abstand ZWISCHEN den Bedingungs-Gruppen (feste Wochentag-Zeile → hinzugefügte
     Bedingungen) — das innere mt-1 (0.25rem) allein ist mobil zu wenig. */
  #setDynamicPage [class*="inputGroupDynamic-"] + [class*="inputGroupDynamic-"],
  [id^="getDynamicData"] [class*="inputGroupDynamic-"] + [class*="inputGroupDynamic-"] {
    margin-top: 0.5rem;
  }
  /* Tabs → erstes Element (Geschlecht-Select) exakt 1rem — etablierte Modal-Regel;
     !important gegen Bootstrap .mt-1 (das selbst !important trägt). Die gender-.row
     ist die EINZIGE .row, die ein gender-Select enthält (Bedingungs-Rows haben
     keins) → kein direkter-Kind-Combinator nötig; matcht Mail (row in .tooltip-
     container) und Partner (row direkt im tab-pane) gleichermaßen. */
  #setDynamicPage .tab-pane .row:has(select[name="gender"]),
  [id^="getDynamicData"] .tab-pane .row:has(select[name="gender"]) {
    margin-top: 1rem !important;
  }

  /* =========================================================
     INHALT- + STANDARD-INHALT-TABS (TinyMCE-Editor)
     Identisches .editor-with-panel Flex-ROW-Layout wie im Kampagne-Modal
     (setNewsletterPage/getNewsletterData) — Editor + 320px-Side-Panel zwingend
     nebeneinander, feste Inline-Groessen (height:70vh, width:90%). Mobil zu eng.
     1:1 dieselbe Behandlung: untereinander stapeln, Editor volle Breite,
     Buttons als Leiste, Side-Panel volle Breite. Gilt fuer Erstellen
     (#setDynamicPage) UND Bearbeiten ([id^=getDynamicData]).
     ========================================================= */

  /* (1) Editor + Side-Panel untereinander statt nebeneinander */
  #setDynamicPage .editor-with-panel,
  [id^="getDynamicData"] .editor-with-panel {
    flex-direction: column !important;
    width: 100% !important;
  }
  /* Editor-Spalte (1. Kind) volle Breite */
  #setDynamicPage .editor-with-panel > div:first-child,
  [id^="getDynamicData"] .editor-with-panel > div:first-child {
    width: 100% !important;
    min-width: 0 !important;
  }
  /* (2) TinyMCE: volle Breite, moderate feste Hoehe statt 90%/70vh */
  #setDynamicPage .editor-with-panel .tox-tinymce,
  [id^="getDynamicData"] .editor-with-panel .tox-tinymce {
    width: 100% !important;
    height: 45vh !important;
    min-height: 18rem !important;
    margin: 0.75rem 0 0 !important;
  }
  #setDynamicPage .editor-with-panel textarea.tiny-target,
  [id^="getDynamicData"] .editor-with-panel textarea.tiny-target {
    width: 100% !important;
  }
  /* (3) Side-Panel-Buttons: horizontale Leiste statt vertikal, zentriert.
     Buttons quadratisch 40x40 — direkt auf toggle-Klassen zielen (nicht an
     .btn_add koppeln): im aktiven Zustand wechselt die Klasse zu btn_add_
     (Unterstrich). Gegen @media(hover:none) 64px-Padding (Gotcha #113). */
  #setDynamicPage .side-panel-buttons,
  [id^="getDynamicData"] .side-panel-buttons {
    flex-direction: row !important;
    flex-wrap: wrap !important;
    justify-content: center !important;
    align-self: stretch !important;
    width: 100% !important;
    margin-top: 0.5rem !important;
  }
  #setDynamicPage .side-panel-buttons .btn_add,
  #setDynamicPage .side-panel-buttons .btn_add_,
  #setDynamicPage .toggle-param-btn,
  #setDynamicPage .toggle-block-btn,
  [id^="getDynamicData"] .side-panel-buttons .btn_add,
  [id^="getDynamicData"] .side-panel-buttons .btn_add_,
  [id^="getDynamicData"] .toggle-param-btn,
  [id^="getDynamicData"] .toggle-block-btn {
    width: 40px !important;
    min-width: 40px !important;
    height: 40px !important;
    padding: 0 !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
  }
  #setDynamicPage .side-panel-buttons .btn_add > i,
  #setDynamicPage .side-panel-buttons .btn_add_ > i,
  #setDynamicPage .toggle-param-btn > i,
  #setDynamicPage .toggle-block-btn > i,
  [id^="getDynamicData"] .side-panel-buttons .btn_add > i,
  [id^="getDynamicData"] .side-panel-buttons .btn_add_ > i,
  [id^="getDynamicData"] .toggle-param-btn > i,
  [id^="getDynamicData"] .toggle-block-btn > i {
    margin: 0 !important;
  }
  /* (4) Side-Panel-Content (ausklappbare Parameter-/Baustein-Liste): wenn
     aufgeklappt, volle Breite statt fixer 320px (sonst Overflow) */
  #setDynamicPage .side-panel-content,
  [id^="getDynamicData"] .side-panel-content {
    max-width: 100% !important;
  }
  #setDynamicPage .side-panel-content[style*="width: 320"],
  #setDynamicPage .side-panel-content:not([style*="width: 0"]),
  [id^="getDynamicData"] .side-panel-content[style*="width: 320"],
  [id^="getDynamicData"] .side-panel-content:not([style*="width: 0"]) {
    width: 100% !important;
  }
  /* Innerer Wrapper hat inline width:320px -> volle Breite */
  #setDynamicPage .side-panel-content > div,
  [id^="getDynamicData"] .side-panel-content > div {
    width: 100% !important;
  }
  /* copy-wrapper (Parameter-/Baustein-Items) je volle Breite, 1 pro Zeile */
  #setDynamicPage .side-panel-content .copy-wrapper,
  [id^="getDynamicData"] .side-panel-content .copy-wrapper {
    width: 100% !important;
    flex: 0 0 100% !important;
  }
  /* (5) Editor-Ansicht-Umschalter (Desktop/Tablet/Mobile) ueber dem Editor: setzt
     nur die Editor-Vorschau-Breite — mobil sinnlos, ausblenden (wie Kampagne-Modal).
     Klassenloser Flex-Container, ueber :has(> .btn_add[title=...]) adressiert. */
  #setDynamicPage .tab-pane div:has(> .btn_add[title="Desktop"]):has(> .btn_add[title="Tablet"]),
  [id^="getDynamicData"] .tab-pane div:has(> .btn_add[title="Desktop"]):has(> .btn_add[title="Tablet"]) {
    display: none !important;
  }
  /* (6) Global-Toggle (.switch-button.position-absolute) liegt per Inline-Style
     absolut oben rechts (top:1.7rem, right:2rem) → überlappt mobil den zentrierten
     zweizeiligen Titel UND den ×-Button. Aus dem absoluten Fluss lösen und als
     eigene statische Reihe (linksbündig, mit Abstand nach unten) UNTER den Header
     setzen — so kollidiert er weder mit Titel noch ×-Button. */
  #setDynamicPage .switch-button.position-absolute,
  [id^="getDynamicData"] .switch-button.position-absolute {
    position: static !important;
    top: auto !important;
    right: auto !important;
    left: auto !important;
    margin: 0.25rem 0 0.75rem !important;
    flex-direction: row !important;   /* Toggle + "Global"-Label nebeneinander (Inline-Style-Vorgabe) */
    align-items: center !important;
    justify-content: center !important;
    gap: 0.5rem !important;
    z-index: 6 !important;
  }
}

/* ===========================================================================
   HEADER-MODALS MOBIL: Profil (#userSettings) · Benachrichtigungen (#getMessage)
   · Anfragen (#getRequest). Diese Modals werden mobil an <body> reparentet,
   nutzen mc_a_row. Tabellen-Tabs (Verlauf, Anfragen) → Card-Stack mit
   ::before-Labels (Pattern aus [[UI Mobile Listen & Tabs]]). Akzent Rosa.
   =========================================================================== */
@media (max-width: 991px) {

  /* ─────────────────────────────────────────────────────────────
     PROFIL → Tab VERLAUF (#userLogToolUser): 6-Spalten-Tabelle → Card-Stack
     Header-Leiste (.container-fluid mit Gradient) ausblenden, jede Daten-Zeile
     (.accordion-item > .container-fluid > .row > 6× col-N) als Card stapeln.
     ───────────────────────────────────────────────────────────── */
  /* Header-Leiste (Zeitpunkt/User/Aktion/Details/Endgerät/IP) weg — sie ist
     das direkte container-fluid mit linear-gradient VOR #userLogList. */
  #userSettings #userLogToolUser > .container-fluid:first-of-type {
    display: none !important;
  }
  #userSettings #userLogList {
    max-height: 60vh !important;
    padding-right: 0 !important;
    /* Scrollbalken ausblenden (Scroll-Funktion bleibt) */
    scrollbar-width: none !important;          /* Firefox */
    -ms-overflow-style: none !important;       /* alte Edge/IE */
  }
  #userSettings #userLogList::-webkit-scrollbar {
    display: none !important;                   /* Chrome/Safari */
    width: 0 !important;
    height: 0 !important;
  }
  /* Jeder Log-Eintrag → Card */
  #userSettings #userLogList .accordion-item {
    background: color-mix(in srgb, var(--darkblue) 75%, transparent) !important;
    border-radius: var(--border) !important;
    padding: 0.4rem 0.6rem !important;
    margin-bottom: 0.5rem !important;
  }
  #userSettings #userLogList .accordion-item .container-fluid { padding: 0 !important; }
  /* Zeile entstapeln: Label→Wert untereinander */
  #userSettings #userLogList .accordion-item .row {
    display: flex !important;
    flex-direction: column !important;
    padding: 0 !important;
    margin: 0 !important;
    align-items: stretch !important;
  }
  /* Jede Zelle (col-N): Label links + Wert rechts */
  #userSettings #userLogList .accordion-item .row > [class*="col-"] {
    display: flex !important;
    flex: 0 0 100% !important;
    max-width: 100% !important;
    width: 100% !important;
    align-items: center !important;
    justify-content: space-between !important;
    padding: 0.3rem 0 !important;
    gap: 0.75rem !important;
  }
  /* Labels via ::before (Reihenfolge = ausgeblendete Header-Spalten) */
  #userSettings #userLogList .accordion-item .row > [class*="col-"]:nth-child(1)::before { content: "Zeitpunkt"; }
  #userSettings #userLogList .accordion-item .row > [class*="col-"]:nth-child(2)::before { content: "User"; }
  #userSettings #userLogList .accordion-item .row > [class*="col-"]:nth-child(3)::before { content: "Aktion"; }
  #userSettings #userLogList .accordion-item .row > [class*="col-"]:nth-child(4)::before { content: "Details"; }
  #userSettings #userLogList .accordion-item .row > [class*="col-"]:nth-child(5)::before { content: "Endgerät"; }
  #userSettings #userLogList .accordion-item .row > [class*="col-"]:nth-child(6)::before { content: "IP"; }
  #userSettings #userLogList .accordion-item .row > [class*="col-"]::before {
    flex: 0 0 auto !important;
    color: var(--white) !important;
    font-size: 0.72rem !important;
    text-transform: uppercase !important;
    letter-spacing: 0.3px !important;
    opacity: 1 !important;
  }
  /* Werte (input.form-control + div.form-control) rechtsbündig, kein Input-Look */
  #userSettings #userLogList .accordion-item input.form-control,
  #userSettings #userLogList .accordion-item div.form-control {
    flex: 1 1 auto !important;
    min-width: 0 !important;
    width: auto !important;
    background: transparent !important;
    border: none !important;
    box-shadow: none !important;
    color: var(--white) !important;
    text-align: right !important;
    padding: 0 !important;
    margin: 0 !important;
    height: auto !important;
    min-height: 0 !important;
    font-size: 0.85rem !important;
    white-space: normal !important;
    word-break: break-word !important;
  }

  /* ─────────────────────────────────────────────────────────────
     PROFIL → Tab EINSTELLUNGEN (#notificationSettingsToolUser):
     Switches stehen mit gap:3rem nowrap → Overflow. Mobil als zentrierte
     SPALTE untereinander (Switch + Label nebeneinander pro Zeile), touch-fair.
     ───────────────────────────────────────────────────────────── */
  #userSettings #notificationSettingsToolUser .row {
    margin-top: 1rem !important;
  }
  #userSettings #notificationSettingsToolUser .col.d-flex {
    flex-direction: column !important;
    flex-wrap: nowrap !important;
    gap: 1.25rem !important;
    align-items: stretch !important;
  }
  /* Jeder Switch: Label links, Toggle rechts — als Zeile in einer Card.
     Das Original .switch-button ist flex-direction:column mit height:28px;
     der .switch-outer nutzt height:100% (=28px). Beim Umbau auf row-reverse
     kollabiert die 100%-Höhe → Toggle zerschossen. Darum: switch-outer feste
     Maße geben (58×28px) und die Original-Switch-Mechanik unangetastet lassen. */
  #userSettings #notificationSettingsToolUser .switch-button {
    display: flex !important;
    flex-direction: row-reverse !important;
    align-items: center !important;
    justify-content: space-between !important;
    background: color-mix(in srgb, var(--darkblue) 75%, transparent) !important;
    border-radius: var(--border) !important;
    padding: 0.6rem 0.85rem !important;
    width: 100% !important;
    height: auto !important;          /* Original 28px aufheben, Card-Höhe via padding */
    margin: 0 !important;
  }
  /* Toggle-Body: feste Maße, sonst kollabiert er im row-Layout */
  #userSettings #notificationSettingsToolUser .switch-button .switch-outer {
    height: 28px !important;
    width: 58px !important;
    flex: 0 0 58px !important;
  }
  #userSettings #notificationSettingsToolUser .switch-button label {
    margin: 0 !important;
    color: var(--white) !important;
    font-size: 0.95rem !important;
    text-align: left !important;
    flex: 1 1 auto !important;
  }

  /* ─────────────────────────────────────────────────────────────
     BENACHRICHTIGUNGEN (#getMessage): Action-Buttons + Nachrichten-Cards
     ───────────────────────────────────────────────────────────── */
  /* Action-Buttons (Alle gelesen / Alle löschen) aus position-absolute lösen:
     sie überlappen sonst Titel + ×. Als normale Reihe UNTER den Header. */
  #getMessage .position-absolute[style*="top: 0.5rem"][style*="right: 1rem"] {
    position: static !important;
    display: flex !important;
    flex-wrap: wrap !important;
    gap: 0.5rem !important;
    justify-content: center !important;
    margin: 0.25rem 0 0.75rem !important;
  }
  #getMessage #messages_container {
    max-height: 62vh !important;
    /* Scrollbalken ausblenden (Scroll-Funktion bleibt) — wie #userLogList */
    scrollbar-width: none !important;          /* Firefox */
    -ms-overflow-style: none !important;       /* alte Edge/IE */
  }
  #getMessage #messages_container::-webkit-scrollbar {
    display: none !important;                   /* Chrome/Safari */
    width: 0 !important;
    height: 0 !important;
  }
  /* Nachrichten-Card — Pattern wie jd-mail: Titel/Text/Datum gestapelt via
     `order`, Buttons (Auge/Trash) STATISCH im Flow als zentrierte Reihe unten
     (nicht absolut oben rechts → kein Text/Button-Overlap mehr).
     Struktur: .message-item > .container-fluid > [col-lg-3(Titel), col-lg-6(Text),
     col-lg-2(Datum), button(Auge), button(Trash), unread-dot]. */
  #getMessage .message-item {
    width: 100% !important;
    box-sizing: border-box !important;
    background: color-mix(in srgb, var(--darkblue) 75%, transparent) !important;
    border-radius: var(--border) !important;
    padding: 0.85rem !important;
    margin-bottom: 0.5rem !important;
    min-height: 0 !important;
  }
  #getMessage .message-item > .container-fluid {
    display: flex !important;
    flex-flow: wrap !important;
    justify-content: center !important;
    gap: 0 !important;
    padding: 0 !important;
    position: static !important;
  }
  /* Alle Daten-Spalten volle Breite, Inner-.px-1-Padding killen */
  #getMessage .message-item > .container-fluid > [class*="col-lg"] {
    display: block !important;
    flex: 0 0 100% !important;
    width: 100% !important;
    max-width: 100% !important;
    margin: 0 !important;
  }
  #getMessage .message-item > .container-fluid > [class*="col-lg"] .px-1 {
    padding: 0 !important;
  }
  /* Reihenfolge: Titel → Text → Datum → Buttons; unread-dot ganz vorn (absolut) */
  #getMessage .message-item > .container-fluid > .col-lg-3 {
    order: 1 !important;
    margin-bottom: 0.4rem !important;
    padding-left: 1.1rem !important; /* Platz für unread-dot */
    position: relative !important;
  }
  #getMessage .message-item > .container-fluid > .col-lg-6 { order: 2 !important; }
  #getMessage .message-item > .container-fluid > .col-lg-2 {
    order: 3 !important;
    margin-top: 0.5rem !important;
    padding-left: 1.1rem !important;
  }
  /* Werte (Titel/Text/Datum-Inputs + form-control): transparent, links, kein Input-Look */
  #getMessage .message-item > .container-fluid > [class*="col-lg"] input,
  #getMessage .message-item > .container-fluid > [class*="col-lg"] .form-control,
  #getMessage .message-item > .container-fluid > [class*="col-lg"] > div {
    background: transparent !important;
    border: none !important;
    box-shadow: none !important;
    color: var(--white) !important;
    text-align: left !important;
    justify-content: flex-start !important;
    align-items: flex-start !important;
    margin: 0 !important;
    padding: 0 !important;
    height: auto !important;
    white-space: normal !important;
    word-break: break-word !important;
  }
  /* Datum gedämpft + kleiner */
  #getMessage .message-item > .container-fluid > .col-lg-2 > div {
    opacity: 0.7 !important;
    font-size: 0.8rem !important;
  }
  /* unread-dot oben links (vor Titel) */
  #getMessage .message-item > .container-fluid > .unread-dot {
    position: absolute !important;
    top: 1.15rem !important;
    left: 0.85rem !important;
    transform: none !important;
    order: 0 !important;
  }
  /* Auge + Trash: STATISCH im Flow, zentrierte Reihe unten (order:4) */
  #getMessage .message-item > .container-fluid > .btn_add,
  #getMessage .message-item > .container-fluid > .btn_delete,
  #getMessage .message-item > .container-fluid > .btn-message-detail {
    position: static !important;
    top: auto !important;
    right: auto !important;
    bottom: auto !important;
    transform: none !important;
    order: 4 !important;
    flex: 0 0 auto !important;
    width: 2.6rem !important;
    height: 2.6rem !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    margin: 0.7rem 0.3rem 0 !important;
  }

  /* ─────────────────────────────────────────────────────────────
     ANFRAGEN (#getRequest): Tabelle → Card-Stack (type a = 8 Spalten, type p = 6)
     Header-Leiste (.request-header) weg, jede .accordion-item-Zeile als Card.
     Struktur: .accordion-item > div[flex] > N× div[flex:N] > input + 3 abs Buttons.
     type p traegt .req-row-p (Werbeflaeche ist dort ein Tab, keine Spalte).
     ───────────────────────────────────────────────────────────── */
  #getRequest .request-header {
    display: none !important;
  }
  #getRequest .request-list-container,
  #getRequest #requestsLiveWrapper {
    max-height: 64vh !important;
    /* Scrollbalken ausblenden (Scroll-Funktion bleibt) — wie #userLogList / #messages_container */
    scrollbar-width: none !important;          /* Firefox */
    -ms-overflow-style: none !important;       /* alte Edge/IE */
  }
  #getRequest .request-list-container::-webkit-scrollbar,
  #getRequest #requestsLiveWrapper::-webkit-scrollbar {
    display: none !important;                   /* Chrome/Safari */
    width: 0 !important;
    height: 0 !important;
  }
  #getRequest .accordion-item {
    background: color-mix(in srgb, var(--darkblue) 75%, transparent) !important;
    border-radius: var(--border) !important;
    margin-bottom: 0.5rem !important;
    padding: 0.6rem 0.75rem !important;
  }
  /* Flex-Wrapper der Zeile: row wrap (wie Mail) — Daten-Zeilen volle Breite,
     die 3 Buttons brechen in eine gemeinsame zentrierte Reihe unten um. */
  #getRequest .accordion-item > div[style*="display: flex"] {
    flex-flow: row wrap !important;
    align-items: center !important;
    justify-content: center !important;
    padding-right: 0 !important;
    padding-bottom: 0 !important;
  }
  /* Jede Spalte: Label links + Wert rechts, volle Breite (eigene Zeile) */
  #getRequest .accordion-item > div[style*="display: flex"] > div {
    flex: 0 0 100% !important;
    width: 100% !important;
    display: flex !important;
    align-items: center !important;
    justify-content: space-between !important;
    padding: 0.3rem 0.4rem !important;
    gap: 0.75rem !important;
  }
  /* Labels via ::before — seit 25.07.2026 traegt jede Zeile ihre Rollen-Klasse
     (.req-row-a = Advertiser, .req-row-p = Publisher), weil die beiden Ansichten
     unterschiedlich viele Spalten in unterschiedlicher Reihenfolge haben. Vorher
     galten die 8 Advertiser-Labels fuer BEIDE Ansichten — auf den Publisher-Zeilen
     (damals 7 Spalten) standen sie dadurch um eine Spalte verschoben.
     Advertiser (type a): Kampagne ist eine Registerkarte, Werbeflaeche bleibt Spalte. */
  #getRequest .accordion-item > div.req-row-a[style*="display: flex"] > div:nth-child(1)::before { content: "Kunde"; }
  #getRequest .accordion-item > div.req-row-a[style*="display: flex"] > div:nth-child(2)::before { content: "Werbefläche"; }
  #getRequest .accordion-item > div.req-row-a[style*="display: flex"] > div:nth-child(3)::before { content: "Start"; }
  #getRequest .accordion-item > div.req-row-a[style*="display: flex"] > div:nth-child(4)::before { content: "Paymodel"; }
  #getRequest .accordion-item > div.req-row-a[style*="display: flex"] > div:nth-child(5)::before { content: "Payout"; }
  #getRequest .accordion-item > div.req-row-a[style*="display: flex"] > div:nth-child(6)::before { content: "Volumen"; }
  #getRequest .accordion-item > div.req-row-a[style*="display: flex"] > div:nth-child(7)::before { content: "Erhalten"; }
  /* Publisher (type p): Werbeflaeche ist eine Registerkarte, 6 Spalten. */
  #getRequest .accordion-item > div.req-row-p[style*="display: flex"] > div:nth-child(1)::before { content: "Kampagne"; }
  #getRequest .accordion-item > div.req-row-p[style*="display: flex"] > div:nth-child(2)::before { content: "Start"; }
  #getRequest .accordion-item > div.req-row-p[style*="display: flex"] > div:nth-child(3)::before { content: "Paymodel"; }
  #getRequest .accordion-item > div.req-row-p[style*="display: flex"] > div:nth-child(4)::before { content: "Payout"; }
  #getRequest .accordion-item > div.req-row-p[style*="display: flex"] > div:nth-child(5)::before { content: "Volumen"; }
  #getRequest .accordion-item > div.req-row-p[style*="display: flex"] > div:nth-child(6)::before { content: "Erhalten"; }
  /* Werbeflächen-Tabs duerfen umbrechen (mehrere Flaechen passen sonst nicht) */
  #getRequest #requestTabs {
    flex-wrap: wrap !important;
    gap: 0.25rem !important;
    row-gap: 0.25rem !important;
  }
  #getRequest #requestTabs .nav-link {
    padding: 0.35rem 0.6rem !important;
  }
  #getRequest .accordion-item > div[style*="display: flex"] > div::before {
    flex: 0 0 auto !important;
    color: var(--white) !important;
    font-size: 0.72rem !important;
    text-transform: uppercase !important;
    letter-spacing: 0.3px !important;
    opacity: 1 !important;
  }
  /* Werte rechtsbündig, kein Input-Look, voll weiß (wie Mail) */
  #getRequest .accordion-item input.form-control {
    flex: 1 1 auto !important;
    min-width: 0 !important;
    width: auto !important;
    background: transparent !important;
    border: none !important;
    box-shadow: none !important;
    color: var(--white) !important;
    text-align: right !important;
    padding: 0 !important;
    height: auto !important;
    min-height: 0 !important;
    font-size: 0.85rem !important;
    opacity: 1 !important;
  }
  /* Action-Buttons (Folder/Check/X): aus absolute → statisch, nebeneinander in
     einer zentrierten Reihe unten (wie Mail). Der row-wrap-Wrapper ist
     justify-content:center, die letzte Daten-Zeile (flex:100%) erzwingt den
     Umbruch davor. */
  #getRequest .accordion-item > div[style*="display: flex"] > button.position-absolute {
    position: static !important;
    top: auto !important;
    right: auto !important;
    bottom: auto !important;
    transform: none !important;
    flex: 0 0 auto !important;
    width: 2.6rem !important;
    height: 2.6rem !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    margin: 0.7rem 0.3rem 0 0.3rem !important;
  }
  /* Buttons bekommen KEIN ::before-Label */
  #getRequest .accordion-item > div[style*="display: flex"] > button.position-absolute::before {
    content: none !important;
  }

  /* =========================================================
     DETAILS-TAB EDITOR (#getNewsletterData) — am Mail-Style orientiert
     Der WM-Editor nutzt ein .editor-with-panel Flex-ROW-Layout, das den
     TinyMCE-Editor und ein Side-Panel ZWINGEND nebeneinander legt + feste
     Inline-Groessen (height:70vh, width:90%). Auf Mobil viel zu eng.
     Hier: untereinander stapeln, Editor volle Breite, Buttons als Leiste,
     Upload-Buttons aus der absoluten Lage loesen. 1:1 wie jd-mail.
     ========================================================= */

  /* (1) Editor + Side-Panel untereinander statt nebeneinander */
  /* ── WM-Editor mobil: gilt fuer Bearbeiten-Modal ([id^=getNewsletterData])
     UND Erstellen-Modal ([id^=setNewsletter] = setNewsletter + setNewsletterPage).
     Die Selektoren sind ueberall um die Erstellen-IDs erweitert, sonst greift die
     ganze WM-Editor-Mobiloptimierung im Erstellen-Modal nicht (Editor + 320px-Side-
     Panel blieben nebeneinander -> Side-Panel ragt raus). ── */
  [id^="getNewsletterData"] .editor-with-panel,
  [id^="setNewsletter"] .editor-with-panel {
    flex-direction: column !important;
    width: 100% !important;
  }
  /* Editor-Spalte (1. Kind) volle Breite */
  [id^="getNewsletterData"] .editor-with-panel > div:first-child,
  [id^="setNewsletter"] .editor-with-panel > div:first-child {
    width: 100% !important;
    min-width: 0 !important;
  }

  /* (2) TinyMCE: volle Breite, moderate feste Hoehe statt 90%/70vh */
  [id^="getNewsletterData"] .editor-with-panel .tox-tinymce,
  [id^="setNewsletter"] .editor-with-panel .tox-tinymce {
    width: 100% !important;
    height: 45vh !important;
    min-height: 18rem !important;
    margin: 0.75rem 0 0 !important;
  }
  /* auch das rohe textarea-Fallback */
  [id^="getNewsletterData"] .editor-with-panel textarea.tiny-target,
  [id^="setNewsletter"] .editor-with-panel textarea.tiny-target {
    width: 100% !important;
  }

  /* (3) Side-Panel-Buttons: horizontale Leiste statt vertikal, zentriert */
  [id^="getNewsletterData"] .side-panel-buttons,
  [id^="setNewsletter"] .side-panel-buttons {
    flex-direction: row !important;
    flex-wrap: wrap !important;
    justify-content: center !important;
    align-self: stretch !important;
    width: 100% !important;
    margin-top: 0.5rem !important;
  }
  /* Die einzelnen Side-Panel-Buttons (Tag/Magic/Creative/Format) quadratisch
     40x40 — auf echten Touch-Geraeten paddet die globale @media(hover:none)
     button{padding:1rem 2rem}-Regel sie sonst auf 64px (rechteckig). Icon-
     Inline-margin-Hacks neutralisieren. Direkt auf die toggle-Klassen zielen
     (NICHT an .btn_add koppeln): im aktiven Zustand wechselt die Klasse von
     btn_add zu btn_add_ (Unterstrich) -> sonst greift die Groesse nicht mehr
     und der aktive Button wird breit/rechteckig (zerschiesst das Layout). */
  [id^="getNewsletterData"] .side-panel-buttons .btn_add,
  [id^="getNewsletterData"] .side-panel-buttons .btn_add_,
  [id^="getNewsletterData"] .toggle-param-btn,
  [id^="getNewsletterData"] .toggle-dynamic-btn,
  [id^="getNewsletterData"] .toggle-creative-btn,
  [id^="getNewsletterData"] .format-html-btn,
  [id^="setNewsletter"] .side-panel-buttons .btn_add,
  [id^="setNewsletter"] .side-panel-buttons .btn_add_,
  [id^="setNewsletter"] .toggle-param-btn,
  [id^="setNewsletter"] .toggle-dynamic-btn,
  [id^="setNewsletter"] .toggle-creative-btn,
  [id^="setNewsletter"] .format-html-btn {
    width: 40px !important;
    min-width: 40px !important;
    height: 40px !important;
    padding: 0 !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
  }
  [id^="getNewsletterData"] .side-panel-buttons .btn_add > i,
  [id^="getNewsletterData"] .side-panel-buttons .btn_add_ > i,
  [id^="getNewsletterData"] .toggle-param-btn > i,
  [id^="getNewsletterData"] .toggle-dynamic-btn > i,
  [id^="getNewsletterData"] .toggle-creative-btn > i,
  [id^="getNewsletterData"] .format-html-btn > i,
  [id^="setNewsletter"] .side-panel-buttons .btn_add > i,
  [id^="setNewsletter"] .side-panel-buttons .btn_add_ > i,
  [id^="setNewsletter"] .toggle-param-btn > i,
  [id^="setNewsletter"] .toggle-dynamic-btn > i,
  [id^="setNewsletter"] .toggle-creative-btn > i,
  [id^="setNewsletter"] .format-html-btn > i {
    margin: 0 !important;
  }

  /* Sub-IDs-Stepper (+/-): die generischen .btn_add/.btn_delete werden sonst
     64px breit (nicht quadratisch) -> klobiger +/- Stepper. Auf quadratische
     40x40-Kacheln zwingen, konsistent mit den side-panel-buttons oben. */
  [id^="getNewsletterData"] .subid-count-minus,
  [id^="getNewsletterData"] .subid-count-plus,
  [id^="setNewsletter"] .subid-count-minus,
  [id^="setNewsletter"] .subid-count-plus {
    width: 40px !important;
    min-width: 40px !important;
    height: 40px !important;
    padding: 0 !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    flex: 0 0 auto !important;
  }
  [id^="getNewsletterData"] .subid-count-minus > i,
  [id^="getNewsletterData"] .subid-count-plus > i,
  [id^="setNewsletter"] .subid-count-minus > i,
  [id^="setNewsletter"] .subid-count-plus > i {
    margin: 0 !important;
  }

  /* Geraete-Umschalt-Buttons (Desktop/Tablet/Mobile) im Editor ausblenden —
     mobil ist immer Mobile (wie im Vorschau-Modal). Der Container hat keine
     Klasse -> per :has() auf die direkten title-Buttons treffen. */
  [id^="getNewsletterData"] div:has(> .btn_add[title="Desktop"]):has(> .btn_add[title="Mobile"]),
  [id^="setNewsletter"] div:has(> .btn_add[title="Desktop"]):has(> .btn_add[title="Mobile"]) {
    display: none !important;
  }

  /* (4) Side-Panel-Content (ausklappbare Parameter/Dynamik-Liste): wenn
     aufgeklappt, volle Breite statt fixer 320px (sonst Overflow) */
  [id^="getNewsletterData"] .side-panel-content,
  [id^="setNewsletter"] .side-panel-content {
    max-width: 100% !important;
  }
  [id^="getNewsletterData"] .side-panel-content[style*="width: 320"],
  [id^="getNewsletterData"] .side-panel-content:not([style*="width: 0"]),
  [id^="setNewsletter"] .side-panel-content[style*="width: 320"],
  [id^="setNewsletter"] .side-panel-content:not([style*="width: 0"]) {
    width: 100% !important;
  }
  /* Innerer Wrapper hat inline width:320px -> auf volle Breite, damit die
     dynamischen Inhalt-Items (V/N mit Inhalt/Standard-Tabs + Textarea) die ganze
     Breite nutzen statt nur ~halb. */
  [id^="getNewsletterData"] .side-panel-content > div,
  [id^="setNewsletter"] .side-panel-content > div {
    width: 100% !important;
  }
  /* copy-wrapper (Parameter-/Dynamik-/Werbemittel-Items) je volle Breite,
     1 pro Zeile. */
  [id^="getNewsletterData"] .side-panel-content .copy-wrapper,
  [id^="setNewsletter"] .side-panel-content .copy-wrapper {
    width: 100% !important;
    flex: 0 0 100% !important;
  }
  /* Werbemittel-Panel-Liste hat inline max-width:288px -> aufheben, damit die
     Werbemittel-Items (copy-wrapper + Preview-iframe) die volle Breite nutzen
     (wie bei den dynamischen Inhalten). */
  [id^="getNewsletterData"] .creative-panel-list,
  [id^="setNewsletter"] .creative-panel-list {
    max-width: 100% !important;
    width: 100% !important;
  }

  /* (5) Upload-Buttons (HTML/Bilder hochladen) sitzen absolut ueber der
     Sub-Tab-Leiste und ueberlappen die Tabs. Mobil: statisch unter die Tabs,
     volle Breite, zentriert.
     HINWEIS: Das Erstellen-Modal ([id^="setNewsletter"]) nutzt NICHT diese
     "static"-Variante, sondern das jd-mail-Upload-oben-Pattern (Upload-Buttons
     absolut oben zentriert, Tabs mit padding-top darunter) — siehe oben bei
     .lazy-nl-modal ul.nav-tabs:has(.nav-item.position-absolute). */
  [id^="getNewsletterData"] .nav-item.position-absolute:has([class*="upload"]),
  [id^="getNewsletterData"] .nav-tabs ~ .nav-item.position-absolute,
  [id^="getNewsletterData"] .nav-item.position-absolute {
    position: static !important;
    top: auto !important;
    right: auto !important;
    display: flex !important;
    flex-wrap: wrap !important;
    justify-content: center !important;
    gap: 0.5rem !important;
    width: 100% !important;
    margin: 0.5rem 0 !important;
  }

  /* (6) Plus/Minus-Buttons zwischen den Absender/Betreff/Preheader-Bloecken:
     quadratisch 40x40 (sonst durch @media(hover:none) 64px rechteckig auf
     echten Touch-Geraeten), Icon zentriert, symmetrischer Abstand nach unten.
     Scope .details-scope trifft NUR die Block-Verwaltungs-Buttons. */
  [id^="getNewsletterData"] .details-scope .btn_add,
  [id^="getNewsletterData"] .details-scope .btn_delete_,
  [id^="getNewsletterData"] .details-scope .btn_delete,
  [id^="setNewsletter"] .details-scope .btn_add,
  [id^="setNewsletter"] .details-scope .btn_delete_,
  [id^="setNewsletter"] .details-scope .btn_delete {
    width: 40px !important;
    min-width: 40px !important;
    height: 40px !important;
    padding: 0 !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    margin-bottom: 0.75rem !important;
  }
  [id^="getNewsletterData"] .details-scope .btn_add > i,
  [id^="getNewsletterData"] .details-scope .btn_delete_ > i,
  [id^="getNewsletterData"] .details-scope .btn_delete > i,
  [id^="setNewsletter"] .details-scope .btn_add > i,
  [id^="setNewsletter"] .details-scope .btn_delete_ > i,
  [id^="setNewsletter"] .details-scope .btn_delete > i {
    margin: 0 !important;
  }
}

/* ===========================================================================
   MOBILE PAGINATION (m-pagination) — generisch, eingefuehrt 2026-06-22
   Seiten-Navigation (prev/Zahlen/next) + Eintraege-pro-Seite-Dropdown, unter
   der Liste. Genutzt von getNewsletter (m-nl-list). Akzent Partner-Rosa
   (var(--darkRose) #88545d). 1:1 aus jd-mail portiert (dort Tuerkis).
   Werte/Handler ueber funcToolbox=page/number.
   =========================================================================== */
@media (max-width: 991px) {

  .m-pagination {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.6rem;
    margin: 0.9rem 0 0.4rem 0;
  }

  /* Seiten-Navigation: prev | 1 … 4 5 6 … 12 | next */
  .m-pagination-nav {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    align-items: center;
    gap: 0.3rem;
  }
  .m-pagination-btn {
    background: transparent;
    border: 1px solid rgba(136, 84, 93, 0.4);
    color: var(--white);
    border-radius: var(--border);
    min-width: 2.2rem;
    height: 2.2rem;
    padding: 0 0.5rem;
    font-size: 0.95rem;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    transition: background-color 0.15s ease, border-color 0.15s ease;
  }
  .m-pagination-btn:active {
    background: rgba(136, 84, 93, 0.2);
  }
  /* Aktive Seite hervorgehoben */
  .m-pagination-btn.m-pagination-active {
    background: rgba(136, 84, 93, 0.2);
    border-color: var(--darkRose);
    font-weight: 700;
  }
  /* Deaktiviert (prev auf Seite 1 / next auf letzter Seite) */
  .m-pagination-btn.m-pagination-disabled {
    border-color: rgba(255, 255, 255, 0.12);
    color: rgba(255, 255, 255, 0.25);
    pointer-events: none;
    cursor: default;
  }
  .m-pagination-ellipsis {
    color: rgba(255, 255, 255, 0.4);
    padding: 0 0.15rem;
    align-self: center;
  }

  /* Eintraege-pro-Seite-Dropdown */
  .m-pagination-limit {
    display: flex;
    align-items: center;
    gap: 0.4rem;
    color: rgba(255, 255, 255, 0.6);
    font-size: 0.8rem;
  }
  .m-pagination-limit select {
    background: color-mix(in srgb, var(--darkblue) 75%, transparent);
    color: var(--white);
    border: 1px solid rgba(255, 255, 255, 0.12);
    border-radius: var(--border);
    padding: 0.35rem 0.5rem;
    font-size: 0.9rem;
    cursor: pointer;
  }
}

/* ===========================================================================
   KUNDEN-DETAIL-MODAL MOBIL (#getClient{id}) — eingefuehrt 2026-07-06
   Lazy-Detail-Modal (.lazy-cl-modal / [id^=getClient]) mit Tabs
   (Uebersicht / Kampagnen bzw. Werbeflaechen / Kundendaten / Einstellungen).
   Struktur nutzt dieselben Klassen wie das getNewsletterData-Modal
   (.request-header, .accordion-item, .box_histroy_count) -> Pattern 1:1:
   - Tab-Nav horizontal scrollbar (kein Umbruch); deckt auch die Werbeflaechen-
     Sub-Tabs (client_as_) beim Advertiser ab
   - KPI-Cards (.box_histroy_count) im 2er-Grid, Inline-Margin neutralisiert
   - Kampagnen-Tabelle (9 Spalten) -> Card-Stack mit ::before-Labels via nth-child
   - Kundendaten-/Einstellungen-Formular Felder stapeln
   Doku: [[UI Mobile Listen & Tabs]] Pattern 1/4, [[UI Mobile KPI-Cards Modal]].
   Akzent Partner-Rosa var(--darkRose).
   ============================================================================= */
@media (max-width: 991px) {

  /* -- Trennstrich unter dem Titel gegen flex-Kollaps sichern (Gotcha #130) --
     Im flex-column-Modal kollabiert .border-span auf height:0. */
  [id^="getClient"] .border-span {
    flex-shrink: 0 !important;
    min-height: 2px !important;
  }

  /* -- (a) Tab-Nav: horizontal scrollbar statt umbrechen -- */
  [id^="getClient"] ul.nav-tabs {
    flex-wrap: nowrap !important;
    overflow-x: auto !important;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    min-height: 42px !important;
    align-items: flex-start !important;
    margin-bottom: 0.75rem !important;
  }
  [id^="getClient"] ul.nav-tabs::-webkit-scrollbar { display: none; }
  [id^="getClient"] ul.nav-tabs > li { flex: 0 0 auto !important; }
  [id^="getClient"] ul.nav-tabs > li > .nav-link { white-space: nowrap !important; }

  /* -- (b) KPI-Cards (.box_histroy_count) im 2er-Grid -- */
  [id^="getClient"] .container-fluid > .row:has(.box_histroy_count) {
    display: grid !important;
    grid-template-columns: repeat(2, 1fr) !important;
    gap: 0.5rem !important;
    flex-direction: unset !important;
    margin-bottom: 0.75rem !important;
  }
  [id^="getClient"] .container-fluid > .row:has(.box_histroy_count):not(:has(.col ~ .col)) {
    grid-template-columns: 1fr !important;
  }
  /* Ungerade Reihe (z.B. 3er Branchen/Kampagnen/Werbeflaechen): letzte Card volle
     Breite statt "2+1 mit Loch rechts". last-child+nth-child(odd) = ungerade Anzahl. */
  [id^="getClient"] .row:has(.box_histroy_count) > .col.box_histroy_count:last-child:nth-child(odd) {
    grid-column: 1 / -1 !important;
  }
  [id^="getClient"] .row:has(.box_histroy_count) > .col {
    width: auto !important;
    max-width: none !important;
    padding: 0 !important;
  }
  [id^="getClient"] .box_histroy_count {
    margin-left: 0 !important;
    margin-right: 0 !important;
    min-height: 4rem !important;
    padding: 0.85rem 0.75rem !important;
    background: color-mix(in srgb, var(--darkblue) 75%, transparent) !important;
    border: none !important;
    border-radius: var(--border) !important;
    display: flex !important;
    flex-direction: column !important;
    justify-content: center !important;
    align-items: center !important;
    text-align: center !important;
  }
  [id^="getClient"] .box_histroy_count h1 {
    font-size: 0.72rem !important;
    color: rgba(255, 255, 255, 0.7) !important;
    width: 100% !important;
    text-align: center !important;
    justify-content: center !important;
    margin: 0 0 0.25rem 0 !important;
  }
  [id^="getClient"] .box_histroy_count h2 {
    font-size: 1.2rem !important;
    color: var(--white) !important;
    width: 100% !important;
    text-align: center !important;
    justify-content: center !important;
    margin: 0 !important;
  }

  /* -- (c) Kampagnen-Tabelle -> Card-Stack -- */
  [id^="getClient"] .request-header {
    display: none !important;
  }
  [id^="getClient"] div[style*="overflow-y"] {
    max-height: none !important;
    overflow: visible !important;
  }
  [id^="getClient"] .accordion-item:not([data-client-id]) {
    background: color-mix(in srgb, var(--darkblue) 75%, transparent) !important;
    border-radius: var(--border) !important;
    padding: 0.6rem 0.75rem !important;
    margin-bottom: 0.5rem !important;
  }
  [id^="getClient"] .accordion-item:not([data-client-id]) > div[style*="flex"] {
    flex-direction: column !important;
    align-items: stretch !important;
    padding: 0 !important;
    gap: 0 !important;
  }
  [id^="getClient"] .accordion-item:not([data-client-id]) > div[style*="flex"] > div {
    display: flex !important;
    flex: 0 0 100% !important;
    width: 100% !important;
    max-width: 100% !important;
    align-items: center !important;
    justify-content: space-between !important;
    padding: 0.35rem 0 !important;
    margin: 0 !important;
    gap: 0.75rem !important;
    text-align: right !important;
    color: var(--white) !important;
    font-size: 0.85rem !important;
    white-space: normal !important;
    word-break: break-word !important;
  }
  [id^="getClient"] .accordion-item:not([data-client-id]) > div[style*="flex"] > div:nth-child(1)::before { content: "Kampagne"; }
  [id^="getClient"] .accordion-item:not([data-client-id]) > div[style*="flex"] > div:nth-child(2)::before { content: "Volumen"; }
  [id^="getClient"] .accordion-item:not([data-client-id]) > div[style*="flex"] > div:nth-child(3)::before { content: "Start"; }
  [id^="getClient"] .accordion-item:not([data-client-id]) > div[style*="flex"] > div:nth-child(4)::before { content: "Betrag"; }
  [id^="getClient"] .accordion-item:not([data-client-id]) > div[style*="flex"] > div:nth-child(5)::before { content: "Ziel / Leads"; }
  [id^="getClient"] .accordion-item:not([data-client-id]) > div[style*="flex"] > div:nth-child(6)::before { content: "Öffnungen"; }
  [id^="getClient"] .accordion-item:not([data-client-id]) > div[style*="flex"] > div:nth-child(7)::before { content: "Öffner"; }
  [id^="getClient"] .accordion-item:not([data-client-id]) > div[style*="flex"] > div:nth-child(8)::before { content: "Klicks"; }
  [id^="getClient"] .accordion-item:not([data-client-id]) > div[style*="flex"] > div:nth-child(9)::before { content: "Klicker"; }
  [id^="getClient"] .accordion-item:not([data-client-id]) > div[style*="flex"] > div::before {
    flex: 0 0 auto !important;
    color: var(--white) !important;
    font-size: 0.72rem !important;
    text-transform: uppercase !important;
    letter-spacing: 0.3px !important;
    text-align: left !important;
  }
  [id^="getClient"] .accordion-item:not([data-client-id]) > div[style*="flex"] > div:nth-child(1) {
    justify-content: flex-start !important;
    text-align: left !important;
    font-weight: 600 !important;
    font-size: 0.95rem !important;
    padding-bottom: 0.5rem !important;
    margin-bottom: 0.25rem !important;
    border-bottom: 1px solid rgba(255, 255, 255, 0.08) !important;
  }
  [id^="getClient"] .accordion-item:not([data-client-id]) > div[style*="flex"] > div:nth-child(1)::before {
    display: none !important;
  }

  /* -- (d) Kundendaten-/Einstellungen-Formular: Felder stapeln -- */
  [id^="getClient"] form[id^="clientDataForm"] .row.mt-1,
  [id^="getClient"] form[id^="clientSettingsForm"] .row.mt-1 {
    display: flex !important;
    flex-direction: column !important;
    margin: 0 !important;
    gap: 0 !important;
  }
  [id^="getClient"] form[id^="clientDataForm"] .row.mt-1 > .col,
  [id^="getClient"] form[id^="clientSettingsForm"] .row.mt-1 > .col {
    flex: 0 0 100% !important;
    max-width: 100% !important;
    width: 100% !important;
    padding: 0 !important;
    margin: 0 0 0.6rem 0 !important;
  }
}

/* ===========================================================================
   WERBEMITTEL-LISTE MOBIL (getCreative) — m-cr-* Card-Items
   Vorschau-Karten nach dem Desktop-.creative-card-Muster, mobil 1 pro Zeile:
   Live-HTML-Vorschau (srcdoc-iframe, skaliert wie Desktop) + Name + Typ-Badge
   + Datum + Aktions-Reihe (Vorschau-Modal / Bearbeiten-Link / Duplizieren /
   Loeschen). Neu-Button als Link (setCreative.php ist eine Seite, kein Modal).
   Vorschau-Modal [id^=previewCreative] ist in die Modal-Override-Gruppen
   eingereiht + eigener Reparent im mobile_content (liegt im desktop_content).
   Akzent Partner-Rosa var(--darkRose). Breakpoint 992px.
   Doku: Obsidian [[UI Mobile Listen & Tabs]] / [[UI Mobile]].
   =========================================================================== */
@media (max-width: 991px) {

  .m-cr-list {
    display: flex;
    flex-direction: column;
    gap: 8px;
    /* gleicht das padding-top von .m-subnav-content.has-row2 aus (wie m-nl/m-cl) */
    margin-top: -8rem;
  }

  /* ── Item-Card: Vorschau randlos oben, Info unten ── */
  .m-cr-item {
    background: color-mix(in srgb, var(--darkblue) 75%, transparent);
    border: none;
    border-radius: var(--border);
    overflow: hidden;
  }

  /* Live-HTML-Vorschau: srcdoc-iframe herunterskaliert (Desktop: 600px/scale .35
     auf 180px — mobil groesserer Scale auf volle Card-Breite, 200px Fenster) */
  .m-cr-preview {
    width: 100%;
    height: 200px;
    overflow: hidden;
    background: #fff;
    position: relative;
    display: flex;
    justify-content: center;
  }
  .m-cr-preview iframe {
    width: 600px;
    height: 1500px;
    border: none;
    transform: scale(0.56);
    transform-origin: top center;
    pointer-events: none;
  }

  .m-cr-info {
    padding: 0.75rem 0.85rem;
  }

  /* Kopf: Name + Typ-Badge */
  .m-cr-head {
    display: flex;
    flex-wrap: nowrap;
    align-items: center;
    gap: 0.55rem;
  }
  .m-cr-name {
    flex: 1 1 auto;
    min-width: 0;
    color: var(--white);
    font-weight: 500;
    font-size: 0.95rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .m-cr-badge {
    flex: 0 0 auto;
    color: var(--white);
    font-size: 0.65rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.4px;
    background: rgba(0, 0, 0, 0.25);
    border-radius: var(--border);
    padding: 0.15rem 0.45rem;
  }

  /* Datum-Zeile */
  .m-cr-meta {
    color: var(--white);
    font-size: 0.75rem;
    margin-top: 0.3rem;
  }

  /* ── Aktions-Reihe: 34x34-Standard (Gotcha #113 neutralisiert) ── */
  .m-cr-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    justify-content: center;
    margin-top: 0.6rem;
    padding-top: 0.6rem;
    border-top: 1px solid rgba(255, 255, 255, 0.06);
  }
  .m-cr-actions .btn_add,
  .m-cr-actions .btn_delete {
    width: 34px !important;
    height: 34px !important;
    min-width: 34px !important;
    min-height: 34px !important;
    padding: 0 !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    font-size: 1rem;
  }
  .m-cr-actions .btn_add > i,
  .m-cr-actions .btn_delete > i {
    margin: 0 !important;
  }

  /* ── Vorschau-Modal (#previewCreative{id}) mobil ── */
  /* Trennstrich unter dem Titel gegen flex-Kollaps sichern (Gotcha #130) */
  [id^="previewCreative"] .border-span {
    flex-shrink: 0 !important;
    min-height: 2px !important;
  }
  /* Endgeraete-Umschalter (Desktop/Tablet/Mobile) mobil ausblenden — die
     Vorschau ist auf dem Geraet ohnehin immer mobil */
  [id^="previewCreative"] .preview-device-btns {
    display: none !important;
  }
  /* Vorschau-iframe: 70vh ist mobil zu hoch neben Header+Device-Buttons */
  [id^="previewCreative"] .preview-iframe {
    height: 60vh !important;
    width: 100% !important;
  }
}

/* ===========================================================================
   WERBEMITTEL-EDITOR MOBIL (setCreative) — 2026-07-07
   Der Editor (CodeMirror + contenteditable-Preview) ist ein position:fixed-
   Overlay OHNE mobile_content-System und hatte KEIN einziges @media.
   Scope = Basis-Benutzbarkeit: 50/50-Split stapeln (Vorschau oben, Code
   darunter, Container scrollt), Slide-in-Panels volle Breite, Bild-Grids
   entzerrt, Hover-Ordner-Aktionen auf Touch sichtbar, Format-Buttons 40px,
   Speichern-/Testmail-Modal ueber den mobilen Backdrop (10010) + Felder
   gestapelt. Kein Mobile-Editor-Neubau (Roh-HTML-Editing bleibt sekundaer).
   ============================================================================= */
@media (max-width: 991px) {

  /* ── Split stapeln + zwischen Top-Icon-Bar und Bottom-Nav einpassen ── */
  #creative-container {
    flex-direction: column !important;
    top: 3rem !important;        /* mobile Icon-Bar (~35px) statt 7rem Desktop-Nav */
    bottom: 74px !important;     /* Bottom-Nav nicht ueberdecken */
    overflow-y: auto !important;
  }
  #creative-preview-wrapper,
  #creative-code {
    width: 100% !important;
  }
  /* Vorschau-Bereich: feste Hoehe, Code-Bereich: Mindesthoehe — Container scrollt */
  #creative-preview-wrapper {
    flex: 0 0 auto !important;
  }
  #creative-preview {
    height: 45vh !important;
    flex: 0 0 auto !important;
  }
  #creative-code {
    min-height: 65vh !important;
    border-left: none !important;
    border-top: 1px solid rgba(255, 255, 255, 0.15) !important;
  }

  /* ── Slide-in-Panels (Parameter/Dynamik/Werbemittel/Bausteine): volle Breite ── */
  #paramPanel,
  #dynamicPanel,
  #creativePanel,
  #blockPanel {
    width: 100% !important;
    left: 0 !important;
  }

  /* Endgeraete-Umschalter der Editor-Vorschau mobil ausblenden (immer mobil) */
  #creative-preview-toolbar {
    display: none !important;
  }

  /* Code-Toolbar: </>-Icon+HTML-Label weg, Buttons zentriert, Leiste UNTER den
     Code-Bereich (#creative-code ist flex-column -> order ans Ende; die
     Slide-in-Panels sind position:absolute und unbeteiligt) */
  #creative-toolbar > span {
    display: none !important;
  }
  #creative-toolbar {
    order: 10 !important;
    justify-content: center !important;
  }
  #creative-toolbar-right {
    justify-content: center !important;
    flex-wrap: wrap !important;
    margin: 0 !important;
  }

  /* ── Format-Toolbar: Touch-Ziele (30px -> 40px, Farbfelder 36px) ── */
  .fmt-btn {
    width: 40px !important;
    height: 40px !important;
    min-width: 40px !important;
  }
  #creative-format-toolbar input[type="color"] {
    width: 36px !important;
    height: 36px !important;
  }

  /* ── Bild-Manager: Kacheln 2 pro Zeile statt calc(25%)/min-width:200px ── */
  .imgmgr-img-block {
    width: calc(50% - 0.6rem) !important;
    min-width: 0 !important;
  }
  /* Ordner-Aktionen: hover-only funktioniert auf Touch nicht -> immer sichtbar */
  .imgmgr-folder .folder-actions {
    display: flex !important;
  }

  /* ── Speichern-/Testmail-Modal: ueber den mobilen Backdrop (10005) heben ── */
  #saveCreativeModal.modal,
  #testmailModal.modal,
  #newFolderModal.modal {
    z-index: 10010 !important;
    padding: 1rem !important;
  }
  #saveCreativeModal .modal-dialog,
  #testmailModal .modal-dialog {
    position: relative !important;
    top: auto !important;
    left: auto !important;
    transform: none !important;
    margin: 0 auto !important;
    width: 100% !important;
    max-width: 100% !important;
    max-height: calc(100vh - 2rem) !important;
    overflow-y: auto !important;
  }
  /* Trennstrich unter dem Titel gegen flex-Kollaps (Gotcha #130) */
  #saveCreativeModal .border-span,
  #testmailModal .border-span {
    flex-shrink: 0 !important;
    min-height: 2px !important;
  }
  /* Formular-Reihen stapeln (Testmail hat 2-spaltige .row .col) */
  #saveCreativeModal .row,
  #testmailModal .row {
    display: flex !important;
    flex-direction: column !important;
    margin: 0 !important;
  }
  #saveCreativeModal .row > .col,
  #testmailModal .row > .col {
    flex: 0 0 100% !important;
    max-width: 100% !important;
    width: 100% !important;
    padding: 0 !important;
    margin: 0 0 0.6rem 0 !important;
  }
  /* Global-Toggle (absolut oben rechts) nicht mit dem X kollidieren lassen */
  #saveCreativeGlobal {
    right: 3.5rem !important;
  }
}

/* =============================================================================
   4.10 FREIGABECENTER-MODAL MOBIL (#getFreigabecenter) — 2026-07-07
   Das Modal (name="default", liegt im desktop_view und wird vom generischen
   reparentNavModalOnMobile ans body gehoben) ist in den Override-Gruppen oben
   eingereiht (z 10010, Content-Look, X-Button, border-span). Hier nur die
   fc-spezifischen Anpassungen: 60%-Inline-Breiten auf voll, Tab-Pfeile weg
   (Touch scrollt), Tabellen-Kopf weg (Cards stapeln), Accordion-Kopf zweizeilig,
   Aktions-Buttons 40px-Quadrate (Gotcha #113). Doku: [[UI Mobile Modals]].
   ============================================================================= */
@media (max-width: 991px) {

  /* Such-Wrapper + Filterleiste: Inline width:60% -> volle Modal-Breite */
  #getFreigabecenter div[style*="width: 60%"] {
    width: 100% !important;
  }

  /* Tab-Scroll-Pfeile: auf Touch ueberfluessig, kosten 2x ~2.5rem Breite */
  #getFreigabecenter .fc-tabs-arrow {
    display: none !important;
  }

  /* Kunden-/Kampagnen-Leiste: EINE Zeile, horizontal wischbar — gleiche
     Gegenregel wie beim Report (generisches .mc_a .nav-tabs erzwingt wrap;
     faellt hier nur selten auf, weil meist wenige Kunden offen sind) */
  #getFreigabecenter .fc-tabs-scroll {
    flex-wrap: nowrap !important;
    overflow-x: auto !important;
  }

  /* Spalten-Kopf (Werbemittel/Status/Letztes Update): gestapelt ohne Aussage */
  #getFreigabecenter .fc-detail-head {
    display: none !important;
  }

  /* Accordion-Kopf: Zeile 1 = Name (ellipsis) + Zaehler + Pfeil,
     Zeile 2 = Alle-freigeben-Button volle Breite */
  #getFreigabecenter .fc-grp-acc-head {
    flex-wrap: wrap !important;
    row-gap: 0.5rem !important;
  }
  #getFreigabecenter .fc-grp-acc-name {
    order: 1;
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  #getFreigabecenter .fc-grp-acc-count {
    order: 2;
    white-space: nowrap;
  }
  #getFreigabecenter .fc-grp-acc-arrow {
    order: 3;
  }
  #getFreigabecenter .fc-approve-group {
    order: 4;
    margin-left: 0 !important;
    width: 100% !important;
    justify-content: center !important;
  }

  /* Kampagnen-Sammelfreigabe ("Alle Publisher freigeben"): volle Breite, mittig */
  #getFreigabecenter .fc-approve-campaign {
    width: 100% !important;
    justify-content: center !important;
    margin: 0.25rem 0 !important;
  }

  /* Item-Card: Innenabstaende kompakt; die generischen mc_a-Row-Regeln stapeln
     Name/Status/Datum bereits — Aktions-Spalte volle Breite, Buttons mittig */
  #getFreigabecenter .fc-item .container-fluid {
    padding: 0 0.25rem !important;
  }
  #getFreigabecenter .fc-item .col-auto {
    width: 100% !important;
    max-width: 100% !important;
    text-align: center !important;
  }
  #getFreigabecenter .fc-action-icons {
    justify-content: center !important;
    gap: 0.6rem !important;
    padding: 0.25rem 0 !important;
  }
  /* Aktions-Buttons: 40px-Quadrate, Touch-Padding neutralisiert (Gotcha #113) */
  #getFreigabecenter .fc-action-icons .btn_add {
    width: 40px !important;
    height: 40px !important;
    min-width: 40px !important;
    min-height: 40px !important;
    padding: 0 !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
  }

  /* Status-Icon (absolut auf der ersten Input-Zeile): left ans engere
     Mobil-Padding anpassen (Input-Linke-Kante liegt jetzt bei ~1rem) */
  #getFreigabecenter .fc-item-status {
    left: 1rem !important;
  }

  /* Korrektur-Bereich (Textarea + Senden): Seitenabstand ans Mobil-Raster */
  #getFreigabecenter .fc-reject-area > div {
    padding: 0.5rem 0.5rem 0.25rem !important;
  }

  /* Suchmodus-Dropdown (Kunde/Kampagne): JS setzt fixed/left am Button-Rand —
     ragt mobil rechts aus dem Viewport -> an der rechten Kante verankern */
  #fcSearchModePanel {
    left: auto !important;
    right: 1rem !important;
  }

  /* ── Filter im m-subnav-Pattern (wie getCreative/getNewsletter): Trichter-Button
     rechts neben der Suche toggelt das Panel (default ZU), Abrechnung/Publisher/Status
     als inline Checkbox-Sektionen statt Dropdowns, Footer mit Zähler + Zurücksetzen.
     WICHTIG: Panel-Regeln als #fcFilterBar-Nachfahren gescoped — wireDropdown
     verschiebt die Dropdown-Panels bei Desktop-Nutzung ans <body>; das Toggle-JS
     holt sie beim Öffnen zurück in ihre Wrapper. ── */

  /* Suchzeile: Wrapper wird Flex-Zeile (Suche flex:1 + Trichter 40px rechts) */
  #getFreigabecenter div[style*="width: 60%"]:has(#fcSearchInput) {
    display: flex !important;
    align-items: center !important;
    gap: 0.5rem !important;
  }
  #getFreigabecenter #fcSearchInput {
    flex: 1 1 auto;
    min-width: 0;
  }
  #getFreigabecenter #fcFilterToggle {
    display: flex !important;
    width: 40px !important;
    height: 40px !important;
    min-width: 40px !important;
    min-height: 40px !important;
    padding: 0 !important;
    flex: 0 0 auto !important;
  }
  /* Modus-Button (Kunde/Kampagne) rückt nach links — die Ecke gehört dem Trichter */
  #getFreigabecenter #fcSearchMode {
    right: calc(40px + 1rem) !important;
  }

  /* Panel: default zu, Trichter öffnet — dann m-subnav-filter-panel-Look
     (Sektionen gestapelt, dunkles Panel, kein Rosé-Gradient) */
  #getFreigabecenter #fcFilterBar {
    display: none !important;
  }
  #getFreigabecenter #fcFilterBar.is-open {
    display: flex !important;
    flex-direction: column !important;
    /* Inline flex-wrap:wrap wuerde bei langer Publisher-Liste eine 2. Spalte
       aufmachen (column+wrap) — strikt einspaltig bleiben */
    flex-wrap: nowrap !important;
    /* mc_a ist flex-column mit max-height — ohne shrink-Schutz quetscht sie die
       Bar (Kinder laufen visuell ueber die Bar-Unterkante in den Content) */
    flex-shrink: 0 !important;
    align-items: stretch !important;
    gap: 0.85rem !important;
    width: 100% !important;
    background: color-mix(in srgb, var(--darkblue) 92%, transparent) !important;
    border: none !important;
    backdrop-filter: none !important;
    padding: 0.75rem !important;
    margin: 0 0 1rem !important;
  }
  /* Item-Texte auf Panel-Groesse (statt Inline 1rem) */
  #getFreigabecenter #fcFilterBar span[onclick] {
    font-size: 0.9rem !important;
  }

  /* Sektionen 1-3: Dropdown-Buttons weg, Panels dauerhaft inline als
     Checkbox-Listen (Abrechnung/Status statisch, Publisher dynamisch befuellt) */
  #getFreigabecenter #fcFilterBar #fc-paymodel-btn,
  #getFreigabecenter #fcFilterBar #fc-pub-btn,
  #getFreigabecenter #fcFilterBar #fc-status-btn {
    display: none !important;
  }
  #getFreigabecenter #fcFilterBar #fc-paymodel-panel,
  #getFreigabecenter #fcFilterBar #fc-pub-panel,
  #getFreigabecenter #fcFilterBar #fc-status-panel {
    display: block !important;
    position: static !important;
    background: transparent !important;
    border: none !important;
    padding: 0 !important;
    min-width: 0 !important;
  }
  #getFreigabecenter #fcFilterBar #fc-paymodel-panel::before,
  #getFreigabecenter #fcFilterBar #fc-pub-panel::before,
  #getFreigabecenter #fcFilterBar #fc-status-panel::before {
    display: block;
    color: rgba(255, 255, 255, 0.7);
    font-size: 0.72rem;
    text-transform: uppercase;
    letter-spacing: 0.4px;
    margin-bottom: 0.4rem;
  }
  #getFreigabecenter #fcFilterBar #fc-paymodel-panel::before {
    content: "Abrechnung";
  }
  #getFreigabecenter #fcFilterBar #fc-pub-panel::before {
    content: "Publisher";
  }
  #getFreigabecenter #fcFilterBar #fc-status-panel::before {
    content: "Status";
  }
  #getFreigabecenter #fcFilterBar #fc-paymodel-panel > label,
  #getFreigabecenter #fcFilterBar #fc-pub-panel > label,
  #getFreigabecenter #fcFilterBar #fc-status-panel > label {
    font-size: 0.9rem !important;
    padding: 0.25rem 0 !important;
  }

  /* Footer: Zaehler links, Zurücksetzen rechts, Trennlinie oben */
  #getFreigabecenter #fcFilterBar > div[style*="margin-left: auto"] {
    width: 100% !important;
    margin-left: 0 !important;
    justify-content: space-between !important;
    border-top: 1px solid rgba(255, 255, 255, 0.08) !important;
    padding-top: 0.6rem !important;
  }
  #getFreigabecenter #fcResultCount {
    font-size: 0.85rem !important;
  }
  #getFreigabecenter #fcFilterReset {
    font-size: 0.8rem !important;
    padding: 0.35rem 0.75rem !important;
  }
  #getFreigabecenter #fcFilterReset .fc-reset-label {
    display: inline !important;
  }
}

/* =============================================================================
   4.11 REPORT-MODAL MOBIL (#getReport) — 2026-07-07
   Gleiches Muster wie 4.10 Freigabecenter: Modal-Shell in den Override-Gruppen
   oben (z 10010, Content-Look, X-Button, border-span), hier nur die report-
   spezifischen Anpassungen. Kern: Publisher-Stat-Zeile (Tabellen-Row aus
   readonly-Inputs) wird zur Karte — Name volle Breite, 4 Kennzahlen als
   2x2-Raster mit ::before-Labels (Spalten-Kopf .report-stats-head faellt weg),
   Chevron absolut oben rechts. Filter im m-subnav-Pattern (Trichter toggelt
   #reportFilterBar.is-open, Dropdowns als inline Checkbox-Sektionen).
   Doku: [[UI Mobile Modals]].
   ============================================================================= */
@media (max-width: 991px) {

  /* Such-Wrapper + Filterleiste: Inline width:60% -> volle Modal-Breite */
  #getReport div[style*="width: 60%"] {
    width: 100% !important;
  }

  /* Tab-/WM-Scroll-Pfeile: auf Touch ueberfluessig (native Wischgeste) */
  #getReport .report-tabs-arrow {
    display: none !important;
  }

  /* Kunden-/Kampagnen-Leiste: EINE Zeile, horizontal wischbar — die generische
     .mc_a .nav-tabs-Regel (flex-wrap:wrap) wuerde die Chips sonst ueber viele
     Zeilen stapeln (30+ Kunden = halber Screen) */
  #getReport .report-tabs-scroll {
    flex-wrap: nowrap !important;
    overflow-x: auto !important;
  }

  /* Spalten-Kopf (Publisher/Öffnungen/...): gestapelt ohne Aussage — Labels
     kommen pro Zelle als ::before (siehe unten) */
  #getReport .report-stats-head {
    display: none !important;
  }

  /* ── Publisher-Stat-Zeile als Karte: die generische mc_a-Row-Regel wuerde
     alle 6 Zellen stapeln (5 nackte Zahlen-Inputs ohne Bedeutung). Stattdessen
     2-spaltiges Kennzahlen-Raster, Name ueber beide Spalten, Chevron absolut
     oben rechts (Anker: .report-pub-acc hat inline position:relative). ── */
  #getReport .report-pub-acc-head {
    padding: 0 0.25rem !important;
  }
  #getReport .report-pub-acc-head > .row {
    display: grid !important;
    grid-template-columns: 1fr 1fr !important;
    gap: 0.5rem !important;
    width: 100% !important;
    margin: 0 !important;
    padding: 0 !important;
  }
  #getReport .report-pub-acc-head > .row > .col-3 {
    grid-column: 1 / -1;
    width: 100% !important;
    max-width: 100% !important;
    /* rechts Platz fuer den absoluten Chevron */
    padding: 0 2rem 0 0 !important;
  }
  #getReport .report-pub-acc-head > .row > .col {
    width: 100% !important;
    max-width: 100% !important;
    padding: 0 !important;
  }
  /* Kennzahlen-Labels ueber den Werten (Reihenfolge wie Desktop-Spalten-Kopf) */
  #getReport .report-pub-acc-head > .row > div:nth-child(2)::before { content: "Öffnungen"; }
  #getReport .report-pub-acc-head > .row > div:nth-child(3)::before { content: "Öffner"; }
  #getReport .report-pub-acc-head > .row > div:nth-child(4)::before { content: "Klicks"; }
  #getReport .report-pub-acc-head > .row > div:nth-child(5)::before { content: "Klicker"; }
  #getReport .report-pub-acc-head > .row > div:nth-child(n+2)::before {
    display: block;
    color: rgba(255, 255, 255, 0.6);
    font-size: 0.78rem;
    text-align: center;
    margin-bottom: 0.25rem;
  }
  /* Chevron: statt eigener (leerer) Stapel-Zeile absolut oben rechts */
  #getReport .report-pub-acc-head > .row > .col-1 {
    position: absolute !important;
    top: 1.1rem;
    right: 1rem;
    width: auto !important;
    max-width: none !important;
    padding: 0 !important;
  }

  /* Accordion-Body (WM-Eingabe): Desktop-Seitenpolster einkuerzen */
  #getReport .report-pub-acc-body {
    padding: 0.75rem 0.5rem 0.25rem !important;
  }
  /* Innerer Publisher-Scroll-Container: kein Innen-Scroll im scrollenden Modal
     (24rem-Kappe weg) + Desktop-Scrollbar-Polster rechts raus (Asymmetrie) */
  #getReport .report-campaign-pubs div[style*="max-height:24rem"] {
    max-height: none !important;
    padding-right: 0 !important;
  }
  /* WM-Zellen (>3 WM, horizontales Wischen): statt 3 nebeneinander je 80 %
     Breite — das naechste WM bleibt angeschnitten sichtbar (Scroll-Hinweis) */
  #getReport .report-wm-scroll > div {
    flex: 0 0 80% !important;
  }

  /* Speichern-Button volle Breite (Touch-Ziel) */
  #getReport .report-save-btn {
    width: 100% !important;
  }

  /* Suchmodus-Dropdown (Kunde/Kampagne): JS setzt fixed/left am Button-Rand —
     ragt mobil rechts aus dem Viewport -> an der rechten Kante verankern */
  #reportSearchModePanel {
    left: auto !important;
    right: 1rem !important;
  }

  /* ── Filter im m-subnav-Pattern (identisch zu 4.10/fc): Trichter-Button
     rechts neben der Suche toggelt das Panel (default ZU), Abrechnung/Status/Publisher
     als inline Checkbox-Sektionen statt Dropdowns, Footer mit Zaehler +
     Zuruecksetzen. Panel-Regeln als #reportFilterBar-Nachfahren gescoped —
     wireDropdown verschiebt die Panels bei Desktop-Nutzung ans <body>; das
     Toggle-JS holt sie beim Oeffnen zurueck. ── */

  /* Suchzeile: Wrapper wird Flex-Zeile (Suche flex:1 + Trichter 40px rechts) */
  #getReport div[style*="width: 60%"]:has(#reportSearchInput) {
    display: flex !important;
    align-items: center !important;
    gap: 0.5rem !important;
  }
  #getReport #reportSearchInput {
    flex: 1 1 auto;
    min-width: 0;
  }
  #getReport #reportFilterToggle {
    display: flex !important;
    width: 40px !important;
    height: 40px !important;
    min-width: 40px !important;
    min-height: 40px !important;
    padding: 0 !important;
    flex: 0 0 auto !important;
  }
  /* Modus-Button (Kunde/Kampagne) rückt nach links — die Ecke gehört dem Trichter */
  #getReport #reportSearchMode {
    right: calc(40px + 1rem) !important;
  }

  /* Panel: default zu, Trichter öffnet — dann m-subnav-filter-panel-Look */
  #getReport #reportFilterBar {
    display: none !important;
  }
  #getReport #reportFilterBar.is-open {
    display: flex !important;
    flex-direction: column !important;
    /* Inline flex-wrap:wrap wuerde bei langer Publisher-Liste eine 2. Spalte
       aufmachen (column+wrap) — strikt einspaltig bleiben */
    flex-wrap: nowrap !important;
    /* mc_a ist flex-column mit max-height — ohne shrink-Schutz quetscht sie die
       Bar (Kinder laufen visuell ueber die Bar-Unterkante in den Content) */
    flex-shrink: 0 !important;
    align-items: stretch !important;
    gap: 0.85rem !important;
    width: 100% !important;
    background: color-mix(in srgb, var(--darkblue) 92%, transparent) !important;
    border: none !important;
    backdrop-filter: none !important;
    padding: 0.75rem !important;
    margin: 0 0 1rem !important;
  }
  /* Item-Texte auf Panel-Groesse (statt Inline 1rem) */
  #getReport #reportFilterBar span[onclick] {
    font-size: 0.9rem !important;
  }

  /* Sektionen 1-3: Dropdown-Buttons weg, Panels dauerhaft inline als
     Checkbox-Listen (Abrechnung/Status statisch, Publisher dynamisch befuellt) */
  #getReport #reportFilterBar #report-paymodel-btn,
  #getReport #reportFilterBar #report-status-btn,
  #getReport #reportFilterBar #report-pub-btn {
    display: none !important;
  }
  #getReport #reportFilterBar #report-paymodel-panel,
  #getReport #reportFilterBar #report-status-panel,
  #getReport #reportFilterBar #report-pub-panel {
    display: block !important;
    position: static !important;
    background: transparent !important;
    border: none !important;
    padding: 0 !important;
    min-width: 0 !important;
  }
  #getReport #reportFilterBar #report-paymodel-panel::before,
  #getReport #reportFilterBar #report-status-panel::before,
  #getReport #reportFilterBar #report-pub-panel::before {
    display: block;
    color: rgba(255, 255, 255, 0.7);
    font-size: 0.72rem;
    text-transform: uppercase;
    letter-spacing: 0.4px;
    margin-bottom: 0.4rem;
  }
  #getReport #reportFilterBar #report-paymodel-panel::before {
    content: "Abrechnung";
  }
  #getReport #reportFilterBar #report-status-panel::before {
    content: "Status";
  }
  #getReport #reportFilterBar #report-pub-panel::before {
    content: "Publisher";
  }
  #getReport #reportFilterBar #report-paymodel-panel > label,
  #getReport #reportFilterBar #report-status-panel > label,
  #getReport #reportFilterBar #report-pub-panel > label {
    font-size: 0.9rem !important;
    padding: 0.25rem 0 !important;
  }

  /* Footer: Zaehler links, Zurücksetzen rechts, Trennlinie oben */
  #getReport #reportFilterBar > div[style*="margin-left: auto"] {
    width: 100% !important;
    margin-left: 0 !important;
    justify-content: space-between !important;
    border-top: 1px solid rgba(255, 255, 255, 0.08) !important;
    padding-top: 0.6rem !important;
  }
  #getReport #reportResultCount {
    font-size: 0.85rem !important;
  }
  #getReport #reportFilterReset {
    font-size: 0.8rem !important;
    padding: 0.35rem 0.75rem !important;
  }
  #getReport #reportFilterReset .report-reset-label {
    display: inline !important;
  }
}

/* =============================================================================
   MOBILE KAMPAGNEN LOUNGE (getLeadlounge, type=p) — portiert von jd-mail
   -----------------------------------------------------------------------------
   m-ll-* Card-Items: Kopf (Flags + Name + Paymodel) + Kategorie-Zeile + Stat-
   Reihe (Vergütung/Zeitraum) + Aktions-Reihe (Anfragen/Widerrufen/Löschen +
   Mehr). Kein aufklappbares Detail — Detail-Modal übernimmt den Rest.
   Akzentfarbe Partner-Rosa (var(--darkRose)) statt Mail-Türkis. Breakpoint 992px.
   ============================================================================= */
@media (max-width: 991px) {

  .m-ll-list {
    display: flex;
    flex-direction: column;
    gap: 8px;
    /* Leadlounge-Subnav hat wie Blacklist KEINEN AdSpace-Selector (nur Titel-Zeile) —
       calc(-8rem + 8px) wie m-bl-list, NICHT der reine -8rem von m-nl-list (das hat
       den hoeheren AdSpace-Selector von getNewsletter). */
    margin-top: calc(-8rem + 8px);
  }
  /* Empty-State (Text immer Weiss, nicht Grau) — sonst haengt der Text unformatiert
     unter der Subnav (negativer margin-top der Liste zieht ihn mit hoch). */
  .m-ll-list .dash-adv-empty {
    padding: 1rem 0.5rem;
    text-align: center;
    color: var(--white);
    font-size: 0.85rem;
  }

  .m-ll-item {
    background: color-mix(in srgb, var(--darkblue) 75%, transparent);
    border: none;
    border-radius: var(--border);
    padding: 0.75rem 0.85rem;
    overflow: hidden;
  }
  .m-ll-item:first-child {
    margin-top: 8px !important;
  }

  .m-ll-head {
    display: flex;
    flex-wrap: nowrap;
    align-items: center;
    gap: 0.55rem;
  }
  .m-ll-flags {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    flex: 0 0 auto;
  }
  .m-ll-flag-blacklist {
    color: var(--lightred);
    font-size: 1rem;
  }
  .m-ll-flag-zielgruppe {
    color: var(--white);
    font-size: 0.9rem;
  }
  .m-ll-name {
    flex: 1 1 auto;
    min-width: 0;
    color: var(--white);
    font-weight: 500;
    font-size: 0.95rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .m-ll-paymodel {
    flex: 0 0 auto;
    color: var(--white);
    font-size: 0.65rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.4px;
    background: rgba(0, 0, 0, 0.25);
    border-radius: var(--border);
    padding: 0.15rem 0.45rem;
  }

  .m-ll-cat {
    margin-top: 0.35rem;
    color: rgba(255, 255, 255, 0.65);
    font-size: 0.78rem;
  }
  .m-ll-cat:empty {
    display: none;
  }

  .m-ll-stats {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 0.4rem;
    margin-top: 0.6rem;
  }
  .m-ll-stat {
    text-align: center;
    background: rgba(0, 0, 0, 0.2);
    border-radius: var(--border);
    padding: 0.5rem 0.2rem;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
  }
  .m-ll-stat-lbl {
    color: var(--white);
    font-size: 0.7rem;
    margin-bottom: 0.25rem;
  }
  .m-ll-stat-val {
    color: var(--white);
    font-weight: 700;
    font-size: 1rem;
    line-height: 1;
  }
  .m-ll-stat-payout {
    /* Desktop-Kartenpreis nutzt bewusst Gruen statt Rose (color: #00cbb5 inline) — hier
       identisch uebernommen statt Partner-Akzentfarbe, damit der Preis wie auf Desktop aussieht. */
    color: var(--main_mail);
  }

  /* Aktionen: Trennlinie + zentrierte 34px-Icon-Buttons (Anfragen-Status + Mehr),
     analog m-lsh-actions/m-nl-actions statt der bisherigen Text-Buttons. */
  .m-ll-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    justify-content: center;
    margin-top: 0.6rem;
    padding-top: 0.6rem;
    border-top: 1px solid rgba(255, 255, 255, 0.06);
  }
  .m-ll-actions .btn_add,
  .m-ll-actions .btn_delete {
    width: 34px !important;
    height: 34px !important;
    min-width: 34px !important;
    min-height: 34px !important;   /* neutralisiert @media(hover:none) min-height:44px (Gotcha #113) */
    padding: 0 !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    font-size: 1rem;
  }
  .m-ll-actions .btn_add > i,
  .m-ll-actions .btn_delete > i {
    margin: 0 !important;
  }
  .m-ll-running {
    flex: 1 1 auto;
    min-width: 7rem;
    padding: 0.5rem;
    color: var(--white);
    text-align: center;
    font-size: 0.85rem;
  }
}

/* =============================================================================
   MOBILE LEADLOUNGE DETAIL-MODAL (#getLeadloungeData<newsletterId><userId>)
   -----------------------------------------------------------------------------
   Modal-ID bewusst von getNewsletterData auf getLeadloungeData umbenannt (war
   identischer Praefix wie jd-partners eigenes Kampagnen-Editor-Modal -> erbte
   dessen umfangreiche [id^="getNewsletterData"]-Editor-CSS ungewollt, dadurch
   fehlerhafte Mobile-Darstellung ohne Rand/Ecken/Hoehen-Deckel). Klassische-
   Modal-Schale 1:1 nach [[UI Mobile Modals]] Sektion 4.4 (Lazy-Modal-Variante),
   eigener Block statt Eintrag in die grossen geteilten Selektorlisten (Risiko-
   Minimierung fuer die bestehenden Modals dort). Breakpoint 992px.
   ============================================================================= */
@media (max-width: 991px) {
  [id^="getLeadloungeData"].modal {
    padding: 0.875rem !important;
    z-index: 10010 !important;
  }
  [id^="getLeadloungeData"] .modal-dialog {
    position: relative !important;
    top: auto !important;
    left: auto !important;
    right: auto !important;
    bottom: auto !important;
    transform: none !important;
  }
  [id^="getLeadloungeData"] .modal-content,
  [id^="getLeadloungeData"] .mc_a_row {
    border-radius: var(--border) !important;
    min-height: 0 !important;
    height: auto !important;
    max-height: calc(100vh - 1.75rem) !important;
    /* dvh NACH vh (Fallback fuer aeltere Browser) — iOS Safari berechnet 100vh
       instabil je nach ein/ausgeblendeter Adressleiste (bereits bekanntes Problem
       in diesem Codebase, siehe html/body 100dvh fuer die Bottom-Nav-App-Shell). */
    max-height: calc(100dvh - 1.75rem) !important;
    padding: 1.1rem 0.875rem !important;
    overflow-y: auto !important;
  }
  [id^="getLeadloungeData"] .modal-header-wrapper {
    padding-right: 3.5rem !important;
    position: static !important;
  }
  [id^="getLeadloungeData"] .modal-close-mobile {
    position: absolute !important;
    top: 0.5rem !important;
    right: 0.5rem !important;
    width: 40px !important;
    height: 40px !important;
    background-color: transparent !important;
    border: none !important;
    border-radius: var(--border) !important;
    color: var(--white) !important;
    box-shadow: rgba(0, 0, 0, 0.4) 0px 2px 4px,
                rgba(0, 0, 0, 0.3) 0px 7px 13px -3px,
                rgba(0, 0, 0, 0.2) 0px -3px 0px inset !important;
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    z-index: 5 !important;
    font-size: 1rem !important;
    transition: background-color 0.15s ease !important;
  }
  [id^="getLeadloungeData"] .modal-close-mobile:hover {
    background-color: var(--darkRose) !important;
    color: var(--white) !important;
  }
  /* Header-Trennstrich gegen flex-Kollaps sichern (Gotcha #130) */
  [id^="getLeadloungeData"] .border-span {
    flex-shrink: 0 !important;
    min-height: 2px !important;
  }
  /* TinyMCE-Vorschau (WM-Tab, readonly): 70vh (Inline-Style aus dem gemeinsamen
     tinymce.init) ist fuer eine reine Lese-Vorschau auf Mobil viel zu hoch und
     erzeugt eine riesige, halbleer wirkende schwarze Flaeche darunter. Kompakter. */
  [id^="getLeadloungeData"] .tox-tinymce {
    height: 35vh !important;
    height: 35dvh !important;
  }
  /* Geraete-Vorschau-Umschalter (Desktop/Tablet/Mobile) im readonly-WM-Preview
     ausblenden — kommt aus dem geteilten tinymce.init/addResponsiveButtons
     (footer.tpl), macht in einer bereits-mobilen Lese-Vorschau keinen Sinn.
     Gleiches Muster wie beim Werbeflaechen-Modal (barWrapper > bar > .btn_add
     > i.fa-desktop). */
  [id^="getLeadloungeData"] div:has(> div > .btn_add > .fa-desktop),
  [id^="getLeadloungeData"] div[style*="justify-content: center"]:has(> .btn_add > .fa-desktop) {
    display: none !important;
  }
  /* Bemerkung-Tab: 35rem (Desktop-Wert der .ll-remark-textarea) ist auf Mobil eine
     riesige, meist leere schwarze Flaeche. Kompakter, scrollt bei laengerem Text.
     🛑 Selektor braucht das `textarea`-Element (0,2,1) — sonst gewinnt die generische
     `.mc_a_row textarea.textarea { height: 20rem !important }` (ebenfalls 0,2,1, aber
     frueher in der Datei) und die Textarea bleibt bei 280px. */
  [id^="getLeadloungeData"] .mc_a_row textarea.ll-remark-textarea {
    height: 12rem !important;
    /* 1rem Abstand zur Tab-Leiste: die Textarea klebte direkt darunter (ihr Bootstrap-mt-1
       wird von der generischen .textarea-Regel plattgemacht). Hier nur 0.5rem, weil die
       Haupt-Tab-Leiste in jd-partner bereits margin-bottom:0.5rem hat — Summe exakt 1rem
       (in jd-mail ist die margin-bottom 0, dort stehen deshalb volle 1rem).
       Bewusst NUR die Textarea angefasst, nicht der .tab-content: eine Regel dort haette
       auch den Übersicht-Tab verschoben, dessen Abstand bereits stimmt. */
    margin-top: 0.5rem !important;
  }

  /* ── Zielgruppe-Sektion (nur bei Kampagnen mit gesetzter Zielgruppe) ──────── */
  /* Alters-Reihen (Geschlecht / Alter von / Alter bis) durchgehend 3-spaltig in EINER
     Zeile — das generische 2-Spalten-KPI-Grid wuerde daraus "2 + 1 volle Breite" machen.
     Selektor braucht .row.tg-age-row (0,4,0), um die generische .row:has(...)-Regel
     (0,3,0) zu schlagen. Gleiches Muster wie im Kampagne-Modal (.lazy-nl-modal). */
  [id^="getLeadloungeData"] .row.tg-age-row:has(.box_histroy_count) {
    grid-template-columns: repeat(3, 1fr) !important;
  }
  [id^="getLeadloungeData"] .row.tg-age-row:has(.box_histroy_count) > .box_histroy_count:last-child:nth-child(odd) {
    grid-column: auto !important;
  }
  /* Zielgruppe-Kopfzeile + PLZ/Bundeslaender-Umschalter: Inline-Styles sind auf die
     breite Desktop-Ansicht ausgelegt (0.75rem-Icon, feste Paddings) — mobil etwas
     luftiger und mit klarer Trennung zum Inhalt. */
  [id^="getLeadloungeData"] .target-header {
    padding: 0.55rem 0.75rem !important;
    font-size: 0.85rem !important;
    margin-bottom: 0.5rem !important;
    border-radius: var(--border) !important;
  }
  [id^="getLeadloungeData"] .target-content {
    padding: 0 !important;
  }
  /* Der Zielgruppe-Block liegt in einer .row > .col mit Inline-margin-left/right:1rem
     — die laeuft im schmalen Modal ueber den Rand. Auf die Modal-Breite zurueckholen. */
  [id^="getLeadloungeData"] .row:has(> .col > .target-header) {
    margin-left: 0 !important;
    margin-right: 0 !important;
  }
  [id^="getLeadloungeData"] .row > .col:has(> .target-header) {
    margin-left: 0 !important;
    margin-right: 0 !important;
  }
  /* PLZ-Bereiche / Bundeslaender-Umschaltbuttons: groessere Touch-Flaeche (Gotcha #113
     — nur width/height reicht nicht, min-height + padding muessen mit). */
  [id^="getLeadloungeData"] [id^="llPlzToggle"],
  [id^="getLeadloungeData"] [id^="llBlToggle"] {
    padding: 0.5rem 0.4rem !important;
    min-height: 38px !important;
    font-size: 0.8rem !important;
  }

  /* ── Anfragen-/Widerrufen-/Ablehnen-Button am Modal-Ende ──────────────────── */
  /* Im Modal bleibt es bewusst ein Text-Button (volle Breite, klare Beschriftung) —
     die 34px-Icon-Buttons gelten nur fuer die kompakte Karten-Aktionsreihe. Hier nur
     Touch-Hoehe + Abstand zum Inhalt darueber sicherstellen. */
  [id^="getLeadloungeData"] .ll-request-btn,
  [id^="getLeadloungeData"] button[value="refuse"] {
    width: 100% !important;
    min-height: 44px !important;
    margin-top: 1rem !important;
  }
}

/* =============================================================================
   MOBILE LEADSHOP (getLeadshop, type=a) — portiert von jd-mail
   -----------------------------------------------------------------------------
   m-lsh-* Card-Items: Kopf (Name + Staffelpreis-Badge) + Laender-Badge-Zeile +
   dunkles 3er-Stat-Grid (Kurz-/Langdatensatz-Preis, Mindestmenge) + Aktionen-
   Footer mit Trennlinie + zentriertem 34px-Icon-Button. Struktur 1:1 aus
   jd-mail (m-lsh-*, dort Sektion 4.11), Akzentfarbe Partner-Rosa (var(--darkRose))
   statt Mail-Türkis. Breakpoint 992px.
   ============================================================================= */
@media (max-width: 991px) {

  .m-lsh-list {
    display: flex;
    flex-direction: column;
    gap: 8px;
    /* has-row2-padding-Ausgleich wie m-ll-list/m-bl-list (Leadshop-Subnav hat wie
       Leadlounge/Blacklist KEINEN AdSpace-Selector, nur Titel-Zeile — NICHT den
       Mail-Wert -3.05rem uebernehmen, Partner-Subnav ist hoeher). */
    margin-top: calc(-8rem + 8px);
  }
  /* Empty-State (Text immer Weiss, nicht Grau) — sonst haengt der Text unformatiert
     unter der Subnav (negativer margin-top der Liste zieht ihn mit hoch). */
  .m-lsh-list .dash-adv-empty {
    padding: 1rem 0.5rem;
    text-align: center;
    color: var(--white);
    font-size: 0.85rem;
  }

  .m-lsh-item {
    background: color-mix(in srgb, var(--darkblue) 75%, transparent);
    border: none;
    border-radius: var(--border);
    padding: 0.75rem 0.85rem;
    overflow: hidden;
  }
  .m-lsh-item:first-child {
    margin-top: 8px !important;
  }

  /* Kopf: Firmenname linksbuendig, Staffelpreis-Badge rechts */
  .m-lsh-head {
    display: flex;
    flex-wrap: nowrap;
    align-items: center;
    gap: 0.45rem;
  }
  .m-lsh-name {
    flex: 1 1 auto;
    min-width: 0;
    color: var(--white);
    font-weight: 500;
    font-size: 0.95rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .m-lsh-tier-badge {
    flex: 0 0 auto;
    color: var(--white);
    font-size: 0.65rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.4px;
    background: rgba(0, 0, 0, 0.25);
    border-radius: var(--border);
    padding: 0.15rem 0.45rem;
  }
  .m-lsh-tier-badge > i {
    margin-right: 0.25rem;
  }

  /* Subline: Laender-Badges als Pills */
  .m-lsh-countries {
    display: flex;
    gap: 0.3rem;
    margin-top: 0.35rem;
  }
  .m-lsh-country-badge {
    background: rgba(136, 84, 93, 0.15);
    color: var(--darkRose);
    border-radius: var(--border);
    padding: 0.15rem 0.45rem;
    font-size: 0.7rem;
    font-weight: 600;
  }

  /* Stat-Grid: dunkle Boxen, Label oben, Wert unten */
  .m-lsh-stats {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    gap: 0.4rem;
    margin-top: 0.6rem;
  }
  .m-lsh-stat {
    text-align: center;
    background: rgba(0, 0, 0, 0.2);
    border-radius: var(--border);
    padding: 0.5rem 0.2rem;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
  }
  .m-lsh-stat-lbl {
    color: var(--white);
    font-size: 0.7rem;
    margin-bottom: 0.25rem;
    white-space: nowrap;
  }
  .m-lsh-stat-val {
    color: var(--white);
    font-weight: 700;
    font-size: 0.9rem;
    line-height: 1;
  }
  .m-lsh-stat-na {
    color: rgba(255, 255, 255, 0.35);
    font-weight: 400;
    font-size: 0.85rem;
  }

  /* Aktionen: Trennlinie + zentrierter 34px-Icon-Button */
  .m-lsh-actions {
    display: flex;
    justify-content: center;
    margin-top: 0.6rem;
    padding-top: 0.6rem;
    border-top: 1px solid rgba(255, 255, 255, 0.06);
  }
  .m-lsh-actions .btn_add {
    width: 34px !important;
    height: 34px !important;
    min-width: 34px !important;
    min-height: 34px !important;   /* neutralisiert @media(hover:none) min-height:44px (Gotcha #113) */
    padding: 0 !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    font-size: 1rem;
  }
  .m-lsh-actions .btn_add > i {
    margin: 0 !important;
  }

  /* Bestell-Modal (#getLeadshopData<id><userId>): alle Toggle-/Feld-Reihen mit
     2+ Geschwister-.col (Kurz-/Langdatensatz, Länder, Geschlecht, Altersgruppen,
     Provider, Über-uns-Adresse) werden 2-spaltig gerastert statt gestapelt — sonst
     zwingt die generische .mc_a_row-Stapel-Regel jede .col auf 100% Breite (gleiches
     Muster wie #setSegmentPage). Scope ist .tab-content (nicht nur .leadshop-order-
     form), damit auch der Über-uns-Tab (Straße/Stadt/PLZ) erfasst wird. Einzelne
     .col-Reihen (Bestellmenge-Input, Preisbox, Name, Info-Textarea) bleiben ueber
     :has(> .col + .col) bewusst aussen vor und behalten volle Breite. */
  [id^="getLeadshopData"] .tab-content .row:has(> .col + .col) {
    display: grid !important;
    grid-template-columns: 1fr 1fr !important;
    gap: 0.6rem !important;
  }
  [id^="getLeadshopData"] .tab-content .row:has(> .col + .col) > .col {
    width: auto !important;
    max-width: none !important;
    flex: none !important;
  }
  /* Ungerade Anzahl .col (z.B. 3 Länder DE/AT/CH, 3 Adressfelder Straße/Stadt/
     PLZ): letztes Element bliebe sonst als halbbreites "Einzelkind" mit totem
     Freiraum daneben stehen ("1 pro Zeile"-Optik) — stattdessen volle Breite
     (gleiches Muster wie UI Mobile Listen & Tabs Pattern 2, "ungerade letzte
     Karte = volle Breite"). */
  [id^="getLeadshopData"] .tab-content .row:has(> .col + .col) > .col:last-child:nth-child(odd) {
    grid-column: 1 / -1 !important;
  }

  /* Einheitlicher 1rem-Abstand zwischen allen Feld-/Sektions-Bloecken in BEIDEN
     Tabs (Bestellen: Toggle-Reihen, Provider-Tableiste + Tab-Content, Staffel-
     preis-Info, Geschaeftsfelder-Liste, Preisbox — Über uns: Name/Adresse-Reihen,
     Info-Textarea-Container, Website-Link-Container) — vorher uneinheitlich
     0,5–0,75rem je nach Bootstrap-Utility-Klasse bzw. Inline-Style. */
  [id^="getLeadshopData"] .tab-content .row.mt-1,
  [id^="getLeadshopData"] .leadshop-order-form .tab-content,
  [id^="getLeadshopData"] .leadshop-order-form ul.nav-tabs,
  [id^="getLeadshopData"] .tab-content .tier-info,
  [id^="getLeadshopData"] .tab-content div[style*="max-height: 13rem"],
  [id^="getLeadshopData"] .tab-content .row:has(.price-box),
  [id^="getLeadshopData"] .tab-content .container-fluid + .container-fluid {
    margin-top: 1rem !important;
  }

  /* Über-uns-Tab: "Webseite öffnen"-Link volle Breite statt rechtsbuendig-
     kompakt (bessere Touch-Zielgroesse, konsistent mit den anderen Aktions-
     Buttons im Modal). Desktop-Optik (auto-Breite, rechtsbuendig) bleibt in
     styles.css unangetastet — nur hier auf Mobil ueberschrieben. */
  [id^="getLeadshopData"] .leadshop-website-link-row {
    justify-content: center !important;
  }
  [id^="getLeadshopData"] .leadshop-website-link {
    width: 100% !important;
    text-align: center !important;
  }

  /* Geschaeftsfelder-Checkboxen (.checkbox-wrapper-23, bis zu 43 Eintraege): der
     Wrapper hat global KEIN position:relative, wodurch der unsichtbare native
     Checkbox-Input (position:absolute) bis zum naechsten positionierten Vorfahren
     (.modal-content) hochrutscht und dessen scrollHeight stark aufblaeht — riesige
     leere Flaeche nach dem Bestellen-Button. Fix hier scoped statt global
     (styles.css), da nicht verifiziert ob andere .checkbox-wrapper-23-Vorkommen
     von der globalen Aenderung unberuehrt blieben (Muster 1:1 aus jd-mail). */
  [id^="getLeadshopData"] .checkbox-wrapper-23 {
    position: relative;
  }
}


/* =============================================================================
   4.12 PULL-TO-REFRESH (m-ptr) — eingefuehrt 2026-07-13
   Am Seitenanfang nach unten ziehen laedt die Seite neu. Markup + Handler:
   templates/_pull_refresh.tpl. Der Indikator liegt mit z-index 9997 UNTER der
   fixierten Subnav/Kopfleiste (9998) und kommt darunter hervor.
   ============================================================================= */
@media (max-width: 991px) {
  .m-ptr {
    position: fixed;
    top: 0;
    left: 50%;
    margin-left: -20px;
    z-index: 9997;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background-color: var(--darkblue);
    border: 1px solid rgba(255, 255, 255, 0.12);
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.35);
    opacity: 0;
    pointer-events: none;
    transform: translateY(-44px);
  }
  .m-ptr.is-animating {
    transition: transform 0.25s ease, opacity 0.25s ease;
  }
  .m-ptr i {
    color: var(--darkRose);
    font-size: 0.9rem;
    transition: transform 0.2s ease;
  }
  .m-ptr.is-armed i {
    transform: rotate(180deg); /* Pfeil dreht sich: "loslassen zum Neuladen" */
  }
  /* Waehrend des Neuladens: Pfeil raus, CI-Spinner rein */
  .m-ptr .loader {
    display: none;
  }
  .m-ptr.is-refreshing i {
    display: none;
  }
  .m-ptr.is-refreshing .loader {
    display: block;
  }
}

/* ========================================
   GUEST PAGE (getGuest.php / getReport.php) — KPI-Cards
   Beide Templates teilen dieselbe Klasse .guest-modal (guestPage.tpl /
   reportPage.tpl) — eine Regel deckt beide Seiten ab. Testadressen-/Report-/
   Download-/Abrechnung-Tabs sind zufaellig schon ueber [id^="testaddresses"] /
   [id^="id-report-"] / [id^="download"] / [id^="invoice"] mitgestylt (gleiche
   Tab-ID-Praefixe wie die interne Reporting-Verwaltung, siehe function_selector-
   Kontext) — nur die KPI-Boxen (Uebersicht + Zielgruppe) hatten noch den alten
   Rand-Stil aus Zeile ~151. Breakpoint bewusst 991px (nicht 768px wie der Rest
   der GUEST-PAGE-Regeln oben) — sonst bleibt 769-991px auf dem alten Stil
   (Tablet-Portrait-Gotcha, siehe [[UI Mobile KPI-Cards Modal]]).
   `:has(> .col.box_histroy_count)` (direkter Kind-Combinator) statt nur
   `:has(.box_histroy_count)` — die Zielgruppe-Boxen haengen in `.row > .col >
   .row > .col.box_histroy_count`, ein ungescopter :has() wuerde sonst auch die
   AEUSSERE Wrapper-Row treffen und ein doppeltes Grid erzeugen. */
@media (max-width: 991px) {
  .guest-modal .row:has(> .col.box_histroy_count) {
    display: grid !important;
    grid-template-columns: repeat(2, 1fr) !important;
    gap: 0.5rem !important;
    flex-direction: unset !important;
    margin-bottom: 0.75rem !important;
  }
  .guest-modal .row:has(> .col.box_histroy_count):not(:has(> .col ~ .col)) {
    grid-template-columns: 1fr !important;
  }
  .guest-modal .row:has(> .col.box_histroy_count) > .col.box_histroy_count:last-child:nth-child(odd) {
    grid-column: 1 / -1 !important;
  }
  .guest-modal .row:has(> .col.box_histroy_count) > .col {
    width: auto !important;
    max-width: none !important;
    padding: 0 !important;
  }
  .guest-modal .box_histroy_count {
    margin: 1rem 0 0 0 !important;
    min-height: 4rem !important;
    padding: 0.85rem 0.75rem !important;
    background: color-mix(in srgb, var(--darkblue) 75%, transparent) !important;
    background-image: none !important;
    border: none !important;
    border-radius: var(--border) !important;
    display: flex !important;
    flex-direction: column !important;
    justify-content: center !important;
    align-items: center !important;
    text-align: center !important;
  }
  .guest-modal .box_histroy_count h1 {
    font-size: 0.72rem !important;
    color: rgba(255, 255, 255, 0.7) !important;
    width: 100% !important;
    text-align: center !important;
    justify-content: center !important;
    margin: 0 0 0.25rem 0 !important;
  }
  .guest-modal .box_histroy_count h2 {
    font-size: 1.2rem !important;
    color: var(--white) !important;
    width: 100% !important;
    text-align: center !important;
    justify-content: center !important;
    margin: 0 !important;
  }

  /* "Info anzeigen"-Button (i-Icon oben links) mobil komplett entfernen —
     erst nur getReport, User-Wunsch 14.07. jetzt auch getGuest. Die
     zugehoerigen Panels sind ohnehin nur ueber den Button erreichbar,
     brauchen also kein eigenes display:none. */
  .report-info-toggle,
  .guest-info-toggle {
    display: none !important;
  }

  /* Tab-Nav (.guest-modal .nav-tabs): horizontal scrollbar statt Umbruch,
     wie ueberall sonst auf der Plattform (siehe [id^="getClient"] ul.nav-tabs
     weiter oben in dieser Datei). Die aeltere Regel oben in der Datei
     (Abschnitt "GUEST PAGE - MOBILE", @media max-width:768px) hat KEIN
     !important und verliert daher gegen die generische
     `.mc_a .nav-tabs { flex-wrap: wrap !important }`-Regel — hier mit
     !important + breiterem 991px-Scope (Tablet-Portrait eingeschlossen). */
  .guest-modal .nav-tabs {
    flex-wrap: nowrap !important;
    overflow-x: auto !important;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    min-height: 42px !important;
    align-items: flex-start !important;
  }
  .guest-modal .nav-tabs::-webkit-scrollbar {
    display: none;
  }
  .guest-modal .nav-tabs > li {
    flex: 0 0 auto !important;
  }
  .guest-modal .nav-tabs > li > .nav-link {
    white-space: nowrap !important;
  }
}
