/* ==================================================================
   LotzApp B2B — design tokens

   The one place the B2B look is defined. Loaded by every B2B surface
   and by nothing else: the shop shortcode (block E), the three account
   endpoints — reorder (block I), favourites (Posten 8) and Orte &
   Termine (Posten 9) — and the B2B context this plugin renders into
   WooCommerce's own order views (Posten 10).

   It lives apart from either of them because it was in neither and
   then in both. Block I shipped without a stylesheet at all, and
   giving it one meant either duplicating sixty custom properties or
   naming them once. Two copies of one truth is the failure this
   project keeps paying for — the wayfinder existed twice, AGENTS.md
   still does, and a fixture and its database counterpart disagreeing
   about one nullable cost four defects. A palette is the same kind of
   truth.

   Scoped to the roots named below rather than :root. These are
   shortcode and endpoint surfaces dropped into somebody else's theme,
   and Posten 10 sits inside WooCommerce's own markup; they may not
   leak a single global, and a theme that defines --brand-500 for its
   own purposes must not be repainted by ours.

   The cost of that scoping is that a new surface has to be added here
   as well, and a rule written against a root this file does not name
   resolves every `var()` on it to nothing — silently. The account
   suite asserts the root names for exactly that reason.

   The tokens are the prototype's, renamed. Where a site should be able
   to take over — the accent colour above all — overriding the token on
   either root is enough; nothing downstream hardcodes a hex.

   Zwei Flächen, zwei Rollen:

   `--lwb-surface` ist die **Grundfläche** — „Karte, Tabelle,
   Eingabefeld". Hier steht #fff, weil ein Plugin ohne Theme irgendwo
   anfangen muss; `lotzwoo-theme-base` bindet dieselbe Rolle an das
   Preset `surface`, und auf einem Kundentheme ist das nicht weiß
   (Bersta: #fbf7f0, am 2026-08-13 im Browser gelesen).

   **Der Token hieß bis zum 2026-08-13 `--lwb-white`**, und der Name war
   der Fehler: wer „weiß" liest und eine Fläche darauf setzt, bekommt auf
   jedem zweiten Kunden Creme. Er kostete drei Sitzungen — drei
   `!important`-Regeln gegen ein Symptom (AP-22), einen falsch gelesenen
   Befund und diesen Auftrag. Umbenannt in 48 Zeilen über zwei Repos,
   derselbe Wert, gemessen vorher wie nachher.

   `--lwb-front` ist die **Vordergrund-Rolle**: die Fläche, die sich vom
   Grund abheben *soll*. Sie ist wörtlich Weiß (`--lwb-white-pure`, im
   Theme an das Preset `white` gebunden) und trägt Kontur und Schatten
   mit, weil Farbe allein auf einem weißen Basistheme nichts hebt — dort
   fallen Grund und Vordergrund zusammen und nur Kante und Schatten
   bleiben. Wer eine Fläche „nach vorn" holen will, nimmt diese drei
   Token zusammen und nicht #fff in einer Regel.
   ================================================================== */

/* ------------------------------------------------------------------
   Die acht Wurzeln sind ein Vertrag zwischen zwei Repos.

   Die Zahl war bis zum 2026-08-18 „sechs" und die Liste hatte sieben Einträge:
   `.lotzwoo-standing-orders` kam mit AP-58 dazu, ohne dass jemand den Satz
   darüber nachzog. Eine Zahl im Fließtext, die die Liste darunter zählt,
   veraltet still — sie steht hier trotzdem, weil sie der einzige Ort ist, an
   dem auffällt, dass die zweite Liste im Theme kürzer ist.

   Dieselbe Liste steht in `lotzwoo-theme-base/style.css`, und sie muss
   dort dieselbe sein. Wer hier eine Fläche hinzufügt und dort nicht,
   baut genau den Fehler, der am 2026-08-13 gefunden wurde: das Plugin
   führte fünf Wurzeln, das Theme drei, die Schnittmenge war zwei — und
   auf `.lotzwoo-favorites`, `.lotzwoo-locations` und
   `.lotzwoo-ordercontext` galt deshalb **kein einziges** Theme-Token.
   Die drei Konto-Flächen trugen die Marke des Kunden nicht: die
   Grundfläche stand dort auch auf Bersta bei #ffffff statt bei #fbf7f0.

   Eine Fläche steht auch dann in beiden Listen, wenn eine der beiden
   Seiten sie noch nicht gestaltet — `.lotzwoo-heldback` gestaltet heute
   nur das Theme, und das Plugin führt sie hier trotzdem. Token kosten
   nichts; die Lücke ist das Teure, und sie wird nirgends rot.

   **AP-93 (M2b), offen und benannt.** Der Rückhalt aus Block G ist in
   Ruhestand; die Fläche darunter heißt jetzt `.lotzwoo-conflicts` und
   trägt die Konfliktzeilen aus FR-MC-07. Beide stehen hier, und das ist
   ein Zwischenstand: `.lotzwoo-conflicts` muss in `lotzwoo-theme-base`
   nachgezogen werden, und erst danach darf `.lotzwoo-heldback` in
   **beiden** Dateien fallen. Ein Wurzelname ist ein Vertrag zwischen
   zwei Repos — ihn hier allein zu ändern baut genau den Fehler, vor dem
   der Absatz darüber warnt.

   Die Reihenfolge der beiden Dateien im Dokument ist seit dem
   2026-08-13 zugesagt und kein Zufall der Enqueue-Kette mehr: das Theme
   hängt seine `style.css` an `Design_Tokens::HANDLE` und kommt damit
   immer danach. Wer diese Datei später lädt, gewinnt die Kaskade und
   nimmt jedem Kundentheme seine Farben — die Begründung steht in
   `includes/B2B/Design_Tokens.php`.
   ------------------------------------------------------------------ */

.lotzwoo-b2b-shop,
.lotzwoo-reorder,
.lotzwoo-favorites,
.lotzwoo-locations,
.lotzwoo-standing-orders,
.lotzwoo-ordercontext,
.lotzwoo-contextcard,
/* **AP-70 (C1): die zehnte Wurzel, und die erste fremde.** Vier der acht
   Konto-Flaechen gehoeren WooCommerce; sie bekommen unser Design ueber Woos
   eigene Klassennamen statt ueber Template-Overrides. Ohne diese Zeile
   loeste dort **jedes** `var(--lwb-…)` ins Leere auf — lautlos, ohne
   Konsolenfehler und ohne rote Pruefung. Genau davor warnt der Absatz
   „The cost of that scoping" weiter oben, und genau das ist am 2026-08-20
   beim ersten Lauf passiert: die Karten trugen den Rahmen des Themes, nicht
   unseren, und die Zahlen sagten es. Gegengeprobt: ohne die zwei Zeilen sind
   16 von 42 Pruefungen der Konto-Suite rot.

   `.woocommerce-MyAccount-navigation` steht daneben, weil die Auswahlliste
   aus C5 darin haengt. */
.lotzwoo-overview,
.lotzwoo-heldback,
.lotzwoo-conflicts,
.woocommerce-MyAccount-content,
.woocommerce-MyAccount-navigation {
  --lwb-brand-50: #eaf6f1;
  --lwb-brand-100: #cfe9de;
  --lwb-brand-300: #6bbb9f;
  --lwb-brand-500: #157d5f;
  --lwb-brand-600: #0f6b51;
  --lwb-brand-700: #0b5641;

  --lwb-ink-900: #0d1520;
  --lwb-ink-700: #263243;
  --lwb-ink-600: #3a4759;
  --lwb-ink-500: #5a6879;
  --lwb-ink-400: #8592a3;
  --lwb-ink-300: #b9c2cd;
  --lwb-ink-200: #dbe1e8;
  --lwb-ink-100: #f1f4f7;
  --lwb-ink-50: #f7f9fb;
  /* Die Grundfläche. Siehe Kopfkommentar: die Rolle heißt „Karte,
     Tabelle, Eingabefeld", nicht „weiß". */
  --lwb-surface: #fff;

  /* Wörtlich Weiß — der Rückfall zum Preset `white`, das beide
     theme.json führen. Nicht als Fläche verwenden, sondern über
     `--lwb-front`; dieser Token ist die Farbe, jener die Rolle. */
  --lwb-white-pure: #ffffff;

  --lwb-ok-50: #e8f6ee;
  --lwb-ok-500: #17794a;
  --lwb-warn-50: #fdf3e3;
  --lwb-warn-500: #a86a08;
  --lwb-err-50: #fdecec;
  --lwb-err-500: #b42318;
  --lwb-err-700: #8a1a12;
  --lwb-info-50: #eaf1fc;
  --lwb-info-500: #1e5eb8;

  --lwb-fs-2xs: 0.6875rem;
  --lwb-fs-xs: 0.75rem;
  --lwb-fs-sm: 0.8125rem;
  --lwb-fs-md: 0.875rem;
  --lwb-fs-base: 0.9375rem;
  --lwb-fs-lg: 1.0625rem;
  --lwb-fs-xl: 1.25rem;
  /* 24px. Die Stufe über xl, bisher von nichts gebraucht: die Sortimentsseite
     ist die erste Fläche mit einer eigenen Seitenüberschrift. Als Token und
     nicht als 1.5rem in einer Regel, damit die Skala eine Skala bleibt. */
  --lwb-fs-2xl: 1.5rem;

  --lwb-sp-1: 4px;
  --lwb-sp-2: 8px;
  --lwb-sp-3: 12px;
  --lwb-sp-4: 16px;
  --lwb-sp-5: 20px;
  --lwb-sp-6: 24px;
  --lwb-sp-8: 32px;

  /* **Eine Bedienelementhoehe fuer die Werkzeugleiste des Sortiments** (AP-80,
     Teil B). Bis zum 2026-08-24 trugen ihre vier Elemente vier Hoehen — am
     Klon gemessen: Suchfeld 39,0 · Ansichtsumschalter 37,5 · Scan-Knopf 33,5 ·
     Sortier-Select 36,0, Spanne 5,5 px.

     **40 ist nicht gegriffen:** die Kontextleiste fuehrt seit AP-70 (B1)
     `40 x 40` fuer ihre zwei Schaltflaechen. Mit diesem Token hat die
     Oberflaeche **eine** Bedienelementhoehe statt zweier Familien, und der
     Scan-Knopf ist nicht laenger das kleinste Fingerziel der Seite.

     **Als gesetzte Hoehe und nicht als Polsterrechnung**, und das ist der
     Punkt: ein natives `<select>` traegt `line-height: normal` — der Browser
     bestimmt seine Innenhoehe. Genau deshalb stand es bei 36 und nicht bei 38,
     obwohl es dieselbe Regel wie das Suchfeld trug. Polster kann das nicht
     einholen, eine Hoehe schon. */
  --lwb-control-h: 40px;

  /* Die Hoehe der Bedienelemente in Woos eigenen Kontoformularen — Text,
     Auswahl, Textbereich und Woos Select2. Sie stand bis zum 2026-08-29 in
     `b2b-account.css` selbst und war damit die einzige Stelle im Projekt, an
     der eine zweite Palettenquelle entstand; die Konto-Suite prueft genau das
     und hat es gemeldet, sobald sie wieder laufen konnte.

     Getrennt von `--lwb-control-h`, weil es ein anderer Wert ist und bleibt:
     dort 40 px fuer die eigene Werkzeugleiste, hier 2,6rem fuer eine Fremd-
     flaeche, deren Ausreisser Woos Select2 mit 49 px war. */
  --lwb-konto-feld-h: 2.6rem;

  --lwb-r-sm: 5px;
  --lwb-r-md: 8px;
  --lwb-r-lg: 12px;
  --lwb-r-full: 999px;

  --lwb-sh-sm: 0 1px 3px rgba(13, 21, 32, .08), 0 1px 2px rgba(13, 21, 32, .04);
  --lwb-sh-md: 0 4px 12px rgba(13, 21, 32, .09), 0 1px 3px rgba(13, 21, 32, .05);
  --lwb-sh-lg: 0 12px 32px rgba(13, 21, 32, .14), 0 2px 8px rgba(13, 21, 32, .06);
  --lwb-focus: 0 0 0 3px rgba(21, 125, 95, .28);

  /* Die Schraffur „das kannst du nicht bestellen" — **eine** Definition, zwei
     Verwender: die Konfliktzeile der Nachbestellung und die gesperrte
     Favoritenkarte. Bis zum 2026-08-17 stand sie zweimal ausgeschrieben, in
     zwei Schreibweisen, mit demselben Ergebnis; die zweite Fassung war der
     eigentliche Befund des Konto-Audits, nicht die Farbe.

     Und die Farbe kommt jetzt aus `--lwb-err-500` statt als `rgba()` daneben.
     Das Basistheme bildet das Token auf einen WordPress-Preset ab
     (`var(--wp--preset--color--err-500, …)`) — ein Kunde mit eigener
     Fehlerfarbe bekam bisher überall seine, nur hier nicht. Auf Bersta ist der
     Wert heute identisch, der Fehler also latent: er erscheint beim ersten
     Kunden, der die Farbe setzt, und das ist genau die Sorte, die niemand
     sucht. */
  --lwb-hatch-blocked: repeating-linear-gradient(
    135deg,
    transparent, transparent 8px,
    color-mix(in srgb, var(--lwb-err-500) 3.5%, transparent) 8px,
    color-mix(in srgb, var(--lwb-err-500) 3.5%, transparent) 16px
  );

  /* Die Vordergrund-Rolle: Fläche, Kontur, Schatten — zusammen zu
     nehmen, nicht einzeln. Der Schatten ist eine Stufe kräftiger als
     der der Grundfläche (`--lwb-sh-sm`), weil auf einem weißen
     Basistheme `--lwb-front` und `--lwb-surface` denselben Wert haben:
     dort hebt nicht die Farbe, sondern die Kante und der Schatten.
     Auf einem getönten Kundentheme heben alle drei zusammen. */
  --lwb-front: var(--lwb-white-pure);
  --lwb-front-border: var(--lwb-ink-200);
  --lwb-front-shadow: var(--lwb-sh-md);

  --lwb-sidebar-w: 290px;
  /* How far down the sticky bar parks. A theme with its own sticky
     header sets this once instead of restyling the bar. */
  --lwb-sticky-top: 0px;
  --lwb-z-sticky: 30;
  --lwb-z-drawer: 10040;
  --lwb-z-modal: 10050;
  --lwb-z-toast: 10060;

  color: var(--lwb-ink-700);
  font-size: var(--lwb-fs-md);
  line-height: 1.5;
}

.lotzwoo-b2b-shop *,
.lotzwoo-b2b-shop *::before,
.lotzwoo-b2b-shop *::after,
.lotzwoo-reorder *,
.lotzwoo-reorder *::before,
.lotzwoo-reorder *::after,
.lotzwoo-favorites *,
.lotzwoo-favorites *::before,
.lotzwoo-favorites *::after,
.lotzwoo-locations *,
.lotzwoo-locations *::before,
.lotzwoo-locations *::after,
.lotzwoo-standing-orders *,
.lotzwoo-standing-orders *::before,
.lotzwoo-standing-orders *::after,
.lotzwoo-ordercontext *,
.lotzwoo-ordercontext *::before,
.lotzwoo-ordercontext *::after,
.lotzwoo-contextcard *,
.lotzwoo-contextcard *::before,
.lotzwoo-contextcard *::after,
.lotzwoo-overview *,
.lotzwoo-overview *::before,
.lotzwoo-overview *::after,
.woocommerce-MyAccount-content *,
.woocommerce-MyAccount-content *::before,
.woocommerce-MyAccount-content *::after { box-sizing: border-box; }

/* `!important` because these surfaces set `display` on the very nodes
   they toggle: the favourites pager is a flex row that is `hidden`
   until there is another page, and the browser default for `[hidden]`
   loses to any explicit `display`. */
.lotzwoo-b2b-shop [hidden],
.lotzwoo-reorder [hidden],
.lotzwoo-favorites [hidden],
.lotzwoo-locations [hidden],
.lotzwoo-standing-orders [hidden],
.lotzwoo-ordercontext [hidden],
.lotzwoo-contextcard [hidden],
.lotzwoo-overview [hidden] { display: none !important; }

.lotzwoo-b2b-shop h1,
.lotzwoo-b2b-shop h2,
.lotzwoo-b2b-shop h3,
.lotzwoo-reorder h1,
.lotzwoo-reorder h2,
.lotzwoo-reorder h3,
.lotzwoo-favorites h1,
.lotzwoo-favorites h2,
.lotzwoo-favorites h3,
.lotzwoo-locations h1,
.lotzwoo-locations h2,
.lotzwoo-locations h3,
.lotzwoo-standing-orders h1,
.lotzwoo-standing-orders h2,
.lotzwoo-standing-orders h3,
.lotzwoo-ordercontext h1,
.lotzwoo-ordercontext h2,
.lotzwoo-ordercontext h3,
.lotzwoo-overview h1,
.lotzwoo-overview h2,
.lotzwoo-overview h3 { color: var(--lwb-ink-900); line-height: 1.25; margin: 0; }

.lotzwoo-b2b-shop p,
.lotzwoo-reorder p,
.lotzwoo-favorites p,
.lotzwoo-locations p,
.lotzwoo-standing-orders p,
.lotzwoo-ordercontext p,
.lotzwoo-overview p { margin: 0 0 var(--lwb-sp-3); }
