/* =========================================================
   PNFLOW ACCORDION
   Globale Komponente fuer das Elementor Nested Accordion.
   Klasse .pnflow-accordion am Widget, zusaetzlich zur
   seitenspezifischen Klasse (z. B. page-offer-faq-accordion).

   WICHTIG – Einstellungen am Widget:
   - Standardzustand: alle geschlossen
   - Gleichzeitig geoeffnet: eines
   - Animationsdauer: beliebig, ohne Wirkung

   Das Auf- und Zuklappen steuert pnflow.js. Elementors
   eigener Klick-Handler wird dort abgefangen.

   pnflow.js laesst das open-Attribut dauerhaft gesetzt und
   steuert den Zustand ueber die Klasse is-open. Grund: ein
   geschlossenes <details> ist nicht gerendert, deshalb kann
   beim Oeffnen keine Hoehe animieren – der Browser springt
   direkt auf den Endwert. Mit dauerhaft gesetztem open gibt
   es einen Ausgangswert und die Bewegung laeuft in beide
   Richtungen.

   Ohne das Skript greifen weiterhin die [open]-Regeln, das
   Accordion funktioniert dann normal, nur ohne Bewegung.
========================================================= */

.pnflow-accordion {
  --accordion-duration: 300ms;
  --accordion-icon-duration: 300ms;
  width: 100% !important;
  margin: 0 !important;
  padding: 0 !important;
}

.pnflow-accordion > .elementor-widget-container {
  width: 100% !important;
  margin: 0 !important;
  padding: 0 !important;
}


/* =========================================================
   WRAPPER
   Traegt Rahmen, Radius und Flaeche. overflow: hidden sorgt
   dafuer, dass die Zeilenflaechen in den Ecken abschliessen.

   display: block statt flex: Elementor animiert die Hoehe
   der einzelnen <details>. Liegen die in einem Flex-Container,
   rechnet der Browser bei jedem Frame das Flex-Layout neu –
   das ist die haeufigste Ursache fuer zitternde Accordions.
========================================================= */

.pnflow-accordion .e-n-accordion {
  width: 100% !important;
  margin: 0 !important;
  padding: 0 !important;
  display: block !important;
  background: var(--cream) !important;
  border: 1px solid var(--border) !important;
  border-radius: var(--radius-md) !important;
  box-shadow: var(--shadow-soft);
  overflow: hidden;
}


/* =========================================================
   ITEM
   Trennung nur ueber Haarlinien, kein eigener Rahmen.
========================================================= */

.pnflow-accordion .e-n-accordion-item {
  width: 100% !important;
  margin: 0 !important;
  padding: 0 !important;
  background: transparent !important;
  border: 0 !important;
  border-bottom: 1px solid var(--border) !important;
  border-radius: 0 !important;
}

.pnflow-accordion .e-n-accordion-item:last-child {
  border-bottom: 0 !important;
}


/* =========================================================
   DEFAULT MARKER
========================================================= */

.pnflow-accordion summary {
  list-style: none !important;
}

.pnflow-accordion summary::-webkit-details-marker {
  display: none;
}


/* =========================================================
   HEADER
========================================================= */

.pnflow-accordion .e-n-accordion-item-title {
  position: relative;
  width: 100% !important;
  min-height: 0 !important;
  margin: 0 !important;
  padding: 24px 64px 24px 28px !important;
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  gap: 24px !important;
  background: transparent !important;
  border: 0 !important;
  cursor: pointer;
  transition: background-color var(--transition-base);
}


/* Geoeffnete Zeile bleibt dezent hinterlegt.

   Zwei Selektoren, weil pnflow.js das open-Attribut dauerhaft
   setzt: mit Skript zaehlt is-open, ohne Skript weiterhin
   [open]. is-scripted markiert, welcher Fall gilt. */

.pnflow-accordion .e-n-accordion-item[open]:not(.is-scripted) > .e-n-accordion-item-title,
.pnflow-accordion .e-n-accordion-item.is-open > .e-n-accordion-item-title {
  background: rgba(var(--primary-rgb), 0.035) !important;
}


/* Hover nur auf Geraeten mit echtem Zeiger.
   Auf dem Touchscreen bliebe die Zeile sonst nach dem
   Antippen dauerhaft eingefaerbt. */

@media (hover: hover) {
  .pnflow-accordion .e-n-accordion-item-title:hover {
    background: rgba(var(--primary-rgb), 0.035) !important;
  }
}


/* =========================================================
   QUESTION
========================================================= */

.pnflow-accordion .e-n-accordion-item-title-header {
  flex: 1 1 auto !important;
  min-width: 0;
}

.pnflow-accordion .e-n-accordion-item-title-text {
  color: var(--primary) !important;
  font-family: var(--font-primary) !important;
  font-size: clamp(17px, 1.1vw, 19px) !important;
  line-height: 1.45 !important;
  font-weight: 600 !important;
  letter-spacing: -0.01em !important;
  transition: color var(--transition-base);
}

.pnflow-accordion .e-n-accordion-item[open]:not(.is-scripted) > .e-n-accordion-item-title .e-n-accordion-item-title-text,
.pnflow-accordion .e-n-accordion-item.is-open > .e-n-accordion-item-title .e-n-accordion-item-title-text {
  color: var(--accent-text) !important;
}

@media (hover: hover) {
  .pnflow-accordion .e-n-accordion-item-title:hover .e-n-accordion-item-title-text {
    color: var(--accent-text) !important;
  }
}

.accordion-subtitle {
  margin: 1.5rem 0 0.5rem;
  font-family: var(--font-primary);
  font-size: 1rem;
  font-weight: 600;
  line-height: 1.4;
  color: var(--primary);
}

.accordion-subtitle:first-of-type {
  margin-top: 1rem;
}


/* =========================================================
   ELEMENTOR ICON AUSBLENDEN
   Das Widget liefert fas fa-plus und fas fa-minus mit.
   Wir zeichnen das Zeichen selbst, damit aus dem Plus beim
   Oeffnen ein Kreuz wird statt eines Minus.
========================================================= */

.pnflow-accordion .e-n-accordion-item-title-icon {
  display: none !important;
}


/* =========================================================
   PLUS, DAS SICH ZUM KREUZ DREHT
========================================================= */

.pnflow-accordion .e-n-accordion-item-title::before,
.pnflow-accordion .e-n-accordion-item-title::after {
  content: "";
  position: absolute;
  top: 50%;
  right: 28px;
  width: 16px;
  height: 1.5px;
  background: rgba(var(--primary-rgb), 0.48);
  border-radius: var(--radius-pill);
  transform-origin: center;
  transition: background-color var(--transition-base), transform var(--accordion-icon-duration) var(--ease);
}

.pnflow-accordion .e-n-accordion-item-title::before {
  transform: translateY(-50%);
}

.pnflow-accordion .e-n-accordion-item-title::after {
  transform: translateY(-50%) rotate(90deg);
}

.pnflow-accordion .e-n-accordion-item[open]:not(.is-scripted) > .e-n-accordion-item-title::before,
.pnflow-accordion .e-n-accordion-item.is-open > .e-n-accordion-item-title::before {
  background: var(--accent-text);
  transform: translateY(-50%) rotate(45deg);
}

.pnflow-accordion .e-n-accordion-item[open]:not(.is-scripted) > .e-n-accordion-item-title::after,
.pnflow-accordion .e-n-accordion-item.is-open > .e-n-accordion-item-title::after {
  background: var(--accent-text);
  transform: translateY(-50%) rotate(135deg);
}

@media (hover: hover) {
  .pnflow-accordion .e-n-accordion-item-title:hover::before,
  .pnflow-accordion .e-n-accordion-item-title:hover::after {
    background: var(--accent-text);
  }
}


/* =========================================================
   ANSWER
   Der Antwortbereich ist bei Elementor ein Container.
   pnflow.js setzt hier eine Hoehe in Pixeln, die transition
   laesst sie darauf zulaufen. Ohne overflow: hidden waere
   der Text waehrend der Bewegung ueberstehend sichtbar.
========================================================= */

/* Der Antwortbereich ist ein Flex-Container. Ohne diese
   Regel schrumpfen die Widgets darin mit, sobald die Hoehe
   kleiner wird – der Text wuerde bei jedem Frame neu
   umbrochen. Das kostet Leistung und sieht unruhig aus. */

.pnflow-accordion .e-n-accordion-item > [role="region"] > * {
  flex-shrink: 0 !important;
}


.pnflow-accordion .e-n-accordion-item > [role="region"] {
  width: 100% !important;
  max-width: none !important;
  margin: 0 !important;
  padding: 0 64px 0 28px !important;
  background: rgba(var(--primary-rgb), 0.035) !important;
  border: 0 !important;
  box-sizing: border-box !important;
  overflow: hidden !important;
  transition: height var(--accordion-duration) var(--ease);
}


/* =========================================================
   ANSWER TEXT
========================================================= */

.pnflow-accordion .e-n-accordion-item > [role="region"] .elementor-widget-text-editor {
  width: 100% !important;
  margin: 0 !important;
  padding: 0 !important;
}

.pnflow-accordion .e-n-accordion-item > [role="region"] .elementor-widget-container {
  width: 100% !important;
  max-width: var(--container-sm);
  margin: 0 !important;
  padding: 0 !important;
}

.pnflow-accordion .e-n-accordion-item > [role="region"] p {
  width: 100% !important;
  margin: 0 !important;
  padding: 0 !important;
  color: var(--text-body) !important;
  font-size: clamp(16px, 1vw, 17px) !important;
  line-height: 1.65 !important;
}

.pnflow-accordion .e-n-accordion-item > [role="region"] p + p {
  margin-top: 12px !important;
}

.pnflow-accordion .e-n-accordion-item > [role="region"] ul,
.pnflow-accordion .e-n-accordion-item > [role="region"] ol {
  margin: 16px 0 !important;
  padding: 0 0 0 1.4em !important;
  color: var(--text-body) !important;
  font-size: clamp(16px, 1vw, 17px) !important;
  line-height: 1.65 !important;
}

.pnflow-accordion .e-n-accordion-item > [role="region"] li {
  margin: 0 !important;
  padding: 0 0 0 0.15em !important;
  color: inherit !important;
  font-size: inherit !important;
  line-height: inherit !important;
}

.pnflow-accordion .e-n-accordion-item > [role="region"] li + li {
  margin-top: 6px !important;
}

.pnflow-accordion .e-n-accordion-item > [role="region"] strong {
  font-weight: 700;
}

/* Der Abstand nach unten sitzt am letzten Kind, nicht als
   Polsterung am Antwortbereich. Grund: eine Hoehe von 0 kann
   die Polsterung nicht unterschreiten – unter jeder
   geschlossenen Zeile bliebe sonst ein getoenter Streifen
   stehen. Ein Aussenabstand des Kindes wird dagegen sauber
   abgeschnitten. */

.pnflow-accordion .e-n-accordion-item > [role="region"] > *:last-child {
  margin-bottom: 26px !important;
}


/* =========================================================
   FOCUS
   Negativer Offset, weil der Wrapper mit overflow: hidden
   einen aussen liegenden Ring abschneiden wuerde.
========================================================= */

.pnflow-accordion .e-n-accordion-item-title:focus-visible {
  outline: 3px solid var(--primary) !important;
  outline-offset: -3px;
}


/* =========================================================
   MOBIL
========================================================= */

@media (max-width: 767px) {
  .pnflow-accordion .e-n-accordion-item-title {
    padding: 20px 50px 20px 20px !important;
    gap: 14px !important;
  }

  .pnflow-accordion .e-n-accordion-item-title-text {
    font-size: 17px !important;
    line-height: 1.4 !important;
  }

  .pnflow-accordion .e-n-accordion-item-title::before,
  .pnflow-accordion .e-n-accordion-item-title::after {
    right: 20px;
  }

  .pnflow-accordion .e-n-accordion-item > [role="region"] {
    padding: 0 50px 0 20px !important;
  }

  .pnflow-accordion .e-n-accordion-item > [role="region"] > *:last-child {
    margin-bottom: 22px !important;
  }
}