/* =====================================================================
   FASTEC Kundenportal – Design-Center CSS (BEREINIGT + SORTIERT)
   Stand: 2026-07-31
   ---------------------------------------------------------------------
   Inhaltsverzeichnis:
     1  GRUNDLAGEN (Verlaufs-Überschriften, Spaltenkopf, Wrap)
     2  LAYOUT (Startseite: 2 Zonen + Grids)
     3  KARTEN – Basis
     4  KARTEN – Varianten (Bild, Light, Dark, Mein System, Interessent,
                            Events, Hardware/Slider, Shop-Kachel, Account-Kachel)
     5  NEWS-KACHELN (Animation)
     6  BUTTONS & BALKEN
     7  LAUNCHER-TILES
     8  HEADER / FOOTER / NAV-DROPDOWNS
     9  SEITEN-HERO
    10  FILTER / CHIPS / PAGER
    11  PARTNER-BLOCK
    12  USE-CASE-DETAIL
    13  VERANSTALTUNGEN (Liste + Detail)
    14  ONLINE-DOKU (Doku-Kacheln)
    15  VERSIONS-SEITE (Kopf + Tabelle)
    16  SHOP-DETAILSEITE (v1 Basis + v2 Variablen-Struktur + Empfehlungen + Galerie)
    17  IMPRESSUM (statisch)
    18  TICKET-KACHEL (native)
    19  TICKET-TABELLE (native)
    20  DOKU-VIEWER (Vollbild) + Breadcrumbs
    21  DOKU – FLARE-INHALTSFORMATE (+ Bildgrößen, Footer-Höhe, On-Page-Nav)
    22  DOKU-VIEWER im SEITEN-EDITOR (Bearbeiten-Modus)
    23  MEIN-KONTO-FORMULAR (fx-mycontact)
    25  CHANGELOG (record_grid im Doku-Frame)
    26  TYPOGRAFIE-VEREINHEITLICHUNG (Groessen-Hierarchie)
    27  LINK-FARBE (zentral, --fx-link)
    28  KACHEL-/H1-VERLAUF (Titel auf hellem Grund)
    29  ECHTES SCHWARZ (zentral, --fx-black)
    30  BLAUE KACHELN: Icon-Groesse + Eyebrow-Abstand
    31  INTERESSENT-KACHEL: CTA-Button
    32  SHOP-KACHELN: Bild groesser
    33  LINK-TEXTE IN KACHELN GROESSER
    34  NEWS-KACHEL: Fliesstext-Kuerzung robust
    35  VERANSTALTUNGEN: groesseres Bild in den Kacheln
    36  HEADER FIXIEREN (sticky)
    37  CHANGELOG: Leer-Hinweis
    38  ANSPRUNG-ZIELE UNTER DEM FIXIERTEN HEADER
    39  CHANGELOG-SUCHE: Optik + Kontext (Optik-Teil abgeloest von 50)
    40  CHANGELOG-KARTEN: Hierarchie (Variante A)
    42  CHANGELOG-KARTE: Feinschliff
    43  CHANGELOG-KARTE: Luft zwischen Titel und Text
    44  CHANGELOG: weniger Leerraum ueber der Liste
    45  DOKU-BROTKRUEMEL: einheitliche Schriftgroesse
    46  CHANGELOG-TOPIC: Brotkruemel raus
    47  SUCHFELD: sticky + Treffer-Hinweis auf den richtigen Wrapper
    48  VERANSTALTUNGSUEBERSICHT: Ueberschriften feste Hoehe
    49  CHANGELOG-BILDER: Zoom-Cursor
    50  SUCHFELDER: eine Optik fuer Changelog, Shop UND Support-Formular
    51  SHOP: eigener Leer-Zustand ohne Treffer
    52  SUPPORT-FORMULAR (Block support_form)
    53  FOOTER: durchgehendes Schwarz
    54  USE-CASE-SCREENSHOTS: Lupe als Mauszeiger
    55  SCHATTEN FUER DEN WEISSEN SEITENHINTERGRUND
    56  HEADER-KANTE
    57  FORMULARE AUS EINEM GUSS (Support + Mein Konto)
    58  BESCHRIFTUNGEN FEST UEBER DIE FELDER
    59  LOGIN-SEITE: Themen-Teaser neben der Anmeldekarte
   (24 und 41 existieren nicht - Nummern wurden beim Bauen uebersprungen)
   ---------------------------------------------------------------------
   Ggü. Vorversion (nur Struktur, Rendering identisch):
   - Gesamten unsortierten Anhang neu einsortiert (Account-Kachel,
     Mein-System-Logo, Datum-Chip, Interessent-Kachel, Shop-Detail v2 +
     Empfehlungen + Galerie, Mein-Konto-Formular, Doku-Editor).
   - Doku-Breadcrumb-Regeln aus „5 News" nach „20 Doku-Viewer" verschoben
     (waren fehlplatziert).
   - 2 tote Dubletten entfernt (spätere Regel überschrieb sie komplett):
       * erste .fx-shopd__reco-* Definition (durch spätere ersetzt),
       * .fx-card--system img{margin:2px 0 22px} (durch …6px ersetzt).
   - Shop-Detail BEWUSST als v1+v2 belassen (subtile Kaskade,
     td-über-tr-Painting bei Zebra) – nicht zusammengeführt.
   KOPPLUNGEN: .fx-card{height:440} ↔ .fx-left > *{grid-auto-rows:440};
   .fx-card--dark{height:260} ↔ .fx-sidebar>*{grid-auto-rows:260}.
   ===================================================================== */

/* =====================================================================
   0  TYPOGRAFIE-BASIS (Hausschrift + Groessen-Hierarchie, portalweit)
   Hausschrift Segoe UI (System-Font, v.a. Windows); Fallback Open Sans
   fuer Geraete ohne Segoe UI (macOS, iOS, Android, Linux).
   ⚠ KEIN @import auf fonts.googleapis.com mehr (entfernt 2026-08-10):
     Die Plattform liefert Open Sans laengst SELBST aus - als variable
     woff2 mit Gewichtsachse 300-800, registriert in
     platform/frontend/src/theme-fonts.css, global eingebunden in main.jsx.
     Der frueher hier stehende @import stammte aus der Zeit davor und war
     wirkungslos: Die CSP (style-src 'self') blockt ihn, BEVOR ein Request
     rausgeht - kein DNS, kein Connect, keine Besucher-IP an Google
     (nachgemessen: alle Resource-Timing-Werte 0). Uebrig blieb nur ein
     Konsolenfehler pro Seitenaufruf.
     NICHT wieder aufnehmen und NICHT fonts.googleapis.com in die CSP
     eintragen - die Schrift kommt vom eigenen Host.
   Deckt MUI-Komponenten + eigene fx-* Klassen + Doku-Inhalt ab; !important
   gewinnt gegen aeltere, nicht-wichtige font-family-Regeln im Rest der Datei.
   Groessen-Hierarchie (durchgezogen in Sektion 26, ganz unten):
     12px Mikro/Meta · 14px Standardtext · 16px Betont/Lead ·
     20px kleine Ueberschrift · 24px Ueberschrift · 32px grosse Ueberschrift
   ===================================================================== */
html, body, #root,
.MuiTypography-root, .MuiButton-root, .MuiInputBase-root, .MuiMenuItem-root,
.fx-docviewer, .fx-docviewer *,
[class^="fx-"], [class*=" fx-"], [class^="fx-"] *, [class*=" fx-"] *{
  font-family:"Segoe UI","Open Sans",Arial,sans-serif !important;
}
:root{
  --fx-link:#003eab;   /* zentrale Link-Farbe (Figma), Abschnitt 27 zieht alle Links darauf */
  --fx-black:#000000;  /* zentrales "Schwarz" (Figma), Abschnitt 29 zieht Grau-/Nah-Schwarz-Text darauf */
}


/* =====================================================================
   1  GRUNDLAGEN
   ===================================================================== */
/* Verlaufs-Überschriften */
.fx-claim-grad,
.fx-claim-grad *,
.fx-h1,
.fx-h1 *{
  background-image:linear-gradient(90deg,#003eab 0%,#00a9eb 100%);
  -webkit-background-clip:text; background-clip:text;
  -webkit-text-fill-color:transparent !important; color:transparent !important;
}
.fx-claim-grad{ width:fit-content !important; max-width:100% !important; }
.fx-h1{ font-size:30px !important; font-weight:700 !important; width:fit-content !important; max-width:100% !important; }

/* H1-Optik für Block-/Container-Überschriften (Klasse: fx-h1-head) */
.fx-h1-head h1, .fx-h1-head h2, .fx-h1-head h3,
h1.fx-h1-head, h2.fx-h1-head, h3.fx-h1-head{
  font-size:30px !important; font-weight:700 !important; line-height:1.2 !important;
  margin:0 !important; width:fit-content !important; max-width:100% !important;
  background-image:linear-gradient(90deg,#003eab 0%,#00a9eb 100%);
  -webkit-background-clip:text; background-clip:text;
  -webkit-text-fill-color:transparent !important; color:transparent !important;
}

/* H2 / Spaltenüberschrift */
.fx-colhead{
  display:block; width:100%; margin:0 0 8px; padding-bottom:12px;
  border-bottom:2px solid #dfe4ea; color:#2f6cb5 !important; font-weight:700 !important;
  letter-spacing:.07em; text-transform:uppercase; font-size:16px;
}

/* gleiche Breite/Zentrierung wie der Kachel-Frame */
.fx-wrap{ max-width:1050px !important; margin-left:auto !important; margin-right:auto !important; }


/* =====================================================================
   2  LAYOUT (Startseite: 2 Zonen + Grids)
   ===================================================================== */
.fx-2zone{ max-width:1050px !important; margin-left:auto !important; margin-right:auto !important; }
.fx-2zone > *{ grid-template-columns:2fr 1fr !important; }
.fx-2zone .MuiBox-root{ align-content:flex-start !important; align-items:flex-start !important; }
/* Linke Spalte der Startseite (Kachel-Raster). Gegenstueck zu .fx-sidebar > *
   direkt darunter - beide Spalten sind gleich gebaut.
   ⚠ NIE WIEDER AUF GENERIERTE KLASSEN ZIELEN (Umstellung 2026-08-10):
   Hier stand bis dahin ".css-at1f2b" - ein von MUI/Emotion zur LAUFZEIT erzeugter
   Klassenname, naemlich eine Pruefsumme ueber das sx-Objekt der Komponente. Bei
   jedem MUI-Update oder jeder Aenderung an diesem Objekt heisst die Klasse anders;
   die Regel greift dann ins Leere und das Kachel-Raster faellt lautlos zusammen -
   ohne Fehlermeldung, an einer Regel, die seit Monaten unveraendert ist.
   .fx-left lag als Elternknoten die ganze Zeit vor und wurde nur nie benutzt.
   Geprueft vor der Umstellung: .fx-left hat GENAU EIN Kind (= das Element, das den
   Hash trug), und der Hash kam portalweit nur auf der Startseite vor (start 1/1,
   veranstaltungen/shop/news/anwenderberichte je 0/0). */
.fx-left > *{
  display:grid !important;
  grid-template-columns:repeat(auto-fit, minmax(min(100%, 260px), 1fr)) !important;
  grid-auto-rows:440px !important; gap:14px !important; align-content:start !important;
}
.fx-sidebar > *{
  display:grid !important; grid-template-columns:1fr !important;
  grid-auto-rows:260px !important; gap:14px !important; align-content:start !important;
}
@media (max-width:1000px){
  .fx-2zone{ max-width:100% !important; }
  .fx-2zone > *{ grid-template-columns:1fr !important; }
  .fx-sidebar > *{ grid-template-columns:repeat(auto-fit, minmax(min(100%, 240px), 1fr)) !important; grid-auto-rows:260px !important; }
}
@media (max-width:620px){
  .fx-card{ height:auto !important; }
  .fx-left > *{ grid-auto-rows:auto !important; }
  .fx-sidebar > *{ grid-auto-rows:auto !important; }
}


/* =====================================================================
   3  KARTEN – Basis
   ===================================================================== */
.fx-card{
  width:100%; height:440px !important; border-radius:10px; overflow:hidden;
  box-shadow:0 6px 18px rgba(20,40,80,.08);
  display:flex; flex-direction:column;
  transition:box-shadow .25s ease, transform .25s ease;
}
.fx-card:hover{ box-shadow:0 14px 30px rgba(20,40,80,.18); transform:translateY(-4px); }
/* Klick-Hand NUR auf wirklich klickbaren Karten (per JS markiert). Buttons haben eigenen Pointer. */
.fx-card[data-fx-clickable="1"]{ cursor:pointer; }
.fx-card__title{
  margin:0; font-size:19px; font-weight:700; line-height:1.28; color:#1b2733 !important;
  display:-webkit-box; -webkit-line-clamp:3; -webkit-box-orient:vertical; overflow:hidden;
}
.fx-card .fx-blue{ color:#0aa1e6 !important; }
.fx-card__text{
  margin:14px 0 0; font-size:13.5px; line-height:1.6; color:#5a6875 !important;
  display:-webkit-box; -webkit-line-clamp:6; -webkit-box-orient:vertical; overflow:hidden;
}
.fx-card__link{ margin-top:auto !important; font-size:13.5px; font-weight:700; color:#0f7bd1 !important; text-align:right; display:block; }
.fx-card__body{ padding:16px 18px 18px; display:flex; flex-direction:column; }
.fx-card__date{ margin:0 0 8px; font-size:11.5px; color:#9aa6b2 !important; }
.fx-card__title--blue{ color:#0f7bd1 !important; font-size:16px; }
.fx-card__lead{ margin:6px 0 0; font-size:13.5px; font-weight:700; color:#28323d !important; }

/* Aktionszeile (Buttons unten) */
.fx-card__actions{ margin-top:auto !important; display:flex !important; align-items:center !important; justify-content:flex-end !important; }
.fx-card__actions .fx-card__link{ margin:0; }
.fx-card__actions .fx-card__cta{ align-self:center !important; margin-top:0 !important; margin-left:auto !important; }
/* Download-Wrapper nach links (bündig zum Inhaltsrand), „Lesen" bleibt rechts.
   Download = der „contained"-Button; „Lesen" = der Text-Button. */
.fx-card__actions > *:has(.MuiButton-contained){
  order:-1 !important; margin-right:auto !important;
  margin-left:0 !important; padding-left:0 !important;
}
/* Download-Button: Farbverlauf wie „Willkommen…" (dunkelblau → cyan), weiße Schrift, flach */
.fx-card__actions .MuiButton-contained{
  margin-left:0 !important;
  background:linear-gradient(90deg,#003eab 0%,#00a9eb 100%) !important;
  color:#fff !important; box-shadow:none !important; text-transform:none !important;
}
.fx-card__actions .MuiButton-contained:hover{
  background:linear-gradient(90deg,#00317f 0%,#0092c9 100%) !important; box-shadow:none !important;
}
/* CTA-Button immer unten fixieren → gleiche Höhe je Kachel, egal wie viel Text */
.fx-card__cta{ margin-top:auto !important; }
.fx-card__body > *:has(.fx-card__cta){ margin-top:auto !important; }


/* =====================================================================
   4  KARTEN – Varianten
   ===================================================================== */
/* ----- Bild-Karte (fx-card--img) ----- */
.fx-card--img{ background:#fff; padding:0; }
.fx-card--img .fx-card__media{ width:100% !important; height:180px !important; overflow:hidden !important; }
.fx-card--img .fx-card__media img{ width:100% !important; height:100% !important; object-fit:cover !important; display:block !important; }
.fx-card--img .fx-card__body{ flex:1 1 auto; display:flex; flex-direction:column; min-height:0; }
.fx-card--img .fx-card__title{
  display:-webkit-box; -webkit-box-orient:vertical; overflow:hidden;
  -webkit-line-clamp:3 !important; flex:0 0 auto !important;
}
.fx-card--img .fx-card__text{
  display:-webkit-box; -webkit-box-orient:vertical; overflow:hidden;
  -webkit-line-clamp:4 !important; height:6.4em !important; flex:1 1 auto !important; min-height:0 !important;
}
.fx-card--img .fx-card__link,
.fx-card--img .fx-card__actions{ margin-top:auto !important; flex-shrink:0 !important; }
.fx-card--img .fx-card__date{
  display:-webkit-box; -webkit-box-orient:vertical; -webkit-line-clamp:1;
  overflow:hidden; height:1.4em !important; line-height:1.4 !important; flex:0 0 auto !important;
}

/* ----- Use-Case-Kachel (Light): Hero-Titel oben, Body unten ----- */
.fx-card--light{
  height:440px !important; display:flex !important; flex-direction:column !important;
  padding:0 !important; background:#ffffff !important; overflow:hidden;
}
.fx-card--light .fx-card__title{
  flex:0 0 auto !important; min-height:180px !important;
  display:flex !important; align-items:flex-start !important; padding:26px 26px 0 !important;
  background:linear-gradient(120deg,#d3e6f5 0%,#f4ece1 46%,#c3ddf2 100%) !important;
  /* color bewusst ENTFERNT (2026-08-07): Titelfarbe wird im Block gesetzt
     (Text-Element {{record.title}} -> Farbe). Ein !important hier hat die
     Blockeinstellung ueberstimmt. */
  font-size:24px !important; line-height:1.2 !important;
  font-weight:700 !important; margin:0 !important;
}
.fx-card--light .fx-card__body{
  flex:1 1 auto !important; display:flex !important; flex-direction:column !important;
  min-height:0 !important; padding:42px 26px 18px !important;
}
.fx-card--light .fx-card__cat{
  flex:0 0 auto !important; color:#0f7bd1 !important; font-size:16px !important;
  font-weight:700 !important; line-height:1.28 !important; margin:0 0 12px !important;
}
/* Teaser ist echtes Rich-Text (mehrere <p>): Absätze inline → line-clamp + "…" wirkt wieder */
.fx-card--light .fx-card__text{
  display:-webkit-box !important; -webkit-box-orient:vertical !important; overflow:hidden !important;
  -webkit-line-clamp:6 !important; height:9.6em !important; flex:0 0 auto !important; margin:0 !important;
}
.fx-card--light .fx-card__text p{ display:inline !important; margin:0 !important; }
.fx-card--light .fx-card__text p::after{ content:" " !important; }
.fx-card--light .fx-card__link{ margin-top:auto !important; flex-shrink:0 !important; }

/* ----- Dark-Karte ----- */
.fx-card--dark{
  position:relative; height:260px !important; padding:20px;
  background-image:linear-gradient(150deg,#0a53ad 0%,#0a2f6e 100%); color:#fff;
}
.fx-card--dark .fx-card__title{ color:#fff !important; font-size:17px; }
.fx-card--dark .fx-card__text{ color:#c3d6f2 !important; font-size:13px; -webkit-line-clamp:3; }
.fx-card--dark .fx-card__link{ color:#fff !important; }
.fx-card--dark .fx-card__eyebrow{ margin:0 0 6px; font-size:11px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:#c3d6f2 !important; }
.fx-card--dark::after{ content:""; position:absolute; top:18px; right:18px; width:22px; height:22px; background:center/contain no-repeat; opacity:.9; }
.fx-ic-doku::after{ background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='1.6'><circle cx='12' cy='12' r='9'/><path d='M3 12h18M12 3c2.5 2.5 2.5 15 0 18M12 3c-2.5 2.5-2.5 15 0 18'/></svg>"); }
.fx-ic-dl::after{ background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='1.6'><path d='M12 3v12m0 0l-4-4m4 4l4-4M4 19h16'/></svg>"); }
.fx-ic-pain::after{ background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='1.6'><path d='M12 3l9 16H3z'/><path d='M12 10v4M12 17v.6'/></svg>"); }
.fx-ic-account::after{ background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='1.6'><circle cx='12' cy='8' r='4'/><path d='M4 20c0-4 4-6 8-6s8 2 8 6'/></svg>"); }

/* ----- Dark-Card Variante „Mein System" + „Interessent" (fx-card--system) ----- */
.fx-card--system .fx-card__title{ margin:0 0 8px; font-size:18px; }
.fx-card--system .fx-card__link{ margin-top:0 !important; text-align:left !important; }
/* Interessent-Kachel: standardmaessig AUS (kein Aufblitzen beim Laden). Zeigt sich erst via JS-Klasse .fx-nosys */
.fx-card--system{ display:none !important; }
.fx-card--system.fx-nosys{ display:flex !important; }
/* Logo (folgt direkt der Claim-Zeile) */
.fx-card--system img{ margin:2px 0 6px !important; }
/* Claim, Benefit-Punkte, CTA-Reihe */
.fx-card--system .fx-card__claim{ margin:0 0 16px !important; font-size:13px !important; font-weight:700 !important; letter-spacing:.03em !important; color:#8fb4ea !important; }
.fx-card--system .fx-card__benefits{ margin:14px 0 18px !important; }
.fx-card--system .fx-card__benefit{ position:relative !important; padding-left:24px !important; margin:0 0 7px !important; font-size:14px !important; line-height:1.4 !important; color:#eaf1fb !important; }
.fx-card--system .fx-card__benefit::before{ content:"✓" !important; position:absolute !important; left:0 !important; top:1px !important; color:#00ade9 !important; font-weight:700 !important; }
.fx-card--system .fx-card__links{ margin-top:auto !important; align-items:center !important; justify-content:flex-end !important; gap:20px !important; flex-wrap:wrap !important; }
.fx-card--system .fx-card__links .fx-card__link{ margin:0 !important; }

/* ----- Hardware-Produkt-Kachel + Slider ----- */
.fx-card--product{ position:relative; overflow:hidden; }
.fx-card--product::after{ content:none !important; }
.fx-card--product .fx-card__eyebrow,
.fx-card--product .fx-card__title,
.fx-card--product .fx-card__text{ padding-right:44% !important; }
.fx-card--product .fx-card__link{ text-align:right !important; }
/* Produkt-Button "Mehr erfahren →" wie Textlink: absolut unten-rechts (umgeht Wrapper) */
.fx-card--product .fx-prod .MuiButton-root{
  position:absolute !important; right:20px !important; bottom:30px !important; margin:0 !important;
  min-width:0 !important; padding:0 !important;
  background:none !important; box-shadow:none !important; border:0 !important; border-radius:0 !important;
  color:#fff !important; font-size:13.5px !important; font-weight:700 !important; line-height:1.2 !important;
  text-transform:none !important; letter-spacing:0 !important;
}
.fx-card--product .fx-prod .MuiButton-root::after{ content:"\00a0\2192"; } /* Pfeil → */
.fx-card--product .fx-prod .MuiButton-root:hover{ background:none !important; box-shadow:none !important; text-decoration:none !important; opacity:.85 !important; }
.fx-card--product .fx-prod .MuiTouchRipple-root{ display:none !important; }
.fx-card--product .fx-card__product{
  position:absolute !important; right:3% !important; top:42% !important; transform:translateY(-50%) !important;
  width:36% !important; height:46% !important;
  background:radial-gradient(ellipse 75% 65% at 50% 50%, rgba(255,255,255,.30) 0%, rgba(255,255,255,0) 70%) !important;
  pointer-events:none;
}
.fx-card--product .fx-card__product img{
  width:100% !important; height:100% !important; object-fit:contain !important;
  object-position:center !important; display:block !important;
  filter:drop-shadow(0 0 18px rgba(255,255,255,.55)) !important;
}
.fx-prodslider{ padding:0 !important; }
.fx-prodslider .fx-prod{
  position:absolute !important; inset:0 !important; display:flex !important; flex-direction:column !important;
  padding:20px !important; opacity:0; pointer-events:none; transition:opacity .6s ease;
}
/* Default/Fallback: Slide 1 sichtbar (nie leer) */
.fx-prodslider .fx-prod--1{ opacity:1; pointer-events:auto; }
/* JS setzt aktiven Index als Klasse am Root (Taktgeber = News-Reload) */
.fx-prodslider.fx-i1 .fx-prod--1{ opacity:0; pointer-events:none; }
.fx-prodslider.fx-i1 .fx-prod--2{ opacity:1; pointer-events:auto; }
.fx-prodslider.fx-i2 .fx-prod--1{ opacity:0; pointer-events:none; }
.fx-prodslider.fx-i2 .fx-prod--3{ opacity:1; pointer-events:auto; }
.fx-prod--2 .fx-card__product{ width:36% !important; height:40% !important; right:11% !important; }

/* ----- Veranstaltungen: 3 kommende, ausgeschrieben, mit CTA (FIXE Hoehe) ----- */
.fx-events{ position:relative; overflow:hidden !important; padding:16px 20px !important; cursor:pointer; width:100% !important; max-width:100% !important; min-width:0 !important; box-sizing:border-box !important; }
/* Lade-Ueberlauf verhindern: Inhalt darf die Kachel nicht nach rechts sprengen */
.fx-events > *, .fx-events .MuiBox-root{ min-width:0 !important; max-width:100% !important; }
.fx-events::after{ content:none !important; }
/* Fallback-Text, wenn KEINE Veranstaltung vorhanden ist (kein Event-Link in der Kachel) */
.fx-events:not(:has(a.MuiPaper-root)):not(:has([role="progressbar"]))::after{
  content:"Aktuell sind keine Veranstaltungen terminiert. Besuchen Sie FASTEC 4 YOU, um über künftige Veranstaltungen informiert zu werden." !important; display:block !important;
  margin-top:6px !important; font-size:13px !important; color:#c3d6f2 !important; line-height:1.4 !important;
}
/* Karten-Eyebrow (einmal oben) */
.fx-events::before{
  content:"KOMMENDE VERANSTALTUNGEN"; display:block; margin:0 0 4px; line-height:1.2;
  font-size:11px; font-weight:700; letter-spacing:.08em; color:#c3d6f2;
}
/* Block-Ueberschrift "Veranstaltungen" weg */
.fx-events > .MuiBox-root > .MuiTypography-h6{ display:none !important; }
.fx-events > .MuiBox-root{ padding:0 !important; margin:0 !important; width:100% !important; }
/* Liste: vertikal gestapelt, kein Extra-Abstand oben */
.fx-events .MuiTypography-h6 + .MuiBox-root{ display:flex !important; flex-direction:column !important; gap:0 !important; width:100% !important; padding:0 !important; margin:0 !important; }
/* nur die naechsten 3 Events */
.fx-events a.MuiPaper-root:nth-child(n+4){ display:none !important; }
/* jede Event-Zeile: KEINE Box; kompakt; Trennlinie zwischen den Events */
.fx-events a.MuiPaper-root{
  position:static !important; inset:auto !important; opacity:1 !important; pointer-events:auto !important;
  display:block !important; width:100% !important;
  background:none !important; border:0 !important; border-radius:0 !important; box-shadow:none !important;
  padding:0 0 8px !important; margin:0 !important; text-decoration:none !important;
}
.fx-events a.MuiPaper-root + a.MuiPaper-root{ border-top:1px solid rgba(255,255,255,.16) !important; padding-top:8px !important; }
/* per-Event Eyebrow weg; CTA "Informationen & Anmeldung" pro Event */
.fx-events a.MuiPaper-root::before{ content:none !important; }
.fx-events a.MuiPaper-root::after{ content:none !important; display:none !important; }
/* Bild, Adresse, Leer-Spacer weg -> Datum + Titel (+ CTA) */
.fx-events a.MuiPaper-root img{ display:none !important; }
.fx-events a .MuiBox-root:empty{ display:none !important; }
.fx-events a p.MuiTypography-body2{ display:none !important; }
.fx-events a > div.MuiBox-root{ display:flex !important; flex-direction:column !important; gap:0 !important; padding:0 !important; margin:0 !important; }
/* Titel: weiss, ausgeschrieben (bis 2 Zeilen), kompakt */
.fx-events a .MuiTypography-subtitle2{ margin:0 !important; font-size:13px !important; font-weight:700 !important; color:#fff !important; line-height:1.2 !important; white-space:normal !important; display:-webkit-box !important; -webkit-box-orient:vertical !important; -webkit-line-clamp:2 !important; overflow:hidden !important; }
/* Datum-Chip: gefuellten Hintergrund/Pille entfernen (nur Text) */
.fx-events .MuiChip-root,
.fx-events .MuiChip-filled,
.fx-events .MuiChip-filledPrimary,
.fx-events .MuiChip-outlined{
  background:transparent !important; background-color:transparent !important;
  box-shadow:none !important; border:0 !important;
}
/* Datum linksbuendig (Chip/Stack ohne Einzug) */
.fx-events a .MuiStack-root{ margin:0 !important; padding:0 !important; }
.fx-events .MuiChip-root{ margin:0 !important; padding:0 !important; }
.fx-events .MuiChip-label{ margin:0 !important; padding:0 !important; }

/* ----- Mein System: nativer portal_systems-Block als blaue Kachel ----- */
.fx-system{ position:relative; overflow:hidden; }
.fx-system::after{ content:none !important; }                 /* fx-card--dark Icon aus */
.fx-system::before{                                           /* Eyebrow */
  content:"MEIN SYSTEM"; display:block; margin:0 0 8px;
  font-size:11px; font-weight:700; letter-spacing:.08em; color:#c3d6f2;
}
/* evtl. Wrapper + innere weisse Karte neutralisieren */
.fx-system > .MuiBox-root{ padding:0 !important; background:none !important; margin-top:-2px !important; }
.fx-system .MuiPaper-root{
  background:none !important; box-shadow:none !important; border:0 !important; border-radius:0 !important;
  padding:0 !important; margin:0 !important;
}
/* Logo oben (unter "MEIN SYSTEM", ueber der Version) - ersetzt den Produktnamen */
.fx-system .MuiPaper-root::before{
  content:"" !important; display:block !important; height:60px !important; width:220px !important; margin:2px 0 12px !important;
  background:left center/contain no-repeat !important;
  background-image:url("/api/uploads/public-w3-public-w3-Fastec4Pro-blue.svg") !important;
}
/* Titel (Produkt) */
.fx-system .MuiPaper-root .MuiTypography-h6{
  margin:0 !important; font-size:18px !important; font-weight:700 !important; color:#fff !important; line-height:1.2 !important;
}
/* Version wird per JS an den Titel gehaengt -> native Version-Zeile ausblenden */
.fx-system .MuiPaper-root .MuiTypography-body2{ display:block !important; margin:4px 0 0 !important; font-size:13.5px !important; font-weight:700 !important; color:#c3d6f2 !important; }
/* Link-Zeile "Online-Doku · Lizenzen" (weiss, wie Kartenlink) */
.fx-system .MuiStack-root{ margin:12px 0 0 !important; display:flex !important; flex-direction:row !important; align-items:baseline !important; flex-wrap:wrap !important; gap:0 !important; }
.fx-system .MuiButton-root{
  min-width:0 !important; min-height:0 !important; padding:0 !important; margin:0 !important;
  background:none !important; box-shadow:none !important;
  color:#fff !important; font-size:13.5px !important; font-weight:700 !important; line-height:1.2 !important; text-transform:none !important; letter-spacing:0 !important;
}
.fx-system .MuiButton-root:hover{ background:none !important; text-decoration:none !important; opacity:.85 !important; transition:opacity .15s ease !important; }
.fx-system .MuiTouchRipple-root{ display:none !important; }
/* "Dokumentation" -> "Online-Doku" (Text per CSS ersetzt) */
.fx-system .MuiStack-root .MuiButton-root:first-child{ font-size:0 !important; }
.fx-system .MuiStack-root .MuiButton-root:first-child::before{ content:"Online-Doku"; font-size:13.5px; font-weight:700; line-height:1.2; letter-spacing:0; }
/* Trenner-Punkt vor "Lizenzen" */
.fx-system .MuiStack-root .MuiButton-root:last-child::before{ content:"\00b7"; margin:0 8px; }
/* "Lizenzen" vorerst ausgeblendet (kann spaeter wieder rein: diese Regel entfernen) */
.fx-system .MuiStack-root .MuiButton-root:last-child{ display:none !important; }
/* Trenner + "Update anfragen" nach "Lizenzen" (oeffnet per JS den Kontakt-Button) */
.fx-system .MuiStack-root::after{ content:"\00b7\00a0\00a0Update anfragen"; margin-left:8px; font-size:13.5px; font-weight:700; line-height:1.2; letter-spacing:0; color:#fff; cursor:pointer; transition:opacity .15s ease; }
.fx-system .MuiStack-root:hover::after{ opacity:.85; }

/* ----- Account-Kachel „Mein Konto" (fx-account, Dark-Card mit fx-ic-account) ----- */
.fx-account .fx-card__meta{ margin:2px 0 0; font-size:12.5px; font-weight:700; color:#c3d6f2 !important; }
/* CTA „Profil bearbeiten →" als weißer Link unten links */
.fx-account .MuiButton-root{
  margin-top:auto !important; align-self:flex-start !important;
  min-width:0 !important; padding:0 !important; background:none !important; box-shadow:none !important;
  color:#fff !important; font-size:13.5px !important; font-weight:700 !important; line-height:1.2 !important;
  text-transform:none !important; letter-spacing:0 !important;
}
.fx-account .MuiButton-root:hover{ background:none !important; opacity:.85 !important; transition:opacity .15s ease !important; }
.fx-account .MuiTouchRipple-root{ display:none !important; }
.fx-account .fx-acct-line{ margin:2px 0 0; font-size:13px; font-weight:600; color:#c3d6f2 !important; }

/* ----- Shop-Kachel ----- */
.fx-card--shop{ height:340px !important; background:#fff; padding:0; }
.fx-card--shop .fx-card__media{
  width:100% !important; height:190px !important; padding:16px !important; background:#fff !important;
  display:flex !important; align-items:center !important; justify-content:center !important; overflow:hidden !important;
}
/* direkter Inhalt (Bild-Wrapper) füllt die Zone, damit das Bild nicht rausläuft */
.fx-card--shop .fx-card__media > *{
  width:100% !important; height:100% !important; min-height:0 !important;
  display:flex !important; align-items:center !important; justify-content:center !important;
}
.fx-card--shop .fx-card__media img{
  max-width:100% !important; max-height:100% !important; width:auto !important; height:auto !important;
  object-fit:contain !important; display:block !important;
}
.fx-card--shop .fx-card__body{ padding:16px 18px 18px; display:flex; flex-direction:column; flex:1 1 auto; min-height:0; }
.fx-card--shop .fx-card__title{
  display:-webkit-box; -webkit-box-orient:vertical; overflow:hidden;
  -webkit-line-clamp:2 !important; height:2.56em !important; font-size:15px !important;
}
/* Kurzbeschreibung (2 Zeilen, gekürzt) */
.fx-card--shop .fx-card__shortdesc{
  font-size:13px !important; color:#3a4756 !important; line-height:1.5 !important; margin:4px 0 0 !important;
  display:-webkit-box !important; -webkit-line-clamp:2 !important; -webkit-box-orient:vertical !important; overflow:hidden !important;
}


/* =====================================================================
   5  NEWS-KACHELN (Animation)
   ===================================================================== */
/* Fade wird per JS bei JEDEM News-Reload ausgeloest (Taktgeber fuer alle Slider; kein driftender Timer mehr) */
@keyframes fxNewsIn{
  0%   { opacity:0; transform:translateY(16px); }
  100% { opacity:1; transform:translateY(0); }
}
.fx-news.fx-news-in{ animation:fxNewsIn .6s ease-out; }
/* News-Übersicht: getakteten Einblend-Effekt abschalten (Startseite behält ihn) */
.fx-newsgrid .fx-news{ animation:none !important; opacity:1 !important; transform:none !important; }


/* =====================================================================
   6  BUTTONS & BALKEN
   ===================================================================== */
.fx-btn{
  background:linear-gradient(90deg,#00a9eb,#0f7bd1); color:#fff !important; border-radius:5px;
  padding:5px 14px; font-size:12px; font-weight:700; display:inline-block;
}
.fx-btn .MuiButton-root,
.fx-btn.MuiButtonBase-root,
.fx-btn button{
  background:linear-gradient(90deg,#003eab 0%,#00a9eb 100%) !important; color:#fff !important;
  border-radius:5px !important; padding:8px 20px !important; font-size:14px !important;
  font-weight:700 !important; text-transform:none !important; box-shadow:none !important;
  min-width:0 !important; min-height:0 !important; line-height:1.3 !important;
}
.fx-btn .MuiButton-root:hover,
.fx-btn.MuiButtonBase-root:hover,
.fx-btn button:hover{
  background:linear-gradient(90deg,#00317f 0%,#0092c9 100%) !important;
}

/* „Weitere anzeigen"-Button */
.fx-morebar{ display:flex !important; justify-content:center !important; margin-top:24px; }
.fx-morebtn{
  display:inline-block; padding:12px 28px; border-radius:6px;
  background:linear-gradient(180deg,#12539f 0%,#0a2c63 100%); color:#fff !important;
  font-size:14px; font-weight:700; letter-spacing:.01em; cursor:pointer; border:0;
}
.fx-morebtn:hover{ filter:brightness(1.08); }


/* =====================================================================
   7  LAUNCHER-TILES
   ===================================================================== */
.fx-tile{ background:#fff; border-radius:12px; padding:18px; box-shadow:0 6px 18px rgba(20,40,80,.08); }
.fx-tile__icon{ width:48px; height:48px; border-radius:10px; margin:0 0 14px; background-repeat:no-repeat; }
.fx-tile__title{ margin:0; font-size:17px; font-weight:700; color:#1b2733 !important; }
.fx-tile__sub{ margin:4px 0 0; font-size:13px; color:#8a97a4 !important; }
.fx-tile--tickets .fx-tile__icon{
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='1.6'><path d='M4 9a2 2 0 0 0 0 6v2a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-2a2 2 0 0 1 0-6V7a1 1 0 0 0-1-1H5a1 1 0 0 0-1 1z'/><path d='M13 6v12' stroke-dasharray='1.5 2'/></svg>"), linear-gradient(150deg,#1aa3e8 0%,#0b53ad 100%);
  background-position:center, center; background-size:24px 24px, cover; background-repeat:no-repeat, no-repeat;
}
.fx-tile--aufgaben .fx-tile__icon{
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='1.7'><circle cx='12' cy='12' r='9'/><path d='M8.5 12.5l2.5 2.5 4.5-5'/></svg>"), linear-gradient(150deg,#1aa3e8 0%,#0b53ad 100%);
  background-position:center, center; background-size:24px 24px, cover; background-repeat:no-repeat, no-repeat;
}


/* =====================================================================
   8  HEADER / FOOTER / NAV-DROPDOWNS
   ===================================================================== */
.fx-header{ padding-top:0 !important; padding-bottom:0 !important; }
.MuiBox-root:has(> .fx-header){ padding-top:0 !important; padding-bottom:0 !important; }
.fx-footer{ padding-top:0 !important; padding-bottom:0 !important; }
/* Footer-Mittelspalte: alle vertikalen Abstaende gleich (oben / Icons-Links / Links-Copyright / unten) */
.fx-footer > .MuiStack-root:nth-child(2) > *{ margin:0 !important; }
.fx-footer > .MuiStack-root:nth-child(2){ display:flex !important; flex-direction:column !important; align-items:center !important; gap:6px !important; padding:6px 0 !important; }
.fx-footer .MuiIconButton-root{ padding:2px !important; }
.fx-footer .MuiLink-button{ padding-top:0 !important; padding-bottom:0 !important; }
.MuiBox-root:has(> .fx-footer){ padding-top:0 !important; padding-bottom:0 !important; }
.MuiBox-root:has(> .MuiBox-root > .fx-footer){ padding-top:0 !important; padding-bottom:0 !important; }
/* Header-Logo klickbar (Ziel via JS = /kundenportal/start; Bild-Element hat kein Link-Feld) */
.fx-header img[src*="logo"]{ cursor:pointer !important; }
/* Nav-Leiste (Top-Level): mehr Abstand zwischen den Punkten + sauberer Hover-Unterstrich */
.fx-header .MuiStack-root:has(> .MuiLink-button){ gap:28px !important; }
.fx-header .MuiStack-root:has(> .MuiLink-button) > .MuiLink-button{ margin:0 !important; }
.fx-header .MuiLink-button{
  text-decoration:none !important; border-bottom:1px solid transparent !important;
  padding-bottom:2px !important; border-radius:0 !important;
}
.fx-header .MuiLink-button:hover{
  text-decoration:none !important; border-bottom-color:currentColor !important; background:transparent !important;
}

/* Nav-Dropdowns (MUI-Menü: Wissen/Support/Events; wirkt auf alle Menüs) */
.MuiMenu-paper{
  border-radius:14px !important;
  border:1px solid #eceef0 !important;
  box-shadow:0 10px 30px rgba(16,35,58,.14) !important;
  padding:6px !important;
  margin-top:6px !important;
}
.MuiMenu-paper .MuiMenu-list{ padding:0 !important; }
.MuiMenu-paper .MuiMenuItem-root{
  border-radius:9px !important;
  padding:10px 14px !important;
  margin:2px 4px !important;
  min-height:0 !important;
  font-size:15px !important;
  color:#1f2a37 !important;
}
.MuiMenu-paper .MuiMenuItem-root:hover{ background:#eaedf0 !important; }
.MuiMenu-paper .MuiMenuItem-root.Mui-focusVisible{ background:#eaedf0 !important; }
/* aktuelle Seite = hellblau */
.MuiMenu-paper .MuiMenuItem-root.Mui-selected{ background:#d7eefb !important; color:#0b5aa6 !important; }
.MuiMenu-paper .MuiMenuItem-root.Mui-selected:hover{ background:#c7e6fa !important; }


/* =====================================================================
   9  SEITEN-HERO
   ===================================================================== */
.fx-hero{ width:100% !important; max-width:none !important; margin:0 !important; padding:24px 0 !important; align-items:center !important; }
.fx-hero__text{ flex:1 1 55% !important; min-width:0 !important; }
.fx-hero__title{ margin:0 0 18px !important; line-height:1.25 !important; }
.fx-hero__lead{ margin:0 0 16px !important; font-size:19px !important; font-weight:700 !important; line-height:1.35 !important; color:#1b2733 !important; }
.fx-hero__desc{ margin:0 !important; font-size:14px !important; line-height:1.7 !important; color:#5a6875 !important; }
.fx-hero__img{ flex:1 1 45% !important; height:340px !important; overflow:hidden !important; border-radius:4px; }
.fx-hero__img img{ width:100% !important; height:100% !important; object-fit:cover !important; display:block !important; }
@media (max-width:820px){
  .fx-hero{ flex-direction:column !important; align-items:stretch !important; }
  .fx-hero__text, .fx-hero__img{ flex:1 1 100% !important; width:100% !important; }
  .fx-hero__img{ height:240px !important; }
}


/* =====================================================================
   10  FILTER / CHIPS / PAGER
   ===================================================================== */
.fx-filter__hint{ font-size:12px; color:#8a97a4 !important; margin:0 0 6px; }
.fx-filterbar{ flex-wrap:wrap !important; gap:10px !important; }
.fx-chip{
  display:inline-block; padding:7px 16px; border-radius:4px;
  background:#0a63b0; color:#fff !important; font-size:13px; font-weight:600;
  cursor:pointer; white-space:nowrap;
}
.fx-chip--active{ background:#f39200 !important; }
/* Hintergrund beim Ueberfahren MIT setzen (2026-08-13): MUI rendert die nicht gewaehlten
   Chips als "outlined/colorDefault" und faerbt sie beim Hover mit rgba(0,0,0,.12) - also
   12% Schwarz. Diese Regel ERSETZT unser Blau, statt es abzudunkeln; der Chip wurde grau.
   Unsere alte Hover-Regel setzte nur brightness und konnte nichts ueberstimmen, weil
   ".css-<hash>:hover" (Klasse + Pseudoklasse) spezifischer ist als ".fx-chip".
   Jetzt wird der Hintergrund im Hover ausdruecklich wiederholt; brightness bleibt als
   Rueckmeldung erhalten. Die aktive Fassung muss danach stehen, sonst gewinnt Blau. */
.fx-chip:hover{ background:#0a63b0 !important; filter:brightness(1.08); }
.fx-chip--active:hover{ background:#f39200 !important; }

.fx-pager{ display:flex !important; justify-content:center !important; align-items:center !important; gap:6px !important; margin-top:20px !important; }
.fx-pager .MuiPaginationItem-root,
.fx-pager button{
  min-width:34px !important; height:34px !important; margin:0 !important; padding:0 8px !important;
  border:0 !important; border-radius:6px !important; background:transparent !important;
  color:#0f7bd1 !important; font-size:14px !important; font-weight:600 !important;
}
.fx-pager .MuiPaginationItem-root:hover,
.fx-pager button:hover{ background:#e6f1fb !important; }
.fx-pager .MuiPaginationItem-root.Mui-selected,
.fx-pager .Mui-selected,
.fx-pager button[aria-current="true"],
.fx-pager button.active{ background:#0a63b0 !important; color:#ffffff !important; }
.fx-pager .MuiPaginationItem-root.Mui-selected:hover,
.fx-pager .Mui-selected:hover{ background:#0a5499 !important; }
.fx-pager .MuiPaginationItem-root.Mui-disabled,
.fx-pager button:disabled{ color:#b8c2cc !important; background:transparent !important; cursor:default !important; }
/* =====================================================================
   11  PARTNER-BLOCK
   ===================================================================== */
/* Oben mehr Innenabstand als unten (100 statt 40): Der Verlauf braucht STRECKE, um
   auszulaufen. Vorher begann er exakt an der Oberkante des Blocks und war deshalb
   oberhalb der Logos abrupt zu Ende. Die zusaetzliche Hoehe ist fast weiss, wirkt also
   als Luft und nicht als Flaeche. Wer den Auslauf verlaengern will, dreht HIER - nicht
   an den Farbstopps. */
.fx-partner-bg{ position:relative; z-index:0; padding:100px 72px 40px !important; }
/* UEBERHANG DES BANDES ABSCHNEIDEN (2026-08-13, im Browser verifiziert).
   PROBLEM: 100vw enthaelt die senkrechte Scrollleiste, der Inhaltsbereich ist
   ~15px schmaler. Das Band steht dadurch je 7,5px ueber; rechts erzeugt das eine
   waagerechte Scrollleiste (gemessen bei 1240px: Container 0..1225, ::before
   -7,5..1232,5, Ueberhang 8px in mehreren verschachtelten Containern).

   ⚠ ZWEI FEHLVERSUCHE VORHER, BEIDE MIT DERSELBEN URSACHE - eine bei EINER
   Fensterbreite gemessene Zahl fuer allgemeingueltig gehalten:
   1. left:-32px; right:-32px statt 100vw -> die 32px waren der Einzug bei 1240px.
      Bei breiten Fenstern ist die Inhaltsspalte gedeckelt und zentriert, der Einzug
      waechst auf mehrere hundert Pixel; das Band war danach nur noch textbreit.
   2. clip an :has(> * > .fx-partner-bg) -> das ist die INHALTSSPALTE. Bei 1240px
      zufaellig voll breit, bei breiten Fenstern gedeckelt -> Band mitbeschnitten.

   RICHTIG ist der Vorfahre, der den HEADER traegt: Der geht bei JEDER Fensterbreite
   bis zum Rand, deshalb kann er das Band nie zu schmal beschneiden. Die drei ">"
   sind die gemessene Tiefe: .fx-header -> Wrapper -> sticky-Box -> DIESES Element.
   Feste Tiefe wie in Sektion 59, damit nichts auf weitere Vorfahren durchschlaegt.

   clip, NICHT hidden: hidden macht die andere Achse automatisch scrollbar, das
   Element wuerde zum Scroll-Container und koennte das Sticky-Verhalten des Headers
   stoeren. clip erzeugt keinen Scroll-Container.
   MERKE: Inline-Styles sind im Portal per CSP gesperrt - Tests dieser Art im Browser
   nur ueber insertRule in ein geladenes Stylesheet, style.setProperty wird geblockt. */
:has(> * > * > .fx-header){ overflow-x:clip !important; }
.fx-partner-bg::before{
  content:""; position:absolute; top:0; bottom:0; left:50%;
  width:100vw; margin-left:-50vw;
  /* Verlauf beginnt bei REINEM WEISS (2026-08-11), damit oben keine Kante zur Seite
     entsteht - vorher startete er mit #f5efe7 und setzte sich sichtbar ab.
     Von dort laeuft er durch einen warmen Ton ins helle Blaugrau, das auch die Karten
     und Felder rahmen.

     ENTWICKLUNG (vier Anlaeufe, damit niemand die Runden wiederholt):
       1. rein kuehl, sehr zart      -> wirkte deplatziert, "wie ein Schatten"
       2. warm ab 34%, Fuss #dde4ea  -> NIE SICHTBAR GEWESEN (kaputter Kommentar, s.u.)
       3. #f2e7d6 ab 26%             -> zu kraeftig, Streifen wurde zum Blickfang
       4. diese Fassung              -> dazwischen, mit fliessendem Farbwechsel

     FLIESSENDER UEBERGANG: Der Wechsel warm -> kuehl war als Kante sichtbar, weil der
     Verlauf zwischen zwei FARBFAMILIEN springt und dazwischen nur einen Stopp hatte.
     Jetzt fuehrt eine Bruecke ueber neutrale Toene:
       #fbf7f0  warm                        (R 11 ueber B)
       #f8f7f4  fast neutral, minimal warm   (R  4 ueber B)
       #f4f5f7  fast neutral, minimal kuehl  (B  3 ueber R)
       #edf0f4  kuehl                        (B  7 ueber R)
       #e2e8ee  kuehl, tiefer                (B 12 ueber R)
     Der Farbcharakter kippt dadurch nicht an einer Stelle, sondern wandert.

     AUSLAUF NACH OBEN (fuenfter Anlauf): Der Verlauf endete oberhalb der Logos abrupt,
     weil er exakt an der Oberkante des Blocks begann und keine Strecke zum Ausklingen
     hatte. Deshalb padding-top 100 statt 40 (s. Regel darueber) UND die Stopps nach
     hinten verschoben: reines Weiss bis 18%, warmer Ton erst bei 42% - genau dort, wo
     die Logos anfangen. Der Weg von Weiss nach Warm ist damit rund dreimal so lang.

     STELLSCHRAUBEN, falls nochmal justiert wird:
       padding-top = Laenge des Auslaufs oben (mehr = weicher, s. Regel darueber)
       #fbf7f0     = Waerme oben           (dunkler = warmer/praesenter)
       #e2e8ee     = Fuss unten            (dunkler = mehr Gewicht)
       18%         = Ende des reinen Weiss (kleiner = Verlauf setzt frueher ein)
       Die drei mittleren Stopps NICHT einzeln anfassen - sie bilden die Bruecke.
     MERKSATZ: Praesenz kommt von unten. Wer am ANFANG des Verlaufs dreht, holt sich
     sofort die Kante zurueck, die wir hier beseitigt haben.

     FALLE (2026-08-11, eine Stunde gekostet): Der Kommentar-Anfang hier war ein
     BACKSLASH-Stern statt Schraegstrich-Stern. Der Kommentar wurde dadurch nie geoeffnet,
     der Parser las die Zeilen als eine fehlerhafte Deklaration und verschluckte dabei
     genau die background-Zeile mit - z-index danach griff wieder, weil er hinter dem
     naechsten Semikolon steht. Symptom war deshalb kein Fehler, sondern
     "backgroundImage: none" bei sonst funktionierender Regel.
     Bei "Regel greift teilweise" immer die Zeichen VOR der fehlenden Deklaration pruefen. */
  background:linear-gradient(180deg,#ffffff 0%,#ffffff 18%,#fbf7f0 42%,#f8f7f4 55%,#f4f5f7 66%,#edf0f4 80%,#e2e8ee 100%);
  z-index:-1;
}
.fx-partner-bg img{ height:50px !important; width:auto !important; max-width:none !important; }
.fx-partner-logos{
  width:100% !important; align-self:stretch !important;
  display:flex !important; justify-content:space-between !important;
  align-items:center !important; flex-wrap:wrap !important; row-gap:20px;
}
@media (max-width:768px){
  .fx-partner-logos{ justify-content:center !important; column-gap:28px !important; }
  .fx-partner-bg img{ height:40px !important; }
}


/* =====================================================================
   12  USE-CASE-DETAIL
   ===================================================================== */
/* ----- Block 1: Kopf ----- */
.fx-uc-head{ max-width:1050px !important; margin:0 auto !important; padding:8px 0 24px !important; display:flex !important; gap:40px !important; align-items:flex-start !important; }
.fx-uc-head__main{ flex:1 1 auto !important; min-width:0 !important; }
.fx-uc-eyebrow{ color:#1c8fd6 !important; font-weight:700 !important; font-size:15px !important; margin:0 0 8px !important; }
.fx-uc-title{ color:#12233a !important; font-size:34px !important; font-weight:700 !important; line-height:1.25 !important; margin:0 0 16px !important; }
.fx-uc-sub{ color:#3a4756 !important; font-size:16px !important; line-height:1.5 !important; margin:0 !important; }
.fx-uc-meta{ flex:0 0 auto !important; width:240px !important; align-items:flex-start !important; justify-content:flex-end !important; }
.fx-uc-logo img{ height:56px !important; width:auto !important; display:block !important; }
.fx-uc-branche{ text-align:right !important; min-width:0 !important; }
.fx-uc-branche__label{ color:#12233a !important; font-weight:700 !important; font-size:14px !important; margin:0 0 4px !important; }
.fx-uc-branche__value{ color:#1c8fd6 !important; font-weight:700 !important; font-size:14px !important; margin:0 !important; white-space:normal !important; line-height:1.5 !important; }

/* ----- Block 2: Problem/Umsetzung + Nutzen-Card ----- */
.fx-uc-body{ max-width:1050px !important; margin:0 auto !important; padding:8px 0 28px !important; display:flex !important; gap:40px !important; align-items:flex-start !important; }
.fx-uc-body__main{ flex:1 1 58% !important; min-width:0 !important; }
.fx-uc-h3{ color:#12233a !important; font-weight:700 !important; font-size:15px !important; margin:0 0 4px !important; }
.fx-uc-text{ color:#3a4756 !important; font-size:14px !important; line-height:1.7 !important; margin:0 0 22px !important; }
.fx-uc-text p{ margin:0 0 12px !important; }
.fx-uc-text p:last-child{ margin-bottom:0 !important; }
.fx-uc-benefit{
  flex:0 0 38% !important; background:linear-gradient(160deg,#ffffff 0%,#eef3f9 100%) !important;
  border:1px solid #e6edf5 !important; border-radius:12px !important;
  box-shadow:0 14px 34px rgba(20,40,80,.14) !important; padding:24px !important; gap:2px !important;
}
.fx-uc-benefit__lead{ color:#12233a !important; font-size:15px !important; line-height:1.5 !important; margin:0 0 12px !important; }
.fx-uc-benefit__lead p{ margin:0 !important; }
.fx-uc-benefit__lead p:first-child{ margin:0 0 4px !important; }
.fx-uc-benefit__list{ color:#3a4756 !important; font-size:13.5px !important; line-height:1.6 !important; margin:0 !important; }
.fx-uc-benefit__list:empty{ display:none !important; }
/* Icon: getipptes „☑" ausblenden, Outline-Haken per SVG */
.fx-uc-benefit__icon{ font-size:0 !important; line-height:0 !important; margin:0 0 6px !important; }
.fx-uc-benefit__icon::before{
  content:"" !important; display:inline-block; width:26px; height:26px; margin-left:-3px;
  background:center/contain no-repeat;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='rgb(18,35,58)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M9 11l3 3L22 4'/><path d='M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11'/></svg>");
}

/* ----- Block 3: Zitat-Banner ----- */
.fx-uc-quote{
  max-width:1050px !important; margin:0 auto !important;
  background:linear-gradient(110deg,#0a2f6e 0%,#0a53ad 55%,#1a6fd0 100%) !important;
  border-radius:12px !important; box-shadow:0 10px 26px rgba(20,40,80,.18) !important; padding:16px 32px !important;
}
.fx-uc-quote__text{ color:#ffffff !important; font-size:17px !important; font-style:italic !important; font-weight:500 !important; line-height:1.5 !important; margin:0 !important; text-align:center !important; }

/* ----- Block 4: Bild-Slideshow (JS-Karussell, feste Bildfläche) ----- */
.fx-uc-slider{ max-width:760px !important; margin:0 auto !important; padding:24px 0 !important; }
.fx-uc-slider__main{ display:flex !important; align-items:center !important; gap:8px !important; }
.fx-uc-track{ flex:1 1 auto !important; min-width:0 !important; overflow:hidden !important; }
.fx-uc-slide{ display:none !important; }
.fx-uc-slide.is-active{ display:block !important; animation:fxSlideFade .45s ease !important; }
@keyframes fxSlideFade{ from{ opacity:0; transform:translateX(28px); } to{ opacity:1; transform:translateX(0); } }
/* feste Bildfläche → Quer- und Hochformat skalieren gleich (contain, kein Verzerren/Beschneiden) */
.fx-uc-slide__img img{ width:100% !important; height:380px !important; object-fit:contain !important; background:transparent !important; border-radius:0 !important; display:block !important; box-shadow:none !important; }
.fx-uc-slide__cap{ text-align:center !important; color:#12233a !important; font-size:15px !important; font-weight:600 !important; margin-top:12px !important; }
.fx-uc-arrow{ flex:0 0 auto !important; box-sizing:border-box !important; cursor:pointer !important; user-select:none !important; width:38px !important; height:38px !important; border-radius:50% !important; background:linear-gradient(90deg,#003eab 0%,#00a9eb 100%) !important; color:#fff !important; font-size:22px !important; line-height:1 !important; display:flex !important; align-items:center !important; justify-content:center !important; padding-bottom:3px !important; }
.fx-uc-arrow--prev{ padding-right:3px !important; }
.fx-uc-arrow--next{ padding-left:3px !important; }
.fx-uc-arrow.is-hidden{ display:none !important; }
.fx-uc-thumbs{ display:flex !important; gap:10px !important; justify-content:center !important; flex-wrap:wrap !important; margin-top:14px !important; }
.fx-uc-thumb{ display:none !important; }
.fx-uc-thumb.is-shown{ display:block !important; }
.fx-uc-thumb img{ width:64px !important; height:48px !important; object-fit:cover !important; border-radius:4px !important; cursor:pointer !important; opacity:.55 !important; border:1px solid #dfe4ea !important; }
.fx-uc-thumb.is-active img{ opacity:1 !important; outline:2px solid #0f7bd1 !important; }
.fx-uc-nav{ margin:28px 0 0 !important; align-items:center !important; }
.fx-uc-nav__link{ color:#0f5bbf !important; font-weight:700 !important; font-size:15px !important; cursor:pointer !important; }
.fx-uc-nav__btn{ background:linear-gradient(180deg,#12539f,#0a2c63) !important; color:#fff !important; font-weight:700 !important; font-size:15px !important; padding:12px 28px !important; border-radius:6px !important; cursor:pointer !important; }

/* ----- Native Vor/Zurück-Navigation (Kollegen-Komponente) an Screenshot-1-Look ----- */
.fx-ucnav{ margin-top:28px !important; }
/* Vor/Zurück = blaue Text-Links (inkl. Pfeil-Icons) */
.fx-ucnav__link{ color:#0f5bbf !important; font-weight:700 !important; font-size:15px !important; text-transform:none !important; }
.fx-ucnav__link:hover{ background:transparent !important; }
.fx-ucnav__link .MuiSvgIcon-root{ color:#0f5bbf !important; }
/* Mitte „Zur Übersicht" = dunkelblauer Verlaufs-Button */
.fx-ucnav__btn{ background:linear-gradient(90deg,#003eab 0%,#00a9eb 100%) !important; color:#fff !important; font-weight:700 !important; font-size:15px !important; text-transform:none !important; padding:12px 28px !important; border-radius:6px !important; box-shadow:none !important; }
.fx-ucnav__btn:hover{ background:linear-gradient(90deg,#00317f 0%,#0092c9 100%) !important; box-shadow:none !important; }
/* Editor-Hinweis (Modell … Datensätze) ausblenden */
.fx-ucnav .MuiTypography-caption{ display:none !important; }


/* =====================================================================
   13  VERANSTALTUNGEN (Liste + Detail)
   ===================================================================== */
/* ----- Liste: zwei Zonen + Grids ----- */
.fx-evt-2zone{ max-width:none !important; margin:0 !important; }
.fx-evt-2zone > *{ display:grid !important; grid-template-columns:2fr 1fr !important; gap:40px !important; align-items:start !important; }
.fx-evt-upcoming > *:not(h2){ display:grid !important; grid-template-columns:repeat(2, minmax(0, 1fr)) !important; grid-auto-rows:440px !important; gap:14px !important; align-content:start !important; }
.fx-evt-past > *:not(h2){ display:grid !important; grid-template-columns:1fr !important; grid-auto-rows:440px !important; gap:14px !important; align-content:start !important; }
/* zwei Record-Grids nebeneinander – links 2/3 (Kommende), rechts 1/3 (Vergangene) */
.fx-evt-split{ max-width:none !important; margin:0 !important; }
.fx-evt-split > *{ display:grid !important; grid-template-columns:2fr 1fr !important; gap:40px !important; align-items:start !important; }
/* Spaltenüberschriften – gleiches Raster wie die Karten */
.fx-evt-heads{ max-width:none !important; margin:0 0 4px !important; width:100% !important; }
.fx-evt-heads > *{ display:grid !important; grid-template-columns:2fr 1fr !important; gap:40px !important; width:100% !important; }
.fx-evt-head{ margin:0 !important; padding-bottom:10px !important; border-bottom:2px solid #dfe4ea !important; font-weight:700 !important; letter-spacing:0 !important; text-transform:none !important; font-size:18px !important; }
.fx-evt-head p{
  width:fit-content !important; margin:0 !important;
  color:var(--fx-black) !important;
}
@media (max-width:1000px){ .fx-evt-2zone > *{ grid-template-columns:1fr !important; } .fx-evt-2zone{ grid-template-columns:1fr !important; } }
@media (max-width:620px){ .fx-evt-upcoming > *{ grid-template-columns:1fr !important; } .fx-evt-upcoming{ grid-template-columns:1fr !important; } }

/* ----- Detail: Kopf ----- */
.fx-evd-head{ max-width:1050px !important; margin:0 auto !important; padding:8px 0 24px !important; }
.fx-evd-title,
.fx-evd-title *{
  background-image:linear-gradient(90deg,#003eab 0%,#00a9eb 100%) !important;
  -webkit-background-clip:text !important; background-clip:text !important;
  -webkit-text-fill-color:transparent !important; color:transparent !important;
}
.fx-evd-title{ font-size:34px !important; font-weight:700 !important; line-height:1.2 !important; margin:0 0 14px !important; width:fit-content !important; max-width:100% !important; }
.fx-evd-termin{ color:#1c8fd6 !important; font-size:17px !important; font-weight:700 !important; line-height:1.4 !important; margin:0 0 16px !important; }
.fx-evd-lead{ color:#12233a !important; font-size:16px !important; font-weight:700 !important; line-height:1.5 !important; margin:0 0 12px !important; }
.fx-evd-desc{ color:#3a4756 !important; font-size:14px !important; line-height:1.7 !important; margin:0 !important; }
.fx-evd-date{ display:none !important; }

/* ----- Detail: gerenderter Body ----- */
.fx-evd-content{ max-width:1050px !important; margin:0 auto !important; }
.fx-evd-content h1{ color:#12233a !important; font-size:28px !important; font-weight:700 !important; line-height:1.25 !important; margin:28px 0 12px !important; }
.fx-evd-content h2{ color:#12233a !important; font-size:22px !important; font-weight:700 !important; line-height:1.3 !important; margin:26px 0 10px !important; }
.fx-evd-content h3{ color:#12233a !important; font-size:18px !important; font-weight:700 !important; margin:20px 0 8px !important; }
.fx-evd-content p{ color:#3a4756 !important; font-size:15px !important; line-height:1.7 !important; margin:0 0 14px !important; }
.fx-evd-content a{ color:#0f7bd1 !important; }
.fx-evd-content strong, .fx-evd-content b{ color:#12233a !important; }
/* Listen */
.fx-evd-content ul, .fx-evd-content ol{ margin:8px 0 18px !important; padding-left:22px !important; }
.fx-evd-content li{ color:#3a4756 !important; font-size:15px !important; line-height:1.6 !important; margin:0 0 6px !important; }
/* Agenda-Tabelle – Grau/Weiß im Wechsel (Zebra) */
.fx-evd-content table{ width:100% !important; border-collapse:collapse !important; margin:14px 0 24px !important; font-size:14px !important; border:1px solid #e6e8eb !important; border-radius:10px !important; overflow:hidden !important; }
.fx-evd-content thead,
.fx-evd-content tr:has(> th){ display:none !important; }
.fx-evd-content td{ padding:14px 16px !important; border:0 !important; border-bottom:1px solid #eceef0 !important; color:#3a4756 !important; vertical-align:top !important; }
.fx-evd-content tbody tr:last-child td{ border-bottom:0 !important; }
.fx-evd-content tbody tr:nth-child(odd) td{ background:#ffffff !important; }
.fx-evd-content tbody tr:nth-child(even) td{ background:#f5f6f8 !important; }
.fx-evd-content td:first-child, .fx-evd-content th:first-child{ white-space:nowrap !important; width:120px !important; }
.fx-evd-content td:first-child{ font-weight:700 !important; color:#12233a !important; }


/* =====================================================================
   14  ONLINE-DOKU (Doku-Kacheln)
   ===================================================================== */
.fx-doccard{
  display:flex !important; flex-direction:column !important; height:100% !important;
  padding:26px 26px 20px !important; border-radius:12px !important;
  background:linear-gradient(160deg,#e8f1fb 0%,#f5f9fd 45%,#ffffff 100%) !important;
  box-shadow:0 10px 26px rgba(20,40,80,.08) !important;
  transition:box-shadow .25s ease, transform .25s ease;
}
.fx-doccard:hover{ box-shadow:0 16px 34px rgba(20,40,80,.16) !important; transform:translateY(-4px); }
.fx-doccard__logo{ margin:0 0 4px !important; }
.fx-doccard__logo img{ height:46px !important; width:auto !important; max-width:80% !important; object-fit:contain !important; display:block !important; }
.fx-doccard__tagline{ color:#5a6875 !important; font-size:13px !important; font-weight:600 !important; margin:0 0 16px !important; }
.fx-doccard__text{ color:#3a4756 !important; font-size:14px !important; line-height:1.6 !important; margin:0 !important; flex:1 1 auto !important; }
.fx-doccard__actions{ margin-top:16px !important; display:flex !important; justify-content:flex-end !important; }
.fx-doccard__cta .MuiButton-root,
.fx-doccard__cta.MuiButtonBase-root,
.fx-doccard__cta button{
  background:none !important; box-shadow:none !important; border:0 !important; padding:0 !important; min-width:0 !important;
  color:#0f7bd1 !important; font-weight:700 !important; font-size:14px !important; text-transform:none !important;
}
/* Breite Logos optisch verkleinern (sie wirken bei gleicher Höhe größer) */
.fx-doccard__logo--sm img{ height:40px !important; }


/* =====================================================================
   15  VERSIONS-SEITE (Kopf + Tabelle)
   ===================================================================== */
/* ----- Kopf (Text links, Logo rechts oben) ----- */
.fx-vhead{ max-width:1050px !important; margin:0 auto !important; padding:8px 0 24px !important; display:flex !important; justify-content:space-between !important; align-items:flex-start !important; gap:40px !important; }
.fx-vhead__text{ flex:1 1 auto !important; min-width:0 !important; }
.fx-vhead__logo{ flex:0 0 auto !important; }
.fx-vhead__logo img{ height:54px !important; width:auto !important; max-width:220px !important; object-fit:contain !important; display:block !important; }

/* ----- Tabelle (Kachel-Raster im List-Modus) ----- */
/* Kopfzeile wie Ticket-Tabelle: transparent, nur dünne Linie darunter (kein gefüllter Balken) */
.fx-vtable__head-standalone{
  border:0 !important; border-bottom:1px solid #e6e8eb !important;
  border-radius:0 !important; background:transparent !important;
}
/* Raster = Tabellenkörper: randlos (nur Zebra + Zeilenlinien), wie Ticket-Tabelle */
.fx-vtable{
  border:0 !important; border-radius:0 !important; overflow:hidden !important;
}
/* Breite begrenzen + zentrieren (Kopf + Körper gleich → Kanten fluchten mit Header) */
.fx-vtable__head-standalone, .fx-vtable{ width:100% !important; margin-left:auto !important; margin-right:auto !important; box-sizing:border-box !important; }
/* Gemeinsamer Wrap-Container um Kopf + Tabelle -> beide exakt gleich breit -> Spalten fluchten */
.fx-vtable-wrap{ width:100% !important; max-width:1100px !important; margin-left:auto !important; margin-right:auto !important; padding:0 !important; }
.fx-vtable-wrap > *{ width:100% !important; max-width:none !important; margin-left:0 !important; margin-right:0 !important; }
/* innere Container: keine Polsterung, kein Abstand zwischen den Zeilen, Reihenfolge umgedreht */
.fx-vtable > *{ padding:0 !important; }
.fx-vtable *:has(> * > .fx-vtable__row){ gap:0 !important; padding:0 !important; display:flex !important; flex-direction:column-reverse !important; }
/* Kachel-Wrapper "entkleiden" → nur noch Zeile + Trennlinie + Zebra */
.fx-vtable *:has(> .fx-vtable__row){
  box-shadow:none !important; border:0 !important; border-top:1px solid #eceef0 !important;
  border-radius:0 !important; margin:0 !important; padding:0 !important;
  width:100% !important; box-sizing:border-box !important;
}
.fx-vtable *:has(> .fx-vtable__row):last-child{ border-top:0 !important; }
.fx-vtable *:has(> .fx-vtable__row):nth-child(odd){ background:#ffffff !important; }
.fx-vtable *:has(> .fx-vtable__row):nth-child(even){ background:#f5f6f8 !important; }
/* Zeile = Flex, jede Spalte gleich breit */
.fx-vtable__row{ display:flex !important; align-items:stretch !important; width:100% !important; gap:0 !important; }
/* alle Spalten exakt gleich breit (Kopf + Daten identisch -> Ueberschrift zentral ueber Daten) */
.fx-vtable__row > *{ flex:0 0 20% !important; width:20% !important; max-width:20% !important; min-width:0 !important; box-sizing:border-box !important; }
/* Link-Wrapper: Button linksbündig statt zentriert */
.fx-vtable__row > *:has(> .fx-vtable__link){ display:flex !important; justify-content:center !important; align-items:center !important; padding:14px 18px !important; }
/* Kopfzeile: transparent, klein/fett/grau wie Ticket-Tabelle */
.fx-vtable__row--head{ background:transparent !important; }
.fx-vtable__row--head .fx-vtable__cell{ font-weight:700 !important; color:#3a4756 !important; font-size:13px !important; padding:6px 18px 12px !important; }
/* Zellen: linksbündig, gleiche Polsterung */
.fx-vtable__cell{
  padding:14px 18px !important; font-size:14px !important; color:#3a4756 !important;
  display:flex !important; align-items:center !important; justify-content:center !important;
  text-align:center !important; min-width:0 !important;
}
/* Link-Zellen (Startseite/Changelog) = schlichte blaue Links, Polsterung macht der Wrapper */
.fx-vtable__link{
  background:none !important; box-shadow:none !important; color:#0f7bd1 !important;
  font-weight:700 !important; text-transform:none !important; justify-content:center !important;
  padding:0 !important; margin:0 !important; min-width:0 !important; min-height:0 !important;
}


/* =====================================================================
   16  SHOP-DETAILSEITE (fx-shopd)
   HINWEIS: v1 (Basis) und v2 (Variablen-Umbau) sind BEWUSST getrennt.
   v2 überschreibt v1 gezielt per Kaskade; zusammenführen würde die Optik
   minimal ändern (u.a. td-über-tr-Painting bei der Zebra-Tabelle).
   Reihenfolge daher NICHT umstellen: v1 vor v2 vor Empfehlungen/Galerie.
   ===================================================================== */

/* ----- 16a  Basis-Layout (v1) ----- */
.fx-shopd{ max-width:1050px !important; margin:0 auto !important; }
.fx-shopd__top{ display:flex !important; gap:40px !important; align-items:flex-start !important; }
.fx-shopd__img{ flex:0 0 30% !important; max-width:30% !important; }
.fx-shopd__img > *{ width:100% !important; }
.fx-shopd__img img{ width:100% !important; height:auto !important; border:0 !important; border-radius:14px !important; background:#fff !important; object-fit:contain !important; display:block !important; box-shadow:0 10px 28px rgba(20,40,80,.12) !important; }
.fx-shopd__info{ flex:1 1 auto !important; min-width:0 !important; max-width:640px !important; }
.fx-shopd__artnr{ font-size:12.5px !important; color:#8a97a4 !important; font-weight:700 !important; letter-spacing:.03em !important; text-transform:uppercase !important; margin:0 0 6px !important; }
.fx-shopd__artnr::before{ content:"Art.-Nr. " !important; }
.fx-shopd__title{ font-size:26px !important; color:#12233a !important; line-height:1.2 !important; margin:0 0 14px !important; }
.fx-shopd__subhead{ font-size:15px !important; color:#12233a !important; margin-top:8px !important; }
.fx-shopd__desc{ font-size:15px !important; color:#3a4756 !important; line-height:1.7 !important; margin:0 !important; }
/* Technische Merkmale = HTML-Tabelle aus {record.tech_merkmale} → Look wie Ticket-Tabelle
   (randlos, Zebra, luftig); Key/Value ohne Kopfzeile → linke Spalte kräftig/dunkel */
.fx-shopd table{ width:100% !important; border-collapse:collapse !important; border:0 !important; margin:8px 0 0 !important; }
.fx-shopd table td, .fx-shopd table th{
  border:0 !important; padding:16px !important; font-size:13.5px !important; font-weight:400 !important;
  color:#3a4756 !important; text-align:left !important; vertical-align:top !important;
}
.fx-shopd table td:first-child, .fx-shopd table th:first-child{
  color:#12233a !important; font-weight:700 !important; width:38% !important;
}
.fx-shopd table tr:nth-child(odd) td{ background:#ffffff !important; }
.fx-shopd table tr:nth-child(even) td{ background:#f7f8fa !important; }
.fx-shopd table tr{ border:0 !important; }
.fx-shopd table tr:last-child td{ border-bottom:1px solid #eceef0 !important; }
.fx-shopd__specs{ border-top:0 !important; padding-top:0 !important; }
.fx-shopd__specs-title{ font-size:20px !important; color:#12233a !important; margin-bottom:8px !important; }
.fx-shopd__specs-group{ font-size:15px !important; color:#12233a !important; margin:18px 0 4px !important; }
.fx-shopd__specs-row{ display:flex !important; gap:16px !important; padding:10px 0 !important; border-bottom:1px solid #eceef0 !important; }
.fx-shopd__specs-label{ flex:0 0 40% !important; color:#6b7684 !important; font-size:14px !important; }
.fx-shopd__specs-value{ flex:1 1 auto !important; color:#1f2a37 !important; font-size:14px !important; }
@media (max-width:820px){
  .fx-shopd__top{ flex-direction:column !important; }
  .fx-shopd__img{ flex-basis:auto !important; max-width:100% !important; }
}

/* ----- 16b  Variablen-Struktur (v2, überschreibt v1 gezielt) ----- */
/* Kopfbereich: Bild schmaler, Info breiter (statt 50/50) */
.fx-shopd__top{ align-items:flex-start !important; }
.fx-shopd__img{ flex:0 0 40% !important; max-width:420px !important; }
.fx-shopd__info{ flex:1 1 auto !important; min-width:0 !important; }
.fx-shopd__img img{ width:100% !important; height:auto !important; border:0 !important; border-radius:0 !important; box-shadow:none !important; background:transparent !important; }
/* Info-Spalte: Typografie */
.fx-shopd__artnr{ font-size:13px !important; color:#6b7280 !important; margin:0 0 4px !important; }
.fx-shopd__title{ font-size:26px !important; font-weight:700 !important; line-height:1.2 !important; color:#1c2330 !important; margin:0 0 12px !important; }
.fx-shopd__short{ font-size:15px !important; line-height:1.55 !important; color:#333 !important; margin:0 0 16px !important; }
/* "Dazu passende Produkte": Ueberschrift per ::before, nur wenn Text gepflegt ist */
.fx-shopd__passt:empty{ display:none !important; }
.fx-shopd__passt:not(:empty){ font-size:15px !important; line-height:1.55 !important; color:#333 !important; margin:0 0 16px !important; }
.fx-shopd__passt:not(:empty)::before{
  content:"Dazu passende Produkte"; display:block; margin:0 0 6px;
  font-size:12px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:#0a2f6e;
}
/* Langbeschreibung: eigener breiter Block ueber den Techn. Daten, zweispaltig (wie Mockup) */
.fx-shopd__desc{ font-size:15px !important; line-height:1.6 !important; color:#333 !important; columns:2 !important; column-gap:44px !important; margin-top:24px !important; }
.fx-shopd__desc > *{ break-inside:avoid; }
.fx-shopd__desc p{ margin:0 0 10px !important; }
.fx-shopd__desc p:empty{ display:none !important; }
.fx-shopd__desc ul{ margin:0 0 10px !important; padding-left:20px !important; }
.fx-shopd__desc li{ margin:0 0 4px !important; }
.fx-shopd__desc li p{ margin:0 !important; }
/* Technische Daten: Titel + Zebra-Tabelle (gescopt auf fx-shopd__specs) */
.fx-shopd__specs{ margin-top:24px !important; }   /* Abstand Karten -> "Technische Daten" = Abstand Fließtext -> "Dazu passende Produkte" (24px) */
.fx-shopd__specs-title{ font-size:20px !important; font-weight:700 !important; color:#1c2330 !important; margin:0 0 12px !important; }
.fx-shopd__specs table{ width:100% !important; border-collapse:collapse !important; }
.fx-shopd__specs tr:nth-child(odd){ background:#ffffff !important; }
.fx-shopd__specs tr:nth-child(even){ background:#f5f6f8 !important; }
.fx-shopd__specs td{ padding:12px 16px !important; font-size:14px !important; line-height:1.45 !important; vertical-align:top !important; border:0 !important; }
.fx-shopd__specs td:first-child{ font-weight:700 !important; color:#222 !important; width:38% !important; }
.fx-shopd__specs td:last-child{ color:#333 !important; }

/* ----- 16c  Empfehlungs-Karten „Dazu passende Produkte" ----- */
/* Ganzen Block (Überschrift + Liste inkl. "Keine Einträge") ausblenden,
   wenn keine Empfehlungs-Karte vorhanden ist */
.fx-shopd__recos:not(:has(.fx-shopd__reco-card)){ display:none !important; }
.fx-shopd__recos-title{ font-size:20px !important; font-weight:700 !important; color:#1c2330 !important; margin:0 0 12px !important; }
/* Schatten 2026-08-10 entfernt (Wunsch: wirkte zwischen den Karten unruhig).
   Abgrenzung leistet jetzt allein der Rahmen. Bewusst hier an der Kartenklasse und nicht nur
   im Carousel, damit 3 Karten und 4+ Karten gleich aussehen. */
.fx-shopd__reco-card{ background:#fff !important; border:1px solid #e6eaf0 !important; border-radius:12px !important; padding:16px !important; box-sizing:border-box !important; height:100% !important; display:flex !important; flex-direction:column !important; text-decoration:none !important; box-shadow:none !important; }
/* Sichtbarer Fokus fuer die Tastatur (2026-08-13): Die Karte ist ein DIV, das unser JS per
   tabindex bedienbar macht. Ohne eigene Fokus-Anzeige waere der Tabstopp unsichtbar - dann
   koennte man zwar hinspringen, saehe aber nicht, wo man ist.
   focus-visible statt focus: erscheint nur bei Tastatur-Bedienung, nicht bei Mausklick. */
.fx-shopd__reco-card:focus-visible{
  outline:2px solid #003eab !important;
  outline-offset:2px !important;
}
.fx-shopd__reco-img, .fx-shopd__reco-card img{ display:block !important; width:100% !important; height:160px !important; object-fit:contain !important; object-position:center !important; margin:4px 0 16px !important; }
.fx-shopd__reco-name{ font-size:15px !important; font-weight:700 !important; color:#1c2330 !important; line-height:1.3 !important; margin:0 !important; }
.fx-shopd__reco-artnr{ font-size:13px !important; color:#8a94a3 !important; margin:5px 0 0 !important; }
/* verstecktes ID-Feld pro Karte (Ziel fuer den Klick, per JS recoLinks() gelesen) */
.fx-shopd__reco-id{ display:none !important; }
/* Empfehlungs-Carousel (JS shopdRecoNav, ab >3 Karten): Wrapper + ‹ ›-Pfeile.
   Gleiche Regel wie bei der Bildergalerie, nur waagerecht. Die Pfeile teilen sich bewusst
   die Klasse .fx-galarrow mit der Galerie, damit sie identisch aussehen - gedreht werden sie
   nur innerhalb von .fx-galwrap, hier bleiben sie also ‹ ›. */
.fx-recowrap{ display:flex !important; align-items:center !important; gap:8px !important; }
/* Der Track bekommt Breite und Ueberlauf per JS - hier nur sicherstellen, dass die native
   Umbruch-Regel (zweite Reihe) nicht dagegenhaelt.
   Das Padding fuer den Kartenschatten ist am 2026-08-10 wieder entfallen - der Schatten ist
   weg, also gibt es nichts mehr, was der Ueberlauf abschneiden koennte. */
.fx-recowrap > *:not(.fx-galarrow){
  flex:0 0 auto !important;
  min-width:0 !important;
}
/* Alle Karten gleich hoch. Ohne das bleibt eine Karte mit EINZEILIGEM Namen kuerzer als ihre
   zweizeiligen Nachbarn und sitzt mittig - genau der Unterschied, der an der linken Karte
   aufgefallen ist. Die Kette ist dreistufig: Item streckt sich auf die Zeilenhoehe, Karte
   fuellt das Item. .fx-shopd__reco-card bringt aus Sektion 16c height:100% mit, was hier ins
   Leere greift, weil das Item keine feste Hoehe hat -> auf auto + flex umstellen. */
.fx-recowrap > *:not(.fx-galarrow) > *{
  align-self:stretch !important;
  height:auto !important;
  display:flex !important;
}
.fx-recowrap .fx-shopd__reco-card{ height:auto !important; flex:1 1 auto !important; }

/* ----- 16d  „Beschreibung"-Ueberschrift (volle Breite via column-span) ----- */
.fx-shopd__desc::before{ content:"Beschreibung"; display:block; column-span:all; -webkit-column-span:all; font-size:20px !important; font-weight:700 !important; color:#1c2330 !important; margin:0 0 12px !important; }

/* ----- 16e  Weißer Hintergrund NUR auf der Shop-Detailseite ----- */
/* Theme-Blau-Wrapper (MuiBox mit .fx-shopd drin) auf Weiß */
.MuiBox-root:has(.fx-shopd){ background-color:#fff !important; }

/* ----- 16f  Bildergalerie (Thumbnails unter dem Hauptbild) ----- */
/* Thumbnail-Leiste: alle Thumbs in einer Reihe unter dem Hauptbild */
.fx-shopd__img :has(> .fx-shopd__gallery-thumb){
  display:flex !important;
  flex-wrap:wrap !important;
  gap:10px !important;
  margin-top:14px !important;
}
/* einzelnes Thumbnail: klein, gerahmt, klickbar */
.fx-shopd__gallery-thumb{
  flex:0 0 auto !important;
  width:88px !important;
  height:88px !important;
  padding:4px !important;
  background:#fff !important;
  border:1px solid #e6eaf0 !important;
  border-radius:8px !important;
  box-sizing:border-box !important;
  cursor:pointer !important;
  transition:border-color .15s ease, box-shadow .15s ease !important;
}
.fx-shopd__gallery-thumb img{
  width:100% !important;
  height:100% !important;
  object-fit:contain !important;
  display:block !important;
  border:0 !important;
  border-radius:0 !important;
  box-shadow:none !important;
}
.fx-shopd__gallery-thumb:hover{
  border-color:#00a9eb !important;
}
/* aktives Thumbnail (später per JS, wenn Klick das Hauptbild tauscht) */
.fx-shopd__gallery-thumb.fx-active{
  border-color:#003eab !important;
  box-shadow:0 0 0 2px rgba(0,169,235,.35) !important;
}
/* Zoom-Cursor auf Hauptbild + Thumbnails (Klick öffnet Lightbox per JS) */
.fx-shopd__img img{ cursor:zoom-in !important; }
/* Hauptbild FESTE Groesse (nur das Hauptbild, nicht die Thumbnails) -> beim Hover-Wechsel
   kein Layout-Sprung und kein Flackern; alle Bilder skalieren gleich (contain). */
.fx-shopd__img img{ height:400px !important; width:100% !important; object-fit:contain !important; }
/* Thumbnails wieder auf ihre kleine Groesse (spezifischer -> gewinnt, kein komplexes :not noetig) */
.fx-shopd__gallery-thumb img{ height:100% !important; width:100% !important; }
/* Thumbnail-Carousel (JS shopdGalleryNav, ab >3 Bildern): Wrapper + ‹ ›-Pfeile */
.fx-galwrap{ display:flex !important; align-items:center !important; gap:8px !important; margin-top:14px !important; }
.fx-galwrap :has(> .fx-shopd__gallery-thumb){ margin-top:0 !important; }   /* Item-Abstand raus (macht der Wrapper) */
/* Slim/moderne Pfeile: nur der Glyph im FASTEC-Verlauf, KEIN Kreis/Rahmen.
   Gilt fuer Use-Case-Slideshow (.fx-uc-arrow) UND Shop-Galerie (.fx-galarrow);
   ueberschreibt den gefuellten Kreis-Look aus Sektion 12. */
.fx-uc-arrow, .fx-galarrow{
  background:none !important; border:0 !important; box-shadow:none !important;
  width:auto !important; height:auto !important; min-width:0 !important; padding:2px 6px !important;
  font-size:30px !important; line-height:1 !important; cursor:pointer !important; user-select:none !important;
  display:inline-flex !important; align-items:center !important; justify-content:center !important;
  background-image:linear-gradient(90deg,#003eab 0%,#00a9eb 100%) !important;
  -webkit-background-clip:text !important; background-clip:text !important;
  -webkit-text-fill-color:transparent !important; color:transparent !important;
  transition:opacity .15s ease !important;
}
.fx-uc-arrow svg, .fx-galarrow svg{ fill:#00a9eb !important; }   /* falls der Pfeil ein SVG-Icon ist -> sichtbar */
.fx-uc-arrow:hover:not(.is-hidden), .fx-galarrow:hover:not(:disabled){ opacity:.6 !important; }
.fx-galarrow:disabled{ opacity:.25 !important; cursor:default !important; }
.fx-uc-arrow.is-hidden{ display:none !important; }

/* ----- 16g  Bildergalerie LINKS vertikal (ueberschreibt 16f-Horizontal) ----- */
/* Bildspalte horizontal: Thumbnails links (vertikale Spalte), Hauptbild rechts */
.fx-shopd__img{ display:flex !important; flex-direction:row-reverse !important; align-items:center !important; gap:16px !important; flex:0 0 48% !important; max-width:560px !important; }
.fx-shopd__img > *{ width:auto !important; }                                    /* 100%-Regel aus 16a aufheben */
/* Thumb-Zweig (direkter Kind-Div, der die Thumbs ENTHAELT = css-e7z54b) -> schmale VERTIKALE Spalte links */
.fx-shopd__img > *:has(.fx-shopd__gallery-thumb){ flex:0 0 auto !important; flex-direction:column !important; flex-wrap:nowrap !important; gap:10px !important; margin:0 !important; }
/* Hauptbild-Zweig = restliche Breite, Bild gross */
.fx-shopd__img > *:not(:has(.fx-shopd__gallery-thumb)){ flex:1 1 auto !important; min-width:0 !important; }
.fx-shopd__img > *:not(:has(.fx-shopd__gallery-thumb)) img{ width:100% !important; height:400px !important; object-fit:contain !important; }
/* Carousel-Wrapper vertikal + Pfeile hoch/runter drehen (‹ › gedreht) */
.fx-galwrap{ flex-direction:column !important; align-items:center !important; margin-top:0 !important; }
.fx-galwrap .fx-galarrow{ transform:rotate(90deg) !important; }


/* =====================================================================
   17  IMPRESSUM (statisch)
   ===================================================================== */
.fx-imp{ max-width:1050px !important; margin:0 auto !important; padding:8px 0 32px !important; }
.fx-imp__h1{ color:#0f5bbf !important; font-size:26px !important; font-weight:700 !important; margin:0 0 8px !important; }
.fx-imp__h2{ color:#0f5bbf !important; font-size:16px !important; font-weight:700 !important; margin:0 0 6px !important; }
.fx-imp__text{ color:#3a4756 !important; font-size:15px !important; line-height:1.7 !important; margin:0 !important; }
.fx-imp__text a{ color:#0f7bd1 !important; }


/* =====================================================================
   18  TICKET-KACHEL (native portal_tickets_tile) im Dark-Card-Look
   ===================================================================== */
.fx-ticketcard{
  background:linear-gradient(150deg,#0a53ad 0%,#0a2f6e 100%) !important;
  height:260px !important; padding:20px !important; border-radius:10px !important;
  box-shadow:0 6px 18px rgba(20,40,80,.08) !important;
  display:flex !important; flex-direction:column !important; overflow:hidden !important;
}
/* Paper + evtl. Zwischen-Container entkleiden → Inhalt sitzt ganz oben */
.fx-ticketcard > *,
.fx-ticketcard .MuiPaper-root,
.fx-ticketcard .MuiBox-root,
.fx-ticketcard .MuiStack-root{
  background:transparent !important; box-shadow:none !important; border-radius:0 !important;
  padding:0 !important; margin:0 !important;
}
/* Titel-Zeile als kleine Eyebrow (wie „MEIN SYSTEM"); line-height stramm, sonst schiebt
   MUIs 1.6er Zeilenhöhe den Text nach unten */
.fx-ticketcard .MuiTypography-h6{ color:#c3d6f2 !important; font-size:11px !important; font-weight:700 !important; letter-spacing:.08em !important; text-transform:uppercase !important; line-height:1.2 !important; margin:0 0 6px !important; }
/* „Noch keine Tickets." als großer weißer Titel */
.fx-ticketcard .MuiTypography-body2{ color:#ffffff !important; font-size:18px !important; font-weight:700 !important; margin:0 0 8px !important; }
/* Link direkt darunter, oben gepackt (nicht unten) */
.fx-ticketcard .MuiButton-text{ color:#ffffff !important; text-transform:none !important; font-weight:700 !important; font-size:13.5px !important; padding:0 !important; min-width:0 !important; margin-top:0 !important; align-self:flex-start !important; }
.fx-ticketcard .MuiButton-text:hover{ background:transparent !important; }


/* =====================================================================
   19  TICKET-TABELLE (native „Meine Tickets (Tabelle)", Klasse fx-tickettable)
   – Optik wie Mockup: luftige Zeilen, Zebra, schlichte fette Kopfzeile, randlos.
   Spalten/Überschriften bleiben die echten aus dem Block.
   ===================================================================== */
.fx-tickettable{ max-width:none !important; margin:0 !important; }
/* umschließenden Paper-Container (outlined) entkleiden → randlos wie Mockup */
.fx-tickettable .MuiTableContainer-root{ border:0 !important; box-shadow:none !important; border-radius:0 !important; background:transparent !important; }
/* Tabelle randlos, volle Breite (echtes <table> = MUI-Table) */
.fx-tickettable table,
.fx-tickettable .MuiTable-root{ width:100% !important; border-collapse:collapse !important; border:0 !important; }
/* Kopfzeile: klein, fett, grau, linksbündig, feine Linie darunter */
.fx-tickettable thead th,
.fx-tickettable .MuiTableCell-head{
  background:transparent !important; border:0 !important; border-bottom:1px solid #e6e8eb !important;
  color:#3a4756 !important; font-weight:700 !important; font-size:13px !important;
  text-align:left !important; padding:0 16px 12px !important; white-space:nowrap !important;
}
/* Datenzellen: luftig, dezent grau, normale Schrift (auch Betreff nicht fett – wie Mockup) */
.fx-tickettable tbody td,
.fx-tickettable .MuiTableCell-body{
  border:0 !important; padding:18px 16px !important; font-size:13.5px !important;
  font-weight:400 !important; color:#3a4756 !important; vertical-align:middle !important;
}
/* Zebra – ungerade weiß, gerade hellgrau (Zell-Hintergrund schlägt MUI-Row-Hover) */
.fx-tickettable tbody tr:nth-child(odd) td{ background:#ffffff !important; }
.fx-tickettable tbody tr:nth-child(even) td{ background:#f7f8fa !important; }
/* keine Zeilen-Rahmen; feine Abschlusslinie unten */
.fx-tickettable tbody tr{ border:0 !important; }
.fx-tickettable tbody tr:last-child td{ border-bottom:1px solid #eceef0 !important; }


/* =====================================================================
   20  DOKU-VIEWER (portal_docs, Klasse fx-docviewer) – Vollbild-Viewer
   Ziel: Doku volle Breite/Höhe, nur eigener Scroll (TOC + Inhalt),
   Portal-Footer + Seiten-Scroll auf DIESER Seite aus.
   Seiten-Erkennung per :has(.fx-docviewer) → kein JS nötig.
   HINWEIS: 96px-Fallback = Kopfbereich; --fx-doctop wird per JS gesetzt.
   ===================================================================== */
/* Footer nur auf der Doku-Seite aus */
body:has(.fx-docviewer) .fx-footer{ display:none !important; }
body:has(.fx-docviewer) .MuiBox-root:has(> .fx-footer){ display:none !important; }
/* ⚠ DRITTE ZEILE NOETIG (gemessen 2026-08-13): Die beiden Regeln darueber verstecken den
   Inhalt, aber NICHT das <footer>-Element. Das traegt aus Sektion 53 background:#000 und
   24px Innenabstand oben/unten - uebrig blieb ein rund 48px hoher schwarzer Streifen ohne
   Inhalt. Genau der "schwarze Footer-Balken", der seit Ende Juli offen stand.
   Messung sagte: "<footer>: block" auf der Doku-Seite. */
body:has(.fx-docviewer) footer:has(.fx-footer){ display:none !important; }
body:has(.fx-docviewer){ overflow:hidden !important; }
/* Block FIX unter dem Header verankern → aus dem Fluss raus:
   keine Seiten-Scrollbar, kein 100vw-Überstand. --fx-doctop wird per JS
   (docTop()) auf die Unterkante von .fx-header gesetzt (inkl. Admin-Leiste). */
.fx-docviewer{
  position:fixed !important;
  top:var(--fx-doctop, 96px) !important;
  left:0 !important; right:0 !important; bottom:auto !important;
  height:calc(100vh - var(--fx-doctop, 96px)) !important;  /* Viewport-Höhe statt bottom:0 → reicht sicher bis unten */
  width:auto !important; max-width:none !important; margin:0 !important;
  overflow:hidden !important;
  background:#fff !important;   /* deckt das dunkle fixierte DIV.fade ab */
}
/* Höhen-Kette vom fixen Block bis zu den Spalten aufbauen: jeder Zwischen-Container,
   der eine Spalte enthält, bekommt volle Höhe (sonst greifen die 100%-Höhen nicht) */
.fx-docviewer div:has(.MuiPaper-outlined):not(.MuiPaper-outlined *){ height:100% !important; min-height:0 !important; }
/* Die zwei Paper-Spalten (TOC + Inhalt): volle Höhe des fixen Blocks, eigener Scroll.
   :not(.MuiPaper-outlined *) = nur oberste Paper, NICHT verschachtelte (z.B. Suchkarten) */
.fx-docviewer .MuiPaper-outlined:not(.MuiPaper-outlined *){
  height:calc(100vh - var(--fx-doctop, 96px)) !important;
  max-height:calc(100vh - var(--fx-doctop, 96px)) !important;
  min-height:0 !important; overflow:auto !important;
}

/* ----- Doku-Breadcrumbs (vom alten „News"-Block hierher verschoben) ----- */
/* "FASTEC 4 PRO 26.2 (DE)" (1. Kruemel) + folgenden Trenner ausblenden */
.fx-docviewer .MuiBreadcrumbs-ol > li{ display:none !important; }   /* alle Kruemel aus (Ordnertiefe/-anzahl ist nicht stabil) -> nur die H1 soll stehen */
/* Breadcrumbs linksbuendig zur H1 (Padding raus + per Negativ-Margin ausrichten; Wert bei Bedarf anpassen) */
.fx-docviewer .MuiBreadcrumbs-root,
.fx-docviewer .MuiBreadcrumbs-ol{ padding-left:0 !important; }
.fx-docviewer .MuiBreadcrumbs-root{ margin-left:-24px !important; }
/* Anklickbare Kruemel blau (aktueller = bleibt dunkel/fett) */
.fx-docviewer .MuiBreadcrumbs-ol .MuiLink-button{ color:#00ade9 !important; }
.fx-docviewer .MuiBreadcrumbs-ol .MuiLink-button:hover{ text-decoration:underline !important; }


/* =====================================================================
   21  DOKU – FLARE-INHALTSFORMATE (aus MadCap-Styles.css, gescopt auf .fx-docviewer)
   Nur Inhaltsformate (Text/Bilder/Tabellen/Listen/Formeln).
   Basis-Text (Farbe/Schrift) sitzt auf der Inhalts-Spalte (2. Paper),
   damit das TOC links unberührt bleibt. Quelle: Desktop\Flare-Doku-Formate.css
   ===================================================================== */
.fx-docviewer{
  --Brand1:#076685; --Brand2:#CDE0E7; --Dark:#45494c;
  --Medium:#b9bec1; --Light:#d0d3d5; --White:#ffffff;
}
.fx-docviewer .MuiPaper-outlined:last-child{ color:var(--Dark); font-family:Arial, Avenir, Myriad; }
/* Bilder */
.fx-docviewer img{ border:none; max-width:100%; box-sizing:border-box; }
.fx-docviewer img.button{ height:7mm; }
/* Absätze */
.fx-docviewer p{ font-size:13pt; line-height:26pt; letter-spacing:normal; margin:0 0 10px; }
.fx-docviewer p.table-text{ font-size:13pt; }
.fx-docviewer p.rechts{ text-align:right; }
.fx-docviewer p.p_clear_float{ margin:0 0 10px; clear:both; font-size:1pt; line-height:1pt; }
.fx-docviewer p.blue_white{ margin:0 0 10px; color:#fff; font-size:16pt; background-color:#004d9b; text-align:center; line-height:50pt; }
/* Überschriften */
.fx-docviewer h1{ font-weight:bold; font-size:2em; color:#004d9b; height:auto; margin:0 0 12px; }
.fx-docviewer h2{ font-weight:bold; font-size:1.6em; color:#004d9b; margin:10px 0; clear:left; }
.fx-docviewer h3{ font-weight:bold; font-size:1.4em; color:#004d9b; margin:10px 0 0; }
.fx-docviewer h4{ font-weight:bold; font-size:1.4em; }
/* Links */
.fx-docviewer a{ color:#3d3d3c; }
.fx-docviewer a:link{ color:#00ade9; text-decoration:none; }
.fx-docviewer a:visited{ color:#00a0d7; text-decoration:none; }
.fx-docviewer a:hover{ text-decoration:underline; }
/* Listen */
.fx-docviewer li{ margin:1px 0 0 18.8976px; color:#3d3d3c; font-size:13pt; line-height:26pt; }
.fx-docviewer li p{ margin-top:6pt; margin-bottom:6pt; }
.fx-docviewer ol, .fx-docviewer ul{ letter-spacing:.25; line-height:20pt; margin-top:0; margin-bottom:0; }
.fx-docviewer ul{ color:#000; display:block; width:auto; padding:0 0 0 40px; margin:0; }
.fx-docviewer li::marker{ color:#000; }
/* Code / Spannen */
.fx-docviewer code{ font-family:'Segoe UI'; }
.fx-docviewer span{ color:#3d3d3c; font-weight:bold; }
.fx-docviewer span.Taste{ border:solid 1px #3d3d3c; }
/* Tabellen */
.fx-docviewer table{ border-collapse:collapse; }
.fx-docviewer td{ font-family:'Segoe UI'; border-bottom-color:#004d9b; color:#45494c; line-height:normal; font-size:13pt; padding-left:2px; }
.fx-docviewer td.ueberschrift{ background-color:#f3f3f3 !important; padding:5px 10px !important; vertical-align:top; font-weight:bold; color:#3d3d3c; font-style:italic; border-bottom:1px solid #004d9b !important; }
.fx-docviewer td.eingerahmt{ background-color:#f3f3f3 !important; color:#3d3d3c; padding:10px !important; vertical-align:top; border-bottom:1px solid #e1dfe0 !important; }
.fx-docviewer td.ueberschrift-break{ background-color:#f3f3f3; padding:5px 10px; vertical-align:top; font-weight:bold; color:#3d3d3c; font-style:italic; word-break:break-word; overflow-wrap:anywhere; white-space:normal !important; }
.fx-docviewer td.eingerahmt-break{ background-color:#f3f3f3; color:#3d3d3c; padding:10px; vertical-align:top; border-top-width:1px; border-bottom:1px solid #e1dfe0; word-break:break-word; overflow-wrap:anywhere; white-space:normal !important; }
/* Bild-Formate */
.fx-docviewer img.awesome{ width:13px; height:13px; margin-right:2px; }
.fx-docviewer img.mb_auto_text{ background-color:transparent; text-align:left; vertical-align:middle; margin-left:2px; margin-right:2px; font-size:13pt; line-height:26pt; }
.fx-docviewer img.mb_auto_table{ vertical-align:baseline; height:auto; text-align:left; margin:2px 0; max-width:100%; }
.fx-docviewer img.mb_fifty{ display:inline-block; margin:15px 0; max-width:50%; box-shadow:0 0 10px rgba(0,0,0,.54); text-align:center; cursor:pointer; }
.fx-docviewer img.mb_twentyfive{ display:inline-block; margin:15px 0; max-width:25%; box-shadow:0 0 10px rgba(0,0,0,.54); cursor:pointer; }
.fx-docviewer img.mb_full{ display:inline-block; margin:15px 0; max-width:100%; box-shadow:0 0 10px rgba(0,0,0,.54); cursor:pointer; }
.fx-docviewer img.mb_seventyfive{ display:inline-block; margin:15px 0; max-width:75%; box-shadow:0 0 10px rgba(0,0,0,.54); cursor:pointer; }
.fx-docviewer img.mb_fifty_floated_image{ display:inline-block; float:left; clear:right; margin:15px 7px 15px 0; max-width:49%; box-shadow:0 0 10px rgba(0,0,0,.54); vertical-align:bottom; }
.fx-docviewer img.mb_twentyfive_floated{ display:inline-block; float:left; clear:right; margin:15px 1cm 15px 0; max-width:25%; box-shadow:0 0 10px rgba(0,0,0,.54); }
.fx-docviewer img.mb_three_floated_images{ display:inline-block; float:left; clear:right; margin:15px 7px 15px 0; max-width:32%; box-shadow:0 0 10px rgba(0,0,0,.54); vertical-align:bottom; }
.fx-docviewer img.mb_fifty_floated{ display:inline-block; float:left; clear:right; margin:15px 30px 15px 0; max-width:50%; box-shadow:0 0 10px rgba(0,0,0,.54); vertical-align:bottom; }
/* Sonstiges */
.fx-docviewer div.icon_hinweis{ text-align:left; }
.fx-docviewer div.url, .fx-docviewer div.url cite{ display:block !important; white-space:normal !important; word-break:break-all !important; overflow-wrap:anywhere !important; }
.fx-docviewer .MCPopupFullImage{ image-rendering:-webkit-optimize-contrast; }
/* Formeln (SVG) */
.fx-docviewer img[src*="generatedimages/equations"]{ height:1.1em !important; width:auto !important; vertical-align:-0.25em !important; }
.fx-docviewer .formula-block img[src*="generatedimages/equations"]{ height:auto !important; vertical-align:baseline !important; }
/* Responsive Tabellen */
@media screen and (max-width:767px){
  .fx-docviewer table{ width:100% !important; max-width:100%; table-layout:auto; border-collapse:collapse; word-wrap:break-word; }
  .fx-docviewer table th, .fx-docviewer table td{ white-space:normal; word-break:break-word; }
}
/* Doku-Tabellen randlos wie im Original: KEIN Rahmen, KEIN blauer Kopf/Körper-Strich;
   nur die grauen Zeilen-Trennlinien bleiben. Abgrenzung zur Seite nur über den BG. */
.fx-docviewer table{ border:0 !important; }
.fx-docviewer td, .fx-docviewer th{ border:0 !important; }
.fx-docviewer td.ueberschrift, .fx-docviewer td.ueberschrift-break{ border:0 !important; }
.fx-docviewer td.eingerahmt, .fx-docviewer td.eingerahmt-break{ border:0 !important; border-bottom:1px solid #e1dfe0 !important; }
/* Bild-Größen: kompilierter Flare-Output nutzt imgmb_* (nicht mb_*) auf MCPopupThumbnail */
.fx-docviewer img.imgmb_auto_text{ background-color:transparent; vertical-align:middle; margin:0 2px; }
.fx-docviewer img.imgmb_auto_table{ vertical-align:baseline; height:auto; margin:2px 0; max-width:100%; }
.fx-docviewer img.imgmb_fifty{ display:inline-block; margin:15px 0; max-width:50%; box-shadow:0 0 10px rgba(0,0,0,.54); }
.fx-docviewer img.imgmb_seventyfive{ display:inline-block; margin:15px 0; max-width:75%; box-shadow:0 0 10px rgba(0,0,0,.54); }
.fx-docviewer img.imgmb_full{ display:inline-block; margin:15px 0; max-width:100%; box-shadow:0 0 10px rgba(0,0,0,.54); }
.fx-docviewer img.imgmb_twentyfive{ display:inline-block; margin:15px 0; max-width:25%; box-shadow:0 0 10px rgba(0,0,0,.54); }
.fx-docviewer img.imgmb_fifty_floated_image{ display:inline-block; float:left; clear:right; margin:15px 7px 15px 0; max-width:49%; box-shadow:0 0 10px rgba(0,0,0,.54); }
.fx-docviewer img.imgmb_twentyfive_floated{ display:inline-block; float:left; clear:right; margin:15px 1cm 15px 0; max-width:25%; box-shadow:0 0 10px rgba(0,0,0,.54); }
.fx-docviewer img.imgmb_three_floated_images{ display:inline-block; float:left; clear:right; margin:15px 7px 15px 0; max-width:32%; box-shadow:0 0 10px rgba(0,0,0,.54); }
.fx-docviewer img.imgmb_fifty_floated{ display:inline-block; float:left; clear:right; margin:15px 30px 15px 0; max-width:50%; box-shadow:0 0 10px rgba(0,0,0,.54); }
/* Popup-Thumbnails klickbar (Zoom via JS-Lightbox) */
.fx-docviewer img.MCPopupThumbnail{ cursor:zoom-in; }
/* Bilder zusätzlich ABSOLUT begrenzen: Portal-Spalte ist breiter als der Reader,
   deshalb reichen die %-Werte nicht. min(%, px) → responsiv + reader-artig gedeckelt. */
.fx-docviewer img.imgmb_twentyfive, .fx-docviewer img.imgmb_twentyfive_floated{ max-width:min(25%, 200px) !important; }
.fx-docviewer img.imgmb_fifty, .fx-docviewer img.imgmb_fifty_floated, .fx-docviewer img.imgmb_fifty_floated_image{ max-width:min(50%, 400px) !important; }
.fx-docviewer img.imgmb_three_floated_images{ max-width:min(32%, 300px) !important; }
.fx-docviewer img.imgmb_seventyfive{ max-width:min(75%, 600px) !important; }
.fx-docviewer img.imgmb_full{ max-width:min(100%, 800px) !important; }

/* ----- Doku-Footer-Leiste + Höhen-Korrektur + On-Page-Nav (JS-injiziert) ----- */
/* Viewer + Spalten um die gemessene Footer-Höhe (--fx-docbottom, aus JS) kürzen, damit nichts überlappt */
.fx-docviewer{ height:calc(100vh - var(--fx-doctop,96px) - var(--fx-docbottom,0px)) !important; }
.fx-docviewer .MuiPaper-outlined:not(.MuiPaper-outlined *){ height:calc(100vh - var(--fx-doctop,96px) - var(--fx-docbottom,0px)) !important; max-height:calc(100vh - var(--fx-doctop,96px) - var(--fx-docbottom,0px)) !important; }
/* Kein Horizontal-Scroll des Viewers; breite Tabellen scrollen intern (display:block-Trick) */
.fx-docviewer .MuiPaper-outlined:not(.MuiPaper-outlined *){ overflow-x:hidden !important; }
.fx-docviewer table{ display:block !important; max-width:100% !important; overflow-x:auto !important; }
/* Rechte Doku-Nav (#fx-onpagenav, JS-injiziert): Hover + aktiver (angeklickter) Zustand */
#fx-onpagenav a:hover{ color:#004d9b !important; font-weight:700 !important; }
#fx-onpagenav a.fx-nav-active{ color:#004d9b !important; font-weight:700 !important; }
/* Such-Treffer-Hervorhebung (JS-injiziert via docSearchHL): gelb, Textfarbe unveraendert.
   pointer-events:none = Klicks fallen durch die Markierung auf den darunterliegenden
   Link/Text -> Links in markiertem Text bleiben klickbar (Klick-Ziel = das <a>). */
/* .fx-changelog ist mit aufgefuehrt, obwohl das Raster im Doku-Rahmen haengt und damit ohnehin
   von .fx-docviewer erfasst waere - so bleibt die Markierung auch dann korrekt, falls das
   Changelog irgendwann ausserhalb des Doku-Viewers auftaucht (JS changelogHL). */
.fx-docviewer mark.fx-search-hl,
.fx-changelog mark.fx-search-hl{ background:#ffe680 !important; color:inherit !important; padding:0 1px !important; border-radius:2px !important; pointer-events:none !important; }
/* Links im Doku-Inhalt klickbar halten – die Such-Vorschau setzt sie sonst per
   pointer-events:none still (kein Hover/Klick); auto ueberschreibt das (auch von Eltern geerbt) */
.fx-docviewer a{ pointer-events:auto !important; }
/* MadCap-Drop-downs (FAQ): moderner Accordion-Look (MadCap-JS fehlt im Portal).
   Body standardmaessig zu; JS docFaq() toggelt .fx-open am .MCDropDown-Wrapper. */
.fx-docviewer .MCDropDown{ border-bottom:1px solid #e3e9f0 !important; }
.fx-docviewer .MCDropDownHead{ cursor:pointer !important; display:block !important; margin:0 !important; padding:15px 4px !important; }
.fx-docviewer .MCDropDownHotSpot{
  display:flex !important; align-items:center !important; gap:14px !important;
  color:#0a4a8f !important; font-weight:700 !important; font-size:16px !important;
  line-height:1.35 !important; text-decoration:none !important;
}
.fx-docviewer .MCDropDownHead:hover .MCDropDownHotSpot{ color:#00ade9 !important; }
/* MadCap-Icon aus, eigener +/- Toggle links (Kreis-Chip) */
.fx-docviewer .MCDropDown_Image_Icon{ display:none !important; }
.fx-docviewer .MCDropDownHotSpot::before{
  content:"+" !important; flex:0 0 26px !important; width:26px !important; height:26px !important;
  border-radius:50% !important; background:#eaf4fb !important; color:#0a4a8f !important;
  font:400 20px/25px Arial,sans-serif !important; text-align:center !important;
  transition:background .15s ease, color .15s ease !important;
}
.fx-docviewer .MCDropDown.fx-open .MCDropDownHotSpot::before{ content:"\2013" !important; background:#0a4a8f !important; color:#fff !important; }
/* Body: eingeklappt / aufgeklappt (unter den Fragetext eingerueckt) */
.fx-docviewer .MCDropDownBody{ display:none !important; }
.fx-docviewer .MCDropDown.fx-open > .MCDropDownBody{ display:block !important; padding:2px 0 20px 40px !important; animation:fxFaqIn .28s ease !important; }
@keyframes fxFaqIn{ from{ opacity:0; transform:translateY(-6px); } to{ opacity:1; transform:translateY(0); } }


/* =====================================================================
   22  DOKU-VIEWER im SEITEN-EDITOR (Bearbeiten-Modus) in den Frame holen
   Marker = #page-visibility-label (Seiten-Eigenschaften-Panel, NUR im Edit-Modus).
   View-Modus (ohne diesen Marker) bleibt komplett unberuehrt (fixes Overlay, Sektion 20).
   ===================================================================== */
body:has(#page-visibility-label) .fx-docviewer{
  position:static !important;
  top:auto !important; left:auto !important; right:auto !important; bottom:auto !important;
  height:auto !important; max-height:none !important;
  width:auto !important; overflow:visible !important;
}
/* interne Hoehen-Kette + die zwei Paper-Spalten wieder auf Auto-Hoehe (kein 100vh-Zwang) */
body:has(#page-visibility-label) .fx-docviewer div:has(.MuiPaper-outlined):not(.MuiPaper-outlined *){ height:auto !important; }
body:has(#page-visibility-label) .fx-docviewer .MuiPaper-outlined:not(.MuiPaper-outlined *){
  height:auto !important; max-height:none !important; overflow:visible !important;
}
/* Seiten-Scroll im Edit-Modus wieder zulassen (View-Modus haelt body auf overflow:hidden) */
body:has(#page-visibility-label):has(.fx-docviewer){ overflow:auto !important; }


/* =====================================================================
   23  MEIN-KONTO-FORMULAR (fx-mycontact) – Buttons + Switch im Portal-Verlauf
   ===================================================================== */
/* Gefuellte Buttons (Aenderung anfragen / Passwort speichern) -> Standard-Portal-Verlauf */
.fx-mycontact .MuiButton-contained{
  background:linear-gradient(90deg,#003eab 0%,#00a9eb 100%) !important;
  color:#fff !important; box-shadow:none !important;
}
.fx-mycontact .MuiButton-contained:hover{
  background:linear-gradient(90deg,#00317f 0%,#0092c9 100%) !important; box-shadow:none !important;
}
/* Newsletter-Schieberegler: aktiver Track im selben Verlauf */
.fx-mycontact .MuiSwitch-switchBase.Mui-checked + .MuiSwitch-track{
  background:linear-gradient(90deg,#003eab 0%,#00a9eb 100%) !important; opacity:1 !important;
}


/* =====================================================================
   25  CHANGELOG (Modell Changelog-Eintrag, record_grid, Klasse fx-changelog)
   Grid liegt auf der DOKU-Seite; JS changelogMount() blendet ihn nur aufs
   Changelog-Topic in die Inhalts-Spalte ein (Klasse .fx-changelog--on).
   ===================================================================== */
/* Standardmaessig AUS (kein Ueberlagern anderer Doku-Themen); nur per JS an */
.fx-changelog{ display:none !important; }
.fx-changelog.fx-changelog--on{ display:block !important; }
/* Reset gegen Flare-Doku-Typo (Grid liegt im .fx-docviewer -> dessen p/li/ul-Regeln greifen sonst) */
.fx-changelog p{ margin:0 !important; line-height:normal !important; font-family:inherit !important; }
.fx-changelog ul, .fx-changelog ol, .fx-changelog li{ margin:0 !important; padding:0 !important; line-height:normal !important; color:inherit !important; }
.fx-changelog span{ font-weight:inherit !important; color:inherit !important; }
/* Einzelne Eintrags-Karte */
.fx-cl-card{
  background:#fff !important; border:1px solid #e6eaf0 !important; border-radius:12px !important;
  box-shadow:0 6px 18px rgba(20,40,80,.06) !important; padding:20px 24px !important; margin:0 0 16px !important;
}
/* Meta-Zeile: Badges + Version + Datum */
.fx-cl-meta{ display:flex !important; align-items:center !important; flex-wrap:wrap !important; gap:10px !important; margin:0 0 8px !important; }
/* Produkt-Badge: bleibt im JSON (Filter liest daraus das Produkt), aber ausgeblendet (Doku-Kontext ist klar) */
.fx-cl-produkt{ display:none !important; }
/* Module-Badge: Blauverlauf (fuehrendes Badge, wo frueher das Produkt war) */
.fx-cl-module{ display:inline-block !important; padding:3px 10px !important; border-radius:6px !important;
  background:linear-gradient(90deg,#003eab 0%,#00a9eb 100%) !important; color:#fff !important; font-size:12px !important; font-weight:700 !important; line-height:1.4 !important; }
.fx-cl-module:empty{ display:none !important; }
/* Version: ausgeblendet (steht oben im Filter), bleibt aber im DOM fuers Filtern */
.fx-cl-version{ display:none !important; }
/* Datum: rechts in der Meta-Zeile, gedaempft (kein Trenner davor, da Version weg) */
.fx-cl-datum{ margin-left:auto !important; font-size:13px !important; color:#8a94a3 !important; }
.fx-cl-datum:not(:empty)::before{ content:none !important; }
/* Titel */
.fx-cl-title{ font-size:17px !important; font-weight:700 !important; color:#1c2330 !important; line-height:1.3 !important; margin:0 0 8px !important; }
/* Beschreibung (JS changelogFormat wandelt Markdown -> HTML: <strong>/<em>/<a>/<br>) */
.fx-cl-desc{ font-size:14px !important; line-height:1.6 !important; color:#3a4756 !important; }
.fx-cl-desc:empty{ display:none !important; }
.fx-cl-desc strong{ display:block !important; margin:14px 0 2px !important; color:#1c2330 !important; font-weight:700 !important; }
/* Lücke zwischen Fett-Überschrift und Fließtext schließen (die \n\n -> <br><br> nach der Überschrift) */
.fx-cl-desc strong + br,
.fx-cl-desc strong + br + br{ display:none !important; }
/* Nativen Pager ausblenden (durchgehender Scroll wie im Original-Changelog); Klasse im Pager-Feld gesetzt */
.fx-cl-nopager{ display:none !important; }
/* ⚠ AUSNAHME (2026-08-13): Ausblenden ist nur richtig, solange ALLE Eintraege auf eine
   Seite passen. Gemessen: 276 Eintraege bei Seitengroesse 200 -> der Blaetterbereich
   meldete zwei Seiten und war unsichtbar, 76 Eintraege damit unerreichbar (auch fuer die
   Changelog-Suche), ohne jeden Hinweis.
   Das JS (clPagerGuard) setzt fx-cl-pageneeded, sobald mehr als eine Seite existiert.
   Lieber ein sichtbarer Blaetterbereich als stillschweigend fehlende Inhalte. */
.fx-cl-nopager.fx-cl-pageneeded{
  display:flex !important;
  justify-content:center !important;
  margin:20px 0 4px !important;
}
/* CSH-Feld ({{record.docs_work_item_id}}) versteckt – JS baut daraus die Doku-Links */
.fx-cl-csh{ display:none !important; }
/* Doku-Link(s) unten in der Kachel (JS changelogDoku: pro CSH-ID ein Link auf docs.fastec.de …home.htm#cshid=…) */
.fx-cl-doku{ display:flex !important; flex-wrap:wrap !important; gap:16px !important; margin-top:14px !important; }
.fx-cl-doku-link{ display:inline-flex !important; align-items:center !important; gap:5px !important; color:#0f7bd1 !important; font-weight:600 !important; font-size:14px !important; text-decoration:none !important; }
.fx-cl-doku-link:hover{ text-decoration:underline !important; }
.fx-cl-doku-link::before{ content:"" !important; width:15px !important; height:15px !important; flex:0 0 auto !important; background:center/contain no-repeat url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%230f7bd1' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14 3v4a1 1 0 0 0 1 1h4'/%3E%3Cpath d='M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z'/%3E%3Cpath d='M9 13l6 0'/%3E%3Cpath d='M9 17l6 0'/%3E%3C/svg%3E") !important; }
.fx-cl-desc em{ font-style:italic !important; }
.fx-cl-desc a{ color:#0f7bd1 !important; font-weight:600 !important; text-decoration:none !important; }
.fx-cl-desc a:hover{ text-decoration:underline !important; }
/* Meta: WorkItem-ID (#…) + Tags */
.fx-cl-id{ font-size:13px !important; color:#8a94a3 !important; }
.fx-cl-id:not(:empty)::before{ content:"· #" !important; }
/* Tags in eigener Zeile UNTER der Kopfzeile (Variante 3-Layout), Bubbles + Icon wie Variante 1 */
.fx-cl-tags{ display:flex !important; align-items:center !important; flex-wrap:wrap !important; gap:6px !important; margin:2px 0 16px !important; padding:0 !important; border-top:0 !important; background:none !important; color:inherit !important; }
/* Abstand Tags -> Titel robust (Tags-Zeile steckt in einem Wrapper, der das margin sonst schluckt) */
.fx-cl-card > .fx-cl-tags,
.fx-cl-card > *:has(> .fx-cl-tags){ margin-bottom:16px !important; }
.fx-cl-tags:empty{ display:none !important; }
.fx-cl-tags::before{ content:"" !important; flex:0 0 auto !important; width:15px !important; height:15px !important; margin-right:2px !important; opacity:.55 !important; background:center/contain no-repeat url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%238a94a3' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0'/%3E%3Cpath d='M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z'/%3E%3C/svg%3E") !important; }
.fx-cl-tag{ display:inline-block !important; padding:3px 10px !important; border-radius:6px !important; background:#eaf4fb !important; color:#0a4a8f !important; font-size:12px !important; font-weight:700 !important; line-height:1.4 !important; }
/* Eingebettete Bilder in der Beschreibung */
/* Bilder in der Beschreibung. max-width als min(%, px) - dasselbe Muster wie bei den
   Doku-Inhaltsbildern (s. .fx-docviewer img.imgmb_*): Die Karte ist rund 1500px breit,
   deshalb greift ein reines 100% nie und die Bilder erschienen in Originalgroesse.
   Die Pixelgrenze wirkt NUR auf Bilder, die groesser sind - gemessen 2026-08-10 lagen
   die Breiten zwischen 241 und 700px, kleine Banner (300x54) bleiben also unberuehrt.
   560 ist der Wert, der sich im direkten Vergleich am besten gelesen hat. */
.fx-cl-desc .fx-cl-img{ display:block !important; max-width:min(100%, 560px) !important; height:auto !important; margin:12px 0 !important; border:1px solid #e6eaf0 !important; border-radius:8px !important; }
/* Filterleiste (kontextabhaengig: Produkt + Version von/bis) */
.fx-clf{ display:flex !important; flex-wrap:wrap !important; align-items:flex-end !important; gap:14px !important; margin:0 0 22px !important; width:100% !important; box-sizing:border-box !important; }
.fx-clf-field{ flex:1 1 0 !important; min-width:150px !important; display:flex !important; flex-direction:column !important; gap:5px !important; font-size:12px !important; font-weight:600 !important; color:#6b7280 !important; }
.fx-clf-field select{ width:100% !important; box-sizing:border-box !important; font-size:14px !important; font-weight:500 !important; color:#1c2330 !important; background:#fff !important; border:1px solid #cfd8e3 !important; border-radius:8px !important; padding:8px 32px 8px 12px !important; cursor:pointer !important; -webkit-appearance:none !important; appearance:none !important; background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23667788' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") !important; background-repeat:no-repeat !important; background-position:right 11px center !important; }
.fx-clf-field select:hover{ border-color:#00a9eb !important; }
.fx-clf-field select:focus{ outline:none !important; border-color:#003eab !important; box-shadow:0 0 0 3px rgba(0,169,235,.15) !important; }


/* =====================================================================
   26  TYPOGRAFIE-VEREINHEITLICHUNG (Groessen-Hierarchie + kein Uppercase)
   Ergaenzt/ueberschreibt NUR font-size + text-transform der jeweils
   gleichen Selektoren weiter oben (gleiche Spezifitaet + !important ->
   gewinnt per Reihenfolge). Alle anderen Eigenschaften (Farbe, Abstand,
   Gewicht …) bleiben unangetastet. Rueckbau = diese Sektion loeschen.
   Doku-Viewer-Inhalt (Sektion 20/21, pt/em-Werte) bewusst NICHT
   angefasst – eigene, in sich stimmige Stufung fuer die Flare-Doku.
   ===================================================================== */

/* ----- 12px Mikro/Meta (Badges, Tags, Datum, Artikelnummer, Tabellenkopf) ----- */
.fx-card__date{ font-size:12px !important; }
.fx-card--dark .fx-card__eyebrow{ font-size:12px !important; text-transform:none !important; letter-spacing:.02em !important; }
.fx-events::before{ content:"Kommende Veranstaltungen"; font-size:12px !important; letter-spacing:.02em !important; }
.fx-system::before{ content:"Mein System"; font-size:12px !important; letter-spacing:.02em !important; }
.fx-account .fx-card__meta{ font-size:12px !important; }
.fx-vtable__row--head .fx-vtable__cell{ font-size:12px !important; }
.fx-shopd__artnr{ font-size:12px !important; text-transform:none !important; letter-spacing:0 !important; }
.fx-shopd__reco-artnr{ font-size:12px !important; }
.fx-ticketcard .MuiTypography-h6{ font-size:12px !important; text-transform:none !important; letter-spacing:.02em !important; }
.fx-tickettable thead th, .fx-tickettable .MuiTableCell-head{ font-size:12px !important; }
.fx-cl-datum{ font-size:12px !important; }
.fx-cl-id{ font-size:12px !important; }
/* Legacy-Label (evtl. ungenutzt, nur Uppercase-Fix zur Sicherheit) */
.fx-shopd__passt:not(:empty)::before{ text-transform:none !important; letter-spacing:.02em !important; }

/* ----- 14px Standardtext (Fliesstext, Beschreibungen, Buttons, Links) ----- */
.fx-card__text, .fx-card__link{ font-size:14px !important; }
.fx-card--dark .fx-card__text{ font-size:14px !important; }
.fx-card--system .fx-card__claim{ font-size:14px !important; }
.fx-card--product .fx-prod .MuiButton-root{ font-size:14px !important; }
.fx-events:not(:has(a.MuiPaper-root)):not(:has([role="progressbar"]))::after{ font-size:14px !important; }
.fx-events a .MuiTypography-subtitle2{ font-size:14px !important; }
.fx-system .MuiPaper-root .MuiTypography-body2{ font-size:14px !important; }
.fx-system .MuiButton-root{ font-size:14px !important; }
.fx-system .MuiStack-root .MuiButton-root:first-child::before{ font-size:14px !important; }
.fx-system .MuiStack-root::after{ font-size:14px !important; }
.fx-account .MuiButton-root{ font-size:14px !important; }
.fx-account .fx-acct-line{ font-size:14px !important; }
.fx-card--shop .fx-card__shortdesc{ font-size:14px !important; }
.fx-btn{ font-size:14px !important; }
.fx-tile__sub{ font-size:14px !important; }
.MuiMenu-paper .MuiMenuItem-root{ font-size:14px !important; }
.fx-chip{ font-size:14px !important; line-height:18px !important; }   /* feste 32px-Chip-Hoehe (MUI) minus 2x7px Padding = 18px verfuegbar; explizit pinnen, sonst je nach Schriftart zu hoch -> Text rutscht nach unten */
.fx-uc-branche__label, .fx-uc-branche__value{ font-size:14px !important; }
.fx-uc-text{ font-size:14px !important; }
.fx-uc-benefit__list{ font-size:14px !important; }
.fx-uc-slide__cap{ font-size:14px !important; }
.fx-uc-nav__link, .fx-uc-nav__btn, .fx-ucnav__link, .fx-ucnav__btn{ font-size:14px !important; }
.fx-evd-desc{ font-size:14px !important; }
.fx-evd-content p, .fx-evd-content li{ font-size:14px !important; }
.fx-doccard__tagline{ font-size:14px !important; }
.fx-shopd table td, .fx-shopd table th{ font-size:14px !important; }
.fx-shopd__short{ font-size:14px !important; }
.fx-shopd__passt:not(:empty){ font-size:14px !important; }
.fx-shopd__desc{ font-size:14px !important; }
.fx-imp__text{ font-size:14px !important; }
.fx-ticketcard .MuiButton-text{ font-size:14px !important; }
.fx-tickettable tbody td, .fx-tickettable .MuiTableCell-body{ font-size:14px !important; }

/* ----- 16px Betont/Lead (Lead-Absaetze, Zitate, Untertitel) ----- */
.fx-card__lead{ font-size:16px !important; }
.fx-hero__lead{ font-size:16px !important; }
.fx-uc-eyebrow{ font-size:16px !important; }
.fx-uc-benefit__lead{ font-size:16px !important; }
.fx-uc-quote__text{ font-size:16px !important; }
.fx-evd-termin{ font-size:16px !important; }
.fx-shopd__subhead{ font-size:16px !important; }
.fx-shopd__specs-group{ font-size:16px !important; }

/* ----- 20px kleine Ueberschrift (Karten-/Produkt-/Eintrags-Titel, Abschnittstitel) ----- */
.fx-colhead{ font-size:20px !important; text-transform:none !important; letter-spacing:.02em !important; }
.fx-card__title{ font-size:20px !important; }
.fx-card--light .fx-card__cat{ font-size:20px !important; }
.fx-card--dark .fx-card__title{ font-size:20px !important; }
.fx-card--system .fx-card__title{ font-size:20px !important; }
.fx-card--shop .fx-card__title{ font-size:20px !important; }
.fx-system .MuiPaper-root .MuiTypography-h6{ font-size:20px !important; }
.fx-tile__title{ font-size:20px !important; }
.fx-uc-h3{ font-size:20px !important; }
.fx-evt-head{ font-size:20px !important; }
.fx-evd-content h3{ font-size:20px !important; }
.fx-shopd__reco-name{ font-size:20px !important; }
.fx-imp__h2{ font-size:20px !important; }
.fx-ticketcard .MuiTypography-body2{ font-size:20px !important; }
.fx-cl-title{ font-size:20px !important; }

/* ----- 24px Ueberschrift (Seiten-Zwischenueberschriften) ----- */
.fx-evd-content h2{ font-size:24px !important; }
.fx-shopd__title{ font-size:24px !important; }
.fx-imp__h1{ font-size:24px !important; }

/* ----- 32px grosse Ueberschrift (Hero-/Haupttitel) ----- */
.fx-h1{ font-size:32px !important; }
.fx-h1-head h1, .fx-h1-head h2, .fx-h1-head h3,
h1.fx-h1-head, h2.fx-h1-head, h3.fx-h1-head{ font-size:32px !important; }
.fx-uc-title{ font-size:32px !important; }
.fx-evd-title{ font-size:32px !important; }
.fx-evd-content h1{ font-size:32px !important; }


/* =====================================================================
   27  LINK-FARBE (zentral, Figma-Vorgabe #003eab)
   Zieht ALLE echten Links/Navigations-CTAs im Portal auf --fx-link
   (Abschnitt 0). Info-Labels/Werte, die zufaellig auch blau sind aber
   KEINE Links sind (z.B. Use-Case-Eyebrow, Branche-Wert, Termin-Datum,
   Filter-Aktiv-Zustaende), bewusst NICHT angefasst – eigene Baustelle.
   Doku-Viewer-INHALTS-Links (.fx-docviewer a, im eingebetteten Flare-
   Artikel) bewusst ausgenommen: spiegeln die externe docs.fastec.de
   Farbgebung – Breadcrumbs/On-Page-Nav (Portal-Chrome ums Doku-Fenster)
   sind aber mit drin.
   ===================================================================== */
.fx-card__link{ color:var(--fx-link) !important; }
.fx-card__cta{ color:var(--fx-link) !important; }
.fx-uc-nav__link, .fx-uc-nav__link .MuiSvgIcon-root,
.fx-ucnav__link, .fx-ucnav__link .MuiSvgIcon-root{ color:var(--fx-link) !important; }
.fx-evd-content a{ color:var(--fx-link) !important; }
.fx-doccard__cta .MuiButton-root,
.fx-doccard__cta.MuiButtonBase-root,
.fx-doccard__cta button{ color:var(--fx-link) !important; }
.fx-vtable__link,
.fx-vtable__cell.fx-vtable__link{ color:var(--fx-link) !important; }   /* hoehere Spezifitaet noetig: Zelle traegt fx-vtable__cell UND fx-vtable__link gleichzeitig, sonst gewinnt Abschnitt 29 (Schwarz) */
.fx-imp__text a{ color:var(--fx-link) !important; }
.fx-cl-doku-link{ color:var(--fx-link) !important; }
.fx-cl-desc a{ color:var(--fx-link) !important; }
.fx-pager .MuiPaginationItem-root,
.fx-pager button{ color:var(--fx-link) !important; }
.fx-docviewer .MuiBreadcrumbs-ol .MuiLink-button{ color:var(--fx-link) !important; }
#fx-onpagenav a:hover{ color:var(--fx-link) !important; }
#fx-onpagenav a.fx-nav-active{ color:var(--fx-link) !important; }


/* =====================================================================
   28  KACHEL-/H1-VERLAUF (alle Titel auf HELLEM Grund)
   Gleiche Verlaufs-Technik wie .fx-h1 (Abschnitt 1). NICHT angewendet
   auf Titel innerhalb dunkler Karten (fx-card--dark/--system, Mein-System,
   Ticket-Kachel) – die sind bereits WEISS (erfuellt "schwarz oder weiss")
   und ein Blau-Verlauf waere auf dunkelblauem Grund kaum lesbar.
   ===================================================================== */
.fx-card:not(.fx-card--dark):not(.fx-card--light) .fx-card__title,
.fx-card:not(.fx-card--dark):not(.fx-card--light) .fx-card__title *{
  background-image:linear-gradient(90deg,#003eab 0%,#00a9eb 100%) !important;
  -webkit-background-clip:text !important; background-clip:text !important;
  -webkit-text-fill-color:transparent !important; color:transparent !important;
}
.fx-uc-title,
.fx-uc-title *{
  background-image:linear-gradient(90deg,#003eab 0%,#00a9eb 100%) !important;
  -webkit-background-clip:text !important; background-clip:text !important;
  -webkit-text-fill-color:transparent !important; color:transparent !important;
}
.fx-shopd__title,
.fx-shopd__title *{
  background-image:linear-gradient(90deg,#003eab 0%,#00a9eb 100%) !important;
  -webkit-background-clip:text !important; background-clip:text !important;
  -webkit-text-fill-color:transparent !important; color:transparent !important;
}


/* =====================================================================
   29  ECHTES SCHWARZ (zentral, Figma-Vorgabe #000000)
   Zieht allen grauen/nah-schwarzen Text auf --fx-black. NICHT angefasst:
   Weiss auf dunklen Karten (schon konform), helles Blau-auf-Dunkel als
   Sekundaertext auf dunklen Karten (eigene Kategorie, kein "Grau"),
   die noch offene blaue Akzent-Liste (Eyebrows, Branche-Wert, Termin,
   Impressum-Ueberschriften, Tags, Colhead, Use-Case-Cat-Label – separate
   Entscheidung), Funktions-Zustaende (z.B. deaktivierter Pager-Text),
   Icon-/Deko-Farben, und der importierte Doku-Viewer-Inhalt (Sektion
   20/21, spiegelt bewusst die externe Doku).
   ===================================================================== */
.fx-card__text{ color:var(--fx-black) !important; }
.fx-card__date{ color:var(--fx-black) !important; }
.fx-card__lead{ color:var(--fx-black) !important; }
.fx-card--shop .fx-card__shortdesc{ color:var(--fx-black) !important; }
.fx-tile__title{ color:var(--fx-black) !important; }
.fx-tile__sub{ color:var(--fx-black) !important; }
.MuiMenu-paper .MuiMenuItem-root{ color:var(--fx-black) !important; }
.fx-hero__lead{ color:var(--fx-black) !important; }
.fx-hero__desc{ color:var(--fx-black) !important; }
.fx-filter__hint{ color:var(--fx-black) !important; }
.fx-uc-sub{ color:var(--fx-black) !important; }
.fx-uc-branche__label{ color:var(--fx-black) !important; }
.fx-uc-h3{ color:var(--fx-black) !important; }
.fx-uc-text{ color:var(--fx-black) !important; }
.fx-uc-benefit__lead{ color:var(--fx-black) !important; }
.fx-uc-benefit__list{ color:var(--fx-black) !important; }
.fx-uc-slide__cap{ color:var(--fx-black) !important; }
.fx-evd-lead{ color:var(--fx-black) !important; }
.fx-evd-desc{ color:var(--fx-black) !important; }
.fx-evd-content h1, .fx-evd-content h2, .fx-evd-content h3{ color:var(--fx-black) !important; }
.fx-evd-content strong, .fx-evd-content b{ color:var(--fx-black) !important; }
.fx-evd-content p, .fx-evd-content li, .fx-evd-content td{ color:var(--fx-black) !important; }
.fx-evd-content td:first-child{ color:var(--fx-black) !important; }
.fx-doccard__tagline{ color:var(--fx-black) !important; }
.fx-doccard__text{ color:var(--fx-black) !important; }
.fx-vtable__row--head .fx-vtable__cell{ color:var(--fx-black) !important; }
.fx-vtable__cell{ color:var(--fx-black) !important; }
.fx-shopd__artnr{ color:var(--fx-black) !important; }
.fx-shopd__subhead{ color:var(--fx-black) !important; }
.fx-shopd__desc{ color:var(--fx-black) !important; }
.fx-shopd table td, .fx-shopd table th{ color:var(--fx-black) !important; }
.fx-shopd table td:first-child, .fx-shopd table th:first-child{ color:var(--fx-black) !important; }
.fx-shopd__specs-title{ color:var(--fx-black) !important; }
.fx-shopd__specs-group{ color:var(--fx-black) !important; }
.fx-shopd__specs-label{ color:var(--fx-black) !important; }
.fx-shopd__specs-value{ color:var(--fx-black) !important; }
.fx-shopd__specs td:first-child{ color:var(--fx-black) !important; }
.fx-shopd__specs td:last-child{ color:var(--fx-black) !important; }
.fx-shopd__recos-title{ color:var(--fx-black) !important; }
.fx-shopd__reco-name{ color:var(--fx-black) !important; }
.fx-shopd__reco-artnr{ color:var(--fx-black) !important; }
.fx-shopd__desc::before{ color:var(--fx-black) !important; }
.fx-imp__text{ color:var(--fx-black) !important; }
.fx-tickettable thead th, .fx-tickettable .MuiTableCell-head{ color:var(--fx-black) !important; }
.fx-tickettable tbody td, .fx-tickettable .MuiTableCell-body{ color:var(--fx-black) !important; }
.fx-cl-datum{ color:var(--fx-black) !important; }
.fx-cl-title{ color:var(--fx-black) !important; }
.fx-cl-desc{ color:var(--fx-black) !important; }
.fx-cl-desc strong{ color:var(--fx-black) !important; }
.fx-cl-id{ color:var(--fx-black) !important; }
.fx-clf-field{ color:var(--fx-black) !important; }
.fx-clf-field select{ color:var(--fx-black) !important; }


/* =====================================================================
   30  BLAUE KACHELN: Icon-Groesse + Eyebrow-Abstand (Feedback 05.08.)
   Icons auf 24x24px (vorher 22x22). Abstand Eyebrow ("MEIN KONTO" /
   "KOMMENDE VERANSTALTUNGEN" / "MEIN SYSTEM") zum Inhalt darunter
   vereinheitlicht auf 12px (vorher 4-8px, je nach Kachel).
   ===================================================================== */
.fx-card--dark::after{ width:24px !important; height:24px !important; }
.fx-card--dark .fx-card__eyebrow{ margin:0 0 12px !important; }
.fx-events::before{ margin:0 0 12px !important; }
.fx-system::before{ margin:0 0 12px !important; }
.fx-account .fx-card__title{ margin:0 0 12px !important; }


/* =====================================================================
   31  INTERESSENT-KACHEL: CTA-Button "Jetzt Demo anfragen" (Option 2:
   Outline-Button) vs. "Mehr erfahren" (bleibt schlichter Text-Link).
   Klasse .fx-cta wird per JS (interessentCta()) anhand des Linktexts
   ("demo") gesetzt, da beide Links dieselbe Basis-Klasse .fx-card__link
   teilen und sich nur inhaltlich unterscheiden.
   ===================================================================== */
.fx-card--system .fx-card__link.fx-cta{
  display:inline-block !important; text-align:center !important;
  padding:8px 18px !important; border:1.5px solid #fff !important; border-radius:6px !important;
  color:#fff !important; transition:background .15s ease, color .15s ease !important;
}
.fx-card--system .fx-card__link.fx-cta:hover{
  background:#fff !important; color:#0a2f6e !important;
}
/* "Update anfragen" auf der Mein-System-Kachel: Versuch (Outline-Button, dann Akzentfarbe)
   wieder verworfen, kein sichtbarer Unterschied/Mehrwert -> zurueck auf Original-Regel
   weiter oben in der Datei (Zeile ~405), hier keine Override-Regel mehr noetig. */


/* =====================================================================
   32  SHOP-KACHELN (fx-card--shop, Shop-Uebersichtsseite): Bild groesser
   (190px -> 230px) + mehr Abstand zwischen Beschreibung und "Zum Produkt"-
   Button. Kartenhoehe ist FEST (340px, keine Prozent-Hoehe) -> muss mit
   vergroessert werden, sonst wird der Inhalt gequetscht statt die Karte
   zu wachsen.
   KORREKTUR: urspruenglich faelschlich auf .fx-shopd__reco-* gezielt
   (Empfehlungs-Karten auf der Shop-DETAILseite) - per Live-DOM-Check
   (05.08.) bestaetigt: das hier sind tatsaechlich die Karten der Shop-
   UEBERSICHTSSEITE (.fx-card--shop), andere Klassen, daher ohne Wirkung.
   ===================================================================== */
.fx-card--shop{ height:400px !important; }
.fx-card--shop .fx-card__media{ height:230px !important; }
.fx-card--shop .fx-card__shortdesc{ margin-bottom:16px !important; }


/* =====================================================================
   33  LINK-TEXTE IN KACHELN GROESSER (Start-, Uebersichts- UND Detailseiten)
   Betrifft NUR den CTA-/Link-Text unten in den Kacheln ("Zum Artikel ->",
   "Zur Veranstaltung ->", "Zum Produkt ->", "Mehr erfahren ->" etc. -
   14px -> 16px), NICHT den Fliesstext (Kuerzung/Line-Clamp unveraendert),
   NICHT die Ueberschriften-Hoehe, NICHT das Datum.
   Kachel-Groesse bleibt unveraendert: der Link sitzt per margin-top:auto
   ganz unten im Flex-Container -> ein groesserer Link waechst nur in den
   ohnehin vorhandenen Leerraum am unteren Kartenrand hinein, statt den
   Inhalt darueber zu verschieben oder die Karte zu vergroessern.
   ===================================================================== */
.fx-card__link,
.fx-card__cta,
.fx-doccard__cta .MuiButton-root,
.fx-doccard__cta.MuiButtonBase-root,
.fx-doccard__cta button,
.fx-card--product .fx-prod .MuiButton-root{
  font-size:16px !important;
}


/* =====================================================================
   34  NEWS-KACHEL: Fliesstext-Kuerzung robust machen (rein CSS, keine
   DOM-Aenderung -> sicher fuer die React-verwalteten News-/Event-Karten;
   der vorherige Versuch mit einem per JS eingefuegten <span>-Wrapper
   wurde verworfen, weil React diese Karten laufend neu rendert und die
   manuelle DOM-Aenderung dabei durcheinandergeriet, s. changelogMount()).
   Ursache des Abschneide-Bugs: -webkit-line-clamp + min-height:0 + Flex-
   Schrumpfen auf demselben Element -> Flexbox darf den Text-Bereich unter
   die fuer 3 Zeilen noetige Hoehe druecken, wenn andere Elemente (z.B. der
   jetzt groessere Link, Section 33) mehr Platz brauchen. Wird die Box
   kuerzer als 3 Zeilen, kann der Browser die Ellipse nicht mehr sauber
   einfuegen -> Text wirkt hart abgeschnitten statt gekuerzt.
   Fix: min-height auf die fuer 3 Zeilen noetige Hoehe SPERREN (statt 0) ->
   der Text-Bereich darf wachsen/schrumpfen, faellt aber nie unter 3 Zeilen
   Platz. Titel/Datum/Link behalten wie gewohnt Vorrang; nur im wirklich
   knappen Extremfall wird die Karte am unteren Rand unsichtbar begrenzt
   (overflow:hidden der Karte), statt eine kaputte Ellipse zu zeigen.
   ===================================================================== */
.fx-card--img .fx-card__text{
  display:-webkit-box !important;
  -webkit-box-orient:vertical !important;
  overflow:hidden !important;
  -webkit-line-clamp:3 !important;
  height:4.8em !important;
  min-height:4.8em !important;
  flex-grow:0 !important;
}


/* =====================================================================
   35  TEST: Veranstaltungen-Uebersichtsseite - groesseres Bild in den
   Event-Kacheln (180px -> 230px), damit Fotos weniger stark beschnitten
   werden (object-fit:cover). NUR auf .fx-evt-split gescopt (die tatsaechlich
   verwendete Klasse; .fx-evt-upcoming/.fx-evt-past aus der ersten Version
   dieser Section existieren live gar nicht mehr - totes CSS, deshalb griff
   der erste Versuch nicht), damit die News-Kacheln auf der Startseite
   (gleiche Basis-Klasse .fx-card--img) unangetastet bleiben.
   Kein grid-auto-rows noetig: .fx-evt-split setzt keine feste Zeilenhoehe,
   die Grid-Zeile waechst automatisch mit der Kartenhoehe mit.
   Kartenhoehe waechst im GLEICHEN Mass mit wie das Bild (440 -> 490px,
   +50px), sonst wuerde der Link unten aus der Karte herausfallen (Karte
   hat overflow:hidden).
   TEST - zum Zurueckrollen einfach diese Section wieder loeschen.
   ===================================================================== */
.fx-evt-split .fx-card--img{
  height:490px !important;
}
.fx-evt-split .fx-card--img .fx-card__media{
  height:230px !important;
}


/* =====================================================================
   36  HEADER FIXIEREN (sticky beim Scrollen)
   .fx-header selbst ist nur inhaltsbreit (Hug, ~1114px). Erster Versuch:
   sticky auf dem direkten Wrapper (:has(> .fx-header), css-nvfszx) -
   griff nicht, weil DESSEN Elternteil selbst nur 75px hoch ist (nur
   knapp mehr als der Header). Sticky braucht als "Klebe-Spielraum" die
   Hoehe des direkten Elternteils - bei nur 75px verlaesst der Header
   seinen Container nach ~25px Scroll und wird mitgerissen.
   Fix: position:sticky eine Ebene hoeher, auf dem Grosseltern-Container
   (:has(> .MuiBox-root > .fx-header), stabiles Muster statt der
   wechselnden Emotion-Hash-Klasse css-1au76g8) - der ist direktes Kind
   des eigentlich hohen, scrollenden Seiteninhalts (~1719px) und hat
   damit genug Spielraum, um ueber die komplette Scrollstrecke oben zu
   bleiben. Soliden weissen Hintergrund + z-index dort mit hin, sonst
   wuerde der Seiteninhalt beim Scrollen sichtbar durchlaufen.
   z-index unter den Lightbox-Overlays (9998/99999, Sektion 21), aber
   ueber normalem Seiteninhalt.
   ===================================================================== */
.MuiBox-root:has(> .MuiBox-root > .fx-header){
  position:sticky !important;
  top:0 !important;
  z-index:1000 !important;
  background:#fff !important;
}


/* =====================================================================
   37  CHANGELOG: Leer-Hinweis (JS clEmptyNote) + Filterleiste entfallen
   Der Changelog zeigt jetzt fest die Neuerungen der aufgerufenen Doku-
   Version (kein Von/Bis mehr). Gibt es dazu keine Eintraege, setzt das JS
   einen Hinweis in den Flare-Slot statt eine leere Seite zu zeigen.
   Die alten .fx-clf-Regeln in Sektion 25/29 sind damit tot (es wird keine
   .fx-clf mehr gebaut) - stoeren aber nicht und koennen beim naechsten
   Aufraeumen mit raus.
   ===================================================================== */
.fx-cl-empty{
  margin:8px 0 0 !important;
  padding:18px 20px !important;
  background:#f5f6f8 !important;
  border:1px solid #e6eaf0 !important;
  border-radius:12px !important;
  font-size:14px !important;
  line-height:1.5 !important;
  color:var(--fx-black) !important;
}
/* Waehrend einer Suche geht die Trefferliste ueber ALLE Versionen -> Versionsangabe wieder
   einblenden (sonst weiss niemand, wozu ein Treffer gehoert). Klasse .fx-cl-searching setzt
   das JS (changelogVersionLock) am Grid, sobald im Suchfeld etwas steht.
   Im Normalfall bleibt die Version ausgeblendet, weil sie dort redundant ist (man ist ja in
   der Doku genau dieser Version). */
.fx-changelog.fx-cl-searching .fx-cl-version{
  display:inline-block !important;
  font-size:12px !important;
  font-weight:700 !important;
  color:#0a4a8f !important;
  background:#eaf4fb !important;
  padding:3px 10px !important;
  border-radius:6px !important;
  line-height:1.4 !important;
}
.fx-changelog.fx-cl-searching .fx-cl-version::before{ content:"ab " !important; font-weight:400 !important; }


/* =====================================================================
   38  ANSPRUNG-ZIELE UNTER DEM FIXIERTEN HEADER FREIHALTEN
   Seit der Header sticky ist (Sektion 36), setzt scrollIntoView() ein Ziel
   exakt an die Viewport-Oberkante - also UNTER den Header, der dort
   schwebt. Betrifft die Use-Case-Detailseite: Beim Wechsel per
   "naechster/vorheriger Use Case" springt das JS (toTop) auf die
   Ueberschrift, die dann halb verdeckt war.
   Fix: scroll-margin-top haelt den Platz frei. Die Header-Hoehe misst das
   JS (headHeight -> --fx-headh), damit der Wert auch mit Admin-Leiste und
   bei anderen Aufloesungen stimmt; 75px ist nur der Rueckfallwert.
   ===================================================================== */
.fx-uc-head,
.fx-uc-title,
.fx-uc-eyebrow{
  scroll-margin-top:calc(var(--fx-headh, 75px) + 16px) !important;
}


/* =====================================================================
   39  CHANGELOG-SUCHE: Optik + Kontext
   Das native Suchfeld des Rasters ist ein MUI-OutlinedInput
   (input[type="search"] in .MuiInputBase-root, Rahmen liegt auf einem
   fieldset .MuiOutlinedInput-notchedOutline). Standardmaessig wirkt es
   wie ein aufgesetztes Formularelement - hier an die Changelog-Karten
   angeglichen: gleiche Rundung/Rahmenfarbe/Schatten, Lupe im Feld,
   portalblauer Fokus, beim Scrollen sticky unter dem Header.
   Der Kontext-Hinweis ("Suche ueber alle Versionen · N Treffer") kommt
   ueber data-fx-hits, das JS (clHits) am Wrapper setzt - bewusst als
   Attribut statt eingefuegtem Knoten, weil der Bereich React gehoert.
   ===================================================================== */
/* Wrapper (direktes Kind des Grids) -> bleibt beim Scrollen unter dem Header stehen */
.fx-changelog > *:has(input[type="search"]){
  position:sticky !important;
  top:calc(var(--fx-headh, 75px) + 8px) !important;
  z-index:5 !important;
  background:#fff !important;
  padding:8px 0 10px !important;
  margin:0 0 4px !important;
}
/* MUI-Rahmen weg, Karten-Look auf den Eingabe-Container */
.fx-changelog .MuiOutlinedInput-notchedOutline{ border:0 !important; }
.fx-changelog .MuiInputBase-root:has(input[type="search"]){
  background:#fff !important;
  border:1px solid #e6eaf0 !important;
  border-radius:12px !important;
  box-shadow:0 6px 18px rgba(20,40,80,.06) !important;
  transition:border-color .15s ease, box-shadow .15s ease !important;
}
.fx-changelog .MuiInputBase-root:has(input[type="search"]):hover{ border-color:#cfd8e3 !important; }
.fx-changelog .MuiInputBase-root:has(input[type="search"]).Mui-focused{
  border-color:#003eab !important;
  box-shadow:0 0 0 3px rgba(0,169,235,.15) !important;
}
/* Lupe links im Feld + Platz dafuer */
.fx-changelog input[type="search"]{
  padding:12px 14px 12px 44px !important;
  font-size:14px !important;
  color:var(--fx-black) !important;
  background-color:transparent !important;
  background-repeat:no-repeat !important;
  background-position:left 15px center !important;
  background-size:18px 18px !important;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='M20 20l-3.6-3.6'/%3E%3C/svg%3E") !important;
}
/* Loeschen-Kreuz (native Suchfeld-Funktion) sichtbar und im Portal-Grau */
.fx-changelog input[type="search"]::-webkit-search-cancel-button{
  -webkit-appearance:none; appearance:none;
  width:16px; height:16px; margin-left:8px; cursor:pointer; opacity:.45;
  background:center/contain no-repeat url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2.4' stroke-linecap='round'%3E%3Cpath d='M6 6l12 12M18 6L6 18'/%3E%3C/svg%3E");
}
.fx-changelog input[type="search"]::-webkit-search-cancel-button:hover{ opacity:.9; }
/* Kontext-Hinweis unter dem Suchfeld (nur waehrend einer Suche) */
.fx-changelog.fx-cl-searching [data-fx-hits]::after{
  content:attr(data-fx-hits) !important;
  display:block !important;
  margin:8px 2px 0 !important;
  font-size:12px !important;
  line-height:1.4 !important;
  color:#6b7280 !important;
}


/* =====================================================================
   40  CHANGELOG-KARTEN: Hierarchie geraderuecken (Variante A)
   Der Changelog wird ueberflogen, nicht gelesen - gesucht werden die
   zwei, drei Eintraege zum eigenen Modul. Deshalb ist der TITEL die
   groesste Sache auf der Karte, und alles Beschreibende (Version,
   Modul, Datum, Tags, Ticketnummer) faellt in EINE ruhige graue Zeile
   darunter zusammen. Vorher konkurrierten Modul-Bubble, Tag-Bubbles
   und Datum mit der Ueberschrift um dieselbe Aufmerksamkeit.
   Der Doku-Link bekommt eine abgesetzte Fusszeile - seit der
   CSH-Umstellung ist er die eigentliche Aktion auf der Karte.
   Bilder in der Beschreibung (.fx-cl-img) bleiben unberuehrt.
   ⚠ VORAUSSETZUNG im Block "Changelog-Grid" (Reihenfolge der Elemente):
      1. Titel  ueber  den horizontalen Meta-Stapel ziehen
      2. Tags   in     den Meta-Stapel, ans Ende
      3. Version in    den Meta-Stapel, an den Anfang
   ===================================================================== */
.fx-cl-title{
  font-size:19px !important;
  line-height:1.3 !important;
  letter-spacing:-.01em !important;
  margin:0 0 8px !important;
}
/* Meta-Zeile: eine Zeile, ein Grauwert, Trennpunkte statt Abstaenden */
.fx-cl-meta{
  gap:0 6px !important;
  margin:0 0 12px !important;
  font-size:12.5px !important;
  line-height:1.5 !important;
  color:#6b7280 !important;
}
/* Modul: kein Farbklotz mehr, sondern kraeftiger Text - es ist die
   Sortierhilfe, muss also lesbar sein, aber nicht schreien */
.fx-cl-module{
  display:inline !important;
  padding:0 !important;
  border-radius:0 !important;
  background:none !important;
  color:#003eab !important;
  font-size:12.5px !important;
  font-weight:700 !important;
  letter-spacing:0 !important;
}
.fx-cl-module:empty{ display:none !important; }
.fx-cl-datum{ color:#9aa6b2 !important; font-variant-numeric:tabular-nums !important; }
.fx-cl-datum:not(:empty)::before{ content:"· " !important; color:#c8d1dc !important; }
.fx-cl-id{ font-size:12.5px !important; color:#9aa6b2 !important; }
/* Tags: schlichter Text statt Bubbles, Icon weg (JS: CL_TAG_BUBBLES=false) */
.fx-cl-tags{
  display:inline !important;
  margin:0 !important;
  font-size:12.5px !important;
  color:#9aa6b2 !important;
}
.fx-cl-tags:empty{ display:none !important; }
.fx-cl-tags::before{
  content:"· " !important;
  width:auto !important; height:auto !important; margin:0 !important;
  background:none !important; opacity:1 !important; color:#c8d1dc !important;
}
/* Der Tags-Wrapper brauchte seinen Abstand nur als eigene Zeile */
.fx-cl-card > .fx-cl-tags,
.fx-cl-card > *:has(> .fx-cl-tags){ margin-bottom:0 !important; }
/* Fusszeile: Doku-Link abgesetzt, rechtsbuendig */
.fx-cl-doku{
  justify-content:flex-end !important;
  margin-top:14px !important;
  padding-top:12px !important;
  border-top:1px solid #f0f3f7 !important;
}
/* Versionsangabe waehrend der Suche: kleine Plakette statt grauem Text.
   Sie sitzt vorn in der Meta-Zeile und sagt sofort, dass dieser Treffer
   NICHT aus der geoeffneten Doku stammt - der Doku-Link fuehrt dann ja
   auch in ein anderes Buch. */
.fx-changelog.fx-cl-searching .fx-cl-version{
  background:#eaf1fc !important;
  color:#003eab !important;
  border-radius:4px !important;
  padding:2px 8px !important;
  font-size:11px !important;
  font-weight:700 !important;
  letter-spacing:.01em !important;
  margin-right:2px !important;
}


/* =====================================================================
   41  CHANGELOG OHNE EINTRAEGE (z.B. Version 26.2)
   Der Leer-Hinweis sitzt jetzt IM Grid und vor dem Doku-Footer (JS:
   clEmptyNote) - vorher lag er im Flare-Slot, also HINTER dem Grid und
   damit hinter dem Footer. Hier nur noch die Optik dazu:
   - Abstand zum Suchfeld, damit der Hinweis nicht daran klebt
   - Der Doku-Footer traegt fuer die normale Doku ein margin-right:-300px
     (er soll unter der On-Page-Navigation durchlaufen). Im Changelog gibt
     es diese Navigation nicht -> der Footer ragte rechts aus der Spalte.
   ===================================================================== */
.fx-changelog--on .fx-cl-empty{ margin:20px 0 0 !important; }
.fx-changelog--on #fx-docfooter{ margin-right:0 !important; }


/* =====================================================================
   42  CHANGELOG-KARTE: Feinschliff nach dem ersten Blick
   - Meta-Zeile bekommt Luft zur Ueberschrift. Die Reihenfolge
     Meta -> Titel bleibt bewusst (der Block-Umzug aus Sektion 40
     entfaellt). Wert hier justieren, wenn es enger/weiter soll.
   - "Zur Doku" nach LINKS: Der Kartentext ist linksbuendig, das Auge
     kehrt am Zeilenanfang zurueck. Rechts stand der Link ausserhalb
     dieses Wegs und ging bei breiten Karten unter.
   ===================================================================== */
.fx-cl-meta{ margin:0 0 18px !important; }
.fx-cl-doku{ justify-content:flex-start !important; }


/* =====================================================================
   43  CHANGELOG-KARTE: Luft zwischen Ueberschrift und Beschreibung
   Nachdem die Meta-Zeile dicht an den Titel gerueckt ist (Sektion 42),
   bilden Kicker + Ueberschrift eine Einheit - dann braucht der Absatz
   darunter mehr Abstand, sonst klebt der erste Absatz ("Problem") am
   Titel und die Gruppierung kippt.
   ===================================================================== */
.fx-cl-title{ margin-bottom:16px !important; }


/* =====================================================================
   45  DOKU-BROTKRUEMEL: einheitliche Schriftgroesse
   Gemessen: die anklickbaren Kruemel sind <button> mit MUI-Standard
   16px, der letzte Kruemel (aktuelle Seite) ist ein <p> und erbt die
   13pt (= 17,33px) aus dem Doku-Stylesheet. Daher der Unterschied.
   WICHTIG "li *": Die Groesse sitzt auf den Elementen IN den <li>,
   nicht auf den <li> selbst - eine Regel nur auf li greift ins Leere.
   Siehe auch die Kruemel-Regeln weiter oben (~Zeile 1145): dort wird
   der erste Kruemel (Produkt/Version) ausgeblendet.
   ===================================================================== */
.fx-docviewer .MuiBreadcrumbs-ol li,
.fx-docviewer .MuiBreadcrumbs-ol li *{
  font-size:13pt !important;   /* = 17,33px, wie der letzte Kruemel und die Doku-Absaetze */
  line-height:1.4 !important;
}


/* =====================================================================
   46  CHANGELOG-TOPIC: Brotkruemel raus, Inhalt nach ganz oben
   Auf dem Changelog-Topic steht in den Kruemeln ohnehin nur
   "Changelog" - das sagt die Suchzeile darunter schon selbst. Also weg
   damit, und die gewonnene Hoehe kommt der Liste zugute.
   Zusammen mit den anderen Abstaenden waren es ~65px Leerraum, bevor
   ueberhaupt etwas Inhaltliches kam: 16px am Spalten-Container, 24px
   Polsterung der Inhaltsspalte, ~17px Kruemel, 8px am Suchfeld.
   ALLE Regeln haengen an :has(#changelog-slot) - sie gelten also NUR
   auf dem Changelog-Topic, die uebrige Doku bleibt unveraendert.
   6px Restpolsterung, damit das Suchfeld nicht an der Kante klebt.
   ===================================================================== */
.fx-docviewer > .MuiBox-root:has(#changelog-slot){ margin-top:4px !important; }
.fx-docviewer .MuiPaper-outlined:has(#changelog-slot){ padding-top:6px !important; }
.fx-docviewer .MuiPaper-outlined:has(#changelog-slot) .MuiBreadcrumbs-root{ display:none !important; }
.fx-changelog--on > *:has(input[type="search"]){ padding-top:0 !important; }


/* =====================================================================
   47  SUCHFELD: sticky und Treffer-Hinweis auf den RICHTIGEN Wrapper
   Sektion 39 haengt beides an `.fx-changelog > *:has(input[type=search])`.
   :has() trifft aber JEDEN Vorfahren, der das Feld irgendwo enthaelt -
   und das ist hier der Container, der die GESAMTE Liste umschliesst
   (gemessen 25.919px hoch). Folgen: die komplette Liste war sticky
   statt nur das Feld, oberhalb des Feldes blieb ein Streifen Leerraum,
   und der Treffer-Hinweis (::after) landete unter allen Karten.
   Richtig ist `.fx-cl-search` - die CSS-Klasse des Suchfelds aus der
   Block-Konfiguration, gemessen 46px hoch. Das JS (clHits) setzt
   data-fx-hits jetzt ebenfalls dort.
   Die alten Regeln aus 39 werden hier neutralisiert statt geloescht,
   damit Sektion 39 als Ganzes nachvollziehbar bleibt.
   ===================================================================== */
.fx-changelog > *:has(input[type="search"]){
  position:static !important;
  padding:0 !important;
  margin:0 !important;
  background:none !important;
}
.fx-changelog > *:has(input[type="search"])::after{ content:none !important; }
.fx-changelog .fx-cl-search{
  position:sticky !important;
  /* top:0 und NICHT --fx-headh: Die Inhaltsspalte ist ein eigener Scroll-Container
     (overflow:auto). Ein sticky Element misst seinen Abstand vom oberen Rand DIESES
     Containers, nicht vom Fenster - die Header-Hoehe ist dort schon abgezogen. Mit
     calc(--fx-headh + 8px) schwebte die Leiste ~83px zu tief und legte sich ueber den
     Kopf der ersten Karte (Modul-Zeile + Ueberschrift verschwanden dahinter). */
  top:0 !important;
  z-index:5 !important;
  background:#fff !important;
  padding:6px 0 10px !important;
  margin:0 0 4px !important;
}
.fx-changelog.fx-cl-searching .fx-cl-search[data-fx-hits]::after{
  content:attr(data-fx-hits) !important;
  display:block !important;
  margin:8px 2px 0 !important;
  font-size:12px !important;
  line-height:1.4 !important;
  color:#6b7280 !important;
}


/* =====================================================================
   48  VERANSTALTUNGSUEBERSICHT: Ueberschriften auf feste Hoehe
   Die Seite ist ein Sonderfall: Sie zeigt ZWEI UNABHAENGIGE Raster
   nebeneinander (kommend 2-spaltig, vergangen 1-spaltig, je mit eigenem
   Pager). Solange beide Raster gleich hohe Karten haben, liegen ihre
   Reihen auf einer Linie - sobald eine Karte hoeher wird, laeuft eine
   Seite nach unten weg.
   Gemessen 2026-08-10: Titel mit "FASTEC"-Praefix brechen auf ZWEI Zeilen
   um (51px statt 26px). Genau diese 25px fehlten der rechten Spalte:
   Wrapper 457 statt 432, zweite Reihe bei 407 statt 381.
   Ursache: Seit Sektion 34 hat der FLIESSTEXT eine feste Hoehe, die
   UEBERSCHRIFT aber nur eine Zeilenbegrenzung (max. 3 Zeilen) - sie darf
   also weiterhin wachsen. Zwei unterschiedlich strenge Regeln an
   derselben Karte erzeugen genau solche Effekte.
   Hier bekommt der Titel deshalb feste zwei Zeilen: 2.56em = 2 x 20px x
   1.28 Zeilenhoehe. Einzeilige Titel bekommen eine Leerzeile darunter,
   dreizeilige werden mit "..." gekuerzt - dafuer stehen alle Karten auf
   einer Linie.
   BEWUSST NUR auf .fx-evt-split gescopt: Die gleiche Basisklasse
   .fx-card--img tragen auch News- und Use-Case-Kacheln auf Start- und
   Uebersichtsseiten. Die bleiben unangetastet, weil sie NICHT neben
   einem zweiten Raster stehen und der Effekt dort nicht auffaellt.
   ===================================================================== */
.fx-evt-split .fx-card--img .fx-card__title{
  height:2.56em !important;
  min-height:2.56em !important;
  -webkit-line-clamp:2 !important;
}


/* =====================================================================
   49  CHANGELOG-BILDER: gleiche Zoom-Anmutung wie in der Doku
   Der Zoom SELBST lief schon: imgZoom() greift bei jedem Bild innerhalb
   von .fx-docviewer, und das Changelog-Raster haengt genau dort (im
   #changelog-slot). Ein Klick oeffnet also bereits dasselbe seitliche
   Panel wie bei Doku-Bildern.
   Gefehlt hat nur der Hinweis darauf: Portalweit gibt es KEINEN
   Hover-Effekt auf Bildern, sondern ausschliesslich den Zoom-Cursor -
   so bei .fx-docviewer img.MCPopupThumbnail und bei .fx-shopd__img img.
   Diese Zeile zieht die Changelog-Bilder in dasselbe Muster.
   ===================================================================== */
.fx-cl-desc .fx-cl-img{ cursor:zoom-in !important; }


/* =====================================================================
   50  SUCHFELDER: eine Optik fuer Changelog UND Shop
   Beide Raster nutzen das native Suchfeld des record_grid-Blocks, also
   dieselbe MUI-Struktur (Box.fx-*-search > FormControl > InputBase >
   input). Deshalb hier EINMAL die Gestaltung fuer beide statt zweimal
   dieselben Werte.
   Angesprochen wird ueber die CSS-Klasse aus der Block-Konfiguration
   (fx-cl-search / fx-shop-search), NICHT ueber :has() wie in Sektion 39.
   :has() trifft jeden passenden Vorfahren - dort war das der Container
   um die GESAMTE Liste, was uns sticky-Verhalten und Treffer-Hinweis an
   der falschen Stelle beschert hat (s. Sektion 47).
   Sektion 39 enthaelt dieselben Werte nochmal fuer den Changelog; die
   Regeln hier stehen spaeter und gewinnen. Beim naechsten Aufraeumen
   kann der Optik-Teil aus 39 raus - die dortigen Regeln fuer sticky und
   Treffer-Hinweis muessen aber bleiben.
   Bewusst NICHT uebernommen: sticky und die Treffer-Zeile. Die braucht
   nur der Changelog (200+ Eintraege, versionsuebergreifende Suche), die
   Shop-Uebersicht kommt mit einer Handvoll Produkten aus.
   ===================================================================== */
/* .fx-supportform ist ab 2026-08-10 mit dabei: Ein Eingabefeld soll im Portal ueberall
   gleich aussehen. Bewusst NUR in den Regeln fuer Rahmen/Radius/Fokus - die Lupe und der
   Platz dafuer stehen in einer eigenen Regel weiter unten und bleiben den Suchfeldern
   vorbehalten. */
.fx-cl-search .MuiOutlinedInput-notchedOutline,
.fx-shop-search .MuiOutlinedInput-notchedOutline,
.fx-supportform .MuiOutlinedInput-notchedOutline{ border:0 !important; }

.fx-cl-search .MuiInputBase-root,
.fx-shop-search .MuiInputBase-root,
.fx-supportform .MuiInputBase-root{
  background:#fff !important;
  border:1px solid #e6eaf0 !important;
  border-radius:12px !important;
  box-shadow:0 6px 18px rgba(20,40,80,.06) !important;
  transition:border-color .15s ease, box-shadow .15s ease !important;
}
.fx-cl-search .MuiInputBase-root:hover,
.fx-shop-search .MuiInputBase-root:hover,
.fx-supportform .MuiInputBase-root:hover{ border-color:#cfd8e3 !important; }
.fx-cl-search .MuiInputBase-root.Mui-focused,
.fx-shop-search .MuiInputBase-root.Mui-focused,
.fx-supportform .MuiInputBase-root.Mui-focused{
  border-color:#003eab !important;
  box-shadow:0 0 0 3px rgba(0,169,235,.15) !important;
}
/* Lupe links im Feld + Platz dafuer. Bewusst "input" statt
   input[type=search]: Je nach Block-Konfiguration kann es auch ein
   normales Textfeld sein, dann gaebe es sonst keine Lupe. */
.fx-cl-search input,
.fx-shop-search input{
  padding:12px 14px 12px 44px !important;
  font-size:14px !important;
  color:var(--fx-black) !important;
  background-color:transparent !important;
  background-repeat:no-repeat !important;
  background-position:left 15px center !important;
  background-size:18px 18px !important;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='M20 20l-3.6-3.6'/%3E%3C/svg%3E") !important;
}
/* Loeschen-Kreuz (nur bei type=search vorhanden) sichtbar und im Portal-Grau */
.fx-cl-search input::-webkit-search-cancel-button,
.fx-shop-search input::-webkit-search-cancel-button{
  -webkit-appearance:none; appearance:none;
  width:16px; height:16px; margin-left:8px; cursor:pointer; opacity:.45;
  background:center/contain no-repeat url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2.4' stroke-linecap='round'%3E%3Cpath d='M6 6l12 12M18 6L6 18'/%3E%3C/svg%3E");
}
.fx-cl-search input::-webkit-search-cancel-button:hover,
.fx-shop-search input::-webkit-search-cancel-button:hover{ opacity:.9; }
/* Abstand zum Kachelraster darunter */
.fx-shop-search{ margin:0 0 20px !important; }


/* =====================================================================
   51  SHOP: eigener Leer-Zustand ohne Treffer
   Nativ steht dort "Keine Eintraege fuer diese Auswahl." in einem
   gestrichelten Kasten - klingt nach Konfigurationsfehler statt nach
   "nichts gefunden".
   ANKER: .fx-shop-empty wird von shopEmpty() im globalen JS gesetzt.
   NICHT an css-1bdg1t3 / css-bxmwoh haengen - das sind von Emotion zur
   Laufzeit erzeugte Klassennamen, die bei jedem MUI-Update anders
   heissen (s. Befund 1 der Frontend-Analyse, vgl. css-at1f2b).
   Den Originaltext blenden wir per font-size:0 aus und schreiben ueber
   ::before/::after unseren eigenen - dieselbe Technik wie bei
   "Dokumentation" -> "Online-Doku" in der System-Kachel.
   Der Hinweis auf den kuerzeren Begriff ist kein Fuellsel: Steht im
   Datensatz "FASTedge SFT 15" und jemand tippt "SFT15", findet die
   Suche nichts, obwohl es das Produkt gibt.
   ===================================================================== */
.fx-shop-empty{
  border:0 !important;
  background:transparent !important;
  padding:0 !important;
  min-height:0 !important;
}
.fx-shop-empty > p{
  font-size:0 !important;
  line-height:0 !important;
  color:transparent !important;
  text-align:center !important;
  margin:0 !important;
  padding:96px 20px 56px !important;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%239aa7b8' stroke-width='1.6' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='M20 20l-3.6-3.6'/%3E%3C/svg%3E") !important;
  background-repeat:no-repeat !important;
  background-position:center 44px !important;
  background-size:32px 32px !important;
}
.fx-shop-empty > p::before{
  content:"Keine Produkte gefunden.";
  display:block;
  font-size:17px; line-height:1.4; font-weight:600;
  color:var(--fx-black);
}
.fx-shop-empty > p::after{
  content:"Versuchen Sie einen kürzeren Begriff – zum Beispiel „FASTedge“ statt „FASTedge\00A0SFT\00A015“.";
  display:block; margin:8px auto 0; max-width:520px;
  font-size:14px; line-height:1.5; font-weight:400;
  color:#5b6b80;
}


/* =====================================================================
   52  SUPPORT-FORMULAR (Block support_form)
   Voraussetzung: Im Block steht unter "CSS-Klasse (optional)" fx-supportform.
   Die EINGABEFELDER kommen nicht von hier, sondern aus Sektion 50 - dieselbe
   Regel wie die Suchfelder in Changelog und Shop. Ein Eingabefeld sieht im
   Portal ueberall gleich aus; hier stehen nur Karte, Abstaende und Buttons.
   Angesprochen wird ueber die STABILEN MUI-Klassen (MuiPaper-root,
   MuiInputBase-root, MuiButton-contained ...), nie ueber die generierten
   css-<hash>-Namen - s. Befund 1 der Frontend-Analyse.
   ===================================================================== */
/* Zentriert auf der Seite */
.fx-supportform{
  max-width:720px !important;
  margin-left:auto !important;
  margin-right:auto !important;
}
/* Karte. Zwei Selektoren, weil wir von aussen nicht wissen, ob unsere Klasse auf einem
   Wrapper UM die Karte sitzt oder auf der Karte selbst - beides ist damit abgedeckt.
   Das :has() ist hier ungefaehrlich: Es haengt an unserer eigenen, genau einmal
   vergebenen Klasse und kann deshalb nicht wie in Sektion 39 auf mehrere Vorfahren
   durchschlagen. */
.fx-supportform .MuiPaper-root,
.fx-supportform:not(:has(.MuiPaper-root)){
  /* KEIN background hier (geaendert 2026-08-11): Vorher stand hier #fff !important,
     wodurch die Karte reinweiss war - waehrend native Karten wie "Meine Kontaktdaten"
     die leicht blau getoente Flaechenfarbe des Themes tragen. Ohne eigene Angabe nimmt
     die Karte automatisch dieselbe Farbe wie alle nativen Karten, auch nach kuenftigen
     Theme-Aenderungen. Nebeneffekt, der ein altes Problem loest: Die weissen
     Eingabefelder heben sich auf getoenter Flaeche wieder ab - auf Weiss waren sie
     kontrastarm. */
  border:1px solid #e6eaf0 !important;
  border-radius:14px !important;
  box-shadow:none !important;
  padding:28px !important;
  box-sizing:border-box !important;
}
/* Ueberschrift "Support kontaktieren" auf die Groesse der uebrigen Abschnittstitel */
.fx-supportform .MuiTypography-h5,
.fx-supportform .MuiTypography-h6{
  font-size:20px !important;
  font-weight:700 !important;
  color:var(--fx-black) !important;
  margin:0 0 20px !important;
}
/* Felder volle Breite, gleichmaessiger Abstand */
.fx-supportform .MuiFormControl-root{
  width:100% !important;
  margin:0 0 14px !important;
}
/* Hilfetexte ("Max. 5 Dateien ...") */
.fx-supportform .MuiFormHelperText-root,
.fx-supportform .MuiTypography-caption{
  font-size:13px !important;
  color:#5b6b80 !important;
  margin-left:0 !important;
}
/* Hauptaktion: Portal-Verlauf wie die uebrigen Haupt-Buttons */
.fx-supportform .MuiButton-contained{
  background:linear-gradient(90deg,#003eab,#00a9eb) !important;
  color:#fff !important;
  border:0 !important;
  border-radius:10px !important;
  padding:11px 22px !important;
  font-weight:700 !important;
  text-transform:none !important;
  letter-spacing:0 !important;
  box-shadow:none !important;
}
.fx-supportform .MuiButton-contained:hover{ filter:brightness(1.06) !important; }
/* Nebenaktion (Anhaenge): Rahmen statt Flaeche, damit die Hierarchie stimmt */
.fx-supportform .MuiButton-outlined,
.fx-supportform .MuiButton-text{
  background:#fff !important;
  border:1px solid #cfd8e3 !important;
  color:#003eab !important;
  border-radius:10px !important;
  font-weight:600 !important;
  text-transform:none !important;
  letter-spacing:0 !important;
  box-shadow:none !important;
}
.fx-supportform .MuiButton-outlined:hover,
.fx-supportform .MuiButton-text:hover{ border-color:#003eab !important; background:#f5f8fc !important; }

/* Icon und Ueberschrift auf eine Mittellinie.
   Zwei Anordnungen sind moeglich und wir kennen die Innereien des Blocks nicht: Das Icon
   steckt INNERHALB der Ueberschrift, oder es ist ein Geschwister davor in einem Stack.
   Beide Faelle sind abgedeckt. Die :has() haengen an unserer eigenen, genau einmal
   vergebenen Klasse und mit direktem Kind-Kombinator - sie koennen deshalb nicht wie in
   Sektion 39 auf mehrere Vorfahren durchschlagen. */
.fx-supportform .MuiTypography-h5,
.fx-supportform .MuiTypography-h6,
.fx-supportform .MuiStack-root:has(> .MuiTypography-h5),
.fx-supportform .MuiStack-root:has(> .MuiTypography-h6){
  display:flex !important;
  align-items:center !important;
  gap:10px !important;
}
/* Bildet der Stack die Zeile, darf die Ueberschrift darin keinen eigenen Abstand mehr haben */
.fx-supportform .MuiStack-root > .MuiTypography-h5,
.fx-supportform .MuiStack-root > .MuiTypography-h6{
  margin:0 !important;
}
/* Nur das Icon der Ueberschrift ansprechen - NICHT die Icons in den Buttons
   (Bueroklammer, Papierflieger), sonst wachsen die mit. */
.fx-supportform .MuiTypography-h5 > svg,
.fx-supportform .MuiTypography-h6 > svg,
.fx-supportform .MuiStack-root:has(> .MuiTypography-h5) > svg,
.fx-supportform .MuiStack-root:has(> .MuiTypography-h6) > svg{
  flex:0 0 auto !important;
  width:22px !important;
  height:22px !important;
  font-size:22px !important;
  display:block !important;
  margin:0 !important;
}


/* =====================================================================
   53  FOOTER: durchgehendes Schwarz ueber die volle Breite
   Die Hintergrundfarbe im Footer-Designer reicht NICHT aus. Sie sitzt am
   Stack mit der Klasse fx-footer, und der steckt zwei Ebenen tief:
       FOOTER            <- voll breit, hatte rgb(15,25,35) aus dem Theme
         > DIV           <- Container mit begrenzter Breite
           > DIV.fx-footer
   Selbst mit Breite FILL kann der Stack nur so breit werden wie sein
   Elternelement -> schwarzer Block in der Mitte, aussen blieben Streifen
   im alten Dunkelblau stehen. An das aeussere footer-Element kommt der
   Designer nicht heran, deshalb hier.
   Zweiter Selektor als Absicherung, falls das Element auf einer Seite
   kein <footer>-Tag ist: dieselbe feste Kette wie in Sektion 8. Beide
   :has() haben eine FESTE Tiefe bzw. ein einmaliges Ziel und koennen
   deshalb nicht wie in Sektion 39 auf mehrere Vorfahren durchschlagen.
   ===================================================================== */
footer:has(.fx-footer),
.MuiBox-root:has(> .MuiBox-root > .fx-footer){
  background:#000 !important;
}


/* =====================================================================
   54  USE-CASE-SCREENSHOTS: Lupe als Mauszeiger
   Signalisiert, dass der Screenshot anklickbar ist. Das Panel selbst
   baut das JS (ucZoom) - gleiche Optik wie der Bild-Zoom in Doku und
   Changelog, aber ohne Kopplung an den Doku-Viewer.
   ===================================================================== */
.fx-uc-slider img{ cursor:zoom-in !important; }


/* =====================================================================
   59  LOGIN-SEITE: Themen-Teaser links neben der Anmeldekarte (2026-08-11)
   ZWEITER, BESSERER ANLAUF - der erste (JS setzt Klassen von Hand) ist
   entfallen. portal_login ist ein NATIVES Feld-Block (wie support_form),
   und hat ein eigenes Feld "CSS-Klasse (optional)" - dort wurde
   "fx-loginpage" eingetragen. Der Teaser ist ein ganz normaler EIGENER
   BLOCK direkt danach in der Seitenstruktur, sein JSON traegt
   "css_class":"fx-login-teaser" am Wurzelelement. Kein JS mehr noetig.

   GEMESSEN (2026-08-11): .fx-loginpage liegt DREI Ebenen unter dem
   gemeinsamen Container:
       Container (genau 2 Kinder)
        |- DIV -> DIV -> DIV.fx-loginpage
        |- Wrapper des Teaser-Blocks
   Der erste Anlauf mit ":has(> .fx-loginpage)" traf deshalb NICHTS - der
   direkte-Kind-Pfeil verlangt genau eine Ebene. Richtig ist die feste
   Tiefe ":has(> * > * > .fx-loginpage)".
   Der Container traegt selbst nur eine generierte css-<hash>-Klasse und
   wird deshalb ueber die Beziehung zu UNSERER Klasse angesprochen. Die
   feste Tiefe macht das eindeutig: Nur genau ein Element im Dokument hat
   .fx-loginpage exakt drei Ebenen unter sich - kein Durchschlagen auf
   weitere Vorfahren wie in Sektion 39.
   Die beiden Kinder werden ueber ":has(.fx-loginpage)" bzw. dessen
   Verneinung unterschieden, statt ueber ihre Hash-Klassen.

   Die Karte selbst bleibt UNVERAENDERT bis auf den Button-Verlauf -
   Rahmen/Radius/Abstaende/Ueberschrift sind bewusst nicht angefasst.
   ===================================================================== */
/* BUENDIG ZUM ZERTIFIZIERUNGS-BAND (2026-08-11):
   Gemessen bei 1240px Fensterbreite - Login-Bereich 95..1145, Zert-Logos
   104..1136. Fast gleich, aber NICHT mitwachsend: Unser Bereich war auf
   1050px gedeckelt und zentriert, die Logos wachsen mit dem Fenster.
   Bei breiten Fenstern lief das deshalb sichtbar auseinander.
   Beide sitzen im SELBEN Eltern-Container (bei 1240px je 1176px breit).
   Das Zert-Band setzt seinen Inhalt ueber padding:40px 72px ein - dieselben
   72px hier, dafuer max-width raus. Damit decken sich beide bei JEDER
   Fensterbreite, ohne dass irgendwo eine Zahl gepflegt werden muss. */
:has(> * > * > .fx-loginpage){
  display:flex !important;
  align-items:flex-start !important;
  justify-content:center !important;
  flex-wrap:wrap !important;
  gap:64px !important;
  max-width:none !important;
  margin:0 !important;
  padding:0 72px !important;
  box-sizing:border-box !important;
}
/* Reihenfolge im Quelltext ist Login-Block, dann Teaser-Block - per order
   getauscht, damit der Teaser optisch links steht. */
:has(> * > * > .fx-loginpage) > *:has(.fx-loginpage){
  order:2 !important;
  flex:0 0 420px !important;
  max-width:420px !important;
}
:has(> * > * > .fx-loginpage) > *:not(:has(.fx-loginpage)){
  order:1 !important;
  flex:1 1 320px !important;
  min-width:0 !important;
}

.fx-login-teaser{ width:100% !important; }
/* KEINE eigene Ueberschriften-Optik mehr (geaendert 2026-08-11):
   Der Teaser benutzt jetzt die vorhandenen Seiten-Kopf-Klassen, damit er
   aussieht wie jede andere Seite im Portal (Use Cases, Shop):
     fx-h1          -> Verlaufs-Ueberschrift 30px (Sektion 1)
     fx-hero__lead  -> fette Subline 16px      (Sektion 9)
     fx-hero__desc  -> Fliesstext 14px         (Sektion 9)
   Vorher stand hier eine handgemachte 40px-Ueberschrift mit einem blau
   hervorgehobenen Wort - das war eine Sonderloesung fuer genau eine Seite
   und wich vom Rest des Portals ab.

   KEINE Breitenbegrenzung (Versuch am 2026-08-11 zurueckgenommen): Ein
   "max-width:11ch" an der Ueberschrift sollte den Umbruch steuern, hat sie
   aber in vier Zeilen zerlegt und zusammen mit width:fit-content aus
   Sektion 1 sogar das letzte Zeichen abgeschnitten. Ohne Deckel bricht sie
   an der Spaltenbreite um - das reicht und braucht keine Pflege.
   Einzige Ergaenzung ist der Zeilenabstand: MUI liefert fuer Fliesstext
   rund 1,6, was bei einer 30px-Ueberschrift viel zu luftig wirkt. */
.fx-login-teaser .fx-h1{ line-height:1.25 !important; margin-bottom:14px !important; }
/* align-items:start + align-self:start: Ohne beides werden die vier Kacheln
   auf die Hoehe der jeweils hoechsten Zeile gestreckt und ihr Inhalt sitzt
   dann nicht mehr oben - sichtbar daran, dass "Support" tiefer hing als
   "Wissen". justify-content am Kind, weil der Stapel aus dem Block selbst
   ein Flex-Container ist und seinen Inhalt sonst verteilt. */
.fx-login-topics{
  display:grid !important;
  grid-template-columns:1fr 1fr !important;
  gap:24px 34px !important;
  align-items:start !important;
}
.fx-login-topics > *{
  align-self:start !important;
  justify-content:flex-start !important;
}
.fx-login-topic-title{
  margin:0 0 6px !important;
  font-size:19px !important;
  font-weight:700 !important;
  line-height:1.3 !important;
  color:var(--fx-black) !important;
}
.fx-login-topic-desc{
  margin:0 !important;
  font-size:13.5px !important;
  line-height:1.55 !important;
  color:#5b6b80 !important;
}

/* Button im Portal-Verlauf, wie ueberall sonst - einzige Aenderung an der Karte selbst.
   :not(.Mui-disabled), sonst wirkt ein gesperrter Button (waehrend des Absendens) trotz
   Sperrung weiter anklickbar. */
.fx-loginpage .MuiButton-contained:not(.Mui-disabled){
  background:linear-gradient(90deg,#003eab,#00a9eb) !important;
  color:#fff !important;
  box-shadow:none !important;
}
.fx-loginpage .MuiButton-contained:not(.Mui-disabled):hover{
  filter:brightness(1.06) !important;
}

@media (max-width:900px){
  :has(> * > * > .fx-loginpage){ flex-direction:column !important; gap:40px !important; padding:0 24px !important; }
  :has(> * > * > .fx-loginpage) > *:has(.fx-loginpage){ order:1 !important; flex:0 0 auto !important; }
  :has(> * > * > .fx-loginpage) > *:not(:has(.fx-loginpage)){ order:2 !important; }
  .fx-login-teaser .fx-h1{ max-width:none !important; }
  .fx-login-topics{ grid-template-columns:1fr !important; }
}


/* =====================================================================
   55  SCHATTEN FUER DEN WEISSEN SEITENHINTERGRUND (2026-08-11)
   Seit der Hintergrund im Theme auf #FFFFFF steht, verschwinden die
   weissen Karten fast vollstaendig - der bisherige Schatten
   (0 6px 18px rgba(20,40,80,.08)) war auf blaugrauem Grund gerade
   richtig und traegt auf Weiss nicht mehr.
   EIN Wert fuer alle Kacheln, hier als Variable. Wer die Tiefe aendern
   will, aendert --fx-shadow und sonst nichts.
   Zwei Ebenen statt einer: eine harte, kurze fuer die Kante direkt unter
   der Karte, eine weiche, weite fuer die Tiefe. Ein einzelner Schatten
   wirkt bei gleicher Staerke entweder schmutzig oder flach.
   Setzt zwei fruehere Entscheidungen bewusst zurueck, weil sich die
   Voraussetzung geaendert hat: .fx-shopd__reco-card und die Karte des
   Support-Formulars standen auf box-shadow:none. Auf blaugrauem Grund
   war das richtig, auf Weiss braeuchten sie sonst als einzige keinen
   Schatten - das faellt auf.
   ===================================================================== */
:root{
  --fx-shadow:      0 1px 3px rgba(16,32,64,.07), 0 12px 30px rgba(16,32,64,.15);
  --fx-shadow-soft: 0 1px 2px rgba(16,32,64,.05), 0 6px 16px rgba(16,32,64,.10);
}
.fx-card,
.fx-tile,
.fx-cl-card,
.fx-ticketcard,
.fx-shopd__reco-card,
.fx-supportform .MuiPaper-root{
  box-shadow:var(--fx-shadow) !important;
}
/* Die Login-Karte steht bewusst NICHT hier, sondern in Sektion 59: .fx-loginpage ist
   ein aeusserer Container, der Schatten landete dort um einen Kasten HERUM, in dem die
   sichtbare Karte nochmal steckte (Kasten im Kasten). Sie braucht denselben Schatten,
   aber einen anderen Selektor. */
/* Eingabefelder eine Stufe zurueckhaltender: Sie sollen sich abheben,
   aber nicht mit den Karten um Aufmerksamkeit streiten. Der Fokus-Ring
   aus Sektion 50 gewinnt weiterhin, weil .Mui-focused spezifischer ist. */
.fx-cl-search .MuiInputBase-root,
.fx-shop-search .MuiInputBase-root,
.fx-supportform .MuiInputBase-root{
  box-shadow:var(--fx-shadow-soft) !important;
}

/* =====================================================================
   56  HEADER-KANTE (2026-08-11)
   Gleiche Ursache wie Sektion 55: Weisser Header auf weisser Seite hat
   keine Kante mehr. Im Mockup faellt der Schatten unter der Leiste
   weich ab.
   Bewusst FLACHER und WEITER als der Kartenschatten. Eine durchgehende
   Leiste ueber die volle Breite mit demselben Wert wie eine Karte wirkt
   wie eine schwebende Platte - hier geht es nur um die Abgrenzung nach
   unten, nicht um Tiefe.
   ZIEL-ELEMENT: derselbe Grosselternknoten wie in SEKTION 36, die den
   Header fixiert. Der Schatten gehoert an die Unterkante dessen, was
   beim Scrollen stehen bleibt.
   ⚠️ HIER NUR box-shadow SETZEN, SONST NICHTS. Erste Fassung hatte
   zusaetzlich position:relative und z-index:10 - beides hat die Regeln
   aus Sektion 36 ueberschrieben (position:sticky, z-index:1000) und den
   Header damit entfixiert. Beides war ueberfluessig: Ein sticky Element
   ist bereits positioniert, z-index wirkt dort also ohnehin, und 1000
   liegt richtig unter den Lightbox-Overlays und ueber dem Inhalt.
   LEHRE: Vor einer neuen Regel pruefen, ob derselbe Selektor weiter oben
   schon existiert - hier stand er wortgleich in Sektion 36.
   ===================================================================== */
:root{
  --fx-shadow-bar: 0 1px 2px rgba(16,32,64,.05), 0 6px 16px rgba(16,32,64,.09);
}
.MuiBox-root:has(> .MuiBox-root > .fx-header){
  box-shadow:var(--fx-shadow-bar) !important;
}


/* =====================================================================
   57  FORMULARE AUS EINEM GUSS: Support + Mein Konto + Login (2026-08-11)
   Die beiden Formulare sahen unterschiedlich aus, obwohl sie dasselbe tun.

   URSACHE DER SCHIEFEN BESCHRIFTUNG: Ein MUI-Outlined-Feld traegt seinen
   Rahmen NICHT am Container, sondern an einem fieldset
   (.MuiOutlinedInput-notchedOutline), das fuer die Beschriftung eine
   Kerbe freischneidet. Sektion 50 schaltet dieses fieldset ab und legt
   den Rahmen auf den Container - fuer die SUCHFELDER richtig, die haben
   keine Beschriftung. Im Formular schwebt die Beschriftung dadurch ohne
   Luecke ueber der Linie.
   LOESUNG: Rahmen zurueck ans fieldset, aber in unseren Farben und
   Rundungen. Die Beschriftung sitzt dann von selbst in der Kerbe -
   genau wie bei "Mein Konto" - und beide Formulare tragen dieselbe
   Optik. Die Suchfelder bleiben unberuehrt bei Sektion 50.

   Diese Sektion steht spaeter und gewinnt daher gegen 50 und 55.
   ===================================================================== */
/* .fx-loginpage ist ab 2026-08-11 mit dabei: Die Login-Felder waren die letzten im
   Portal ohne die gemeinsame Feldoptik und sahen deshalb anders aus als jedes andere
   Eingabefeld. Bewusst NUR bei den FELD-Regeln - der Anmelden-Button hat in Sektion 59
   eine eigene, schlankere Fassung und darf hier nicht mitgezogen werden. */
/* Container: weisse Flaeche, Rundung, weicher Schatten - aber KEIN eigener
   Rahmen mehr, sonst laege er doppelt ueber dem des fieldsets. */
.fx-supportform .MuiInputBase-root,
.fx-mycontact .MuiInputBase-root,
.fx-loginpage .MuiInputBase-root{
  background:#fff !important;
  border:0 !important;
  border-radius:12px !important;
  box-shadow:var(--fx-shadow-soft) !important;
  transition:box-shadow .15s ease !important;
}
/* Der eigentliche Rahmen - mit Kerbe fuer die Beschriftung */
.fx-supportform .MuiOutlinedInput-notchedOutline,
.fx-mycontact .MuiOutlinedInput-notchedOutline,
.fx-loginpage .MuiOutlinedInput-notchedOutline{
  border:1px solid #e6eaf0 !important;
  border-radius:12px !important;
}
.fx-supportform .MuiInputBase-root:hover .MuiOutlinedInput-notchedOutline,
.fx-mycontact .MuiInputBase-root:hover .MuiOutlinedInput-notchedOutline,
.fx-loginpage .MuiInputBase-root:hover .MuiOutlinedInput-notchedOutline{
  border-color:#cfd8e3 !important;
}
/* Fokus: Rahmen portalblau, dazu der bekannte hellblaue Ring.
   border-width bewusst auf 1px - MUI setzt im Fokus sonst 2px, wodurch das
   Feld minimal springt. */
.fx-supportform .MuiInputBase-root.Mui-focused .MuiOutlinedInput-notchedOutline,
.fx-mycontact .MuiInputBase-root.Mui-focused .MuiOutlinedInput-notchedOutline,
.fx-loginpage .MuiInputBase-root.Mui-focused .MuiOutlinedInput-notchedOutline{
  border-color:#003eab !important;
  border-width:1px !important;
}
.fx-supportform .MuiInputBase-root.Mui-focused,
.fx-mycontact .MuiInputBase-root.Mui-focused,
.fx-loginpage .MuiInputBase-root.Mui-focused{
  box-shadow:0 0 0 3px rgba(0,169,235,.15) !important;
}

/* ----- Buttons: gleiche Groesse, gleicher Stil in beiden Formularen ----- */
.fx-supportform .MuiButton-contained,
.fx-mycontact .MuiButton-contained{
  background:linear-gradient(90deg,#003eab,#00a9eb) !important;
  color:#fff !important;
  border:0 !important;
  border-radius:10px !important;
  padding:11px 22px !important;
  font-weight:700 !important;
  font-size:15px !important;
  text-transform:none !important;
  letter-spacing:0 !important;
  box-shadow:none !important;
}
.fx-supportform .MuiButton-contained:hover,
.fx-mycontact .MuiButton-contained:hover{ filter:brightness(1.06) !important; }
/* Nebenaktionen nur in der SCHREIBWEISE angleichen, nicht in der Form.
   "Abbrechen" und "Passwort aendern" sind bewusst schlichte Textknoepfe -
   bekaemen sie den Rahmen des Anhang-Knopfes, wuerde die Hierarchie im
   Konto-Formular kippen (drei gleich starke Schaltflaechen nebeneinander). */
.fx-mycontact .MuiButton-text,
.fx-mycontact .MuiButton-outlined{
  text-transform:none !important;
  letter-spacing:0 !important;
  font-weight:600 !important;
  font-size:15px !important;
}
/* =====================================================================
   58  BESCHRIFTUNGEN FEST UEBER DIE FELDER (2026-08-11)
   MUI benutzt eine SCHWEBENDE Beschriftung: Ist das Feld leer, steht sie
   IM Feld; sobald Inhalt drin ist, springt sie hoch auf den Rahmen und
   schneidet dort eine Kerbe frei. Gemessen im Support-Formular: Alle drei
   Felder haben eine Beschriftung, keines einen Hintergrundtext - "Betreff"
   und "Support-Nummer" waren leer (Beschriftung innen), "E-Mail" gefuellt
   (Beschriftung oben auf dem Rahmen). Daher sah genau dieses eine Feld
   anders aus als seine Nachbarn.
   Die Kerbe selbst funktionierte korrekt (legend 166px breit) - es war nie
   ein Fehler, sondern zwei Zustaende desselben Musters.
   ENTSCHIEDEN: Beschriftung IMMER oben, unabhaengig vom Fuellstand. Damit
   sehen alle Felder gleich aus und nichts springt beim Tippen.
   Die Alternative "als Hintergrundtext" scheidet aus: Sie verschwindet,
   sobald jemand etwas eintraegt - bei "Ihre E-Mail (fuer Rueckantwort)"
   waere danach nicht mehr erkennbar, wofuer die Adresse gedacht ist.
   Die Kerbe wird geschlossen, damit die Rahmenlinie durchgehend ist.
   ===================================================================== */
/* .fx-loginpage ab 2026-08-11 mit dabei - "E-Mail" und "Passwort" schwebten dort als
   letzte im Portal noch auf der Rahmenlinie. */
.fx-supportform .MuiFormControl-root,
.fx-mycontact .MuiFormControl-root,
.fx-loginpage .MuiFormControl-root{
  padding-top:20px !important;          /* Platz fuer die Beschriftung darueber */
}
.fx-supportform .MuiInputLabel-root,
.fx-mycontact .MuiInputLabel-root,
.fx-loginpage .MuiInputLabel-root{
  position:absolute !important;
  top:0 !important;
  left:2px !important;
  transform:none !important;            /* schaltet das Hoch- und Runterspringen ab */
  transform-origin:top left !important;
  max-width:100% !important;
  font-size:13px !important;
  line-height:18px !important;
  font-weight:600 !important;
  color:#5b6b80 !important;
  background:none !important;
  pointer-events:auto !important;       /* Klick auf die Beschriftung fokussiert weiterhin das Feld */
  cursor:default !important;
}
/* Kerbe schliessen - die Beschriftung sitzt jetzt ausserhalb des Rahmens */
.fx-supportform .MuiOutlinedInput-notchedOutline legend,
.fx-mycontact .MuiOutlinedInput-notchedOutline legend,
.fx-loginpage .MuiOutlinedInput-notchedOutline legend{
  max-width:0.01px !important;
  width:0 !important;
}
/* Abstand zwischen Anhang-Bereich und Senden-Button */
.fx-supportform .MuiButton-contained{ margin-top:6px !important; }
/* =====================================================================
   59  LOGIN-SEITE: Themen-Teaser links neben der Anmeldekarte (2026-08-11)
   ZWEITER, BESSERER ANLAUF - der erste (JS setzt Klassen von Hand) ist
   entfallen. portal_login ist ein NATIVES Feld-Block (wie support_form),
   und hat ein eigenes Feld "CSS-Klasse (optional)" - dort wurde
   "fx-loginpage" eingetragen. Der Teaser ist ein ganz normaler EIGENER
   BLOCK direkt danach in der Seitenstruktur, sein JSON traegt
   "css_class":"fx-login-teaser" am Wurzelelement. Kein JS mehr noetig.

   GEMESSEN (2026-08-11): .fx-loginpage liegt DREI Ebenen unter dem
   gemeinsamen Container:
       Container (genau 2 Kinder)
        |- DIV -> DIV -> DIV.fx-loginpage
        |- Wrapper des Teaser-Blocks
   Der erste Anlauf mit ":has(> .fx-loginpage)" traf deshalb NICHTS - der
   direkte-Kind-Pfeil verlangt genau eine Ebene. Richtig ist die feste
   Tiefe ":has(> * > * > .fx-loginpage)".
   Der Container traegt selbst nur eine generierte css-<hash>-Klasse und
   wird deshalb ueber die Beziehung zu UNSERER Klasse angesprochen. Die
   feste Tiefe macht das eindeutig: Nur genau ein Element im Dokument hat
   .fx-loginpage exakt drei Ebenen unter sich - kein Durchschlagen auf
   weitere Vorfahren wie in Sektion 39.
   Die beiden Kinder werden ueber ":has(.fx-loginpage)" bzw. dessen
   Verneinung unterschieden, statt ueber ihre Hash-Klassen.

   Die Karte selbst bleibt bis auf Button, Ueberschrift und Schatten
   unveraendert; die EINGABEFELDER kommen aus Sektion 57/58 (dort steht
   .fx-loginpage seit 2026-08-11 in den Selektorlisten).
   ===================================================================== */
/* BUENDIG ZUM ZERTIFIZIERUNGS-BAND (2026-08-11):
   Gemessen bei 1240px Fensterbreite - Login-Bereich 95..1145, Zert-Logos
   104..1136. Fast gleich, aber NICHT mitwachsend: Unser Bereich war auf
   1050px gedeckelt und zentriert, die Logos wachsen mit dem Fenster.
   Bei breiten Fenstern lief das deshalb sichtbar auseinander.
   Beide sitzen im SELBEN Eltern-Container (bei 1240px je 1176px breit).
   Das Zert-Band setzt seinen Inhalt ueber padding:40px 72px ein - dieselben
   72px hier, dafuer max-width raus. Damit decken sich beide bei JEDER
   Fensterbreite, ohne dass irgendwo eine Zahl gepflegt werden muss. */
:has(> * > * > .fx-loginpage){
  display:flex !important;
  /* center statt flex-start (2026-08-11): Die Karte ist deutlich kuerzer als die
     Textspalte und sass deshalb oben, was unausgewogen wirkte. Jetzt liegt ihre
     Mitte auf der Mitte des Teasers.
     In der Mobil-Ansicht wird das unten wieder auf stretch gesetzt - dort stapeln
     beide untereinander, und center wuerde sie auf Inhaltsbreite zusammenziehen
     statt sie die volle Breite nutzen zu lassen. */
  align-items:center !important;
  justify-content:center !important;
  flex-wrap:wrap !important;
  gap:64px !important;
  max-width:none !important;
  margin:0 !important;
  padding:0 72px !important;
  box-sizing:border-box !important;
}
/* Reihenfolge im Quelltext ist Login-Block, dann Teaser-Block - per order
   getauscht, damit der Teaser optisch links steht. */
:has(> * > * > .fx-loginpage) > *:has(.fx-loginpage){
  order:2 !important;
  flex:0 0 420px !important;
  max-width:420px !important;
}
:has(> * > * > .fx-loginpage) > *:not(:has(.fx-loginpage)){
  order:1 !important;
  flex:1 1 320px !important;
  min-width:0 !important;
}

.fx-login-teaser{ width:100% !important; }
/* KEINE eigene Ueberschriften-Optik mehr (geaendert 2026-08-11):
   Der Teaser benutzt jetzt die vorhandenen Seiten-Kopf-Klassen, damit er
   aussieht wie jede andere Seite im Portal (Use Cases, Shop):
     fx-h1          -> Verlaufs-Ueberschrift 30px (Sektion 1)
     fx-hero__lead  -> fette Subline 16px      (Sektion 9)
     fx-hero__desc  -> Fliesstext 14px         (Sektion 9)
   Vorher stand hier eine handgemachte 40px-Ueberschrift mit einem blau
   hervorgehobenen Wort - das war eine Sonderloesung fuer genau eine Seite
   und wich vom Rest des Portals ab.

   KEINE Breitenbegrenzung (Versuch am 2026-08-11 zurueckgenommen): Ein
   "max-width:11ch" an der Ueberschrift sollte den Umbruch steuern, hat sie
   aber in vier Zeilen zerlegt und zusammen mit width:fit-content aus
   Sektion 1 sogar das letzte Zeichen abgeschnitten. Ohne Deckel bricht sie
   an der Spaltenbreite um - das reicht und braucht keine Pflege.
   Einzige Ergaenzung ist der Zeilenabstand: MUI liefert fuer Fliesstext
   rund 1,6, was bei einer 30px-Ueberschrift viel zu luftig wirkt. */
.fx-login-teaser .fx-h1{ line-height:1.25 !important; margin-bottom:14px !important; }
/* ⚠ margin-top:0 an den Kindern ist die WICHTIGSTE Zeile hier (gemessen 2026-08-11).
   MUI setzt den Abstand in einem Stapel NICHT ueber gap, sondern ueber einen oberen
   Aussenabstand an allen Kindern AUSSER dem ersten. Senkrecht untereinander ergibt das
   gleichmaessige Abstaende - im zweispaltigen Raster kippt die Rechnung:
       Kind 1 "Wissen"          margin-top 0     -> top 344
       Kind 2 "Support"         margin-top 24px  -> top 368   (24px zu tief)
       Kind 3 + 4               margin-top 24px  -> beide 509 (deshalb Zeile 2 korrekt)
   "Support" hing also nicht wegen falscher Ausrichtung tiefer, sondern wegen eines
   Aussenabstands. align-items/align-self waren dagegen wirkungslos - sie bleiben nur als
   Absicherung stehen, falls der Block spaeter streckt.
   Der Zeilenabstand kommt jetzt allein aus dem gap des Rasters. */
.fx-login-topics{
  display:grid !important;
  grid-template-columns:1fr 1fr !important;
  gap:24px 34px !important;
  align-items:start !important;
}
.fx-login-topics > *{
  margin-top:0 !important;
  align-self:start !important;
  justify-content:flex-start !important;
}
.fx-login-topic-title{
  margin:0 0 6px !important;
  font-size:19px !important;
  font-weight:700 !important;
  line-height:1.3 !important;
  color:var(--fx-black) !important;
}
.fx-login-topic-desc{
  margin:0 !important;
  font-size:13.5px !important;
  line-height:1.55 !important;
  color:#5b6b80 !important;
}

/* ANMELDEBEREICH FOKUSSIEREN (2026-08-11, Rueckmeldung "geht unter").
   Ursache war eine Luecke, keine Gestaltungsfrage: Sektion 55 hat allen Karten den
   kraeftigeren Schatten fuer den weissen Hintergrund gegeben - die Login-Karte stand als
   einzige nicht in der Liste und trug noch die schwache MUI-Vorgabe, waehrend links
   daneben eine grosse Verlaufs-Ueberschrift steht.

   ⚠ ZWEI FEHLVERSUCHE, BEIDE MIT DERSELBEN URSACHE:
   1. Akzentleiste (::before, 4px Verlauf) an .fx-loginpage -> stand losgeloest ueber der
      Karte und wirkte wie ein Programmierfehler.
   2. Schatten an .fx-loginpage (in Sektion 55) -> ergab einen Kasten IM Kasten: der
      Schatten lag um einen aeusseren Container, in dem die sichtbare Karte nochmal steckte.
   .fx-loginpage ist also NICHT deckungsgleich mit dem, was man als weisse Karte sieht.
   Die Klasse sitzt am Block, das Papier darin zeichnet die Karte.

   LOESUNG: derselbe Doppelselektor wie beim Support-Formular. Gibt es innen ein Papier,
   bekommt DAS den Schatten; gibt es keins, faellt es auf das Element selbst zurueck.
   Damit landet der Schatten in beiden Faellen auf dem sichtbaren Kasten. */
.fx-loginpage .MuiPaper-root,
.fx-loginpage:not(:has(.MuiPaper-root)){
  box-shadow:var(--fx-shadow) !important;
}
/* Ueberschrift "Anmelden" auf dieselbe Groesse wie die uebrigen Karten-/Abschnittstitel
   im Portal (20px/700, z.B. "Support kontaktieren"). Sie war kaum groesser als der
   Fliesstext daneben, wodurch die Karte keine eigene Hierarchie hatte. Das ist der
   schonendste Hebel fuer mehr Eigenstaendigkeit - er zeichnet nichts Zusaetzliches,
   anders als die verworfene Akzentleiste. */
.fx-loginpage .MuiTypography-h4,
.fx-loginpage .MuiTypography-h5,
.fx-loginpage .MuiTypography-h6{
  font-size:20px !important;
  font-weight:700 !important;
  color:var(--fx-black) !important;
  margin:0 0 4px !important;
}
/* "Passwort vergessen?" stand als einziger Link im Portal noch in Versalien und war
   dadurch lauter als noetig - direkt unter dem Hauptbutton, mit dem er konkurrierte. */
.fx-loginpage .MuiButton-text,
.fx-loginpage .MuiLink-root,
.fx-loginpage .MuiLink-button{
  text-transform:none !important;
  letter-spacing:0 !important;
}
/* FORM (2026-08-11): Der Anmelden-Button war der einzige Hauptbutton im Portal, der noch
   MUIs Versalien trug - Support-Formular und Mein Konto sind laengst angeglichen
   (Sektion 57). Deshalb hier normale Schreibweise und dieselbe Rundung.
   ⚠ KEINE eigene HOEHE: Ein Versuch mit padding:15px + font-size:16px sollte ihn
   prominenter machen, geriet aber viel zu wuchtig - die Karte wirkte danach wie ein
   Formular mit einem Knopf statt umgekehrt. Hoehe kommt jetzt wieder von MUI selbst.
   Wer ihn doch etwas staerker haben will, dreht an font-size (15 -> 16), NICHT am
   padding - die Schrift waechst kaum sichtbar in die Hoehe, das padding sofort.
   Bewusst OHNE :not(.Mui-disabled) - Rundung und Schreibweise sollen auch im gesperrten
   Zustand gelten, sonst springt die Karte in dem Moment, in dem das Formular vollstaendig
   ausgefuellt ist. Nur der Verlauf haengt am aktiven Zustand. */
.fx-loginpage .MuiButton-contained{
  font-weight:700 !important;
  border-radius:10px !important;
  text-transform:none !important;
  letter-spacing:0 !important;
}
/* Verlauf nur im aktiven Zustand - sonst wirkt ein gesperrter Button trotz Sperrung
   weiter anklickbar. */
.fx-loginpage .MuiButton-contained:not(.Mui-disabled){
  background:linear-gradient(90deg,#003eab,#00a9eb) !important;
  color:#fff !important;
  box-shadow:none !important;
}
.fx-loginpage .MuiButton-contained:not(.Mui-disabled):hover{
  filter:brightness(1.06) !important;
}

@media (max-width:900px){
  :has(> * > * > .fx-loginpage){ flex-direction:column !important; align-items:stretch !important; gap:40px !important; padding:0 24px !important; }
  :has(> * > * > .fx-loginpage) > *:has(.fx-loginpage){ order:1 !important; flex:0 0 auto !important; }
  :has(> * > * > .fx-loginpage) > *:not(:has(.fx-loginpage)){ order:2 !important; }
  .fx-login-teaser .fx-h1{ max-width:none !important; }
  .fx-login-topics{ grid-template-columns:1fr !important; }
}
/* =====================================================================
   60  MEIN-SYSTEM-TITEL: erst zeigen, wenn er stimmt (2026-08-13)
   GEMESSEN (Flacker-Aufnahme Startseite):
     1465 ms  Kachel erscheint mit "FASTEC 4 PRO 3.4.9 ..."
     1569 ms  unser JS kuerzt auf "Version 3.4.9"
   104 ms lang stand der ungekuerzte Titel sichtbar da. Das JS setzt jetzt nach dem
   Kuerzen die Klasse fx-titleok; bis dahin bleibt der Titel unsichtbar.

   visibility statt display: Die Hoehe bleibt reserviert, es springt nichts.

   ⚠ SICHERHEITSNETZ: Sollte unser JS gar nicht laufen (Fehler, blockiert), waere der
   Titel sonst DAUERHAFT weg. Deshalb blendet eine Animation ihn nach 2s ohnehin ein.
   Sie laeuft nur, solange fx-titleok fehlt - im Normalfall ist die Klasse nach rund
   100 ms da und die Animation nie zu sehen.

   WURZEL (Dominik): Gibt der Baustein den Titel gleich als "Version X" aus, koennen
   diese Sektion UND sysTitleVer() im JS ersatzlos entfallen.
   ===================================================================== */
.fx-system .MuiPaper-root .MuiTypography-h6{
  visibility:hidden;
  animation:fx-titlereveal 0s linear 2s forwards;
}
.fx-system .MuiPaper-root .MuiTypography-h6.fx-titleok{
  visibility:visible !important;
  animation:none !important;
}
@keyframes fx-titlereveal{ to{ visibility:visible; } }
/* =====================================================================
   61  IMS-DOKUMENTE (AGB, Datenschutz) - Block ims_doc, Klasse fx-imsdoc
   Rechtstexte liegen im IMS-Modul als versionierte Dokumente (AGB = VD-001) und
   werden ueber "Aktuell freigegeben" eingebunden. Aendert sich dort etwas und wird
   freigegeben, steht es automatisch im Portal - diese Regeln aendern daran NICHTS,
   sie betreffen nur die Darstellung.

   GEMESSEN 2026-08-13:
     .fx-imsdoc                 32..1193, kein Rahmen, transparent, padding 0
       > .MuiPaper-outlined     1px rgba(15,23,42,.12), Radius 4px, BG #fafdff, padding 24px
     Zeilenlaenge ca. 135 Zeichen   <- Hauptproblem
     h2 24/600 links ("§ 1 …"), h3 19.2/600 zentriert (Dokumenttitel), p 16/400
   Der Rahmen sitzt also am Papier INNEN, nicht am Block selbst.
   ===================================================================== */
/* Kein Kasten: Ein Rechtstext ist Seiteninhalt, kein eingebettetes Widget. */
.fx-imsdoc .MuiPaper-outlined{
  border:0 !important;
  border-radius:0 !important;
  background:transparent !important;
  box-shadow:none !important;
  padding:0 !important;
}
/* Lesbare Zeilenlaenge. ch statt px, damit es bei geaenderter Schriftgroesse mitgeht:
   72ch entsprechen hier rund 78 Zeichen. Wer es breiter mag, dreht NUR an dieser Zahl. */
/* ---- Breitenbegrenzung: OPTIONAL, zweite Klasse fx-imsdoc--schmal ----
   ⚠ WARUM OPTIONAL (2026-08-13): Der Datenschutz enthaelt unter Punkt 3 eine
   VIERSPALTIGE Tabelle (Verarbeitung / Datenkategorien / Rechtsgrundlage /
   Speicherdauer). Bei 72ch wird die gequetscht; ueber die volle Breite steht sie
   sauber. Reine Fliesstext-Dokumente wie die AGB profitieren dagegen deutlich von
   der schmalen Spalte.
   REGEL: Dokument mit Tabellen -> nur fx-imsdoc. Reiner Fliesstext -> zusaetzlich
   fx-imsdoc--schmal. */
.fx-imsdoc--schmal .MuiPaper-outlined{
  max-width:72ch !important;
  margin-left:auto !important;
  margin-right:auto !important;
}
/* Abstaende der Paragraphen-Ueberschriften: Im Original kleben "§ 2" und der letzte
   Absatz von "§ 1" fast aneinander. Luft davor, wenig danach - so gruppiert sich der
   Abschnitt optisch mit seinem eigenen Text statt mit dem vorherigen. */
/* Ausrichtung der h3: das DOKUMENT entscheidet, sonst linksbuendig (2026-08-16).
   Vorher galt linksbuendig fuer ALLE h3 - auch fuer den Dokumenttitel, den das IMS
   bewusst zentriert setzt (AGB: attrs.textAlign="center"). Der Renderer schreibt
   die Ausrichtung als style="text-align:..." ins Element; das !important hier hat
   sie ueberstimmt, im Editor stand der Titel mittig, im Portal links.
   Die Bedingung greift genau da: hat die Ueberschrift eine eigene Ausrichtung,
   gewinnt sie. Sagt das Dokument nichts, bleibt es linksbuendig wie bisher -
   die urspruengliche Absicht (Zwischenueberschriften in Rechtstexten) bleibt. */
.fx-imsdoc h3:not([style*="text-align"]){
  text-align:left !important;
}
.fx-imsdoc h2{
  margin-top:36px !important;
  margin-bottom:10px !important;
  color:var(--fx-black) !important;
}
.fx-imsdoc h2:first-child{ margin-top:0 !important; }
/* Fliesstext etwas luftiger - 16px bei langen Rechtstexten vertraegt mehr Zeilenabstand. */
.fx-imsdoc p{
  line-height:1.75 !important;
  margin:0 0 12px !important;
}