/* =====================================================================
   O3 Orthozentrum Pfullendorf — user.css
   Natives Cassiopeia-Child (cassiopeia_extended). Kein Astroid/UIkit.
   Aufbau: 1 Tokens · 2 Fonts · 3 Basis · 4 Header/Nav · 5 Header-Clone
           6 Burger/Off-Canvas · 7 Reveal · 8 UIkit-Kompat-Shim
           9 Content · 10 Footer · 11 Responsive
   ===================================================================== */

/* ---------- 2) Fonts: Quicksand lokal (DSGVO) ---------- */
@font-face{font-family:'Quicksand';font-style:normal;font-weight:400;font-display:swap;
  src:url('../fonts/quicksand-v37-latin-regular.woff2') format('woff2');}
@font-face{font-family:'Quicksand';font-style:normal;font-weight:500;font-display:swap;
  src:url('../fonts/quicksand-v37-latin-500.woff2') format('woff2');}
@font-face{font-family:'Quicksand';font-style:normal;font-weight:600;font-display:swap;
  src:url('../fonts/quicksand-v37-latin-600.woff2') format('woff2');}
@font-face{font-family:'Quicksand';font-style:normal;font-weight:700;font-display:swap;
  src:url('../fonts/quicksand-v37-latin-700.woff2') format('woff2');}
/* Open Sans (Variable Font, latin) — lokal, DSGVO-konform; Original nutzt sie fuer Beitrags-Ueberschriften */
@font-face{font-family:'Open Sans';font-style:normal;font-weight:300 800;font-display:swap;
  src:url('../fonts/open-sans-var.woff2') format('woff2');}

/* ---------- 1) Design-Tokens ---------- */
:root{
  --o3-primary:#276081;          /* Stahlblau — Brand */
  --o3-primary-dark:#1a4258;
  --o3-primary-light:#8bbecd;    /* Hellblau — Akzent */
  --o3-primary-050:#eef4f7;      /* sehr helle Fläche */
  /* Band-Hintergrund des Beitragsbereichs (Start, Aktuelles, Eigenübungen).
     Philipp 17.07.: statt #f0f5f5-Grau ein Hauch Akzent-Hellblau (#8bbecd = 139,190,205),
     nur ~25 % Deckung -> gerade so wahrnehmbar. HIER die Deckung justieren (0.15–0.30). */
  --o3-band-bg:rgba(139,190,205,.15);
  /* vertikaler Abstand oben/unten im Band -> Luft zu den weissen Nachbarsektionen.
     Philipp 18.07.: 2.5rem war zu eng. HIER justieren. */
  --o3-band-pad-y:4.5rem;
  /* aeusserer Abstand des Bandes zur weissen Nachbarsektion (Farbkante). Philipp 20.07. */
  --o3-band-gap:16px;
  --o3-ink:#333;
  --o3-muted:#6b7280;
  --o3-border:#e5e7eb;
  --o3-soft:#f7f9fa;
  --o3-white:#fff;
  --o3-radius:14px;
  --o3-radius-sm:8px;
  --o3-shadow:0 10px 30px rgba(39,96,129,.10);
  --o3-shadow-sm:0 4px 14px rgba(39,96,129,.08);
  --o3-ease:cubic-bezier(.16,1,.3,1);
  --o3-header-h:88px;
  --o3-maxw:1200px;
  /* Cassiopeia-Fontvariablen: Body wie Original (Verdana = Systemfont, offline/DSGVO ok) */
  --cassiopeia-font-family-body:Verdana,Geneva,"DejaVu Sans",sans-serif;
  --cassiopeia-font-family-headings:'Quicksand',system-ui,sans-serif;

  /* ══════════ ÜBERSCHRIFTEN — hier drehen (Philipp 17.07.2026) ══════════
     GEWICHT aller Ueberschriften: genau diese eine Zeile.
     Cassiopeia liest die Variable selbst (template.css: h1..h6{font-weight:
     var(--cassiopeia-font-weight-headings,700)}); unsere Basisregel unten nutzt sie jetzt
     ebenfalls — vorher stand dort eine feste 700, die die Variable aushebelte.
     Alle Sonderregeln (Hero, Subhero, Footer, Blog-Kacheln, Aerzte-Namen, Sidebar,
     Startseiten-Artikel …) haengen seit 17.07. an dieser Variablen — vorher hatten 10 davon
     feste Werte. Gegenprobe: Wert testweise auf 700 -> ALLE 76 Ueberschriften werden fett.

     GROESSE steht NICHT hier, sondern in den nativen Template-Parametern:
       Backend → System → Site-Templates → „Cassiopeia Extended" → Reiter Advanced
       → h1size / h2size / h3size   (aktuell 2.5 / 1.7 / 1.35 rem)
     Grund: templates/cassiopeia_extended/index.php giesst sie als INLINE :root aus, und inline
     schlaegt jede verlinkte CSS-Datei. Eine Definition hier waere wirkungslos — eine Schein-
     Schraube. Wirksam @media (width>=1200px), darunter Cassiopeias eigene Skala (Absicht). */
  --cassiopeia-font-weight-headings:300;

  /* GROESSEN werden hier BEWUSST NICHT gesetzt.
     Sie kommen aus den nativen Template-Parametern: Backend → System → Site-Templates →
     „Cassiopeia Extended" → Reiter „Advanced" → h1size/h2size/h3size.
     templates/cassiopeia_extended/index.php giesst sie als INLINE :root aus — inline schlaegt
     jede verlinkte Datei, eine Definition hier waere also totes Duplikat und eine zweite,
     scheinbar wirkungslose Schraube. Wirksam nur @media (width>=1200px), s. global/fonts.css;
     darunter gilt Cassiopeias eigene, kleinere Skala (Absicht). */
}

/* ---------- 3) Basis ---------- */
*,*::before,*::after{box-sizing:border-box;}
/* Full-bleed-Elemente (100vw-Trick) erzeugen mit Scrollbar sonst 8px Horizontal-Overflow (mobil: Wackeln) */
html,body{overflow-x:clip;}
body.site{
  font-family:var(--cassiopeia-font-family-body);
  color:var(--o3-ink);
  line-height:1.7;
  background:var(--o3-white);
  -webkit-font-smoothing:antialiased;
}
h1,h2,h3,h4,h5,h6,.page-header h1{
  font-family:var(--cassiopeia-font-family-headings);
  font-weight:var(--cassiopeia-font-weight-headings);
  color:var(--o3-primary);
  line-height:1.2;
  letter-spacing:-.01em;
}
/* KEINE font-size-Regeln fuer h1..h6 hier: Cassiopeia macht das selbst (global/fonts.css,
   @media >=1200px, gespeist aus den Template-Parametern). Eine eigene Regel ohne Media Query
   wuerde die responsive Staffelung aushebeln — genau das war ein Fehlversuch am 17.07.
   .page-header h1 und .blog h1 setzen KEINE eigene Groesse mehr -> beide folgen dem h1-Mass. */
h2{margin-top:0;}
a{color:var(--o3-primary);text-decoration:none;transition:color .2s;}
/* Links NIE unterstrichen — Philipp 2026-07-15: „die Links ohne Unterstrich (überall)".
   Am Live-Original geprueft: dort sind **0 von 40** Links unterstrichen. Unsere Unterstriche waren
   also durchgesickerte Cassiopeia-Defaults, kein Designthema.
   Warum die lange Liste: Cassiopeia unterstreicht an mehreren Stellen mit STEIGENDER Spezifitaet —
   allen voran `a:not([class])` (0-1-1), das ein blosses `a{text-decoration:none}` (0-0-1) schlaegt
   (genau deshalb waren ausgerechnet die klassenlosen Content-Links unterstrichen). Cassiopeias
   eigene Resets dagegen haengen an `.container-header` und greifen ausserhalb nicht (siehe auch
   Header-Clone weiter unten). Jeder Selektor hier spiegelt exakt eine Cassiopeia-Regel und
   gewinnt ueber die Sheet-Reihenfolge — bewusst ohne !important. */
a:not([class]),
a:not([class]):hover,
.mod-list li a,
.mod-list li a:hover,
.mod-list li.active > a,
.container-header .mod-menu > li.active > a,
.container-header .mod-menu > li.active > span,
.container-header .mod-menu > li > a:hover,
.container-header .mod-menu .mod-menu__sub a:hover,
.container-header .mod-menu.mod-list > li > a:hover,
.btn-link{
  text-decoration:none;
}
a:hover{color:var(--o3-primary-dark);}
img{max-width:100%;height:auto;}
p{margin:0 0 1rem;}
.container,.site-grid{max-width:var(--o3-maxw);}
.site-grid{margin-inline:auto;padding-inline:1.25rem;}

/* Buttons */
.btn-primary{
  --bs-btn-bg:var(--o3-primary);--bs-btn-border-color:var(--o3-primary);
  --bs-btn-hover-bg:var(--o3-primary-dark);--bs-btn-hover-border-color:var(--o3-primary-dark);
  --bs-btn-active-bg:var(--o3-primary-dark);
  border-radius:999px;padding:.6rem 1.4rem;font-weight:600;
}
.btn{border-radius:999px;}
.o3-btn{
  display:inline-block;background:var(--o3-primary);color:#fff !important;
  padding:.7rem 1.6rem;border-radius:999px;font-weight:600;text-transform:uppercase;
  font-family:var(--cassiopeia-font-family-headings);
  transition:background .2s,transform .2s,box-shadow .2s;box-shadow:var(--o3-shadow-sm);
}
.o3-btn:hover{background:var(--o3-primary-dark);transform:translateY(-2px);box-shadow:var(--o3-shadow);}

/* ---------- 4) Header + Desktop-Navigation ---------- */
header.container-header{
  background:var(--o3-white);
  display:flex;align-items:center;justify-content:space-between;flex-wrap:nowrap;gap:1.25rem;
  width:100%;max-width:none;padding:.3rem max(1.25rem,calc((100% - var(--o3-maxw))/2));
  min-height:76px;position:relative;z-index:120;
  border-bottom:1px solid var(--o3-border);box-shadow:0 4px 18px rgba(39,96,129,.06);
}
header.container-header::after{content:none;}
.header .navbar-brand{display:flex;align-items:center;flex:0 0 auto;}
.header .brand-logo{display:inline-flex;align-items:center;}
.header .brand-logo img{height:44px !important;width:auto;}
header .grid-child.container-nav{display:flex;align-items:center;justify-content:flex-end;flex:1 1 auto;min-width:0;}

/* Hauptmenü horizontal (weiß auf Brand) */
/* gap .3rem statt .15rem: kompensiert exakt das kleinere Pillen-Padding (10px statt 11.2px),
   damit die Textpositionen der Menuepunkte unveraendert bleiben (2*11.2+2.4 == 2*10+4.8) */
ul.mod-menu.nav{display:flex;align-items:center;gap:.3rem;margin:0;padding:0;list-style:none;flex-wrap:nowrap;}
ul.mod-menu.nav > li.nav-item{position:relative;}
ul.mod-menu.nav > li.nav-item > a,
ul.mod-menu.nav > li.nav-item > .mod-menu__heading{
  /* Pille schlank wie die Footer-Chips .o3-chip (3px 10px / radius 28px) — Philipp 2026-07-15 */
  display:block;padding:3px 10px;border-radius:28px;
  font-family:var(--cassiopeia-font-family-headings);font-weight:600;font-size:.95rem;
  color:var(--o3-ink);cursor:pointer;transition:color .2s,background .2s;white-space:nowrap;
}
ul.mod-menu.nav > li.nav-item > a:hover,
ul.mod-menu.nav > li.nav-item > .mod-menu__heading:hover{
  color:var(--o3-primary);background:var(--o3-primary-050);
}
/* Aktiver Menuepunkt: Tuerkis der "3" im Logo (Philipp 2026-07-02) */
ul.mod-menu.nav > li.nav-item.active > a,
ul.mod-menu.nav > li.nav-item.active > .mod-menu__heading,
ul.mod-menu.nav > li.nav-item.current > a{color:#fff;background:#6ec0d0;}

/* Clone-Nav: hell auf Teal (umgekehrt zum weißen Original-Header) */
/* Unterstreichung killen: Cassiopeias Reset dafuer ist .container-header .mod-list li.active > a —
   der Clone haengt am <body>, also greift er dort NICHT und .mod-list li.active > a (underline)
   gewinnt gegen user.css a{text-decoration:none}. Hier mit hoeherer Spezifitaet ausschalten. */
.o3-header-clone ul.mod-menu.nav a{text-decoration:none;}
.o3-header-clone ul.mod-menu.nav > li.nav-item > a,
.o3-header-clone ul.mod-menu.nav > li.nav-item > .mod-menu__heading{color:#fff;}
.o3-header-clone ul.mod-menu.nav > li.nav-item > a:hover,
.o3-header-clone ul.mod-menu.nav > li.nav-item > .mod-menu__heading:hover{color:#fff;background:rgba(255,255,255,.18);}
/* Aktiver Punkt im Clone: helles Logo-Blau (Philipp 2026-07-02) */
.o3-header-clone ul.mod-menu.nav > li.nav-item.active > a,
.o3-header-clone ul.mod-menu.nav > li.nav-item.active > .mod-menu__heading,
.o3-header-clone ul.mod-menu.nav > li.nav-item.current > a{color:#fff;background:#8fbdcc;}
.o3-header-clone .grid-child.container-nav{display:flex;align-items:center;justify-content:flex-end;flex:1 1 auto;min-width:0;}
.o3-header-clone ul.mod-menu.nav{display:flex !important;flex-direction:row !important;flex-wrap:nowrap !important;width:auto;margin:0;}

/* Nav-Icons (FontAwesome 6, wie Original) */
ul.mod-menu.nav > li.nav-item > a::before,
ul.mod-menu.nav > li.nav-item > .mod-menu__heading::before{
  font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.5em;font-size:.85em;display:inline-block;vertical-align:baseline;
}
ul.mod-menu.nav > li.item-102 > a::before{content:"\f015";}                    /* Start: home */
ul.mod-menu.nav > li.item-103 > a::before{content:"\f007";}                    /* Praxis: user */
ul.mod-menu.nav > li.item-107 > a::before{content:"\f469";}                    /* Unser Angebot: briefcase-medical */
ul.mod-menu.nav > li.item-121 > .mod-menu__heading::before{content:"\f0c0";}   /* für unsere Patienten: users */
ul.mod-menu.nav > li.item-124 > a::before{content:"\f2bb";}                    /* Kontakt: address-card */
/* Parent-Indikator */
ul.mod-menu.nav > li.parent > a::after,
ul.mod-menu.nav > li.parent > .mod-menu__heading::after{
  content:"";display:inline-block;width:.5em;height:.5em;margin-left:.45em;vertical-align:middle;
  border-right:2px solid currentColor;border-bottom:2px solid currentColor;
  transform:rotate(45deg) translateY(-2px);opacity:.6;
}

/* Dropdowns (Desktop, Hover) */
ul.mod-menu.nav .mod-menu__sub{
  display:block;                 /* Cassiopeia-Basis setzt display:none -> Hover-Reveal per opacity/visibility greift sonst nicht */
  list-style:none;margin:0;padding:.4rem;position:absolute;top:100%;left:0;min-width:250px;
  background:var(--o3-white);border-radius:var(--o3-radius-sm);box-shadow:var(--o3-shadow);
  border:1px solid var(--o3-border);
  opacity:0;visibility:hidden;pointer-events:none;transform:translateY(8px);transition:.25s var(--o3-ease);z-index:130;
}
ul.mod-menu.nav li.nav-item:hover > .mod-menu__sub{pointer-events:auto;}
ul.mod-menu.nav li.nav-item:hover > .mod-menu__sub{opacity:1;visibility:visible;transform:translateY(0);}
ul.mod-menu.nav .mod-menu__sub .nav-item{position:relative;}
ul.mod-menu.nav .mod-menu__sub .nav-item > a{
  display:block;padding:.5rem .8rem;border-radius:var(--o3-radius-sm);color:var(--o3-ink);font-size:.95rem;
}
ul.mod-menu.nav .mod-menu__sub .nav-item > a:hover{background:var(--o3-primary-050);color:var(--o3-primary);}
/* 3. Ebene: rechts ausklappen */
ul.mod-menu.nav .mod-menu__sub .mod-menu__sub{top:-.4rem;left:100%;}

/* Login-Form / Sidebar-Card Grundstyling */
.sidebar-right.card{border:1px solid var(--o3-border);border-radius:var(--o3-radius);box-shadow:var(--o3-shadow-sm);overflow:hidden;}
.sidebar-right .card-header{background:var(--o3-primary);color:#fff;font-family:var(--cassiopeia-font-family-headings);}

/* Breadcrumbs dezent */
.mod-breadcrumbs{font-size:.85rem;color:var(--o3-muted);background:transparent;padding-left:0;}
.mod-breadcrumbs a{color:var(--o3-muted);}
.mod-breadcrumbs a:hover{color:var(--o3-primary);}

/* ---------- 5) Header-Clone (Sticky beim Scrollen) ---------- */
.o3-header-clone{
  position:fixed;top:0;left:0;right:0;z-index:200;
  background:var(--o3-primary);box-shadow:0 4px 20px rgba(39,96,129,.28);
  opacity:0;transform:translateY(-100%);transition:.5s var(--o3-ease);pointer-events:none;
}
.o3-header-clone.is-visible{opacity:1;transform:translateY(0);pointer-events:auto;}
.o3-header-clone .o3-clone-inner{
  padding:.2rem max(1.25rem,calc((100% - var(--o3-maxw))/2));
  display:flex;align-items:center;justify-content:space-between;gap:1.25rem;min-height:60px;
}
/* helles Logo (logo-sticky1.png 200x43): width:auto+max-width:none erzwingt native Ratio (sonst verzerrt) */
.o3-header-clone .brand-logo img{height:44px;width:auto;max-width:none;}
/* Item-Abstand wie Original-Header (Cassiopeia gibt li dort margin-left 24.8px — greift im Clone nicht) */
.o3-header-clone ul.mod-menu.nav > li.nav-item + li.nav-item{margin-left:24.8px;}
/* Cassiopeia .grid-child bringt im Original 8px Innenabstand (Logo links / Nav rechts) — im Clone nachbilden */
.o3-header-clone .o3-clone-inner > .navbar-brand{margin-left:8px;}
.o3-header-clone .grid-child.container-nav{padding-right:8px;}
/* Klon erbt Desktop-Nav-Styles; eigenes Dropdown-Verhalten */
.o3-header-clone ul.mod-menu.nav .mod-menu__sub{box-shadow:var(--o3-shadow);}

/* ---------- 6) Burger + Off-Canvas-Menü ---------- */
.o3-burger{
  display:none;flex-direction:column;justify-content:center;gap:5px;
  width:44px;height:44px;padding:9px;border:0;background:transparent;cursor:pointer;border-radius:10px;
}
.o3-burger span{display:block;height:2.5px;width:100%;background:var(--o3-primary);border-radius:2px;transition:.3s var(--o3-ease);}
.o3-header-clone .o3-burger span{background:#fff;}
.o3-drawer{
  position:fixed;top:0;right:0;bottom:0;width:320px;max-width:86vw;background:var(--o3-white);
  transform:translateX(100%);transition:transform .45s var(--o3-ease);z-index:290;
  box-shadow:-12px 0 40px rgba(0,0,0,.18);display:flex;flex-direction:column;overflow-y:auto;
}
body.o3-drawer-open .o3-drawer{transform:translateX(0);}
.o3-drawer-head{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.2rem;border-bottom:1px solid var(--o3-border);}
.o3-drawer-head img{height:42px;}
.o3-drawer-close{background:none;border:0;font-size:1.8rem;line-height:1;color:var(--o3-primary);cursor:pointer;}
.o3-drawer nav ul{list-style:none;margin:0;padding:0;}
.o3-drawer .o3-mi{display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--o3-soft);}
.o3-drawer .o3-mi > a,.o3-drawer .o3-mi > span{
  flex:1;display:block;padding:.85rem 1.2rem;color:var(--o3-ink);font-family:var(--cassiopeia-font-family-headings);font-weight:600;
}
.o3-drawer .o3-mi > a:hover{color:var(--o3-primary);}
.o3-drawer .o3-sub-toggle{background:none;border:0;padding:.85rem 1.1rem;color:var(--o3-primary);cursor:pointer;font-size:1.1rem;}
.o3-drawer ul ul{max-height:0;overflow:hidden;transition:max-height .35s var(--o3-ease);background:var(--o3-soft);}
.o3-drawer li.o3-open > ul{max-height:1200px;}
.o3-drawer ul ul .o3-mi > a{padding-left:2rem;font-weight:500;font-size:.95rem;}
.o3-drawer ul ul ul .o3-mi > a{padding-left:2.8rem;}
.o3-backdrop{position:fixed;inset:0;background:rgba(20,40,55,.5);backdrop-filter:blur(3px);opacity:0;visibility:hidden;transition:.4s;z-index:280;}
body.o3-drawer-open .o3-backdrop{opacity:1;visibility:visible;}
body.o3-drawer-open{overflow:hidden;}

/* ---------- 7) Scroll-Reveal (einfliegende Elemente) ---------- */
.reveal{opacity:0;transform:translateY(32px);transition:opacity .7s var(--o3-ease),transform .7s var(--o3-ease);}
.reveal.is-visible{opacity:1;transform:none;}
.reveal.from-left{transform:translateX(-32px);}
.reveal.from-right{transform:translateX(32px);}
.reveal.is-visible.from-left,.reveal.is-visible.from-right{transform:none;}
.reveal-d1{transition-delay:.08s}.reveal-d2{transition-delay:.16s}.reveal-d3{transition-delay:.24s}.reveal-d4{transition-delay:.32s}
@media (prefers-reduced-motion:reduce){.reveal{opacity:1 !important;transform:none !important;}}

/* ---------- 8) UIkit-Kompat-Shim (migriertes Artikel-Markup ohne UIkit) ---------- */
[uk-grid]{display:flex;flex-wrap:wrap;gap:2rem;margin:1.5rem 0;align-items:flex-start;}
[uk-grid] > *{flex:1 1 320px;min-width:0;}
.uk-text-center{text-align:center;}
.uk-text-justify{text-align:justify;}
.uk-text-left{text-align:left;}
.uk-text-right{text-align:right;}
.uk-margin,.uk-margin-top{margin-top:1rem;}
.uk-width-1-1{flex-basis:100%;}
/* HINWEIS: KEIN pauschales border-radius auf [uk-grid] img — Content-Bilder rendern
   wie im Original (Rahmen z.T. ins Bild eingebrannt, CSS-Rahmen nur via .bild-abgerundet). */

/* ---------- 9) Content ---------- */
.container-component{padding-block:1.5rem 3rem;}
/* Nur noch Abstaende — Groesse und Gewicht kommen aus :root (--h1size / --cassiopeia-font-weight-headings). */
.page-header h1{margin:.2rem 0 1.2rem;}
.com-content-article__body{font-size:1.03rem;}
.com-content-article__body img{border-radius:var(--o3-radius);box-shadow:var(--o3-shadow-sm);}
.com-content-article__body h2{margin:2rem 0 1rem;}
/* Artikel-Meta unauffällig */
.article-info{font-size:.8rem;color:var(--o3-muted);border-left:3px solid var(--o3-primary-light);padding-left:.8rem;margin-bottom:1.5rem;}
.article-info dt{font-weight:600;}
/* Prev/Next dezenter */
.pagenavigation .btn-secondary{--bs-btn-bg:var(--o3-soft);--bs-btn-border-color:var(--o3-border);--bs-btn-color:var(--o3-primary);}

/* ---------- 10) Footer ---------- */
footer.container-footer{
  background:var(--o3-primary);color:rgba(255,255,255,.9);margin-top:3rem;padding:2.5rem 1.25rem;
}
footer.container-footer .grid-child{max-width:var(--o3-maxw);margin-inline:auto;}
footer.container-footer a{color:#fff;}
footer.container-footer a:hover{color:var(--o3-primary-light);}
footer.container-footer h1,footer.container-footer h2,footer.container-footer h3{color:#fff;}

/* Back-to-top */
#back-top{
  position:fixed;right:20px;bottom:20px;z-index:150;width:46px;height:46px;border-radius:50%;
  background:var(--o3-primary);color:#fff;display:flex;align-items:center;justify-content:center;
  box-shadow:var(--o3-shadow);opacity:0;visibility:hidden;pointer-events:none;transform:translateY(12px);transition:.3s var(--o3-ease);
}
#back-top.is-visible{opacity:.92;visibility:visible;pointer-events:auto;transform:none;}
#back-top.is-visible:hover{background:var(--o3-primary-dark);transform:translateY(-3px);opacity:1;}

/* ---------- 11) Responsive ---------- */
@media (max-width:991.98px){
  header.container-header{min-height:70px;}
  .header .brand-logo img{height:48px;}
  /* Desktop-Nav aus, Burger an */
  header .container-nav ul.mod-menu{display:none !important;}
  .o3-burger{display:flex;}
  .container-component{padding-block:1rem 2rem;}
  /* Rechte Sidebar unter 992px AUS — wie im Original. Dort traegt die Sidebar-Spalte auf JEDER
     betroffenen Seite `hideonxs hideonsm hideonmd` (alle 6 konservativ-Seiten, Knochendichte,
     beide Arztseiten, Feedback, Osteo-Test — vollstaendig gegen den Crawl geprueft), was bei
     Astroid exakt <992px bedeutet. Vorher stapelte sie bei uns stattdessen unter den Content. */
  .container-sidebar-right{display:none;}
}
@media (min-width:992px){
  /* Sicherheitsnetz: Drawer nie auf Desktop */
  .o3-drawer,.o3-backdrop{display:none !important;}
}

/* ===== 12) Startseiten-/Sektions-Bausteine ===== */
/* Cassiopeia legt bottom-a/b als Grid-Spalten an -> stapeln + randlos */
.container-banner.full-width,.container-bottom-a,.container-bottom-b{padding:0;display:block !important;grid-template-columns:none !important;}
.container-bottom-a > *,.container-bottom-b > *{width:100%;max-width:none;margin:0;}
/* Full-Bleed-Bänder (brechen aus dem zentrierten site-grid aus) */
.o3-trust,.o3-band{width:100vw;margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw);}
.o3-section{max-width:var(--o3-maxw);margin-inline:auto;padding:3.5rem 1.25rem;}
.o3-section-head{text-align:center;max-width:760px;margin:0 auto 2.5rem;}
.o3-eyebrow{color:var(--o3-primary-light);font-weight:700;letter-spacing:.12em;text-transform:uppercase;font-size:.85rem;margin-bottom:.4rem;font-family:var(--cassiopeia-font-family-headings);}
.o3-section-head h2{font-size:2rem;margin:0 0 .6rem;}
.o3-section-head p{color:var(--o3-muted);font-size:1.05rem;}

/* Hero-Banner (Vollbild-Bild + Overlay-Boxen links + Original-Shape-Divider) */
.o3-hero-banner{position:relative;min-height:720px;width:100vw;margin-left:calc(50% - 50vw);background-size:cover;background-position:center;display:flex;align-items:flex-start;}
.o3-hero-banner-inner{width:100%;padding:7rem 1.25rem 3rem clamp(1.5rem,calc(9vw + 20px),11rem);display:flex;flex-direction:column;align-items:flex-start;}
.o3-hero-eyebrow{display:inline-block;background:var(--o3-primary-light);color:#fff;padding:.5rem .65rem;border-radius:28px;font-family:var(--cassiopeia-font-family-headings);font-weight:300;font-size:1.5rem;line-height:1.6;margin:0 0 3rem -4rem;}
.o3-hero-title{display:inline-block;max-width:600px;background:var(--o3-primary);color:#fff;padding:1rem 1.95rem;border-radius:28px;font-family:var(--cassiopeia-font-family-headings);font-weight:var(--cassiopeia-font-weight-headings);font-size:2.5rem;line-height:1.5;margin:0;box-shadow:var(--o3-shadow);}
/* Original 3-lagige Shape-Divider-Welle */
.o3-shape-divider{position:absolute;bottom:-1px;left:0;width:100%;overflow:hidden;line-height:0;z-index:2;}
.o3-shape-divider svg{position:relative;display:block;width:calc(100% + 1.3px);height:140px;transform:scaleY(-1);}
.o3-shape-divider .shape-fill{fill:#ffffff;}
/* Krankheitsbild-Liste (Split-Sektion) */
.o3-hero-list{list-style:none;padding:0;margin:1rem 0 1.6rem;display:grid;gap:.5rem;}
.o3-hero-list li{padding-left:1.6rem;position:relative;color:var(--o3-primary-dark);font-weight:500;}
.o3-hero-list li::before{content:"";position:absolute;left:0;top:.55em;width:.65rem;height:.65rem;border-radius:50%;background:var(--o3-primary-light);}
/* Split-Sektion (Bild + Text) — Dreiviertel-Kreis via Background (responsive, wie Original) */
/* Verteilung (Philipp): Bildschirmbreite gedanklich halbiert — Bild mittig in der linken,
   Text mittig in der rechten Haelfte. Spalten TOP-aligned; Kreis-PNG (400x296 nativ) sitzt
   am Spalten-Top (bg 0,0), Text via padding-top 116px im Ring, Bild 54px unter Spalten-Top. */
.o3-split{width:100vw;margin-left:calc(50% - 50vw);display:grid;grid-template-columns:1fr 1fr;gap:0;align-items:center;}
.o3-split-media{justify-self:center;width:min(500px,92%);}
.o3-split-text{justify-self:center;width:580px;max-width:94%;}
/* Rahmen + Schatten sind ins Bild eingebrannt (stosswelle1.png) — KEIN CSS-Rahmen (siehe KB quelle-vor-nachbau) */
/* Bild mittig zum TEXT, nicht zur Spalte (Philipp 2026-07-15): der Ring reserviert oben 116px
   Leerraum. align-items:center zentriert die MARGIN-Box -> margin-top 116px schiebt das Bild um
   die Haelfte (58px) nach unten und trifft damit exakt die Textmitte. */
.o3-split-media{margin-top:116px;}
.o3-split-media img{width:100%;display:block;}
.o3-split-text{position:relative;padding:116px 0 0 5rem;}
/* ---- RING-PLATZIERUNG (Philipp 2026-07-15, gilt fuer ALLE Ring-Deko-Elemente) ----
   Ziel: der SICHTBARE Abstand Ring->Text ist oben und links GLEICH.
   Nicht "Mitte auf der Textecke" — das war falsch: die Assets sind keine reinen Ringe, sondern
   Bogen + gerade Auslaeufer. Gemessen (scratchpad/ring_abstaende.php, engste Stelle zum Textblock):

     text-ecke-gross (Mitte 129,128): oben 23px (Bogenende oben rechts) | links 58px (Auslaeufer)
     text-ecke2      (Mitte  97, 96): oben 17px                          | links 44px

   Der Abstand OBEN ist gut (Philipp) -> vertikal bleibt: Ringmitte.y auf der Text-Oberkante.
   Links ist zu weit weg -> Ring um (links - oben) nach RECHTS: gross +35px, ecke2 +27px.
   Daraus: left = padding-left - Mitte.x + Shift ; top = padding-top - Mitte.y
   Hier: left = 80 - 129 + 35 = -14 ; top = 116 - 128 = -12.
   In den Vordergrund kommt der Ring ueber die SEKTION (.o3-split-section z-index:3), nicht hier —
   siehe Kommentar dort. */
.o3-split-text::before{content:"";position:absolute;top:-12px;left:-14px;width:400px;height:296px;background:url(../../../../../images/design/text-ecke-gross.webp) no-repeat left top;z-index:0;pointer-events:none;}
.o3-split-text > *{position:relative;z-index:1;}
.o3-split-text .o3-eyebrow{color:var(--o3-primary);font-weight:300;letter-spacing:normal;text-transform:none;font-size:1.17rem;margin-bottom:1.1rem;}
.o3-split-text h2{font-size:1.375rem;font-weight:var(--cassiopeia-font-weight-headings);color:var(--o3-primary);line-height:1.24;margin:0 0 1.2rem;}
.o3-split-intro{margin:0 0 1.2rem;}
.o3-list-blue{list-style:none;padding-left:1.5rem;margin:0 0 1.6rem;}
.o3-list-blue li{position:relative;padding-left:1.5rem;color:var(--o3-primary-light);font-size:1.17rem;line-height:2;font-weight:400;}
.o3-list-blue li::before{content:"\2022";position:absolute;left:.2rem;color:var(--o3-primary-light);}
/* SIE-SIND stapelt wie Original unter lg (col-lg-6) — Kreis bleibt IMMER sichtbar.
   Gestapelt steht der Text am Bildschirmrand: der Ring ragt nach links und wuerde vom Viewport
   abgeschnitten. Deshalb hier Ring BUENDIG (left/top 0) und den Text so weit einruecken, dass
   die Abstands-Regel erhalten bleibt: Text-links = Mitte.x - Shift = 129 - 35 = 94,
   Text-oben = Mitte.y = 128. */
@media (max-width:991.98px){
  .o3-split{grid-template-columns:1fr;gap:1.5rem;}
  .o3-split-media{margin-top:0;}
  .o3-split-text{width:auto;max-width:none;justify-self:stretch;padding:128px 1.25rem 0 94px;}
  .o3-split-text::before{left:0;top:0;}
}
/* kleine Screens: schmaler Ring (300x222, Mitte 97/96, Shift 27) -> Text-links = 97-27 = 70 */
@media (max-width:575.98px){
  .o3-split-text{padding:96px 1.25rem 0 70px;}
  .o3-split-text::before{width:300px;height:222px;background-image:url(../../../../../images/design/text-ecke2.webp);}
}
@media (max-width:767px){
  .o3-hero-title{font-size:1.8rem;}
  .o3-hero-banner{min-height:420px;}
  .o3-hero-banner-inner{padding-left:clamp(1rem,5vw,1.5rem);}
  .o3-hero-eyebrow{margin-left:0;}
  /* Back-to-top wie Original unter 768 aus (hideonsm hideonxs) */
  .back-to-top-link{display:none !important;}
}
@media (max-width:639.98px){
  /* stosswelle-Bild wie Original nur ab @s=640 (uk-visible@s) */
  .o3-split-media{display:none;}
}
@media (max-width:575.98px){
  /* Hero-Welle wie Original auf xs aus (hideonxs) */
  .o3-shape-divider{display:none;}
}
/* Kreis sitzt AM Spalten-Top (kein negativer Offset); Abstand Welle→Kreis wie Original ~37px;
   unten 52px = Original-Abstand zur EINE-Behandlung-Sektion (Philipp 2026-07-03: war zu gross) */
/* Kein Padding unten + kein Banner-Margin: im Original schliesst das #f0f5f5-Band der
   EINE-Behandlung-Sektion OHNE Abstand an die SIE-SIND-Zeile an (beide exakt bei y=1476,
   live gemessen). Vorher lagen hier 52px Weissraum. — Philipp 2026-07-15 */
/* z-index:3 an der SEKTION (nicht am ::before): der Ring ragt 12px ueber die Textbox hinaus und
   wurde dort von der Hero-Welle .o3-shape-divider (position:absolute, z-index:2) ueberdeckt
   -> Ring oben abgeschnitten (Philipp: "muss in den Vordergrund").
   Warum an der Sektion: .o3-split-section traegt .reveal — waehrend der Einblend-Transition
   erzeugen opacity<1/transform einen Stacking-Context, der ein z-index am ::before EINSPERREN
   wuerde (Ring flackert hinter der Welle). Die Sektion selbst auf z-index:3 zu heben wirkt
   unabhaengig davon. */
.o3-split-section{padding-block:.3rem 0;overflow:visible;position:relative;z-index:3;}
body.itemid-102 .container-banner{margin-bottom:0;}

/* Startseite: "EINE Behandlung"-Artikel als grauer Full-Width-Streifen */
body.itemid-102 .container-component{background:var(--o3-band-bg);width:100vw;margin-left:calc(50% - 50vw);margin-top:var(--o3-band-gap);margin-bottom:var(--o3-band-gap);padding:var(--o3-band-pad-y) max(1.25rem,calc((100% - var(--o3-maxw))/2)) var(--o3-band-pad-y);} /* Original-BG (Live gemessen) */
body.itemid-102 .container-component > main,body.itemid-102 .com-content-article{max-width:var(--o3-maxw);margin-inline:auto;}
body.itemid-102 .com-content-article__body h2{margin-top:0;}

/* Kachel-Grid (Leistungen) */
.o3-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1.25rem;}
.o3-tile{display:flex;flex-direction:column;align-items:center;text-align:center;gap:.8rem;padding:1.6rem 1rem;background:#fff;border:1px solid var(--o3-border);border-radius:var(--o3-radius);text-decoration:none;color:var(--o3-ink);box-shadow:var(--o3-shadow-sm);transition:transform .3s var(--o3-ease),box-shadow .3s var(--o3-ease),border-color .3s;}
.o3-tile:hover{transform:translateY(-6px);box-shadow:var(--o3-shadow);border-color:var(--o3-primary-light);color:var(--o3-primary);}
.o3-tile img{width:72px;height:72px;object-fit:contain;}
.o3-tile span{font-family:var(--cassiopeia-font-family-headings);font-weight:600;font-size:1.02rem;}

/* Trust-Band */
.o3-trust{background:var(--o3-primary);}
.o3-trust-inner{max-width:900px;margin-inline:auto;padding:3.5rem 1.25rem;text-align:center;}
.o3-trust .o3-eyebrow{color:var(--o3-primary-light);}
.o3-trust h2{color:#fff;font-size:2.1rem;margin:.4rem 0 1.2rem;}
.o3-trust p{color:rgba(255,255,255,.92);font-size:1.1rem;}

/* Ärzte-Karten */
.o3-docs{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:1.5rem;}
.o3-doc{background:#fff;border:1px solid var(--o3-border);border-radius:var(--o3-radius);overflow:hidden;box-shadow:var(--o3-shadow-sm);text-decoration:none;color:inherit;transition:transform .3s var(--o3-ease),box-shadow .3s;}
.o3-doc:hover{transform:translateY(-5px);box-shadow:var(--o3-shadow);}
.o3-doc img{width:100%;height:300px;object-fit:cover;object-position:top center;}
.o3-doc-body{padding:1.2rem 1.4rem;}
.o3-doc h3{margin:0 0 .2rem;font-size:1.25rem;}
.o3-doc-body p{margin:0;color:var(--o3-muted);}

/* Footer-Inhalt */
.o3-footer-grid{max-width:var(--o3-maxw);margin-inline:auto;display:grid;grid-template-columns:1.3fr 1fr 1fr;gap:2rem;}
.o3-footer-grid h3{color:#fff;font-size:1.1rem;margin:0 0 .8rem;}
.o3-footer-grid a{display:block;color:rgba(255,255,255,.85);padding:.15rem 0;}
.o3-footer-grid a:hover{color:#fff;}
.o3-footer-brand img{height:50px;margin-bottom:.8rem;}
.o3-footer-brand p{color:rgba(255,255,255,.8);}
.o3-footer-bottom{max-width:var(--o3-maxw);margin:2rem auto 0;padding-top:1.2rem;border-top:1px solid rgba(255,255,255,.2);font-size:.85rem;color:rgba(255,255,255,.7);display:flex;justify-content:space-between;flex-wrap:wrap;gap:.5rem;}

@media (max-width:767px){
  .o3-hero-inner{grid-template-columns:1fr;text-align:center;}
  .o3-hero-list{display:inline-grid;text-align:left;margin-inline:auto;}
  .o3-hero h1,.o3-hero h2,.o3-section-head h2,.o3-trust h2{font-size:1.7rem;}
  .o3-footer-grid{grid-template-columns:1fr;}
}


/* ================= WORKFLOW-SEKTIONEN (untere Startseite) ================= */

/* --- WIR SIND FUER SIE DA + Leistungsschwerpunkte (eine Section wie Original) --- */
/* Original-Section cb-mbt7fu3kg: weisser BG, padding 50/50. Links Text mit text-ecke2-Deko
   (padding-left 50px), rechts kinder.png 500x428. Danach LSP-Ueberschrift + eingebrannte Grafik. */
/* z-index:1 — der Ring der WIR-SIND-Sektion ragt 96px ueber seine Textkante und damit in das
   #f0f5f5-Band der Sektion darueber hinein. Ohne eigenen Stacking-Rang kann er dort verdeckt
   werden (Philipp: "Ring in den Vordergrund"). Gleiche Begruendung wie .o3-split-section:
   der Rang gehoert an die Sektion, nicht ans ::before — .o3-vertrauen traegt .reveal und wuerde
   ein z-index darin einsperren. */
/* padding-top 96px statt 50: der Ring beginnt 96px ueber der Textkante (Text liegt seit
   2026-07-15 buendig auf der Bild-Oberkante). Mit nur 50px ragte er 46px in das #f0f5f5-Band
   der Sektion darueber — die Sektionskante lief quer durch den Ring, der dunklere Hintergrund
   war deutlich sichtbar (Philipp: "faellt auf"). 96px = Ringhoehe ueber dem Text -> der Ring
   liegt vollstaendig auf Weiss. Entspricht der Eigenschaft des Originals (dort sitzt der Ring
   ebenfalls komplett in der weissen Sektion, nur weil der Text dort 88px tiefer steht). */
.o3-vertrauen-lsp {
  position: relative;
  z-index: 1;
  background: #fff;
  padding: 96px 0 50px;
}
/* align-items:start statt center — "WIR SIND FÜR SIE DA" soll auf der Oberkante des
   Bildes rechts liegen (Philipp 2026-07-15; Original hat den Text 88px tiefer). */
.o3-vertrauen {
  max-width: 1155px;
  margin: 0 auto 3rem;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 2.5rem;
  align-items: start;
}
/* Ring als ::before: Text beginnt buendig oben (padding-top 0), der Ring ragt frei darueber
   hinaus. Mitte (97,96), Shift +27 -> left = 62 - 97 + 27 = -8 ; top = 0 - 96 = -96. */
.o3-vertrauen-text {
  position: relative;
  padding: 0 0 0 62px;
  font-family: Verdana, Geneva, sans-serif;
  color: var(--o3-primary);
}
.o3-vertrauen-text::before {
  content: ""; position: absolute; top: -96px; left: -8px;
  width: 300px; height: 222px;
  background: url(../../../../../images/design/text-ecke2.webp) no-repeat left top; /* nativ 300x222 */
  z-index: 0; pointer-events: none;
}
.o3-vertrauen-text > * { position: relative; z-index: 1; }
.o3-vt-eyebrow { font-size: 18.67px; font-weight: 300; margin: 0 0 1.4rem; }
.o3-vt-titel   { font-size: 24px; font-weight: 700; line-height: 1.25; margin: 0 0 1.4rem; }
.o3-vt-absatz  { font-size: 14px; font-weight: 300; line-height: 1.7; margin: 0 0 1.4rem; }
.o3-vt-schluss { font-size: 18.67px; font-weight: 700; color: #8bbecd; margin: 0; }
.o3-vertrauen-media img { display: block; margin-inline: auto; width: min(500px, 100%); height: auto; }

.o3-lsp-title {
  font-family: Verdana, Geneva, sans-serif;
  font-weight:var(--cassiopeia-font-weight-headings);
  color: #8bbecd;
  font-size: 30px;
  line-height: 1.3;
  text-align: center;
  margin: 0 0 32px;             /* Original: 32px Abstand zur Grafik */
}
/* Betonung INNERHALB der Ueberschrift — bleibt bewusst fett, wie das Gegenstueck
   „EINE <strong>Behandlung bei uns</strong>" auf derselben Seite. Philipp 17.07.:
   beide sind ein Paar und sollen gleich aussehen. Haengt daher NICHT an der
   Ueberschriften-Schraube — „alle Ueberschriften nicht fett" meint die Ueberschrift
   selbst, nicht die Hervorhebung darin. */
.o3-lsp-title strong { font-weight:700; }
.o3-lsp-grafik { margin: 0; text-align: center; }
.o3-lsp-grafik img { display: block; margin-inline: auto; width: min(1000px, 92%); height: auto; }

@media (max-width: 991.98px) {
  .o3-vertrauen { grid-template-columns: 1fr; gap: 1.5rem; max-width: 640px; }
}
@media (max-width: 767.98px) {
  .o3-vertrauen-lsp { padding: 2.5rem 0; }
  /* gestapelt: Ring verkleinert (130px breit -> Faktor .433, Mitte bei 42/42) und buendig an
     den Rand. Text-links = Mitte.x - Shift, Shift mitskaliert: 27 * .433 ≈ 12 -> 42 - 12 = 30. */
  .o3-vertrauen-text { padding: 42px 0 0 30px; }
  .o3-vertrauen-text::before { width: 130px; height: 96px; background-size: 130px auto; left: 0; top: 0; }
}

/* --- o3-leistungen-slider --- */
/* ===== O3 Leistungen-Slider — 1:1 wie Original (2026-07-02):
   Section-BG linear-gradient(#276081 -> transparent), padding-top 150, dariber die WEISSE
   3-Lagen-Welle (Original custom-shape-divider-top, unter 768px versteckt = hideonxs/sm).
   Slider springt Kachel fuer Kachel (uk-slider-Nachbau) mit Chevrons + Dots. ===== */
.o3-slider-band{
  position:relative;
  width:100vw;margin-left:calc(50% - 50vw);   /* full-bleed wie Hero (Welle/Gradient ueber ganze Breite) */
  background:linear-gradient(180deg,#276081 0%,rgba(255,255,255,0) 100%);
  padding:150px 0 2rem;
  overflow:hidden;
}
/* Weisse Top-Welle (haengt von oben herein, Wellenrand unten — wie Original-Divider) */
.o3-slider-wave{
  position:absolute;
  top:0;
  left:0;
  width:100%;
  line-height:0;
  z-index:1;
  pointer-events:none;
}
.o3-slider-wave svg{
  position:relative;
  display:block;
  width:calc(100% + 1.3px);
  height:204px;   /* Original-Renderhoehe (Live gemessen) — hoehere Wellenberge */
}
.o3-slider-wave .shape-fill{ fill:#ffffff; }

.o3-slider-inner{
  position:relative;
  z-index:2;
}

/* Slider: relative Huelle (Chevrons AUSSERHALB des Overflow), Viewport schneidet den Track */
.o3-slider{ position:relative; }
/* Viewport volle Breite — die exakte Kachelbreite (immer GANZE Kacheln, nie Anschnitt)
   berechnet das globale Script: cardW = (viewportW - (n-1)*gap) / n, n nach UIkit-Breakpoints */
.o3-slider-viewport{ overflow:hidden; }
/* Track: horizontale Flex-Reihe, per JS in Kachel-Schritten verschoben */
.o3-slider-track{
  display:flex;
  flex-wrap:nowrap;
  gap:1.5rem;
  width:max-content;
  will-change:transform;
}

/* Chevron-Navigation (UIkit-slidenav-Optik: schlichte graue Pfeile) */
.o3-slider-prev,
.o3-slider-next{
  position:absolute;
  top:calc((100% - 44px) / 2);   /* Mitte der KACHELN (Dots-Zeile ~44px unten rausgerechnet) */
  transform:translateY(-50%);
  z-index:3;
  width:44px;
  height:44px;
  border:0;
  padding:0;
  background:transparent;
  cursor:pointer;
  opacity:0;                      /* wie Original uk-hidden-hover: nur bei Mouseover sichtbar */
  transition:opacity .25s ease;
}
/* innen ueber den Kacheln, wie Original uk-position-center-left/-right + uk-position-small (15px) */
.o3-slider-prev{ left:15px; }
.o3-slider-next{ right:15px; }
.o3-slider:hover .o3-slider-prev,
.o3-slider:hover .o3-slider-next,
.o3-slider-prev:focus-visible,
.o3-slider-next:focus-visible{ opacity:1; }
@media (hover:none){ .o3-slider-prev,.o3-slider-next{ opacity:1; } } /* Touch: immer sichtbar */
.o3-slider-prev::before,
.o3-slider-next::before{
  content:"";
  display:block;
  width:20px;
  height:20px;
  margin:auto;
  border-left:3px solid rgba(85,85,85,.65);
  border-bottom:3px solid rgba(85,85,85,.65);
  transition:border-color .2s;
}
.o3-slider-prev::before{ transform:rotate(45deg); }
.o3-slider-next::before{ transform:rotate(225deg); }
.o3-slider-prev:hover::before,
.o3-slider-next:hover::before{ border-color:rgba(51,51,51,.85); }

/* Dotnav (UIkit-Optik: 10px-Ringe, aktiv gefuellt) */
.o3-slider-dots{
  list-style:none;
  display:flex;
  justify-content:center;
  gap:10px;
  margin:1.5rem 0 0;
  padding:0;
}
.o3-slider-dots button{
  width:10px;
  height:10px;
  border-radius:50%;
  border:1px solid rgba(102,102,102,.45);
  background:transparent;
  padding:0;
  cursor:pointer;
  transition:background .2s,border-color .2s;
}
.o3-slider-dots button.is-active{
  background:rgba(102,102,102,.65);
  border-color:transparent;
}
/* Kachel: die praxis/*.png (300x278) SIND fertige Karten (Rahmen/Schatten/Titel eingebrannt)
   -> KEIN Card-Chrome, kein Beschnitt (KB quelle-vor-nachbau). Hover: Kachel waechst (Philipp: gut!) */
.o3-slider-card{
  flex:0 0 auto;
  width:clamp(210px,19vw,262px);
  display:block;
  border:0;
  background:transparent;
  box-shadow:none;
  text-decoration:none;
  transition:transform .3s var(--o3-ease,ease);
}
.o3-slider-card:hover,
.o3-slider-card:focus-visible{
  transform:translateY(-6px) scale(1.05);
  outline:none;
}
.o3-slider-card-media img{
  width:100%;
  height:auto;
  display:block;
}

@media (max-width:767.98px){
  .o3-slider-wave{ display:none; }   /* Original: hideonxs hideonsm */
  .o3-slider-band{ padding:3rem 0 2rem; }
}
@media (max-width:575.98px){
  .o3-slider-card{ width:70vw; }
}
@media (prefers-reduced-motion:reduce){
  .o3-slider-card,
  .o3-slider-card-media img{ transition:none; }
}

/* --- aerzte-sprechzeiten --- */
/* === o3-aerzte: Ärzte-Sprechzeiten (Startseite) — 1:1 wie Original (2026-07-03) ===
   Portraits sind FERTIG runde PNGs (320x316, radius 0, kein Schatten) -> KEIN Kreis-Chrome
   (KB quelle-vor-nachbau). Namen Verdana 24/300 #8fbdcc, Rest Verdana #276081. */
.o3-aerzte-card {
  color: var(--o3-primary);
  transition: transform var(--o3-ease, 0.25s ease);
}
.o3-aerzte-card:hover {
  transform: translateY(-4px);
}
.o3-aerzte-avatar img {
  width: min(320px, 100%);
  height: auto;
  display: block;
  margin-inline: auto;
}
.o3-aerzte-name {
  font-family: Verdana, Geneva, sans-serif;
  font-size: 24px;
  font-weight:var(--cassiopeia-font-weight-headings);
  color: #8fbdcc;
}
.o3-aerzte-label {
  font-family: Verdana, Geneva, sans-serif;
  font-size: 24px;
  font-weight: 300;
  color: var(--o3-primary);
}
.o3-aerzte-times {
  font-family: Verdana, Geneva, sans-serif;
  font-size: 16px;
  font-weight: 300;
  color: var(--o3-primary);
  line-height: 1.7;
}

/* --- footer --- */
/* ===== Footer O3 — 1:1 wie Original (2026-07-03, Live gemessen):
   BG #276081 durchgehend (auch Legal!), padding-top 100px. Links Logo (300x65, Einzug ~120)
   + Adresse Quicksand 24/300 (weiterer Einzug ~70). Rechts "Termine..." Quicksand 24/700 +
   hellblaue Chips (#8fbdcc, radius 28, 3/10px, Verdana 16/300) mit "per/oder" dazwischen. ===== */
/* Cassiopeia-Footer-Wrapper + sein .grid-child bringen je 40px Padding mit -> raus
   (Original: 100 oben / 10 unten gesamt) */
footer.container-footer { padding: 0; }
footer.container-footer .grid-child { padding-block: 0; }
.o3-footer {
  background: var(--o3-primary);
  color: #fff;
  padding: 130px 0 10px;   /* +30 oben fuer die Welle (Original: Wellen-Band + 100) */
  position: relative;
  /* KEIN overflow:hidden — die Welle muss aus dem 1184px-Modul ausbrechen (Teal ist full-width vom .container-footer) */
}
/* Weisse 3-Lagen-Welle am Footer-Oberrand (Original 257), FULL-WIDTH ueber den ganzen Bildschirm */
.o3-footer-wave { position:absolute; top:0; left:calc(50% - 50vw); width:100vw; overflow:hidden; line-height:0; pointer-events:none; z-index:0; }
.o3-footer-wave svg { display:block; width:calc(143% + 1.3px); height:110px; }
.o3-footer-wave .shape-fill { fill:#fff; }
.o3-footer-inner, .o3-footer-legal { position:relative; z-index:1; }
.o3-footer-inner {
  max-width: var(--o3-maxw);
  margin-inline: auto;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 2rem;
  align-items: start;
  padding-inline: 1.25rem;
}
.o3-footer-links { padding-left: clamp(0px, 8vw, 120px); }
.o3-footer-logo { width: 300px; max-width: 100%; height: auto; display: block; }
.o3-footer-adresse {
  margin: 1.2rem 0 0 70px;
  font-family: var(--cassiopeia-font-family-headings, "Quicksand", sans-serif);
  font-style: normal;
  font-size: 24px;
  font-weight: 300;
  line-height: 1.6;
  color: #fff;
}
.o3-footer-rechts { padding-left: clamp(0px, 9vw, 140px); }
.o3-footer-heading {
  font-family: var(--cassiopeia-font-family-headings, "Quicksand", sans-serif);
  font-size: 24px;
  /* haengt an derselben Schraube wie alle Ueberschriften (Philipp 17.07.: „alle Ueberschriften
     nicht fett!") — war als einzige noch fest auf 700 verdrahtet. */
  font-weight: var(--cassiopeia-font-weight-headings);
  color: #fff;
  margin: 0 0 1rem;
}
.o3-footer-chips {
  margin: 0;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 10px;                     /* Original-Zeilen-/Spaltenabstand der Chips */
  font-family: Verdana, Geneva, sans-serif;
  font-size: 16px;
  font-weight: 300;
  color: #fff;
}
.o3-chip {
  display: inline-block;
  padding: 3px 10px;
  border-radius: 28px;
  background: #8fbdcc;
  border: 1px solid #8fbdcc;
  color: #fff;
  font-family: Verdana, Geneva, sans-serif;
  font-weight: 300;
  font-size: 16px;
  text-decoration: none;
  transition: background var(--o3-ease, .25s ease);
}
.o3-chip:hover,
.o3-chip:focus-visible {
  background: #7fb0c0;
  color: #fff;
}
/* Legal-Zeile: gleicher Teal wie Footer (Original hat KEINEN dunkleren Balken) */
.o3-footer-legal {
  text-align: center;
  font-size: 16px;
  padding: 3rem 1rem 10px;   /* unten 10px wie Original */
}
.o3-footer-legal a {
  color: #fff;
  text-decoration: none;
}
/* Hover-Feedback ohne Unterstrich (Philipp: „ohne Unterstrich (überall)"). Reines Aufhellen
   statt underline — die Legal-Links sind weiss auf Teal und haetten sonst GAR kein Feedback. */
.o3-footer-legal a:hover,
.o3-footer-legal a:focus-visible {
  opacity: .7;
}
.o3-footer-sep {
  margin: 0 .4rem;
  color: rgba(255, 255, 255, .7);
}
@media (max-width: 991.98px) {
  /* Original mobil: gestapelt, LINKSBUENDIG mit angedeuteter Stufung (nicht zentriert) */
  .o3-footer { padding-top: 3rem; }
  .o3-footer-inner { grid-template-columns: 1fr; gap: 2.5rem; }
  .o3-footer-links { padding-left: 1.5rem; }
  .o3-footer-rechts { padding-left: 1.5rem; }
  .o3-footer-adresse { margin-left: 2.5rem; font-size: 20px; }
}

/* ================= EINE-Behandlung-Sektion + Aktuelles-Sidebar (2026-07-02) ================= */

/* Startseiten-Beitrag: Fonts wie Original (Ueberschrift Open Sans 30px zentriert, Text Verdana 14/300, alles #276081)
   Gewicht seit 17.07. an der zentralen Schraube (Philipp: „alle Ueberschriften nicht fett!") —
   vorher 700 fest. Diese Regel hat Spezifitaet 0-2-2 und schlug damit auch .o3-aktuelles-titel (0-1-0):
   EIN fest verdrahteter Wert, zwei fette Ueberschriften. Original war hier 700 — bewusste Abweichung. */
body.itemid-102 .com-content-article{font-size:14px;font-weight:300;line-height:1.7;color:var(--o3-primary);}
body.itemid-102 .com-content-article p{color:var(--o3-primary);}
body.itemid-102 .com-content-article h1,
body.itemid-102 .com-content-article h2,
body.itemid-102 .com-content-article h3,
body.itemid-102 .com-content-article strong.o3-artikel-titel{
  font-family:'Open Sans',Verdana,sans-serif;font-size:30px;
  font-weight:var(--cassiopeia-font-weight-headings);line-height:1.3;
  color:var(--o3-primary);text-align:center;
}
body.itemid-102 .com-content-article h1 strong,
body.itemid-102 .com-content-article h2 strong,
body.itemid-102 .com-content-article h3 strong{font-weight:700;}

/* EINE-Behandlung: Original-Struktur = Hauptspalte (Ueberschrift + Textgrid) NEBEN News-Spalte
   -> "Aktuelles" beginnt auf Hoehe von "EINE Behandlung bei uns" (wie Original col-lg-9 | col-lg-3) */
.o3-content-row{display:flex;gap:2.5rem;align-items:flex-start;}
.o3-content-main{flex:1 1 auto;min-width:0;}
.o3-content-row > .o3-newscol{flex:0 0 300px;}
/* Ueberschrift bleibt in der Hauptspalte und zentriert damit ueber dem TEXT — nicht ueber die
   volle Seitenbreite (Philipp 2026-07-15; entspricht dem Original: H2 855px breit ueber der
   855px-Textspalte, nicht ueber die 1189px-Zeile). */
/* Original blendet die Spalte unter lg aus (hideonxs/sm/md = <992px) — genau so */
@media (max-width:991.98px){
  .o3-content-row{display:block;}
  .o3-content-row > .o3-newscol{display:none;}
}

/* Aktuelles: News-Kacheln (Bild + Titel-Button slidet beim Hover ein — wie UIkit-Original) */
.o3-aktuelles{display:flex;flex-direction:column;gap:1.5rem;align-items:center;}
.o3-aktuelles-titel{font-family:var(--cassiopeia-font-family-headings);font-weight:var(--cassiopeia-font-weight-headings);font-size:1.5rem;color:var(--o3-primary-light);text-align:center;margin:0 0 .25rem;}
.o3-news-card{position:relative;display:block;width:100%;max-width:300px;overflow:hidden;border-radius:12px;box-shadow:var(--o3-shadow-sm);}
.o3-news-card img{width:100%;height:auto;display:block;}
.o3-news-titel{
  position:absolute;bottom:10px;left:50%;transform:translate(-50%,-8px);opacity:0;
  background:var(--o3-primary);color:#fff;font-family:var(--cassiopeia-font-family-headings);
  font-weight:600;font-size:.9rem;padding:.35rem 1rem;border-radius:999px;white-space:nowrap;
  transition:opacity .35s var(--o3-ease),transform .35s var(--o3-ease);pointer-events:none;
}
.o3-news-card:hover .o3-news-titel,
.o3-news-card:focus-visible .o3-news-titel{opacity:1;transform:translate(-50%,0);}

/* ============================================================================
   ZWEI-KLICK-CONSENT fuer externe Einbettungen (.o3-consent) — Philipp 2026-07-15
   Wiederverwendbar fuer YouTube, OpenStreetMap und kuenftige Videos.

   Prinzip: Vor dem Klick steht NUR lokales HTML/CSS/Bild. Der iframe wird erst per JS
   erzeugt, nachdem der Nutzer eingewilligt hat -> bis dahin verlaesst KEIN Byte den Server.
   Das ist der rechtlich harte Teil (Art. 6 Abs. 1 lit. a DSGVO, § 25 Abs. 1 TDDDG).

   WICHTIG bei neuen Einbettungen:
   - Vorschaubild IMMER lokal. Niemals img.youtube.com/vi/... — das waere genau der
     Vorab-Request, den die ganze Konstruktion verhindern soll.
   - Einwilligung wird NICHT gespeichert (kein localStorage): Speichern waere selbst ein
     Zugriff auf die Endeinrichtung. Es wird pro Seitenaufruf neu gefragt.
   ============================================================================ */
.o3-consent{
  position:relative;
  display:block;
  width:100%;
  aspect-ratio:16/9;
  overflow:hidden;
  border-radius:var(--o3-radius,10px);
  background:var(--o3-primary,#276081);
}
.o3-consent-vorschau{
  position:absolute;inset:0;
  width:100%;height:100%;
  object-fit:cover;
  display:block;
}
/* Abdunkeln, damit der Hinweistext auf jedem Bild lesbar bleibt */
.o3-consent-box{
  position:absolute;inset:0;
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:.9rem;
  padding:1.5rem clamp(1rem,4vw,3rem);
  text-align:center;
  background:rgba(20,40,55,.72);
  color:#fff;
  overflow-y:auto;
}
.o3-consent-titel{
  font-family:var(--cassiopeia-font-family-headings,'Quicksand',sans-serif);
  font-weight:600;font-size:1.15rem;margin:0;color:#fff;
}
.o3-consent-text{
  margin:0;max-width:62ch;
  font-size:.82rem;line-height:1.5;color:#fff;
}
.o3-consent-text a{color:#fff;text-decoration:underline;}   /* hier BEWUSST unterstrichen:
   Rechts-/Pflichtlinks im Einwilligungstext muessen als Link erkennbar sein (vgl. o3k-privacy-link) */
.o3-consent-btn{
  display:inline-flex;align-items:center;gap:.55rem;
  padding:.6rem 1.4rem;
  border:1px solid #fff;border-radius:28px;
  background:#fff;color:var(--o3-primary,#276081);
  font-family:var(--cassiopeia-font-family-headings,'Quicksand',sans-serif);
  font-weight:600;font-size:1rem;cursor:pointer;
  transition:background .2s,color .2s;
}
.o3-consent-btn:hover,.o3-consent-btn:focus-visible{background:var(--o3-primary,#276081);color:#fff;}
.o3-consent-btn::before{content:"▶";font-size:.85em;line-height:1;}
.o3-consent[data-consent-typ="karte"] .o3-consent-btn::before{content:"🗺";}
.o3-consent-fuss{margin:0;font-size:.72rem;opacity:.85;color:#fff;}
.o3-consent-fuss a{color:#fff;text-decoration:underline;}
/* Nach dem Klick eingesetzter iframe */
.o3-consent > iframe{position:absolute;inset:0;width:100%;height:100%;border:0;display:block;}
/* Kein JS -> Hinweis + Direktlink statt eines toten Platzhalters */
.o3-consent-nojs{margin:0;font-size:.78rem;color:#fff;}
@media (max-width:575px){
  .o3-consent{aspect-ratio:4/3;}
  .o3-consent-text{font-size:.75rem;}
  .o3-consent-titel{font-size:1rem;}
}

/* ---------- Sprung-Anker (.sprung) — 1:1 aus dem Original uebernommen ----------
   Migrationsluecke: Die Artikel bringen `<div id="fuss" class="sprung">` mit (9 Artikel:
   18, 37, 46, 47, 49, 50, 51, 52, 53), die zugehoerige CSS-Regel fehlte bei uns komplett.
   Folge: Anker-Sprung landete auf der natuerlichen Position des Ankers -> Ziel verschwand
   hinter dem fixen Header-Clone (60px) und der Artikeltitel war nicht mehr zu sehen.
   Original-Regel (live ausgelesen, unveraendert):
     visibility:hidden; position:absolute; margin:-200px; height:0!important;
   position:absolute + margin:-200px verschieben den Anker 200px NACH OBEN gegenueber seiner
   Flussposition; visibility/height halten ihn unsichtbar und ohne Platzbedarf. Der Sprung landet
   dadurch oberhalb der Ueberschrift -> Titel steht sauber unter dem Header (Philipp 2026-07-15). */
.sprung{visibility:hidden;position:absolute;margin:-200px;height:0 !important;}
/* DSE u.a. tragen die id direkt am <h2> (kein .sprung-Div) -> ohne Offset landet der Anker-Sprung
   (#videos, #karte, #whatsapp, #kontaktformular) unter dem fixen Header-Clone (60px). scroll-margin-top
   schiebt das Ziel sauber darunter (Philipp: ~+100px, 24.07.). Gilt fuer id-Ueberschriften im Artikel-Body. */
.com-content-article__body h2[id],
.com-content-article__body h3[id]{scroll-margin-top:100px;}

/* Slide-in von rechts (Scroll-Reveal-Variante). Wiederverwendbar: Klasse .reveal-right an ein
   beliebiges Element haengen, der IntersectionObserver im globalen Script setzt .is-visible.
   Staffelung optional per .reveal-d1..d4. */
.reveal-right{opacity:0;transform:translateX(70px);transition:opacity .8s var(--o3-ease),transform .8s var(--o3-ease);}
.reveal-right.is-visible{opacity:1;transform:none;}
/* Muss NACH .reveal-right stehen: dessen transition-Shorthand wuerde ein weiter oben
   definiertes transition-delay (.reveal-d1..d4, Z.235) sonst wieder auf 0 zuruecksetzen. */
.reveal-right.reveal-d1{transition-delay:.08s;}
.reveal-right.reveal-d2{transition-delay:.16s;}
.reveal-right.reveal-d3{transition-delay:.24s;}
.reveal-right.reveal-d4{transition-delay:.32s;}

/* Slide-in von LINKS — exaktes Spiegelbild zu .reveal-right (gleiche 70px / .8s), damit sich
   beide Richtungen identisch anfuehlen.
   STAND 2026-07-15: aktuell NICHT im Einsatz — die Arzt-Karten sliden auf Philipps Korrektur hin
   von rechts. Bewusst behalten, damit das Reveal-Set vollstaendig ist (Observer kennt die Klasse
   bereits). Bleibt sie bis zum Deployment ungenutzt: beim Aufraeumen entfernen.
   ACHTUNG beim Anwenden: Zielelement muss block / inline-block / replaced sein — auf
   nicht-ersetzten Inline-Elementen (z.B. ein <a> um ein Bild) wirkt transform NICHT und die
   Animation bleibt still aus. */
.reveal-left{opacity:0;transform:translateX(-70px);transition:opacity .8s var(--o3-ease),transform .8s var(--o3-ease);}
.reveal-left.is-visible{opacity:1;transform:none;}
.reveal-left.reveal-d1{transition-delay:.08s;}
.reveal-left.reveal-d2{transition-delay:.16s;}
.reveal-left.reveal-d3{transition-delay:.24s;}
.reveal-left.reveal-d4{transition-delay:.32s;}
@media (prefers-reduced-motion:reduce){
  .reveal-left{opacity:1;transform:none;transition:none;}
}
@media (prefers-reduced-motion:reduce){
  .reveal-right{opacity:1;transform:none;transition:none;}
  .o3-news-titel{opacity:1;transform:translate(-50%,0);}
}
/* Touch-Geraete: kein Hover -> Titel dauerhaft sichtbar */
@media (hover:none){.o3-news-titel{opacity:1;transform:translate(-50%,0);}}

/* ============================================================================
   SUBPAGE-HEROES  (Sektions-Hero pro Bereich: Eyebrow-Pill + Titel-Box)
   Quelle: astroid `top-a-1-<bereich>-position` (mod_custom), weisser Body-BG,
   NUR Desktop (Original-Klassen hideonxs hideonsm => aus <768px). Die weisse
   3-Lagen-Welle darunter (shape-fill:#FFF) ist weiss-auf-weiss unsichtbar -> weggelassen.
   Komponenten 1:1 aus astroid-CSS: .button-hell (#8fbdcc-Pill, Quicksand-h3 24/1.6)
   + .button-dunkel-gross (#276081-Box, Quicksand 300/40, b=bold). Stagger via
   uk-margin-large-left (Eyebrow 1x=70px, Titel 2x=140px; <1200: 50/100px). */
/* Full-bleed Foto-Hero (Live-Original gemessen): Bild pro Bereich, weisse Welle unten sichtbar.
   Wrapper 100vw x 431px, bg size auto / top-center; Eyebrow x75/y91, Titel x140/y194 (vom Viewport-Rand). */
.o3-subhero{
  position:relative; overflow:hidden;
  width:100vw; margin-left:calc(50% - 50vw);
  height:431px; padding-top:91px;
  background-repeat:no-repeat; background-position:50% 0; background-size:auto;
}
.o3-subhero-praxis{background-image:url(../../../../../images/bilder/titelbild-oben-schmal.webp);}
.o3-subhero-angebot{background-image:url(../../../../../images/bilder/titelbild-angebot.webp);}
.o3-subhero-patienten{background-image:url(../../../../../images/bilder/titelbild-patienten.webp);}
.o3-subhero-kontakt{background-image:url(../../../../../images/bilder/titelbild-kontakt.webp);}
.o3-subhero .o3-subhero-eyebrow{position:relative;z-index:2;margin-left:75px;}
.o3-subhero .o3-subhero-title{position:relative;z-index:2;margin-left:140px;margin-top:57px;}
.o3-subhero .button-hell{display:inline-block;background:#8fbdcc;border:1px solid #8fbdcc;border-radius:28px;color:#fff;padding:3px 10px;text-decoration:none;}
.o3-subhero .button-hell h3{margin:0;color:#fff;font-family:var(--cassiopeia-font-family-headings);font-weight:var(--cassiopeia-font-weight-headings);font-size:24px;line-height:1.6;}
.o3-subhero .button-dunkel-gross{display:inline-block;background:var(--o3-primary);border:1px solid var(--o3-primary);border-radius:28px;color:#fff;font-family:var(--cassiopeia-font-family-headings);font-weight:300;font-size:40px;line-height:1.5;padding:16px 31px;text-decoration:none;}
.o3-subhero .button-dunkel-gross b{font-weight:700;}
/* Weisse 3-Lagen-Welle unten (Original custom-shape-divider-bottom, 204px, rotate 180) — jetzt SICHTBAR auf dem Foto */
.o3-subhero-wave{position:absolute;bottom:0;left:0;width:100%;overflow:hidden;line-height:0;transform:rotate(180deg);z-index:1;}
.o3-subhero-wave svg{position:relative;display:block;width:calc(143% + 1.3px);height:204px;}
.o3-subhero-wave .shape-fill{fill:#fff;}
@media (max-width:1199px){
  .o3-subhero .o3-subhero-eyebrow{margin-left:55px;}
  .o3-subhero .o3-subhero-title{margin-left:110px;}
}
@media (max-width:767px){.o3-subhero{display:none;}}

/* ============================================================================
   SUBPAGE-CONTENT — UIkit-Kompat-Shim (Erweiterung fuer Unterseiten-Inhalte)
   Deckt die im migrierten Content real vorkommenden Klassen ab (Inventar 2026-07-03,
   33 Artikel). Werte 1:1 aus astroid-CSS. Basis-[uk-grid] steht in Abschnitt 8. ==== */

/* --- Grid-Feinheiten --- */
.uk-grid-small{gap:15px;}
/* @s = VIEWPORT >=640 (nicht Container!) -> auch in schmalen Blog-Karten Bild|Text nebeneinander */
.uk-child-width-expand\@s > *{flex:1 1 0;min-width:0;}
@media (max-width:639px){ .uk-child-width-expand\@s > *{flex-basis:100%;} }
@media (min-width:960px){
  .uk-width-1-3\@m{width:calc(33.333% - 1.34rem);flex:0 0 auto;}
  .uk-width-2-3\@m{width:calc(66.666% - 0.67rem);flex:0 0 auto;}
  .uk-width-3-3\@m{width:100%;flex:0 0 auto;}
}
.uk-flex-center{justify-content:center;}
.uk-flex-left{justify-content:flex-start;}
.uk-flex-middle{align-items:center;}
.uk-flex-first{order:-1;}
.uk-flex-last{order:99;}
.uk-margin-medium-left{margin-left:40px;}
.uk-text-secondary{color:#8bbecd;}

/* --- Content-Cards (Bild-Karten) --- */
.uk-card{position:relative;box-sizing:border-box;}
.uk-card-default{background:#fff;color:#666;box-shadow:0 5px 15px rgb(0 0 0 / .08);}
.uk-card-body{display:flow-root;padding:30px;}
.uk-card-title{font-size:1.5rem;line-height:1.4;color:#333;}
.bild-abgerundet{border-radius:30px;box-shadow:5px 5px 10px silver;}
.bild-abgerundet img{border-radius:30px;display:block;}

/* --- Divider mit Icon --- Original nutzt <div class="uk-divider-icon"> (UIkit), NICHT <hr>.
   Der Selektor hiess frueher nur `hr.uk-divider-icon` -> griff nie (Content = <div>), die Trenner
   auf /kontakt u.a. waren unsichtbar. Jetzt beides + Marken-Farben (Ring #8bbecd wie die Deko-Ringe,
   statt Grau). font-size:0 neutralisiert das &nbsp; im div (sonst Extra-Hoehe). Philipp 17.07.2026. */
.uk-divider-icon,hr.uk-divider-icon{position:relative;height:22px;margin:1.6rem 0;border:none;font-size:0;
  background-position:center;background-repeat:no-repeat;
  background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg width='22' height='22' viewBox='0 0 22 22' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle fill='none' stroke='%238bbecd' stroke-width='1.4' cx='11' cy='11' r='6'/%3E%3Ccircle fill='%238bbecd' cx='11' cy='11' r='1.7'/%3E%3C/svg%3E");}
.uk-divider-icon::before,.uk-divider-icon::after,hr.uk-divider-icon::before,hr.uk-divider-icon::after{content:"";position:absolute;top:50%;max-width:calc(50% - 26px);border-bottom:1px solid rgba(139,190,205,.55);}
.uk-divider-icon::before,hr.uk-divider-icon::before{right:calc(50% + 26px);width:100%;}
.uk-divider-icon::after,hr.uk-divider-icon::after{left:calc(50% + 26px);width:100%;}

/* --- Bild-Overlay (uk-inline-clip + slide-top-Caption) wie Original --- */
.uk-inline-clip{overflow:hidden;position:relative;display:inline-block;}
.uk-inline-clip img{display:block;}
.uk-position-bottom{position:absolute;bottom:0;left:0;right:0;}
.uk-transition-slide-top-small{opacity:0;transform:translateY(10px);transition:opacity .3s var(--o3-ease),transform .3s var(--o3-ease);}
.uk-transition-toggle:hover .uk-transition-slide-top-small,
.uk-transition-toggle:focus-within .uk-transition-slide-top-small{opacity:1;transform:translateY(0);}
.button-dunkel-klein{display:inline-block;background:var(--o3-primary);border:1px solid var(--o3-primary);border-radius:28px;color:#fff;font-family:Verdana,sans-serif;padding:1px 20px;text-decoration:none;}
.button-dunkel-klein a,.button-dunkel-klein a:hover{color:#fff;}
@media (hover:none){.uk-transition-slide-top-small{opacity:1;transform:none;}}

/* --- Accordion (ul[uk-accordion]) — No-JS Fallback offen; JS klappt zu + toggelt --- */
ul[uk-accordion]{padding:0;list-style:none;margin:1.5rem 0;}
ul[uk-accordion] > li{border-bottom:1px solid #e5e5e5;}
ul[uk-accordion] > li > .uk-accordion-title{display:block;cursor:pointer;text-decoration:none;padding:.5rem 0;color:var(--o3-primary);position:relative;}
ul[uk-accordion] > li > .uk-accordion-title h3{margin:.3rem 0;font-size:20px;}
.uk-accordion-content{display:block;margin:0 0 1rem;}
/* JS-gesteuert: alle zu ausser .uk-open; Chevron-Indikator */
ul[uk-accordion].js-acc > li > .uk-accordion-content{display:none;}
ul[uk-accordion].js-acc > li.uk-open > .uk-accordion-content{display:block;}
ul[uk-accordion].js-acc > li > .uk-accordion-title::after{content:"";position:absolute;right:6px;top:50%;width:9px;height:9px;border-right:2px solid var(--o3-primary-light);border-bottom:2px solid var(--o3-primary-light);transform:translateY(-70%) rotate(45deg);transition:transform .25s var(--o3-ease);}
ul[uk-accordion].js-acc > li.uk-open > .uk-accordion-title::after{transform:translateY(-30%) rotate(-135deg);}

/* --- Kategorie-Blog (Eigenuebungen cat12, Aktuelles cat13) wie Original ---
   Original rendert das Bild INLINE im Introtext (uk-grid Bild|Text), NICHT als
   separate item-image-Figur. Unsere Artikel haben image_intro gesetzt (fuer das
   Startseiten-Modul 122) -> im Blog-View die Figur ausblenden, damit nur das
   Inline-Bild zeigt (= 1:1 Original, kein Doppelbild). */
.com-content-category-blog__item > figure.item-image{display:none;}
/* 2-Spalten-GRID (rundungsfest; Flex brach bei exakt 2x576+48=1200 um). Einzel-Beitrag = 1 Zelle = halbbreit. */
.com-content-category-blog__items.columns-2{display:grid;grid-template-columns:repeat(2,1fr);gap:2.5rem 3rem;}
.com-content-category-blog__items.columns-2 > .com-content-category-blog__item{min-width:0;}
@media (max-width:767px){.com-content-category-blog__items.columns-2{grid-template-columns:1fr;}}
/* Listing-Typo 1:1 (Live gemessen): Titel 26/300 Open Sans, Untertitel 24/300, keine Unterstreichung */
.com-content-category-blog__item h2{font-size:26px;font-weight:var(--cassiopeia-font-weight-headings);margin:0 0 .6rem;}
.com-content-category-blog__item h2 a{font-family:'Open Sans',Arial,sans-serif;font-weight:var(--cassiopeia-font-weight-headings);color:var(--o3-primary);text-decoration:none;}
.com-content-category-blog__item h3{font-size:24px;font-weight:var(--cassiopeia-font-weight-headings);margin:.2rem 0;}
.com-content-category-blog__item h3 a{color:var(--o3-primary);font-weight:var(--cassiopeia-font-weight-headings);text-decoration:none;}
.com-content-category-blog__item a:hover{text-decoration:none;color:var(--o3-primary-dark);}
/* Kachel-Einleitungsbilder gerundet wie die Beitragsbilder (Gemini-Renders sind voll-bleed/eckig
   -> per CSS runden statt in jedes PNG einbacken; einheitlich fuer alle Kacheln, update-sicher). */
.com-content-category-blog__item img{border-radius:var(--o3-radius);}

/* --- Praxis-Foto-Slider (Praxis + Team, Nachbau mod_uk_slider: 1 Bild pro Ansicht) ---
   Reuse der Slider-Infrastruktur via data-o3-per="1". Original-Bilder 800x518 (joomlaImage),
   uk-border-circle7 ist NIRGENDS definiert -> plane Rechtecke (kein Radius). */
.o3-pslider-section{padding:2.5rem 0 1rem;}
.o3-pslider .o3-slider-card{transition:none;}
.o3-pslider .o3-slider-card:hover,.o3-pslider .o3-slider-card:focus-visible{transform:none;}
/* Original (Live gemessen): Bild rendert in NATIVER Groesse 800x518, ZENTRIERT — nie hochskaliert */
.o3-pslider .o3-slider-card-media{text-align:center;}
.o3-pslider .o3-slider-card-media img{width:auto;max-width:100%;height:auto;display:inline-block;}

/* ============================================================================
   KONTAKT-SEITE — Sub-Module (via {loadmoduleid} im Artikel 37 inline geladen)
   ============================================================================ */
.padding-left{padding-left:30px;}
.uk-visible\@s{display:none;}
@media (min-width:640px){ .uk-visible\@s{display:block;} }
/* text-ecke-Deko (Modul 332): Inline-BG bekommt kein SEF-Rewrite -> Klasse mit CSS-relativem Pfad.
   Kreis-Pattern wie Startseite (Ring 300x222 nativ, Text nistet: dy=88/dx=62 — KB 5b) */
/* ::before statt background am Element: der Ring muss ueber die Textkante ragen duerfen
   (negative background-position wuerde ihn an der Padding-Box abschneiden).
   Mitte (97,96), Shift +27 -> left = 62 - 97 + 27 = -8 ; top = 88 - 96 = -8. */
.o3-kontakt-ecke{position:relative;padding:88px 0 0 62px;}
.o3-kontakt-ecke::before{content:"";position:absolute;top:-8px;left:-8px;width:300px;height:222px;
  background:url("../../../../../images/design/text-ecke-transparent.webp") no-repeat left top;z-index:0;pointer-events:none;}
.o3-kontakt-ecke > *{position:relative;z-index:1;}
/* schmal: Ring buendig an den Rand, Text um die Ringmitte (97/96) eingerueckt */
@media (max-width:575px){.o3-kontakt-ecke{padding:96px 0 0 70px;}.o3-kontakt-ecke::before{left:0;top:0;}}
/* Sprechzeiten-Portraits (wagner-rund/bernhard-rund 320x316, fertig rund -> kein CSS-Radius) */
.o3-sprechzeiten img{max-width:320px;height:auto;}
.o3-sprechzeiten h3{margin:.4rem 0;}
/* OSM-Karte */
.o3-map iframe{display:block;}

/* ============================================================================
   SUBPAGE-INTRO (Original top-c-1 Bild | top-c-2 Text, 2-spaltig ueber dem Artikel)
   Via {loadmoduleid} oben in den Beitrag geladen. Kreis = text-ecke-gross.png (wie Startseite). */
.o3-intro{margin:0 0 1.5rem;}
.o3-intro-grid{display:flex;flex-wrap:wrap;gap:2rem;align-items:start;}
.o3-intro-grid > *{flex:1 1 360px;min-width:0;}
.o3-intro-media{text-align:center;}
.o3-intro-media img{max-width:100%;height:auto;}
/* Eyebrow buendig auf der Bild-Oberkante (Philipp 2026-07-15 fuer /praxis; gleiche Regel wie
   WIR-SIND auf der Startseite) -> padding-top 0, Bild und Text starten beide am Grid-Top.
   Der Ring steht dadurch 128px UEBER der Textbox — diesen Platz liefert .o3-intro per
   padding-top (siehe dort), sonst ragt er in den Subhero und liegt auf dessen FOTO. */
.o3-intro-text{position:relative;padding:0 0 0 5rem;color:var(--o3-primary);}
/* Abstands-Regel: left = 80 - 129 + 35 = -14 ; top = 0 - 128 = -128 (Mitte.y auf Text-Oberkante) */
.o3-intro-text::before{content:"";position:absolute;top:-128px;left:-14px;width:400px;height:296px;
  background:url(../../../../../images/design/text-ecke-gross.webp) no-repeat left top;z-index:0;pointer-events:none;}
.o3-intro-text > *{position:relative;z-index:1;}
.o3-intro-text strong{color:var(--o3-primary);}
.o3-intro-text .uk-margin-xlarge-left{margin-left:20px;}   /* Liste leicht extra eingerueckt (wie Original) */
.o3-intro-text .uk-text-secondary{color:var(--o3-primary-light);}
/* Arztseiten: kleinerer Kreis text-ecke2.png (300x222), Text-Einzug links 60px wie Original.
   padding-top 0 wie .o3-intro-text: Eyebrow buendig auf der Bild-Oberkante. */
.o3-intro-text.o3-intro-ecke2{padding:0 0 0 60px;}
/* text-ecke2.png 300x222, Mitte (97,96), Shift +27 -> left = 60 - 97 + 27 = -10 ; top = 0 - 96 = -96 */
.o3-intro-text.o3-intro-ecke2::before{top:-96px;left:-10px;width:300px;height:222px;background-image:url(../../../../../images/design/text-ecke2.webp);}
/* (Einrueckung fuer ecke2 auf kleinen Screens: siehe Stapel-Regeln weiter unten —
   padding 96/97 haelt Ringmitte auf der Textecke und den Ring innerhalb des Randes) */
/* Text-only Intro (Seiten ohne top-c-2 Bild): eine Spalte, Ring bleibt.
   Hier steht der Text am linken Containerrand -> Ring buendig + Text um die Ringmitte
   einruecken (gleiches Prinzip wie .o3-split-text gestapelt), sonst schneidet der Rand ihn ab. */
.o3-intro-solo .o3-intro-grid > *{flex-basis:100%;}
.o3-intro-solo .o3-intro-text{padding:128px 0 0 94px;}
.o3-intro-solo .o3-intro-text::before{left:0;top:0;}
.o3-intro-solo .o3-intro-text.o3-intro-ecke2{padding:96px 0 0 70px;}
@media (max-width:991px){
  .o3-intro-grid > *{flex-basis:100%;}
  .o3-intro-text{padding:128px 0 0 94px;}
  .o3-intro-text::before{left:0;top:0;}
  .o3-intro-text.o3-intro-ecke2{padding:96px 0 0 70px;}
}
/* ≤575: kleiner Ring. WICHTIG — vorher wurde hier nur die ::before-BOX auf 300x222 gesetzt,
   das Bild blieb text-ecke-gross.png (400x296) und wurde dadurch beschnitten. Jetzt echtes
   text-ecke2.png (Mitte 97/96). */
@media (max-width:575px){
  .o3-intro-text{padding:96px 0 0 70px;}
  .o3-intro-text::before{width:300px;height:222px;background-image:url(../../../../../images/design/text-ecke2.webp);left:0;top:0;}
}

/* ============================================================================
   LEISTUNGEN — Foto-Karten-Grids (Nachbau mod_article_grid 299/300):
   grosse Karten (Rahmen im Bild eingebrannt), Hover = weisser Schleier + Titel
   (uk-transition-fade + uk-overlay-default). Diagnostik 4 Spalten, Konservativ 3. */
.o3-cardgrid{display:grid;gap:15px;margin:1rem 0 2rem;}
.o3-cardgrid-4{grid-template-columns:repeat(4,1fr);}
.o3-cardgrid-3{grid-template-columns:repeat(3,1fr);}
.o3-card{position:relative;display:block;overflow:hidden;text-align:center;}
.o3-card img{width:100%;height:auto;display:block;}
.o3-card-overlay{
  position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  background:rgba(255,255,255,.8);opacity:0;transition:opacity .3s ease;
}
.o3-card-overlay h3{margin:0;color:var(--o3-primary);font-size:1.25rem;padding:0 .5rem;}
.o3-card:hover .o3-card-overlay,.o3-card:focus-visible .o3-card-overlay{opacity:1;}
@media (hover:none){ .o3-card-overlay{opacity:1;background:rgba(255,255,255,.55);} }
@media (max-width:1199px){ .o3-cardgrid-4,.o3-cardgrid-3{grid-template-columns:repeat(2,1fr);} }
@media (max-width:575px){ .o3-cardgrid-4,.o3-cardgrid-3{grid-template-columns:1fr;} }

/* --- Angebot-Slider auf Unterseiten (Original Modul 336, bottom-b-3):
   GLEICHER Karten-Slider wie Startseite, aber weisser BG, kein Band/Welle, KEINE Dots. --- */
.o3-subslider{padding:2rem 0 2.5rem;}
.o3-subslider .o3-slider-prev,
.o3-subslider .o3-slider-next{top:50%;}   /* keine Dots-Zeile herauszurechnen */

/* ============================================================================
   KATEGORIE-VIEWS (Eigenübungen/Aktuelles) — wie Original (Live gemessen 2026-07):
   Content-Fläche #f0f5f5 (full-bleed, wie EINE-Behandlung), h1 40px #276081,
   Kategorie-Beschreibung = uk-grid Bild|Text (Shim vorhanden). */
/* Grau NUR ab dem Blog-Bereich (main) — das Intro (main-top) bleibt wie im Original auf Weiss */
body.itemid-123 .container-component > main,
body.itemid-125 .container-component > main{
  background:var(--o3-band-bg);width:100vw;margin-left:calc(50% - 50vw);margin-top:var(--o3-band-gap);margin-bottom:var(--o3-band-gap);
    padding:var(--o3-band-pad-y) max(1.25rem,calc((100% - var(--o3-maxw))/2)) var(--o3-band-pad-y);
  }
body.itemid-123 .container-component > main > *,
body.itemid-125 .container-component > main > *{max-width:var(--o3-maxw);margin-inline:auto;}
/* Groesse/Gewicht/Farbe jetzt aus der Basisregel + :root — hier bleibt nur der Abstand. */
.blog h1{margin:0 0 1.5rem;}
.category-desc{margin-bottom:2rem;}
.category-desc img{max-width:100%;height:auto;}

/* ============================================================================
   SIDEBAR-RECHTS (Original col-9|col-3): Ärzte-Karten auf Konservativ-Blättern,
   Osteoporose-Box auf Knochendichte. Intros liegen in BANNER (volle Breite),
   Grids in BOTTOM-A — beide damit sidebar-unabhängig (wie Original). */
/* „Ihr Ansprechpartner" — 1:1 nach Original gemessen (dort h3.module-title):
   Quicksand 300, 24px, #276081, LINKSbuendig (die Karten darunter sind zentriert), 32px zur
   ersten Arzt-Karte. Im Original ist das ein leeres Modul, das nur seinen Titel zeigt; unter
   Cassiopeia geht das nicht (noCard-Chrome bricht bei leerem content ab) — deshalb bei uns ein
   normales Custom-Modul mit der Ueberschrift im Inhalt, gleicher Chrome-Stil wie die Arzt-Karten.
   Eigenes Modul (nicht in eine Arzt-Karte gebacken), weil nicht auf jeder Seite beide Aerzte
   stehen — Philipp 2026-07-15. */
.o3-sidebar-heading{
  font-family:var(--cassiopeia-font-family-headings);
  font-weight:var(--cassiopeia-font-weight-headings);
  font-size:24px;
  line-height:1.3;
  color:var(--o3-primary);
  text-align:left;
  /* 16px statt der 32px des Originals: dort sitzt die Ueberschrift im GLEICHEN Modul wie der
     Inhalt, bei uns ist die Arzt-Karte ein EIGENES Modul und bringt selbst margin-top:16px mit.
     16 + 16 = 32px Abstand zur ersten Karte — exakt wie am Original gemessen. */
  margin:0 0 16px;
}
.o3-sidebar-card{text-align:center;margin-bottom:2rem;}
.o3-sidebar-card img{max-width:100%;height:auto;display:block;margin:0 auto;}
.o3-sidebar-name{margin-top:.5rem;}
.o3-sidebar-name a{color:var(--o3-primary-light);font-size:14pt;line-height:1.6;}
/* Intros im banner: selbst boxen (Position ist full-width) */
/* padding-top 128px = Ringhoehe ueber der Textkante. Seit der Eyebrow buendig auf der
   Bild-Oberkante sitzt (padding-top:0 an .o3-intro-text), steht der Ring 128px darueber und
   wuerde sonst in den Subhero ragen — und der hat ein FOTO, der Ring laege mitten drin.
   Mit dem Vorlauf endet der Ring exakt an der Subhero-Unterkante. */
.container-banner .o3-intro{max-width:var(--o3-maxw);margin:0 auto;padding:128px 1.25rem 1rem;}
/* Ausnahmen: Text-only-Intros und gestapelte Ansicht haben den Ring INNERHALB der Textbox
   (padding-top dort) -> hier keinen zusaetzlichen Vorlauf, sonst doppelter Leerraum. */
.container-banner .o3-intro-solo{padding-top:2.5rem;}
@media (max-width:991px){ .container-banner .o3-intro{padding-top:2.5rem;} }
/* ---- Modul 129 „Kontakt Text unten": Eyebrow + Ueberschriften einfaerben (Philipp 17.07.2026) ----
   Waren #333 — nicht durch einen Migrationsfehler, sondern weil das ORIGINAL dort auch keine Farbe
   setzt (Crawl geprueft: identisches Markup, nur inline font-size). Bewusste Abweichung in der
   Feintuning-Phase: angleichen an das Intro-Muster DERSELBEN Seite (.o3-intro-text{color:var(--o3-primary)}),
   wo „SIE MOECHTEN"/„Kontakt mit uns aufnehmen" exakt dieselbe Machart haben (span 14pt + strong 22px/bold)
   und in #276081 stehen. Der Eyebrow wirkt dort heller — durch Gewicht 400, NICHT durch die Farbe.
   Nur die Ueberschriften-Elemente, nicht der Fliesstext (Philipp nannte Eyebrow + Ueberschrift).
   Die #8bbecd-Akzente ("dringliche Behandlungsbeduerftigkeit") tragen eine INLINE-Farbe und bleiben
   unberuehrt — inline schlaegt Stylesheet. */
.o3-kontakt-text strong{color:var(--o3-primary);}
/* Rechte Spalte („Hausarztvermittlung:") auf die Hoehe der LINKEN Ueberschrift
   („in Kontakt mit uns treten:") bringen — Philipp 17.07.
   Hergeleitet, nicht geraten:  88px = Ring-Vorlauf der linken Spalte (.o3-kontakt-ecke, Z.1190),
   damit beide Spalten gleich starten,  + 32px = die Eyebrow-Zeile („WENN SIE"), die es rechts
   nicht gibt.  Ersetzt drei `<div class="uk-visible@s">&nbsp;</div>`-Spacer (3x28=84px), die das
   Padding nur ungefaehr nachahmten und die Zielhoehe nie exakt treffen konnten. */
.o3-kontakt-text > div:not(.o3-kontakt-ecke){padding-top:120px;}
.o3-kontakt-text p > span{color:var(--o3-primary);}

/* Grids/WIR LEGEN in bottom-a: boxen wie Content */
.container-bottom-a .o3-grid-heading,.container-bottom-a .o3-cardgrid,.container-bottom-a .o3-intro{max-width:var(--o3-maxw);margin-left:auto;margin-right:auto;}
.container-bottom-a .o3-cardgrid{margin-bottom:2rem;}
/* Ring-Vorlauf AUCH hier — dieselbe Regel wie oben bei .container-banner (Z.1283), sie fehlte
   in bottom-a schlicht. Ohne sie hat .o3-intro padding-top:0, der Ring steht aber unveraendert
   96px (ecke2) bzw. 128px ueber der Textkante -> er ragte auf /leistungen exakt 64px in die
   untere Bildreihe (gemessen 17.07.: Ring-Oberkante 2045 vs. Grid-Unterkante 2109).
   Regel wie ueberall: padding-top == Ringueberstand -> der Ring endet buendig an der
   Sektionsoberkante und beisst sich nie mit dem, was darueber liegt. */
.container-bottom-a .o3-intro{padding-top:128px;}                        /* normaler Ring: -128px */
.container-bottom-a .o3-intro:has(.o3-intro-ecke2){padding-top:96px;}    /* ecke2-Ring:    -96px  */
@media (max-width:991px){ .container-bottom-a .o3-intro,
                          .container-bottom-a .o3-intro:has(.o3-intro-ecke2){padding-top:2.5rem;} }
