/* Noto Serif für alle eingebetteten Nimbuscloud-Ansichten laden. */

@import url("https://fonts.bunny.net/css?family=noto-serif:400,500,600");

/* 
 * ==================================================
 * 1. Grundlagen: Zurücksetzung, Farben und Schrift
 * ==================================================
  */

/* Standardkommentare bei der Auslieferung der Instanz - sollten drin bleiben
Grundlegende Zurücksetzung für alle Elemente */

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

/* Schriftarten: ursprünglich mitgelieferter, deaktivierter Import bleibt als Referenz erhalten.
@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap'); */

/* Zentrale Gestaltungsvariablen: Markenfarben sowie Farben und Abstände für Links, Buttons, Tabellen, Infokästen und mobile Kurskarten. */

:root {
  --color-brand-green-500: oklch(23.3% 0.0426 179); /* Dark Green */
  --color-brand-green-400: oklch(27.6% 0.0531 173); /* Velvet Green */
  --color-brand-green-300: oklch(38.9% 0.0584 172); /* Middle Green */
  --color-brand-green-200: oklch(58.5% 0.07 161); /* Grass Green */
  --color-brand-green-100: oklch(72.3% 0.0726 160); /* Sage Green */

  --color-brand-off-white: oklch(96.7% 0.00541 95.1); /* Off White */
  --color-brand-yellow: oklch(90% 0.108 95.3); /* Yellow */
  --color-brand-orange: oklch(69.7% 0.174 37.5); /* Orange */
  --color-brand-purple: oklch(83.3% 0.119 314); /* Lilac */

  --color-background: transparent;
  --color-foreground: oklch(20% 0.00791 95.5);
  --color-border: oklch(0.922 0 0);
  --color-destructive: oklch(0.577 0.245 27.325);

  /* Farbschema - Primärfarben und abgeleitete Farben */
  --primary-color: var(
    --color-brand-green-400
  ); /* Hauptfarbe aus der grünen Markenpalette */
  --primary-light: var(
    --color-brand-green-300
  ); /* Hellere Version der Hauptfarbe */
  --primary-dark: var(
    --color-brand-green-500
  ); /* Dunklere Version der Hauptfarbe */
  --complementary-color: var(
    --color-brand-orange
  ); /* Akzentfarbe aus der Markenpalette */

  /* Neutrale Hintergrund- und Textfarben */
  --neutral-light: #e5e5e5; /* Heller neutraler Grauton */
  --neutral-dark: var(--color-foreground); /* Dunkle Textfarbe */

  /* Hintergrundfarben */
  --white: var(--color-background); /* Heller Seitenhintergrund */
  --bg-color: transparent; /* Transparenter Hintergrund des eingebetteten Dokuments */

  /* Textfarben */
  --color-font: var(--neutral-dark); /* Standard-Textfarbe */
  --font-family: "Noto Serif", Georgia, serif; /* Standardschrift */

  /* Link-Farben */
  --link-color: var(--color-brand-green-300); /* Standardfarbe für Textlinks */
  --link-visited: var(--color-brand-green-400); /* Farbe für besuchte Links */
  --link-hover: var(--color-brand-green-200); /* Farbe für Hover-Links */

  /* Buttons */
  --bt-color: transparent; /* Hintergrundfarbe-Button */
  --bt-color-hover: transparent; /* Farbe Button Hover State */
  --bt-color-font: var(--color-brand-green-300); /* Schriftfarbe Button */
  --bt-color-font-hover: var(
    --color-brand-green-400
  ); /* Schriftfarbe Hoverstate */
  --bt-border-radius: 0px; /* Eckenrundung der Schaltflächen */
  --bt-padding: 5px 14px; /* Button-Innenabstand */
  --bt-transition: all 0.15s; /* Dauer der Button-Übergänge */

  /* Kurs- und Termintabellen */
  --th-bg-color: rgba(0, 0, 0, 0.05); /* Hintergrundfarbe für Tabellenköpfe */
  --th-color-font: var(--primary-dark); /* Schriftfarbe für Tabellenköpfe */
  --tr-bg-color-odd: transparent; /* Hintergrundfarbe für ungerade Tabellenzeilen */
  --tr-bg-color-even: rgba(
    0,
    0,
    0,
    0.02
  ); /* Hintergrundfarbe für gerade Tabellenzeilen */
  --table-margin: 0px; /* Tabellenabstand */
  --table-width: 100%; /* Tabellenbreite */

  /* Anmeldeformular: AlertBox */
  --alert-bg: transparent; /* Hintergrundfarbe für Alertbox */
  --alert-bo: var(
    --color-border
  ); /* Rahmenfarbe für Alertbox - leicht sichtbar */
  --alert-border-radius: 0px; /* Eckenrundung für Alertbox */

  /* Mobile Kurskarten */
  --mobile-card-margin: 0px; /* Abstand für Kartendarstellung auf Mobilgeräten */
  --mobile-card-shadow: none; /* Schatten der mobilen Kurskarten */
  --mobile-card-border-radius: 0px; /* Eckenrundung der mobilen Kurskarten */
}

/* Schriftglättung und Farbe markierter Texte im gesamten eingebetteten Nimbuscloud-Dokument. */

:root {
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;

  ::selection {
    background-color: color-mix(
      in oklab,
      var(--color-brand-green-100) 50%,
      transparent
    );
  }
}

/* Grundschrift, Textfarbe und transparenter Hintergrund aller eingebetteten Ansichten. */

html {
  overflow: hidden;
}

body {
  font-size: 15px;
  font-family: var(--font-family);
  background-color: var(--bg-color);
  color: var(--color-font);
}

/* Gemeinsame Schrift und Abstände der Überschriften; vorhandene Selektoren unverändert übernommen. */

h1,
h2,
h3,
.h1,
.h2,
e .h3 {
  margin-top: 0;
  font-weight: 300;
  font-family: var(--font-family);
  color: var(--color-font);
}

/* Hauptüberschrift, unter anderem über der Kurstabelle. */

h1 {
  font-weight: 600;
  text-align: center;
  color: var(--color-font);
  padding: 10px 0px;
}

/* Hervorhebungen und Abschnittstitel mit <strong>. */

strong {
  font-weight: 600;
}

/* Font Awesome 5 Pro: vorhandene Symbole mit Regular-Gewicht statt Solid darstellen; benötigt die passende geladene Schrift. */

.fa,
.fas {
  font-weight: 400; /* Regular; Solid verwendet 900 */
}

/* Bootstrap-Container: seitliche Innenabstände entfernen; die umgebende Website übernimmt den äußeren Abstand. */

.container {
  padding-inline: 0;
}

/* 
 * ==================================================
 * 2. Allgemeine Links und Schaltflächen
 * ==================================================
  */

/* Allgemeine Textlinks, zum Beispiel PDF- und iCAL-Downloads unter der Terminliste. */

a {
  color: var(--link-color);
  text-decoration: none;
  transition: color 0.3s ease;
}

/* Bereits besuchte Textlinks. */

a:visited {
  color: var(--link-visited);
}

/* Textlinks bei Mauszeigerkontakt und Tastaturfokus. */

a:hover,
a:focus {
  color: var(--link-hover);
  text-decoration: underline;
}

/* Nimbuscloud-Schaltflächen, zum Beispiel „Anmeldung“ in der Kursliste und Aktionen im Formular. */

.btn-default,
.btn-primary {
  text-decoration: none;
  display: inline-block;
  padding: var(--bt-padding);
  background-color: var(--bt-color);
  color: var(--bt-color-font);
  transition: var(--bt-transition);
  border-radius: var(--bt-border-radius);
  border: 1.5px solid
    color-mix(in oklab, var(--color-brand-green-300) 50%, transparent);
  box-shadow: none;
  min-width: 120px;
  text-align: center;
  font-family: var(--font-family);
  font-size: 13.875px;
}

/* Besuchte Schaltflächen behalten die festgelegten Buttonfarben. */

.btn-default:visited,
.btn-primary:visited {
  text-decoration: none;
  display: inline-block;
  /* padding: var(--bt-padding); */
  background-color: var(--bt-color) !important;
  color: var(--bt-color-font);
  transition: var(--bt-transition);
}

/* Schaltflächen bei Mauszeigerkontakt. */

.btn-default:hover,
.btn-primary:hover {
  text-decoration: none;
  display: inline-block;
  padding: var(--bt-padding);
  background-color: var(--bt-color-hover) !important;
  border: 1.5px solid var(--color-brand-green-300);
  color: var(--bt-color-font-hover);
  box-shadow: none;
  transform: none;
}

/* Schaltflächen beim Drücken leicht verkleinern. */

.btn-default:active,
.btn-primary:active {
  --tw-scale-x: 98%;
  --tw-scale-y: 98%;
  scale: var(--tw-scale-x) var(--tw-scale-y);
}

/* Schaltflächen mit Tastaturfokus. */

.btn-default:focus,
.btn-primary:focus {
  background-color: var(--bt-color-hover) !important;
  border: 1.5px solid var(--color-brand-green-300);
  color: var(--bt-color-font-hover);
}

/* Deaktivierte Schaltflächen visuell abschwächen. */

.btn-default.disabled,
.btn-primary.disabled {
  background-color: var(--bt-color);
  color: var(--bt-color-font);
  border: 1.5px solid var(--color-brand-green-300);
  opacity: 0.5;
}

/* „Lesen“-Links bei AGB und Datenschutz als rahmenlose Inline-Schaltflächen darstellen. Diese Basisregel bleibt vor den mobilen Buttonregeln; die spätere Formularregel entfernt deren zusätzliche Linkabstände. */

.agb-text .btn,
.privacy-text .btn,
.additionalInfo-text .btn {
  border: none;
  text-decoration: underline;
  text-underline-offset: 1px;
  text-decoration-color: color-mix(in oklab, currentColor 50%, transparent);
  text-decoration-thickness: 0.75px;
  display: inline-block;
  min-width: auto;
  padding: 0;
  transform: translateY(-1px);
}

/* Mobile Schaltflächen; die Reihenfolge der Basis- und Zustandsregeln bleibt erhalten. */

@media screen and (max-width: 600px) {
  /* Mobile Standardbuttons: automatische Breite und vertikaler Abstand. */
  .btn-default {
    width: auto; /* Statt 100% */
    margin: 10px auto; /* Zentriert den Button */
    display: inline-block; /* Ermöglicht die Zentrierung */
  }
  /* Mobile Buttonbasis; nachfolgende Zustandsregeln behalten ihre bisherige Reihenfolge. */

  .btn,
  .btn-primary {
    display: block;
    text-align: center;
    margin: 10px auto; /* Zentriert den Button */
    /* padding: 0.2em 0.6em; */
    width: auto; /* Automatische Breite basierend auf Inhalt */
    /* max-width: 80%; Maximale Breite begrenzen */
  }

  /* Gemeinsame mobile Darstellung normaler, besuchter und überfahrener Buttons. */
  .btn-default,
  .btn-primary,
  .btn-default:hover,
  .btn-primary:hover,
  .btn-default:visited,
  .btn-primary:visited {
    width: auto;
    margin: 10px auto;
    display: inline-block;
    text-align: center;
  }
  /* Mobile Buttonfarben bei Mauszeigerkontakt. */

  .btn-default:hover,
  .btn-primary:hover {
    background-color: var(--bt-color-hover) !important;
    border: 1.5px solid var(--color-brand-green-300);
    color: var(--bt-color-font-hover);
  }
}

/* 
 * ==================================================
 * 3. Kursliste und gemeinsame Tabellenregeln
 * ==================================================
  */

/* Gemeinsame Tabellenbasis für Kursliste und Terminübersichten: Breite, Außenabstand und zusammenfallende Rahmen. */

table {
  margin: var(--table-margin);
  border-collapse: collapse;
  width: var(--table-width);
}

.table > tbody > tr > td {
  cursor: default;
}

/* Den zusätzlichen Bootstrap-Außenabstand unter der Kursliste entfernen; der Nimbus-Höhenmarker bleibt im Layout. */

#courses-table {
  margin-bottom: 0;
}

/* Tabellenköpfe: Hintergrund und Schriftgewicht. */

th {
  background: var(--th-bg-color);
  font-weight: 500;
}

/* Tabellenzeilen: Übergang und Mauszeiger. */

tr {
  transition: all 0.2s ease-in;
  cursor: pointer;
}

/* Ungerade Kurszeilen: Hintergrundfarbe. */

tr.odd td {
  background-color: var(--tr-bg-color-odd) !important;
}

/* Gerade Kurszeilen: Hintergrundfarbe. */

tr.even td {
  background-color: var(--tr-bg-color-even) !important;
}

/* Bootstrap-Zellrahmen in Tabellen mit .table entfernen. */

.table > thead > tr > th,
.table > tbody > tr > th,
.table > tfoot > tr > th,
.table > thead > tr > td,
.table > tbody > tr > td,
.table > tfoot > tr > td {
  border: none;
}

/* Kursliste: Spalten für Anmerkungen, Lehrkräfte und Standort ausblenden. */

td.col-remarks,
th.col-remarks,
th.col-teacher,
td.col-teacher,
th.col-location,
td.col-location {
  display: none !important;
}

/* Einzelterminliste: die zusätzliche „Wart“-Spalte ausblenden. */

td.event-block {
  display: none;
}

/* Kursliste: die aufklappbaren Einzeltermine zunächst ausblenden; betrifft nicht die Terminübersicht im Anmeldeformular (.showEvents). */

.course-events {
  display: none;
}

/* Interne Kurskennungen in allen Ansichten ausblenden. */

.course-key {
  display: none !important;
}

/* Kursnamen in Kursliste und Anmeldeinformationen hervorheben. */

.course-displayName {
  font-weight: 500;
}

/* Bewusst ausgeblendete Spalte */

.col-events {
  display: none !important;
}

.type-header-name {
  display: none !important;
}

.group-level-item-name {
  padding-bottom: 16px;
}

.info-text * {
  border-radius: 0px !important;
}

/* Desktop-Kurslisten: gleiche Spaltenbreiten über getrennte Tabellen und Iframes hinweg. Nur die Kurstabellen erfassen, nicht die verschachtelten Terminlisten. */

@media screen and (min-width: 601px) {
  table:has(> thead > tr > .col-coursename) {
    table-layout: fixed;
  }

  th.col-coursename {
    width: 23%;
  }

  th.col-firstEvent {
    /* Die Datumsspalte erhält den Rest nach Kursname, Preis und Anmeldung. */
    width: auto;
  }

  th.col-price {
    width: 15%;
  }

  /* Die unbenannte letzte Spalte enthält die Anmeldung. Prozent-/Pixel-Berechnungen werden bei Tabellenzellen als auto behandelt; deshalb eine feste Breite verwenden. */
  table:has(> thead > tr > .col-coursename) > thead > tr > th:last-child {
    width: 152px;
  }
}

/* Mobile Kursliste: Tabellenzeilen werden zu beschrifteten Karten. Einige enthaltene Tabellenregeln gelten auch außerhalb von #courses-table. */

@media screen and (max-width: 600px) {
  /* Tabellenköpfe allgemein und die Terminanzahl der Kursliste auf kleinen Bildschirmen ausblenden. */
  thead,
  #courses-table > tbody > tr:nth-child(odd) > td.col-events,
  #courses-table > tbody > tr:nth-child(even) > td.col-events {
    display: none;
  }

  .datepicker thead,
  #courses-table > tbody > tr:nth-child(odd) > td.col-events,
  #courses-table > tbody > tr:nth-child(even) > td.col-events {
    display: table-header-group;
  }

  /* Benannte Kursspalten untereinander darstellen; die Regel gilt für Tabellenzellen mit „col-“ im Klassennamen. */
  table td[class*="col-"],
  table th[class*="col-"] {
    display: block;
  }
  /* Streifenhintergründe der geraden Tabellenzeilen mobil entfernen. */

  tr.even td {
    background-color: transparent !important;
  }

  /* Streifenhintergründe der ungeraden Tabellenzeilen mobil entfernen. */

  tr.odd td {
    background-color: transparent !important;
  }

  /* Kursliste einschließlich verschachtelter Tabellen in eine Blockdarstellung überführen. */
  #courses-table table,
  #courses-table tr,
  #courses-table tbody,
  #courses-table td,
  #courses-table th {
    display: block;
    border: none;
  }
  /* Kurszeilen als einzelne mobile Karten darstellen. */
  #courses-table > tbody > tr:nth-child(odd),
  #courses-table > tbody > tr:nth-child(even) {
    background-color: transparent;
    color: var(--color-font);
    border: 1px solid var(--color-brand-green-400);
    border-radius: var(--mobile-card-border-radius);
    margin: var(--mobile-card-margin);
    margin-bottom: 12px;
    box-shadow: var(--mobile-card-shadow);
    padding: 12px;
    transition: all 0.3s ease;
  }
  /* Zusätzliche Bewegung und Schatten beim Überfahren mobiler Kurskarten unterbinden. */
  #courses-table > tbody > tr:hover {
    box-shadow: none;
    transform: none;
  }
  /* Ersatzbeschriftungen vor den Werten der mobilen Kurskarten. */
  #courses-table tbody tr:nth-child(even) td.col-coursename:before,
  #courses-table tbody tr:nth-child(odd) td.col-coursename:before {
    content: "Kurs:";
  }

  #courses-table tbody tr:nth-child(even) td.col-location:before,
  #courses-table tbody tr:nth-child(odd) td.col-location:before {
    content: "Ort:";
  }

  #courses-table tbody tr:nth-child(even) td.col-firstEvent:before,
  #courses-table tbody tr:nth-child(odd) td.col-firstEvent:before {
    content: "Einstieg: ";
  }

  #courses-table tbody tr:nth-child(even) td.col-events:before,
  #courses-table tbody tr:nth-child(odd) td.col-events:before {
    content: "Terminanzahl: ";
  }

  #courses-table tbody tr:nth-child(even) td.col-price:before,
  #courses-table tbody tr:nth-child(odd) td.col-price:before {
    content: "Preis: ";
  }

  #courses-table tbody tr:nth-child(even) td.col-remarks:before,
  #courses-table tbody tr:nth-child(odd) td.col-remarks:before {
    content: "Anmerkungen: ";
  }

  /* Tabellenwerte mobil rechts ausrichten; speziellere Terminregeln setzen dies später zurück. */
  td {
    text-align: right;
  }
  /* Ergänzte Zellbeschriftungen links neben den jeweiligen Werten platzieren. */
  td::before {
    float: left;
    margin-right: 3rem;
    font-weight: bold;
  }
  /* Kursnamen innerhalb der mobilen Karten hervorheben. */
  #courses-table > tbody > tr:nth-child(odd) > td.col-coursename,
  #courses-table > tbody > tr:nth-child(even) > td.col-coursename {
    font-weight: bold;
  }
}

/* Mobile Tabellenaktionen: Diese Zentrierung folgt auf die allgemeine rechte Zellenausrichtung. */

@media screen and (max-width: 600px) {
  /* Buttons innerhalb von Tabellenzellen zentrieren; folgt auf die allgemeine mobile Zellenausrichtung. */
  td:has(.btn-default),
  td:has(.btn-primary) {
    text-align: center;
  }
}

/* 
 * ==================================================
 * 4. Kurstypauswahl: Karten für die angebotenen Tänze
 * ==================================================
  */

/* Kurstypauswahl: Überschrift über den Karten, bevor ein bestimmter Kurs gewählt wurde. */

.types-intro h2 {
  color: var(--primary-dark);
  font-weight: 400;
  margin-bottom: 25px;
  text-align: center;
  padding: 15px 0;
  border-bottom: 1px solid var(--neutral-light);
}

/* Kurstypkarten nebeneinander anordnen und bei Platzmangel umbrechen. */

.type-container {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 20px;
  margin: 0 auto;
  max-width: 1200px;
  padding: 0 15px;
}

/* Einzelne Kurstypkarte mit Bild, Beschreibung und weiterführendem Link. */

.type-item {
  background-color: #ffffff;
  border-radius: 6px;
  box-shadow: 0 3px 10px rgba(168, 3, 37, 0.08);
  margin-bottom: 25px;
  overflow: hidden;
  transition: all 0.3s ease;
  width: 100%;
  max-width: 350px;
  display: flex;
  flex-direction: column;
  border: 1px solid rgba(168, 3, 37, 0.05);
}

/* Kurstypkarte bei Mauszeigerkontakt anheben. */

.type-item:hover {
  box-shadow: 0 5px 15px rgba(168, 3, 37, 0.15);
  transform: translateY(-3px);
}

/* Bildfläche einer Kurstypkarte. */

.type-image {
  width: 100%;
  height: 200px;
  overflow: hidden;
  background-color: var(--primary-color);
  position: relative;
}

/* Bild innerhalb der Kurstypkarte flächig zuschneiden. */

.type-image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.5s ease;
}

/* Bild bei Mauszeigerkontakt über der Karte vergrößern. */

.type-item:hover .type-image img {
  transform: scale(1.05);
}

/* Text- und Linkbereich unter dem Kurstypbild. */

.type-wrapper {
  padding: 20px;
  display: flex;
  flex-direction: column;
  flex-grow: 1;
}

/* Name des Kurstyps. */

.type-item-name {
  color: var(--primary-dark);
  font-size: 18px;
  font-weight: 600;
  margin-bottom: 10px;
}

/* Kurzbeschreibung des Kurstyps. */

.type-item-teaser {
  color: var(--color-font);
  margin-bottom: 15px;
  font-size: 14px;
  line-height: 1.5;
  flex-grow: 1;
}

/* Leere Kurzbeschreibungen ausblenden. */

.empty-teaser {
  display: none;
}

/* Abstand vor „Mehr erfahren“-Links für Kurstypen und Kurstypgruppen. */

.type-item-link,
.type-item-group-link {
  margin-top: 10px;
}

/* Darstellung der weiterführenden Kurstyp- und Gruppenlinks. */

.type-item-link a,
.type-item-group-link a {
  display: inline-block;
  color: var(--link-color);
  text-decoration: none;
  font-weight: 500;
  padding: 5px 0;
  position: relative;
  transition: all 0.3s ease;
}

/* Pfeil hinter den weiterführenden Links ergänzen. */

.type-item-link a:after,
.type-item-group-link a:after {
  content: "→";
  margin-left: 5px;
  transition: transform 0.3s ease;
}

/* Linkfarbe bei Mauszeigerkontakt. */

.type-item-link a:hover,
.type-item-group-link a:hover {
  color: var(--primary-color);
}

/* Pfeil bei Mauszeigerkontakt verschieben. */

.type-item-link a:hover:after,
.type-item-group-link a:hover:after {
  transform: translateX(3px);
}

/* Bildbereich bei Kurstypen ohne Bild ausblenden. */

.type-no-image .type-image {
  display: none;
}

/* Breite von Kurstypkarten ohne Bild begrenzen. */

.type-no-image {
  max-width: 300px;
}

/* 
 * ==================================================
 * 5. Level-Auswahl innerhalb eines Kurstyps
 * ==================================================
  */

/* Level-Auswahl: Überschrift des bereits ausgewählten Kurstyps. */

.type-header-name h2 {
  color: var(--primary-dark);
  font-weight: 400;
  text-align: center;
  padding: 15px 0;
  margin-bottom: 20px;
  border-bottom: 1px solid var(--neutral-light);
}

/* Kurstypbild oberhalb der Level-Karten flächig zuschneiden. */

.type-header-image:not(:has(img)) {
  /* Nimbus liefert den Container auch ohne Bild; mobil würde er 180px Leerraum belegen. */
  display: none;
}

.type-header-image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* Level-Karten nebeneinander anordnen und bei Platzmangel umbrechen. */

.level-container {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 20px;
  margin: 0 auto;
  max-width: 1200px;
  padding: 0 15px;
}

/* Einzelne Level-Karte mit Bild, Beschreibung und Terminlink. */

.level-item {
  background-color: #ffffff;
  border-radius: 6px;
  box-shadow: 0 3px 10px rgba(168, 3, 37, 0.08);
  margin-bottom: 20px;
  overflow: hidden;
  transition: all 0.3s ease;
  width: 100%;
  max-width: 350px;
  display: flex;
  flex-direction: column;
  border: 1px solid rgba(168, 3, 37, 0.05);
}

/* Level-Karte bei Mauszeigerkontakt anheben. */

.level-item:hover {
  box-shadow: 0 5px 15px rgba(168, 3, 37, 0.15);
  transform: translateY(-3px);
}

/* Bildfläche einer Level-Karte. */

.level-image {
  width: 100%;
  height: 180px;
  overflow: hidden;
  background-color: var(--primary-light);
  position: relative;
}

/* Bild innerhalb der Level-Karte flächig zuschneiden. */

.level-image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.5s ease;
}

/* Level-Bild bei Mauszeigerkontakt über der Karte vergrößern. */

.level-item:hover .level-image img {
  transform: scale(1.05);
}

/* Text- und Linkbereich unter dem Level-Bild. */

.level-wrapper {
  padding: 20px;
  display: flex;
  flex-direction: column;
  flex-grow: 1;
}

/* Name des Levels. */

.level-item-name {
  color: var(--primary-dark);
  font-size: 18px;
  font-weight: 600;
  margin-bottom: 10px;
}

/* Kurzbeschreibung des Levels. */

.level-item-teaser {
  color: var(--color-font);
  margin-bottom: 15px;
  font-size: 14px;
  line-height: 1.5;
  flex-grow: 1;
}

/* Abstand vor dem Link „Infos & Termine“. */

.level-item-link {
  margin-top: 10px;
}

/* Link „Infos & Termine“ als Schaltfläche darstellen. */

.level-item-link a {
  display: inline-block;
  padding: 8px 16px;
  background-color: var(--primary-color);
  color: white;
  text-decoration: none;
  border-radius: 4px;
  font-weight: 500;
  transition: all 0.3s ease;
  border: 1px solid transparent;
  box-shadow: 0 2px 4px rgba(168, 3, 37, 0.2);
}

/* Terminlink bei Mauszeigerkontakt. */

.level-item-link a:hover {
  background-color: white;
  color: var(--primary-color);
  border: 1px solid var(--primary-color);
  box-shadow: 0 4px 8px rgba(168, 3, 37, 0.2);
  transform: translateY(-1px);
}

/* Ausführliche Beschreibung des Kurstyps in der Level-Ansicht. */

.type-description {
  display: none;
  /* max-width: 800px;
  margin: 0 auto 30px;
  padding: 0 20px;
  color: var(--color-font);
  line-height: 1.6;
  text-align: center; */
}

.nimbus-bridge-label {
  display: none !important;
}

/* Gemeinsame mobile Anpassungen der Kurstyp- und Level-Karten. */

@media screen and (max-width: 600px) {
  /* Kurstyp- und Level-Karten auf Mobilgeräten untereinander zentrieren. */
  .type-container,
  .level-container {
    flex-direction: column;
    align-items: center;
  }
  /* Breite beider Kartenarten mobil begrenzen. */

  .type-item,
  .level-item {
    max-width: 90%;
  }

  /* Höhe des Kurstyp-Kopfbilds auf Mobilgeräten. */

  .type-header-image {
    height: 180px;
  }
}

/* 
 * ==================================================
 * 6. Anmeldeformular: Kursinformationen und Einzeltermine
 * ==================================================
  */

.showEvents a {
  text-decoration: underline;
  text-underline-offset: 2px;
}

/* Infokasten im Anmeldeformular: Kursname, Datum, Uhrzeit, Lehrkraft, Standort und weitere Kursinformationen. */

.alert {
  border-radius: 0;
}

.alert-info {
  color: var(--color-font);
  background: var(--alert-bg);
  border-color: var(--alert-bo);
  border-radius: var(--alert-border-radius);
}

.alert-warning {
  border-color: transparent;
  background-color: transparent;
  padding: 0;
  margin-bottom: 0;
}

.alert-warning * {
  border-radius: 0px !important;
}

/* Mobile Terminübersicht im Anmeldeformular; unabhängig von der aufklappbaren Terminliste .course-events. */

@media screen and (max-width: 600px) {
  /* „Alle Termine zu diesem Angebot“ im Anmeldeformular: Tabelle und Tabellenkörper als volle Blöcke darstellen. */

  .showEvents > table,
  .showEvents > table > tbody {
    display: block;
    width: 100%;
    margin: 0;
  }

  /* Jeder Termin erhält eine schmale Nummernspalte und eine flexible Inhaltsspalte. */

  .showEvents .course-event-item {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    gap: 0.25rem 0.75rem;
    padding: 1rem 0;
    border-bottom: 1px solid #ddd;
  }

  /* Terminzellen links ausrichten und umbrechen lassen, statt mehrere schmale Tabellenspalten zusammenzudrücken. */

  .showEvents .course-event-item > td {
    display: block;
    width: auto;
    min-width: 0;
    padding: 0;
    text-align: left;
    white-space: normal;
    overflow-wrap: anywhere;
  }

  /* Laufende Terminnummer links über die Inhaltszeilen spannen. */

  .showEvents .event-number {
    grid-column: 1;
    grid-row: 1 / span 4;
  }

  /* Wochentag, Datum/Uhrzeit, Standort und Einstiegshinweis untereinander rechts neben der Nummer anordnen. */

  .showEvents .event-datetime,
  .showEvents .event-location,
  .showEvents .event-isStart {
    grid-column: 2;
  }
}

/* 
 * ==================================================
 * 7. Anmeldeformular: Pflichtfelder, Buchungsoptionen und Eingaben
 * ==================================================
  */

/* Anmeldeformular: rote Sternchen an Pflichtfeld-Markierungen ergänzen. */

.required-item:after:not(#lblPartnerBic) {
  content: " *";
  color: var(--color-destructive);
}

/* Bankdaten: Pflichtfeld-Sternchen für BIC zunächst transparent darstellen. */

#lblPartnerBic:after,
label[for="customerBic"]:after {
  content: " *" !important;
  color: transparent !important;
}

/* Bankdaten: Sternchen für BIC sowie IBAN und Kontoinhaber des Partners ausblenden. */

#lblPartnerBic:after,
label[for="customerBic"]:after,
label[for="partnerIban"]:after,
label[for="partnerAccountOwner"]:after {
  display: none !important;
}

/* Anmeldeformular: Rahmen der Buchungsoptionen, zum Beispiel Kursbuchung und Mitgliedschaft. */

.public-registration-form-page .booking-type-item {
  border: 1px solid
    color-mix(in oklab, var(--color-brand-green-400) 50%, transparent);
}

/* Aktuell ausgewählte Buchungsoption durch Hintergrund, Rahmen und Schrift hervorheben. */

.public-registration-form-page .booking-type-item.selected {
  border: 1px solid var(--color-brand-green-400);
  background: color-mix(
    in oklab,
    var(--color-brand-green-400) 20%,
    transparent
  );
  color: var(--color-brand-green-400);
  font-weight: 500;
}

#lblPartnerIban {
  font-size: 0; /* collapses the original text */
  visibility: hidden; /* removes it from the accessibility tree */
}

#lblPartnerIban::before {
  content: "IBAN ihres Partners:";
  font-size: 15px; /* don't use "inherit", because the parent is now 0 */
  visibility: visible;
}

#lblPartnerBic {
  font-size: 0; /* collapses the original text */
  visibility: hidden; /* removes it from the accessibility tree */
}

#lblPartnerBic::before {
  content: "BIC ihres Partners:";
  font-size: 15px; /* don't use "inherit", because the parent is now 0 */
  visibility: visible;
}

.public-registration-form-page #form-success {
  padding: 12px 0px 0px 4px;
  margin: 0px;
  background: transparent;
  border: none;
  font-size: 12px;
}

#form-success > div,
#form-success > .fas {
  font-size: 15px; /* use the normal size for the rest of the message */
}

.public-registration-form-page .fas {
  display: none;
}

.public-registration-form-page * {
  border-radius: 0px !important;
}

/* Mobile Feldanordnung und Buchungsoptionen im Anmeldeformular. Die nachfolgenden Zustimmungsregeln behandeln AGB und Datenschutz gesondert. */

@media screen and (max-width: 600px) {
  /* Anmeldeformular: Bootstrap-Labels und Eingabespalten stapeln und vorhandene Spaltenversätze aufheben. */
  #public-registration-form .row > [class*="col-xs-"] {
    float: none;
    width: 100%;
    margin-left: 0;
  }
  /* Abstand zwischen Feldbeschriftung und Eingabe. */

  #public-registration-form label {
    display: inline-block;
    margin-bottom: 0.375rem;
  }

  /* Zusätzlicher Abstand vor der Auswahl des Einstiegstermins. */

  #public-registration-form label[for="firstEvent"] {
    margin-bottom: 1rem;
  }

  /* Höhe mobiler Auswahlfelder; gilt für alle select.form-control in diesem Dokument. */

  select.form-control {
    height: 42px;
  }

  /* Einstiegstermin, weitere Auswahlfelder, Texteingaben und Textbereiche über die volle Breite darstellen. 16px Schriftgröße vermeidet den automatischen Fokus-Zoom unter iOS. */
  #public-registration-form .form-control {
    width: 100%;
    max-width: none;
    min-width: 0;
    font-size: 16px;
  }
  /* Buchungsoptionen wie Kursbuchung und Mitgliedschaft mobil untereinander anordnen. */
  #public-registration-form .booking-types-container {
    flex-direction: column;
    gap: 0.75rem;
  }
  /* Feste Nimbuscloud-Breiten und Außenabstände der Buchungsoptionen aufheben; lange Namen dürfen umbrechen. */

  #public-registration-form .booking-type-item {
    flex: none;
    width: 100%;
    min-width: 0;
    max-width: none;
    margin: 0;
    white-space: normal;
    overflow-wrap: anywhere;
  }
}

/* 
 * ==================================================
 * 8. Anmeldeformular: Kontrollkästchen, AGB und Datenschutz
 * ==================================================
  */

/* Grundgröße und Auswahlfarbe nativer Kontrollkästchen. */

input[type="checkbox"] {
  width: 14px;
  height: 14px;
  accent-color: var(--color-brand-green-200);
}

/* Alle Kontrollkästchen im Anmeldeformular als Bezugspunkt für die vergrößerte Klickfläche verwenden. */

#public-registration-form input[type="checkbox"] {
  position: relative;
}

/* Unsichtbare Klickfläche um Kontrollkästchen erweitern, ohne ihre sichtbare Größe zu ändern. Pseudoelemente an nativen Eingabefeldern werden nicht in allen Browsern unterstützt. */

#public-registration-form input[type="checkbox"]::after {
  content: "";
  position: absolute;
  inset: -12px;
}

/* AGB und Datenschutz: Kontrollkästchen und Text auf Mobilgeräten und Desktop direkt nebeneinander anordnen. */

#public-registration-form
  :is(#agb-container, #privacy-container, #additional-infos-container) {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  align-items: start;
  gap: 0.625rem;
  margin-inline: 0;
}

/* Bootstrap-Clearfix-Pseudoelemente entfernen, damit sie keine zusätzlichen Grid-Zellen belegen. */

#public-registration-form
  :is(#agb-container, #privacy-container, #additional-infos-container)::before,
#public-registration-form
  :is(#agb-container, #privacy-container, #additional-infos-container)::after {
  content: none;
}

/* Bootstrap-Spaltenbreiten und die mobile Vollbreitenregel nur innerhalb der beiden Zustimmungszeilen zurücksetzen. */

#public-registration-form
  :is(#agb-container, #privacy-container, #additional-infos-container)
  > [class*="col-xs-"] {
  float: none;
  width: auto;
  min-width: 0;
  margin: 0;
  padding: 0;
}

/* Kontrollkästchen und Pflichtfeld-Sternchen innerhalb der schmalen ersten Spalte zusammenhalten. */

#public-registration-form
  :is(#agb-container, #privacy-container, #additional-infos-container)
  > :first-child {
  display: flex;
  align-items: baseline;
  gap: 0.25rem;
  white-space: nowrap;
}

/* Desktop: AGB und Datenschutz mit der rechten Eingabespalte ausrichten; auf Mobilgeräten bleibt die volle Breite erhalten. */

@media (min-width: 601px) {
  #public-registration-form
    :is(#agb-container, #privacy-container, #additional-infos-container) {
    /* Versatz und Breite der rechten Bootstrap-Eingabespalte übernehmen. */
    margin-left: 33.333333%;
    width: 50%;
    padding-inline: 8px;
  }

  /* Anmeldeformular Buchungsoptionen */
  .public-registration-form-page .booking-types-container {
    padding: 0px;
  }
}

/* „Lesen“-Links: mobile Button-Außenabstände entfernen, damit der Zustimmungstext oben ausgerichtet bleibt. */

#public-registration-form
  :is(.agb-text, .privacy-text, .additionalInfo-text)
  .btn {
  margin: 0;
  vertical-align: baseline;
  transform: none;
}

#public-registration-form
  :is(.agb-text, .privacy-text, .additionalInfo-text)
  .btn
  .fas {
  display: inline-block !important;
  margin: 0;
  vertical-align: baseline;
  transform: none;
}

/* 
 * ==================================================
 * 9. Anmeldeformular: Abschluss und Fehlermeldungen
 * ==================================================
  */

/* Linken Aktionsbereich am Formularende ausblenden. */

.form-result-and-actions .clearfix .pull-left {
  display: none;
}

/* Fehlermeldung des Anmeldeformulars: Hintergrund und Rahmen in Fehlerfarbe. */

.public-registration-form-page #form-error {
  background-color: color-mix(
    in srgb,
    var(--color-destructive) 15%,
    transparent
  );
  border-color: var(--color-destructive);
}

/* Anmeldeformular Buchungsoptionen */

.public-registration-form-page .booking-types-container {
  width: 66.666667%;
}

/* Fehlerliste: eingerückte, quadratische Aufzählungszeichen. */

#form-error ul {
  margin-left: 16px;
  list-style: square;
}

/* 
 * ==================================================
 * 10. Gutscheinformular
 * ==================================================
  */

/* Gutscheinformular: Formularfläche und Schritte transparent halten. */

#public-coupon-form,
.coupon-step-container,
.coupon-step-header {
  background: transparent !important;
}

/* 
 * ==================================================
 * 10. Pop-up Kalender
 * ==================================================
  */
.datepicker.dropdown-menu {
  border-radius: 0px;
  /* https://smoothshadows.com/#djEsMSw0LDAuMDUsMTgsMTIsMCwjMTExMDAzLCNmNWY0ZjAsI2ZmZmZmZiwy */
  box-shadow:
    0px 1px 1px rgba(17, 16, 3, 0.01),
    0px 3px 5px rgba(17, 16, 3, 0.03),
    0px 7px 10px rgba(17, 16, 3, 0.04),
    0px 12px 18px rgba(17, 16, 3, 0.05);
}

.datepicker table tr td.active.active {
  background: var(--color-brand-green-300);
  border-color: var(--color-brand-green-300);
}

.datepicker table tr td span.active:hover,
.datepicker table tr td span.active:hover:hover,
.datepicker table tr td span.active.disabled:hover,
.datepicker table tr td span.active.disabled:hover:hover,
.datepicker table tr td span.active:focus,
.datepicker table tr td span.active:hover:focus,
.datepicker table tr td span.active.disabled:focus,
.datepicker table tr td span.active.disabled:hover:focus,
.datepicker table tr td span.active:active,
.datepicker table tr td span.active:hover:active,
.datepicker table tr td span.active.disabled:active,
.datepicker table tr td span.active.disabled:hover:active,
.datepicker table tr td span.active.active,
.datepicker table tr td span.active:hover.active,
.datepicker table tr td span.active.disabled.active,
.datepicker table tr td span.active.disabled:hover.active,
.open .dropdown-toggle.datepicker table tr td span.active,
.open .dropdown-toggle.datepicker table tr td span.active:hover,
.open .dropdown-toggle.datepicker table tr td span.active.disabled,
.open .dropdown-toggle.datepicker table tr td span.active.disabled:hover {
  background: var(--color-brand-green-300);
  border-color: var(--color-brand-green-300);
}

.datepicker table tr td.active.active:hover {
  background: var(--color-brand-green-300);
  border-color: var(--color-brand-green-300);
}
.datepicker table tr td.today.today {
  background: rgba(0, 0, 0, 0.05);
  border-color: rgba(0, 0, 0, 0.05);
}

.datepicker table tr td.today.today:hover {
  background: rgba(0, 0, 0, 0.1);
  border-color: rgba(0, 0, 0, 0.1);
}

.datepicker table tr td,
.datepicker table tr th {
  border-radius: 0px;
}

.datepicker table tr td span {
  border-radius: 0px;
}

.datepicker.dropdown-menu th {
  background: transparent;
}

.datepicker th.prev,
.datepicker th.next {
  font-size: 20px;
  line-height: 0px;
  display: flex;
  justify-content: center;
  align-items: center;
  padding-bottom: 8px;
}

/* 
 * ==================================================
 * 10. Stundenplan
 * ==================================================
  */

.public-timetable h1 {
  font-size: 0;
  line-height: 0;
}

.public-timetable h1 small {
  font-size: 2rem;
  font-weight: 600;
  color: var(--color-foreground);
  /* Offset the missing h1 content */
  margin-left: -10px;
}

.public-timetable .page-heading {
  padding: 10px 0px;
  margin-inline: 0px !important;
  background: transparent;
  border-bottom: none !important;
}

/* Mobil: Raster rechts ausrichten, Tag-/Wochenwechsel oben rechts über den Navigationspfeilen. */
@media screen and (max-width: 500px) {
  .public-timetable .page-heading .options {
    display: grid;
    grid-template-columns: repeat(2, auto);
    justify-content: end;
    width: 100%;
    gap: 10px 4px;
  }

  .public-timetable .page-heading .options > .btn {
    margin: 0;
  }

  .public-timetable .page-heading .options > .btn:first-child {
    grid-column: 2;
  }
}

.public-timetable th {
  background-color: color-mix(
    in srgb,
    var(--color-brand-green-200) 20%,
    transparent
  );
}

.fc-unthemed .fc-list-empty {
  background: transparent;
}

.fc-unthemed .fc-divider,
.fc-unthemed .fc-popover .fc-header,
.fc-unthemed .fc-list-heading td {
  background-color: color-mix(
    in srgb,
    var(--color-brand-green-200) 10%,
    transparent
  );
}

.fc-unthemed th,
.fc-unthemed td,
.fc-unthemed thead,
.fc-unthemed tbody,
.fc-unthemed .fc-divider,
.fc-unthemed .fc-row,
.fc-unthemed .fc-content,
.fc-unthemed .fc-popover,
.fc-unthemed .fc-list-view,
.fc-unthemed .fc-list-heading td {
  border-color: color-mix(
    in srgb,
    var(--color-brand-green-400) 20%,
    transparent
  );
}

.public-timetable .fc-today {
  background-color: color-mix(
    in srgb,
    var(--color-brand-green-200) 20%,
    transparent
  ) !important;
}
