/*
Theme Name:   Astra Child — GartenPro
Theme URI:    https://gartenpro.ch
Description:  Quiet-Luxury-Child-Theme (Aesop × Zegna) für GartenPro. Tokens + Komponenten, Fonts self-hosted.
Author:       Remco Livain
Template:     astra
Version:      0.2.70
Text Domain:  astra-child-gv
*/
/* Version 0.2.34 — VOLL-ROLLOUT der neuen Gestaltungsrichtung (Auftrag Remco,
   Design-Projekt 666f7fb1, alle 8 Seiten): Token in :root (tokens.css) —
   Newsreader/Archivo, Papier + EIN Grün, Radius site-weit. Header weiss +
   sticky + Blur mit grüner Pillen-CTA, Footer dunkelgrün 4-spaltig
   (site.css/base.css). Hero auf allen Seitentypen (functions.php):
   GD-Übersichten (Foto), Finden-Hub (Foto + Suchkarte), Kanton-Hubs +
   Ortsseiten (absorbieren Kicker→Statistik + Intro), Leistungs-Hub (helle
   Variante), Profile (Brotkrumen + überlappende weisse Profilkarte mit
   Pillen und Offerte-CTA aus profil.js). Finden-Hub: Kantons-Karten,
   Leitfaden-Panel, FAQ-Karten (redesign.css). 9 Design-Bilder in der
   Mediathek (8786–8794). */
/* Version 0.2.32 — Kategorie-Redesign: erste Seite der neuen Gestaltungsrichtung.
   Quelle: Design «Kategorie Gartenpflege» (claude.ai/design, Projekt 666f7fb1).
   Auf den GD-Übersichtsseiten (Kategorie/Archiv/Suche, body.geodir-archive):
   Newsreader + Archivo (self-hosted, fonts/), warmes Papier statt Stone, Grün
   als einziger Akzent, dunkler Foto-Hero mit Brotkrumen (functions.php,
   astra_header_after), überlappende weisse Filterkarte (GD-Suchform),
   Kachelfuss als Textlinks, runde Pagination. Alles in kategorie.css als
   Scope-Override — die übrigen Seitentypen behalten das Quiet-Luxury-System,
   bis die weiteren Seiten des Design-Projekts umgesetzt sind. */
/* Version 0.2.31 — Eintrags-Kachel als eine Übersichtsgestaltung (tiles.css).
   Quelle: Design «Kategorieseite Bepflanzung». Auf Kategorie-, Orts-, Leistungs-
   und Suchseiten liefen Sektionskopf und Betriebe optisch ineinander — alles
   flacher Text auf Stone, getrennt nur durch Haarlinien. Jetzt: Betriebe sind
   weisse Kacheln im Raster, Sektionsköpfe bleiben auf dem Grund stehen.
   - tiles.css adressiert BEIDE Markups gemeinsam (.gv-index > .gv-row der
     generierten Seiten und .geodir-post von GeoDirectory), damit es eine
     Gestaltung gibt und nicht zwei Kopien. Wird zuletzt importiert, weil
     ortsseite.css und archiv.css mit !important arbeiten.
   - Die 29 Leistungs-Icons erscheinen jetzt auch in der Kachel. Ihr SVG-Satz
     liegt ab sofort NUR in PHP (gv_service_icons()); profil.js und archiv.js
     lesen window.GV_SVC_ICONS. Die Kopie in profil.js ist entfernt.
   - Neues REST-Feld gv_services (nur lesend) liefert die kanonischen Leistungen
     je Betrieb; archiv.js holt sie im selben Fetch wie die Bewertungen.
   - ABWEICHUNG vom bisherigen System: Kacheln haben Fläche und Radius, während
     DESIGN-SYSTEM.md «keine Karten, radius 0» festhält. Bewusste Entscheidung;
     über --radius-tile an einer Stelle zurückdrehbar. --radius bleibt 0. */
/* Version 0.2.30 — Leistungen werden navigierbar (/leistungen/{slug}/).
   Das Leistungs-Raster im Profilkopf war eine Sackgasse: es zeigte, wofür ein
   Betrieb steht, aber nicht, wer dasselbe anbietet. Jede Zeile mit erkannter
   Leistung ist jetzt ein Link auf die zugehörige Leistungsseite, mit Icon.
   - gv_service_taxonomy() / gv_classify_service() ordnen die frei geschriebenen
     Leistungszeilen 29 kanonischen Leistungen zu. Quelle der Wahrheit ist
     ortsseiten/build_leistungsseite.py (TAX) — der PHP-Block wird daraus
     erzeugt, sonst driften Raster und Leistungsseiten auseinander.
   - Zeilen ohne Treffer bleiben reiner Text (Klasse gv-svc-plain). Lieber kein
     Link als ein toter — 18 % der Formulierungen sind Floskeln ohne Leistung.
   - ortsseite.css gilt jetzt auch für den Hub /leistungen/ (page 8664). Ohne
     den zweiten Hub im Selektor rendern die 29 neuen Seiten ungestylt, weil
     alle Regeln dort auf .parent-pageid-4984 gescopet waren.
   - Icons werden über innerHTML eines <div> geparst, nicht über svg.innerHTML:
     letzteres ist nicht überall zuverlässig und erzeugt dort still nichts.
   - Kopfbild je Leistungsseite (.gv-leistung-hero), 21:9 — 3:1 war geplant,
     aber kein Bildmodell bietet es an; feste aspect-ratio gegen Layout-Sprung,
     auf dem Telefon 16:9, weil 21:9 dort zum Streifen wird. */
/* Version 0.2.26 — Leistungs-Raster im Profilkopf (Design Profil.dc.html).
   Das Raster und sein CSS existierten seit 0.2.13, liefen aber nie: GV_PROFILE
   lieferte kein services[]. functions.php zieht die Punkte jetzt aus der
   «### Leistungen»-Liste der angereicherten Beschreibung (gv_extract_services);
   profil.js setzt sie VOR den Tabs-Block in .entry-content, damit sie in der
   linken Spalte neben der Sticky-Rail stehen, und entfernt die Liste aus dem
   Fliesstext, damit sie nicht zweimal auf der Seite steht. */
/* Version 0.2.25 — Sticky-Anfrage-Rail AN (Design Profil.dc.html). Das
   Anfrageformular stand bisher ganz unten und war beim Lesen nie im Blick;
   jetzt zweispaltig ab 860px mit position:sticky. Gegen das Live-DOM geprüft:
   #gg-anfrage ist direktes Kind von .entry-content, das Relayout trifft sauber.
   Wichtig: die Rail ist mit allen Feldern ~915px hoch und passt damit NICHT auf
   einen MacBook-Viewport — ohne Gegenmassnahme läge der Absendeknopf unter der
   Kante und «immer im Blick» wäre verfehlt. Darum kompaktere Feldmasse in der
   Rail + max-height:calc(100vh-48px) mit eigenem Scroll als Sicherheitsnetz. */
/* Version 0.2.24 — Enhancer-Kollision strukturell gelöst statt einzeln geflickt.
   Der Content-Enhancer baut .geodir-field-post_content aus reinem Text neu auf
   und zerstörte dabei alles, was andere Stellen per the_content dort anhängen
   (Ortslink 0.2.23, beinahe der Aktuelles-Teaser). Ab jetzt gilt: der Enhancer
   besitzt nur die Beschreibungs-Prosa; alles mit gv-Klasse oder
   data-gv-preserve wird herausgenommen und danach unangetastet zurückgehängt.
   Ausnahme .gv-owner-desc — das IST die Beschreibung, Verhalten unverändert. */
/* Version 0.2.23 — Fix «Weitere Gartengestalter in {Ort}» (P1.1-Ortslink):
   Der Link wurde vom Content-Enhancer zerstört — er hängt per the_content im
   Beschreibungsfeld, das profil.js aus reinem Text neu aufbaut; <a> und Klasse
   gingen dabei verloren. Übrig blieb ein nackter 17px-Absatz, der wie eine
   leere FAQ-Zeile aussah und nicht klickbar war. profil.js rettet ihn jetzt vor
   dem Enhancer (1c) und hängt ihn danach zurück (2e); profil.css gibt ihm die
   Label-Voice, die ihm bisher ganz fehlte. Ausserdem: Link erscheint nur noch,
   wenn es im Ort wirklich ANDERE Betriebe gibt (functions.php). */
/* Version 0.2.22 — «Aktuelles»: Redaktions-Feed pro Betrieb (Design
   Aktuelles.dc.html). Profil bekommt einen Teaser unter der Beschreibung (1B)
   und einen eigenen «Aktuelles»-Tab (1A); jeder Beitrag ist eine eigene URL
   /places/{betrieb}/aktuelles/{beitrag}/ (1C, neues aktuelles.css). Das Markup
   rendert gv-premium (class-news.php) server-seitig in #gv-news-stage —
   profil.js platziert es nur, damit Inhalt und interne Links im Quelltext
   stehen. Cache-Bust aller Imports. */
/* Version 0.2.16 — Checkout: «Einzelne Anfrage» (CHF 59 einmalig) ausgeblendet,
   bis das Stripe-Einmalprodukt + plan=lead-Handler in gv-premium existieren (sonst
   fiele der Pfad ins Monatsabo). Switch passt sich auto auf 2 Optionen an.
   Reaktivieren: window.GV_CHECKOUT.singleLead=true. Cache-Bust checkout.css/.js. */
/* Version 0.2.15 — CTA-Legibilität: Klassen-Kollision behoben. Mein .gv-upsell
   und .gv-chips kollidierten mit dem gv-premium-Plugin (Inhaber-Upsell-Box +
   Premium-Anfrageform-Chips) — mein `.gv-upsell a {color:moss!important}` machte
   den soliden „Jetzt Premium-Partner werden"-Button grün-auf-grün. Meine Klassen
   in gv-tier-upsell / gv-trust-chips umbenannt (Plugin besitzt die Originalnamen).
   Cache-Bust profil.css/.js. */
/* Version 0.2.14 — Checkout-Seite live (Seite 7617, /checkout/): Astra-
   Seitentitel ausgeblendet (Hero kommt aus dem Inhalt, sonst doppelt) + [hidden]
   greift jetzt zuverlässig im Checkout (Zurück-Link nur mit ?pid sichtbar).
   Cache-Bust für base.css + checkout.css. */
/* Version 0.2.13 — Profil/Checkout/Editor-Redesign (Brief design_handoff_
   profil_checkout, 2026-06-25). Profil: Google-Rating-Zeile, Trust-Chips,
   Logo-Lockup, Videos-Tab, Karte-Tier-Hinweis, gepinnte Mobile-CTA (profil.css/
   profil.js + GV_PROFILE aus functions.php; Sticky-Rail vorbereitet, default
   aus). Checkout: neue Seite (Plan-Chooser → Stripe) checkout.css/.js +
   checkout-content.html, Body-Scope gv-checkout-page in base.css. Editor:
   Sticky-Save-Bar + Caption-Zähler/Link-Strip (addlisting.css/.js). Neue
   Tokens: card/card-strong-Flächen + Schatten. */
/* Version 0.2.7 — Profil-Kopf: Standort dedupliziert (Stadtkantone wie
   «Zürich · Zürich» → «Zürich»). Ausserdem (REST, nicht hier): der alte inline
   <script data-gg="gv-quiet-profil"> auf Seite 12 (GD Details) wurde entfernt —
   er lief doppelt zum externen profil.js und blockierte die CTA-Verschiebung
   in den Kopf (CTA-Guard war card-scoped). Jetzt nur noch die externe Datei. */
/* Version 0.2.6 — Profil-Kopf (Monogramm-Wappen, Konzept A): jedes gd_place-
   Profil bekommt einen visuellen Anker — Serif-Monogramm auf Moos-Plate +
   Kategorien-Eyebrow + Standort, H1 + CTA wandern in den Kopf (profil.js).
   Behebt den bildlosen Kaltstart der Profilseiten. profil.css + profil.js. */
/* Version 0.2.5 — ISSUE #2 Fix: Archiv-Karten verloren den Spezifitäts-Kampf
   gegen base.css `body.geodir-archive.ast-separate-container .ast-article-post
   {background:transparent!important}` (Spez. 31). Jede .geodir-post ist auch
   .ast-article-post → Kartenfläche wurde wieder abgeräumt. Archiv-Selektoren
   auf .ast-separate-container angehoben (Spez. 31, später → gewinnt). Live via
   build_archiv_styles.py verifiziert (Browser: bg #F7F5F0, Moss-Button). */
/* Version 0.2.4 — ISSUE #2 + #1-Erweiterung: Kartensprache konsistent über
   alle Listen-Flächen. Archiv/Kategorie/Suche (.geodir-post, archiv.css) und
   Hub-Top-3 (.gvh-top, ortsseite.css) bekommen dieselbe Karte + Hover-Lift +
   Moss-CTA wie die Ortsseiten-Zeilen. Reine CSS-Schicht. */
/* Version 0.2.3 — ISSUE #1 (GitHub): freie Listen-Zeilen auf Orts-/Kanton-
   seiten werden zur Karte (Feld-Fläche, Haarlinie, Hover-Lift) und "Profil
   ansehen" zum Moss-Button — nur Premium las sich vorher klickbar. Reine
   site.css-Änderung; schliesst den @import-Fix (0.2.1) mit ein, falls live
   noch älter. */
/* Version 0.2.1 — @imports VOR die @font-face-Regeln verschoben: Die CSS-Spec
   verlangt @import vor allen anderen Regeln, sonst ignorieren Browser sie
   komplett. In 0.2.0 standen die @font-face-Blöcke zuerst → tokens/base/site
   wurden nie geladen (sichtbar als ungestylter Footer auf Premium-/Rechts-
   seiten, nachdem das Customizer-CSS geleert war). */
/* Version 0.2.0 — site.css ergänzt: globale Quiet-Schicht (404, Login, Blog,
   Betrieb-eintragen), sodass nach Aktivierung die GANZE Site im System ist. */

/* Diese Imports ersetzen die per Generator eingebetteten
   <style data-gg="gv-quiet">-Blöcke auf den Ortsseiten (Klassen identisch;
   der Generator kann die Blöcke dann weglassen). Bis dahin schadet die
   Dopplung nicht — gleiche Regeln. */
@import url('tokens.css?v=0.2.70');
@import url('base.css?v=0.2.70');
@import url('ortsseite.css?v=0.2.70');
@import url('profil.css?v=0.2.70');
@import url('archiv.css?v=0.2.70');
@import url('home.css?v=0.2.70');
@import url('site.css?v=0.2.70');
@import url('aktuelles.css?v=0.2.70');
/* tiles.css ZULETZT: die Kachel überschreibt Regeln aus ortsseite.css und
   archiv.css, die dort mit !important gesetzt sind — bei gleicher Spezifität
   gewinnt die spätere Regel. */
@import url('tiles.css?v=0.2.70');
/* kategorie.css + redesign.css ALLERLETZT: die neue Gestaltungsrichtung
   überschreibt Regeln der älteren Schichten — gleiche Spezifität, spätere
   Regel gewinnt. redesign.css ist die site-weite Schicht des Voll-Rollouts. */
@import url('kategorie.css?v=0.2.70');
@import url('redesign.css?v=0.2.70');

/* Self-hosted Variable Fonts (Latin-Subset, kein Google-CDN — Schweizer
   Datenschutz-Erwartung). Geladen mit font-display:swap und size-adjust-
   freundlichen Fallbacks in tokens.css → kein Layout-Shift. */
@font-face {
  font-family: 'Cormorant Garamond';
  src: url('fonts/cormorant-garamond-variable-latin.woff2') format('woff2');
  font-weight: 300 700;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'Inter';
  src: url('fonts/inter-variable-latin.woff2') format('woff2');
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}
/* Neue Gestaltungsrichtung (Kategorie-Redesign 0.2.32): Newsreader + Archivo,
   vorerst nur auf den GD-Übersichtsseiten aktiv (Scope in kategorie.css). */
@font-face {
  font-family: 'Newsreader';
  src: url('fonts/newsreader-variable-latin.woff2') format('woff2');
  font-weight: 400 700;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'Archivo';
  src: url('fonts/archivo-variable-latin.woff2') format('woff2');
  font-weight: 400 700;
  font-style: normal;
  font-display: swap;
}
