/* ==============================================================
   Gustav Erb - Der Weg des DreiEins, Landingpage

   Wird ausschliesslich auf der DreiEins-Seite geladen, nach
   style.css. Zwei Gruende dafuer:

   1. Die Landingpage nimmt Regeln des Onepagers zurueck, allen
      voran das Klappmenue unterhalb 1040 px. Global geladen wuerde
      die Praxisseite ihr Menue verlieren.
   2. Quellreihenfolge. Mehrere Regeln hier haben dieselbe
      Spezifitaet wie ihre Gegenstuecke in style.css. Bei
      Gleichstand entscheidet die Reihenfolge, und gewinnen soll
      hier immer die Landingpage.

   Der erste Teil ist Zeile fuer Zeile aus landingpage-dreieins.html
   uebernommen und nicht angefasst. Was WordPress zusaetzlich
   braucht, steht gesammelt am Ende der Datei.
   ============================================================== */


/* ==============================================================
   AB HIER: NUR FUER DIESE LANDINGPAGE
   Alles oberhalb ist Zeile fuer Zeile aus design-osteopathie-v6.html
   uebernommen und nicht angefasst. Das garantiert, dass Farben,
   Schriftstufen, Abstaende, Knoepfe, Kreisfelder, Ablauf-Animation
   und FAQ hier exakt so aussehen wie auf dem Onepager.
   Neu sind nur die Bausteine, die der Onepager nicht kennt:
   Belegleiste, beschriftetes Zeichen, Nutzenraster, Preisstufen
   und das Anfrageformular.
   ============================================================== */

/* --- Kopf mit Menue -------------------------------------------
   Seit 1.12.0 traegt auch die Landingpage das Menue des Onepagers
   (ohne DreiEins). Klappmechanik und Masse kommen unveraendert aus
   style.css, der Knopf „DreiEins anfragen“ sitzt wie „Termin buchen“
   als letzter Punkt im Menue. */

/* Die Wortmarke traegt hier den Namen der Seite, also dieselbe Schrift
   wie das DreiEins-Logo. Amatic hat eine kleine Mittellaenge, 30 px
   wirken so gross wie die 22 px Outfit auf dem Onepager. */
.kopf .marke b{ font-family:var(--dreieins); font-weight:400; font-size:30px; line-height:1; letter-spacing:.02em; }

/* --- Textmasse -------------------------------------------------
   Die Lesespalten standen bei rund der Haelfte der Inhaltsbreite und
   brachen dadurch frueher um, als noetig. Zwei Regeln:

   1. Steht Text in einer Rasterspalte, fuellt er die Spalte. Eine
      zusaetzliche Begrenzung darin erzeugt nur einen Knick, den
      niemand erklaeren kann.
   2. In den vollbreiten Abschnitten bekommt er --textbreite.

   HIER WIRD JUSTIERT. Prozent der Inhaltsbreite, also bei 1128 px
   rund 752 px. Enger: Wert senken.

   Nicht angefasst sind die Stellen, die aus v6 stammen und dort
   bewusst entschieden wurden: die Hero-Lead, der FAQ-Antworttext
   (64 Zeichen, siehe oben) und der Absatz im Abschlussband. Sonst
   liefe die Landingpage gegenueber dem Onepager auseinander. */
:root{ --textbreite:66.6%; }
/* Zwei Drittel ergeben nur Sinn, solange etwas zu teilen da ist. Bei
   375 px waeren es 223 px, also eine unlesbare Saeule. Ab 900 px
   abwaerts nimmt der Text die volle Spalte. 900 px ist ohnehin die
   Breite, bei der die zweispaltigen Abschnitte umbrechen. */
@media (max-width:900px){ :root{ --textbreite:100%; } }

.beschwerden .lead,
.nutzen .lead,
.ablauf .lead,
.herkunft .lead,
.preis .lead,
.wende .satz,
.wende .erklaerung,
.herkunft .fliess-2,
.preis-begruendung{ max-width:var(--textbreite); }
/* Der Schlussabsatz stand mit 22 px unter der letzten Trennlinie der
   Quellenliste und las sich dadurch wie eine siebte Zeile darin. */
.herkunft .fliess-2{ margin-top:clamp(28px,3vw,38px); }

/* In der Spalte: Spaltenbreite ist die Lesebreite. */
.loesung .dazu,
.abgrenzung span,
.n-liste p,
.preis-grid .text,
.preis-grid li{ max-width:none; }

/* --- Fliesstext ausserhalb der v6-Abschnitte -------------------
   .antwort und .dazu sind in v6 an .zusammenhang gebunden. Hier
   dieselben Werte, aber ohne Abschnittsbindung. */
.fliess{ margin-top:26px; font-size:clamp(18px,1.9vw,20.5px); line-height:1.58; max-width:52ch; }
.fliess-2{ margin-top:22px; color:var(--tinte-2); max-width:56ch; }

/* --- Hero: statt des Signets die DreiEins-Marke ---------------- */
.dreieins-hero{ width:100%; max-width:470px; margin:0 auto; }
.dreieins-hero img{ width:100%; height:auto; display:block; }

/* --- Belegleiste direkt unter dem Hero -------------------------
   Vier nachpruefbare Angaben, keine Zahlen, keine Stimmen.
   §11 HWG laesst Patientenstimmen und Erfolgsberichte nicht zu,
   Qualifikation und Aufsichtsbehoerde dagegen schon. */
.belege{ padding-block:0; }
.belege .wrap{ padding-block:clamp(26px,3.4vw,38px); border-top:1px solid var(--linie); border-bottom:1px solid var(--linie); }
.beleg-grid{ display:grid; grid-template-columns:repeat(4,1fr); gap:clamp(18px,3vw,44px); }
.beleg-grid b{ display:block; font-family:var(--display); font-weight:400; font-size:clamp(17px,1.7vw,20px); letter-spacing:-.015em; line-height:1.2; }
.beleg-grid span{ display:block; margin-top:7px; color:var(--tinte-2); font-size:15.5px; line-height:1.45; }
@media (max-width:820px){ .beleg-grid{ grid-template-columns:repeat(2,1fr); row-gap:26px; } }
@media (max-width:460px){ .beleg-grid{ grid-template-columns:1fr; } }

/* --- Loesung: Ueberschrift darf laenger laufen ----------------- */
.loesung h2{ max-width:19ch; }

/* --- Das beschriftete Zeichen ----------------------------------
   Die Klassen .k1 bis .k3 und .marken-text liegen seit v1 im
   Stylesheet, wurden in v6 aber nicht mehr benutzt. Hier tragen
   sie wieder etwas: drei beschriftete Kreise, multiply, die
   Ueberlagerung in der Mitte ist die These der Marke.
   In v6 lief die Einlaufbewegung beim Laden - dieses Zeichen steht
   mitten auf der Seite und waere durch, bevor man es sieht.
   Deshalb haengt die Bewegung hier am Sichtbarwerden. */
.js .zeichen-scroll .k,
.js .zeichen-scroll .marken-text{ animation-play-state:paused; }
.js .zeichen-scroll.sichtbar .k,
.js .zeichen-scroll.sichtbar .marken-text{ animation-play-state:running; }
.zeichen .marken-text{ font-family:var(--display); font-weight:300; letter-spacing:.03em; fill:var(--tinte); }
.zeichen .marken-text.mitte{ font-weight:400; letter-spacing:.01em; }

/* --- Abgrenzung: was dieser Weg nicht ist ----------------------
   Vorher ein Kasten mit Randlinie links. Diese Seite kennt keine
   Kaesten: sie arbeitet mit Linien und Flaechen, und die 3-px-Kante
   in Logofarbe markiert ueberall sonst schon, dass hier ein eigener
   Gedanke beginnt. Also dieselbe Kante statt eines Fremdkoerpers. */
/* Die Kante laeuft ueber die volle Spalte, wie bei den Zitatkarten.
   Nur der Lesetext bekommt sein Mass, sonst endet der Strich mitten
   im Nichts und sieht nach Zufall aus. */
.abgrenzung{ margin-top:clamp(32px,3.8vw,46px); padding-top:22px;
  border-top:3px solid var(--logo-blau); }
.abgrenzung b{ display:block; font-family:var(--display); font-weight:400;
  font-size:clamp(19px,2vw,22px); letter-spacing:-.015em; line-height:1.2; color:var(--tinte); }
.abgrenzung span{ display:block; margin-top:11px; color:var(--tinte-2); font-size:16.5px; }

/* --- Randnotiz mit Mittelpunkt als Trenner ---------------------
   Die Beschwerdeliste stand als grosser Absatz ueber dem wichtigsten
   Satz des Abschnitts und hat ihn erdrueckt. Sie ist eine Aufzaehlung,
   also sieht sie jetzt auch so aus. Der Mittelpunkt als Trenner ist
   im Preisabschnitt ohnehin schon in Gebrauch. Er haengt am
   vorangehenden Begriff, damit er beim Umbruch nicht allein am
   Zeilenanfang steht. */
.dazu-oft{ margin-top:clamp(44px,5.5vw,72px); display:flex; flex-wrap:wrap;
  align-items:baseline; row-gap:6px; color:var(--tinte-2); font-size:16.5px; }
.dazu-oft b{ color:var(--tinte); font-weight:600; margin-right:14px; }
.dazu-oft span{ white-space:nowrap; }
.dazu-oft span:not(:last-child)::after{ content:"\00B7"; padding:0 11px; color:var(--platz-linie); }

/* --- Die Wende des Abschnitts ---------------------------------
   Der Satz, um den es geht, stand klein und grau unter einer grossen
   Aufzaehlung. Die Rangfolge war genau verkehrt herum. */
.wende{ margin-top:clamp(30px,3.6vw,44px); }
.wende .satz{ font-family:var(--display); font-weight:200; letter-spacing:-.025em;
  line-height:1.12; font-size:clamp(25px,3vw,36px); }
.wende .erklaerung{ margin-top:24px; color:var(--tinte-2); }

/* --- Nutzenraster: wie .b-liste, aber zwei Spalten ------------- */
.nutzen h2{ font-size:clamp(26px,3.2vw,40px); }
.nutzen .lead{ margin-top:22px; }
.n-liste{ margin-top:clamp(44px,5.5vw,72px); display:grid; grid-template-columns:repeat(2,1fr); gap:clamp(30px,3.5vw,48px) clamp(36px,5vw,72px); }
.n-liste article{ padding-top:26px; border-top:3px solid var(--linie); }
.n-liste article:nth-child(1){ border-top-color:var(--logo-gelb); }
.n-liste article:nth-child(2){ border-top-color:var(--logo-rot); }
.n-liste article:nth-child(3){ border-top-color:var(--logo-blau); }
.n-liste article:nth-child(4){ border-top-color:var(--logo-gelb); }
.n-liste h3{ font-family:var(--display); font-weight:400; font-size:clamp(20px,2.1vw,25px); letter-spacing:-.015em; line-height:1.18; }
.n-liste p{ margin-top:12px; color:var(--tinte-2); font-size:16.5px; }
@media (max-width:700px){ .n-liste{ grid-template-columns:1fr; } }

/* --- Herkunft der Methode: Belege statt Stimmen ---------------- */
.herkunft h2{ font-size:clamp(26px,3.2vw,40px); }
.herkunft .lead{ margin-top:22px; }
.linien-liste{ margin:clamp(36px,4.5vw,56px) 0 0; padding:0; list-style:none; }
.linien-liste li{
  padding:18px 0; border-top:1px solid var(--linie); color:var(--tinte-2); font-size:16.5px;
  display:grid; grid-template-columns:minmax(0,.34fr) minmax(0,.66fr); gap:6px clamp(20px,3vw,44px);
}
.linien-liste li:last-child{ border-bottom:1px solid var(--linie); }
.linien-liste b{ color:var(--tinte); font-weight:600; }
@media (max-width:700px){ .linien-liste li{ grid-template-columns:1fr; } }

/* --- Preis: zwei Stufen, eine davon empfohlen -----------------
   Linien statt Kaesten, wie im Abschnitt "Das Praktische". Die
   Empfehlung traegt die Logofarbe Gelb als Kante und ein Etikett,
   der Rest bleibt identisch. Kein durchgestrichener Preis, keine
   Frist, kein Zaehler - es gibt keinen, der echt waere. */
.preis h2{ font-size:clamp(26px,3.2vw,40px); }
.preis .lead{ margin-top:22px; }
.preis-grid{ margin-top:clamp(40px,5vw,68px); display:grid; grid-template-columns:repeat(2,1fr); gap:clamp(32px,4.5vw,64px); align-items:start; }
.preis-grid article{ padding-top:26px; border-top:3px solid var(--linie); }
.preis-grid article.empfehlung{ border-top-color:var(--logo-gelb); }
/* <button> erbt die Systemschrift, <a> nicht. In v6 sind alle .btn
   Verweise, deshalb faellt das dort nicht auf - hier schon. */
button.btn{ font-family:var(--text); }
/* Beide Preisspalten brauchen dieselbe Etikettzeile, sonst sitzt die
   empfohlene Stufe um die Hoehe des Etiketts tiefer als die andere. */
.preis-grid .tag-zeile{ display:flex; align-items:center; min-height:34px; margin-bottom:16px; }
.marke-tag{ display:inline-block; padding:5px 13px; border-radius:999px; background:var(--logo-gelb); color:var(--tinte); font-size:14px; font-weight:600; }
.preis-grid h3{ font-family:var(--display); font-weight:400; font-size:clamp(20px,2.1vw,25px); letter-spacing:-.015em; }
.preis-grid .wert{ font-family:var(--display); font-weight:200; font-size:clamp(26px,3.2vw,36px); letter-spacing:-.025em; margin-top:12px; line-height:1.1; }
.preis-grid .dazu{ margin-top:8px; color:var(--tinte-2); font-size:15.5px; }
.preis-grid .text{ margin-top:18px; color:var(--tinte-2); font-size:16.5px; }
.preis-grid ul{ margin:18px 0 0; padding:0; list-style:none; display:grid; gap:10px; }
.preis-grid li{ color:var(--tinte-2); font-size:16.5px; padding-left:24px; position:relative; }
.preis-grid li::before{ content:""; position:absolute; left:0; top:.6em; width:9px; height:9px; border-radius:50%; background:var(--logo-blau); }
.preis-grid .btn{ margin-top:28px; }
.preis-schluss{ margin-top:clamp(38px,4.5vw,58px); padding-top:clamp(30px,3.5vw,40px);
  border-top:1px solid var(--linie); }
.preis-begruendung{ color:var(--tinte-2); }
@media (max-width:760px){ .preis-grid{ grid-template-columns:1fr; } }

/* --- Kontakt: Abschlussband mit Formular -----------------------
   Erbt Farben und Knopfumkehr von .abschluss. Nur das Raster und
   die Felder kommen dazu.
   Formularregeln: Labels ueber dem Feld statt als Platzhalter im
   Feld, weil Platzhalter beim Tippen verschwinden. Drei Felder,
   mehr kostet nur Conversion. Touchziel 48 px. Der
   Datenschutzhinweis steht direkt am Knopf, also genau dort, wo
   gezoegert wird. */
.kontakt .wrap{ grid-template-columns:.92fr 1.08fr; align-items:start; }
.kontakt a:not(.btn){ color:#fff; text-decoration:underline; text-underline-offset:3px; }
.kontakt a:not(.btn):hover{ color:var(--blau-weich); }
.kontakt .wege{ display:flex; gap:14px; flex-wrap:wrap; margin-top:32px; }
.kontakt p.klein{ margin-top:26px; font-size:16px; color:#CBE3F2; max-width:42ch; }
.formular{ display:grid; gap:18px; }
.feld-zeile{ display:grid; gap:8px; }
.feld-zeile label{ font-size:15.5px; font-weight:600; color:#EAF4FB; }
.formular input, .formular textarea{
  font:inherit; font-size:16.5px; line-height:1.5; color:var(--tinte);
  background:var(--leinen); border:1.5px solid transparent; border-radius:10px;
  padding:12px 15px; min-height:48px; width:100%;
}
.formular textarea{ min-height:120px; resize:vertical; }
.formular input:focus-visible, .formular textarea:focus-visible{ outline:3px solid #fff; outline-offset:2px; }
.formular .btn{ justify-self:start; }
.kontakt p.hinweis-dsgvo{ margin-top:0; font-size:15px; line-height:1.5; color:#CBE3F2; max-width:46ch; }
/* Sichtbar als Entwurf markiert, statt einen Versand vorzutaeuschen. */
.kontakt p.entwurf-hinweis{
  margin-top:0; padding:14px 16px; border-radius:10px; font-size:15.5px; color:#fff; max-width:none;
  background:rgba(255,255,255,.13); border:1px solid rgba(255,255,255,.38);
}
@media (max-width:900px){ .kontakt .wrap{ grid-template-columns:1fr; } }

/* ==============================================================
   AB HIER: NUR FUER WORDPRESS

   Kein Gestaltungswille, nur Uebersetzung. Der Entwurf loest
   einiges ueber Inline-Attribute, die im Blockeditor nicht
   ueberleben wuerden. Diese Regeln stellen denselben Zustand
   ueber Klassen her.
   ============================================================== */

/* Der Entwurf setzt am Hero-Bild style="margin:0" und ueberschreibt
   damit das margin:0 auto der Klasse. Ohne diese Zeile zentriert
   sich das Bild in seiner Rasterspalte und steht 40 px weiter
   rechts als im Entwurf. */
.wp-block-image.dreieins-hero{ margin:0; }

/* Der Entwurf traegt den Staffelindex als style="--i:0" am Element.
   Der Blockeditor entfernt fremde Inline-Variablen beim Speichern,
   deshalb kommt der Index hier aus der Position. Acht Stufen
   reichen: mehr Eintraege hat keines dieser Raster. */
.n-liste > *:nth-child(1), .preis-grid > *:nth-child(1){ --i:0; }
.n-liste > *:nth-child(2), .preis-grid > *:nth-child(2){ --i:1; }
.n-liste > *:nth-child(3), .preis-grid > *:nth-child(3){ --i:2; }
.n-liste > *:nth-child(4), .preis-grid > *:nth-child(4){ --i:3; }
.n-liste > *:nth-child(5), .preis-grid > *:nth-child(5){ --i:4; }
.n-liste > *:nth-child(6), .preis-grid > *:nth-child(6){ --i:5; }
.n-liste > *:nth-child(7), .preis-grid > *:nth-child(7){ --i:6; }
.n-liste > *:nth-child(8), .preis-grid > *:nth-child(8){ --i:7; }

/* Die Preisliste ist ein core/list-Block und bringt .wp-block-list
   mit. style.css setzt dort margin:0, gleiche Spezifitaet wie
   .preis-grid ul weiter oben - das gewinnt bereits ueber die
   Reihenfolge. Der Abstand zwischen den Punkten kommt aus gap,
   nicht aus Rand, deshalb muss der Listenblock ihn abgeben. */
.preis-grid .wp-block-list > li{ margin:0; }

/* Rueckmeldung des Anfrageformulars. Im Entwurf hiess der Kasten
   entwurf-hinweis und sagte, dass der Versand noch fehlt. Er ist
   jetzt angeschlossen, der Kasten traegt die Antwort - Masse und
   Farben unveraendert. */
.kontakt p.formular-status{
  margin-top:0; padding:14px 16px; border-radius:10px; font-size:15.5px; color:#fff; max-width:none;
  background:rgba(255,255,255,.13); border:1px solid rgba(255,255,255,.38);
}
.kontakt p.formular-status.fehler{ border-color:#FFB5C2; }

/* Der Honigtopf gegen Formularroboter. Nicht display:none, das
   ueberspringen viele Skripte gezielt. Aus dem Sichtfeld geschoben
   und aus der Tabreihenfolge genommen. */
.formular .honig{
  position:absolute; left:-9999px; width:1px; height:1px;
  overflow:hidden; opacity:0;
}

/* Formularzeile im Anfrageband. .kontakt a:not(.btn) unterstreicht alle
   Links im Band und steht spaeter in der Quelle; die Formularlinks haben
   ihre eigene Linie und bleiben weiss. */
.kontakt .formulare-liste a{ text-decoration:none; color:#fff; }
.kontakt .formulare-liste a:hover{ color:#fff; }
.kontakt .formulare{ margin-top:clamp(20px,3vw,36px); }

/* --- DreiEins-Grafik in der Form der Bildmarke ------------------
   Ersetzt seit 1.9.0 die drei vollen Kreise mit „Denken, Körper,
   Fühlen“. Vorlage von Philipp, Begriffe Kopf/denken, Herz/fühlen,
   Körper/spüren, in der Mitte DU, Amatic SC fett wie im Logo.

   Bewegung, sobald die Grafik ins Bild kommt (theme.js setzt
   .sichtbar), einmal, gesamt rund 3,4 s:
   1. die drei Tuscheringe zeichnen sich nacheinander, wie das Signet
      im Hero der Startseite (stroke-dashoffset, Umfang 2513),
   2. jeder Kreis fuellt sich mit seiner Farbe, kurz nach seinem Ring,
   3. die Begriffspaare tauchen auf, in derselben Reihenfolge,
   4. zuletzt DU in der Mitte, wo sich alle drei ueberschneiden.
   Ohne Skript und bei reduzierter Bewegung steht alles sofort da. */
.dreieins-grafik svg{ overflow:visible; }
.dg-text text{ font-family:var(--dreieins); font-weight:700; fill:var(--tinte); }
.dg-begriff, .dg-du{ transform-box:fill-box; transform-origin:center; }

.js .dreieins-grafik .dg-kontur circle{ stroke-dasharray:2513; stroke-dashoffset:2513; }
.js .dreieins-grafik .dg-flaeche,
.js .dreieins-grafik .dg-begriff,
.js .dreieins-grafik .dg-du{ opacity:0; }

.js .dreieins-grafik.sichtbar .dg-kontur circle{ animation:kontur-zeichnen 1800ms var(--ease-sanft) both; }
.js .dreieins-grafik.sichtbar .dg-kontur circle:nth-child(2){ animation-delay:300ms; }
.js .dreieins-grafik.sichtbar .dg-kontur circle:nth-child(3){ animation-delay:600ms; }

.js .dreieins-grafik.sichtbar .dg-flaeche{ animation:flaechen-ein 1200ms var(--ease-sanft) both; }
.js .dreieins-grafik.sichtbar .dg-f1{ animation-delay:900ms; }
.js .dreieins-grafik.sichtbar .dg-f2{ animation-delay:1200ms; }
.js .dreieins-grafik.sichtbar .dg-f3{ animation-delay:1500ms; }

.js .dreieins-grafik.sichtbar .dg-begriff{ animation:dg-begriff-ein 700ms var(--ease-out) both; }
.js .dreieins-grafik.sichtbar .dg-b1{ animation-delay:1500ms; }
.js .dreieins-grafik.sichtbar .dg-b2{ animation-delay:1800ms; }
.js .dreieins-grafik.sichtbar .dg-b3{ animation-delay:2100ms; }

.js .dreieins-grafik.sichtbar .dg-du{ animation:dg-du-ein 800ms var(--ease-out) 2600ms both; }

@keyframes dg-begriff-ein{ from{ opacity:0; transform:translateY(8px); } to{ opacity:1; transform:none; } }
@keyframes dg-du-ein{ from{ opacity:0; transform:scale(.86); } to{ opacity:1; transform:none; } }

@media (prefers-reduced-motion: reduce){
  .js .dreieins-grafik .dg-kontur circle{ stroke-dashoffset:0; animation:none !important; }
  .js .dreieins-grafik .dg-flaeche,
  .js .dreieins-grafik .dg-begriff,
  .js .dreieins-grafik .dg-du{ opacity:1; animation:none !important; }
}
