/* REQ-BACKEND-FILTER-BAR-COLLAPSIBLE-ONE-ROW-001 (wave 12, client decision 46) - the ONE shared backend
 * presentation layer rendered by ARF_Backend_UI (includes/class-arf-backend-ui.php). Loaded in the document head
 * on every wp-admin page of the augite plugin family and on every /intern/ view (ARF_Backend_UI::enqueue_admin()
 * and ::enqueue_intern()), after the plugin stylesheets.
 *
 * Why !important on the layout declarations: this component sits inside page stylesheets that force their own
 * control widths - public.css `body:not(.wp-admin) .arf-app input/select{width:100%}` (the real cause of the
 * three-row /intern/rentalcore/buchungen/ filter the client reported), admin.css `.arf-admin-filterbar label
 * {display:grid}`, AssetCore's `.augac-filterbar--advanced{display:grid}` and the UX platform's filterbar chrome.
 * The component owns the row layout on every surface regardless of stylesheet order (on /intern/ the plugin
 * stylesheet may be printed after this one). Only layout/geometry is forced; colours follow the surface tokens.
 *
 * Desktop rule set (no media query): exactly one row - flex, nowrap, no full-width or block-level children; the
 * search field grows, selects/dates keep their natural width and may shrink. Wrapping exists ONLY in the narrow
 * media queries below (decision 18: single column at narrow widths; decision 30: a checkbox stays beside its text). */

/* REQ-BACKEND-FILTER-BAR-TABLE-PLACEMENT-001 (2026-09-14): the ONE shared "table title left, filter
 * toggle right" header row, used at every call site of filter_bar_open()/filter_bar_close() (and the
 * AssetCore wrapper augac_backend_filter_bar_open()) that sits directly above a table. Flex row that
 * WRAPS (not a fixed two-column grid): the title shrinks/grows normally, the filter <details> is the
 * second flex item and, once its open panel needs more width than the row has left, the whole item
 * wraps to its own full-width line below the title - the augite-table-head box then simply grows
 * taller and everything that follows (the table) is pushed down in normal flow, never overlapped. */
.augite-table-head{display:flex;flex-flow:row wrap;align-items:flex-start;justify-content:space-between;gap:8px 16px;margin:0 0 12px}
.augite-table-head>:first-child{flex:1 1 auto;min-width:0}
/* REQ-BACKEND-FILTER-BAR-TABLE-PLACEMENT-001: the rule above wins over .augite-list-card__titleline
   (specificity 0,2,0 vs 0,1,0), so the title line falls back to flex-basis:auto = its max-content width.
   On heads with a long lead that max-content fills the whole row and pushes the filter trigger onto its
   own left-aligned line below the title - measured live at 1280px on RentalAdmin > Rechtsdokumente
   (arf-legal-master-filter, trigger at x=80, 81px BELOW the title instead of right-aligned beside it) and
   RentalAdmin > Mailzustellung (arf-mail-routing-filter, same picture). Scoped strictly to
   heads that actually carry a filter trigger, the title line gets the same shrinkable 16rem basis the
   kit head already uses, so the trigger stays on the title row; it still shrinks (shrink 1, min-width 0)
   and the open panel still wraps to its own full-width line as documented above. */
.augite-table-head:has(.augite-filter-toggle__button)>:first-child{flex-basis:16rem}
/* every head the bar is streamed into - the kit head (list cards, wp-admin table heads) AND the two legacy heads of the
   direct filter_bar_open() callers (/intern/ .arf-ops-section-head, wp-admin .arf-panel-head): the button stays a
   normal item of the head line, the block wraps to its own full line below (measured: without the legacy heads here
   the /intern/ bookings trigger still moved 542px to the left). */
/* REQ-INTERN-FILTER-ICON-GEOMETRY-001 (Auftraggeberauftrag 2026-09-27): das Filtersymbol steht IMMER
   ganz rechts der Aktions-/Filtersymbole (Aktionsknoepfe wie "+ Neu"/"Instanz planen"/"Transportauftrag
   anlegen" links daneben) - order hoeher als der Vorgabewert 0 von Titel und Aktionsknopf genuegt, weil
   beide Kopfvarianten (.augite-list-card__tools als Flex-Container UND, wenn :has(>.augite-filter-toggle)
   .augite-list-card__tools zu display:contents wird, der umgebende .augite-table-head/.augite-section-head
   selbst als Flex-Kontext) dieselbe Flex-Reihenfolge auswerten. Der Klappwinkel der Kategorie-Kaesten sitzt
   in <summary>, ausserhalb dieser Gruppe, und bleibt unberuehrt. */
:is(.augite-table-head,.arf-ops-section-head,.arf-panel-head)>.augite-filter-toggle__button,.augite-table-head .augite-filter-toggle__button{flex:0 0 auto;order:2;margin:0}
:is(.augite-table-head,.arf-ops-section-head,.arf-panel-head)>.augite-filter-toggle,.augite-table-head .augite-filter-toggle{flex:1 1 100%;order:99;margin:0}
/* REQ-013 live-Nachweis 2026-09-22: echter horizontaler Seitenscroll auf allen drei Arbeitsvorrat-
   Flaechen bei 768/834/1024px, sobald der "Arbeitsvorrat zurücksetzen"-Button (button.arf-ops-
   worklist-reset.is-filtered) sein .augite-filter-toggle__count-Badge traegt (position:absolute;
   right:-7px;top:-7px). Zwei falsche erste Annahmen live widerlegt: weder ein padding-right auf der
   Kopfzeile noch ein margin-right auf .augite-filter-toggle__button aendern die Badge-Position -
   Grund: der komplette Vorfahren-Pfad des Badges (button.arf-ops-worklist-reset > div.augite-list-
   card__tools > header.augite-table-head > section.augite-list-card) hat ueberall position:static,
   der Badge ist also NICHT relativ zu .augite-filter-toggle__button verankert (der ist ein anderes,
   benachbartes Element), sondern mangels eines positionierten Vorfahren relativ zum initial
   containing block, also effektiv relativ zum Dokument/Viewport - right:-7px schiebt ihn dadurch
   IMMER 7px ueber den Viewportrand hinaus, unabhaengig von jedem Container-Padding/-Margin. Realer
   Fix: den tatsaechlich badge-tragenden Button selbst zum positionierten Vorfahren machen, damit
   right:-7px sich auf dessen eigene Randbox bezieht statt auf den Viewport. Live gemessen auf
   /intern/rentalflow/?queue=arf-flow-preparation/-handover/-return bei 768/834/1024px Breite: ohne
   Fix scrollWidth 775 bei clientWidth 768 (7px Overflow) auf allen drei Flaechen/Breiten, mit Fix
   scrollWidth == clientWidth ueberall, Badge-Position unveraendert sichtbar am rechten Button-Rand. */
button.arf-ops-worklist-reset:has(.augite-filter-toggle__count){position:relative}

.augite-filter-toggle{display:block;box-sizing:border-box;max-width:100%;min-width:0;margin:12px 0;padding:0;border:0;background:transparent}
.augite-filter-toggle[hidden]{display:none!important}
/* wave 42 (client rule R285 "Filter-Toggle gleiche Hoehe/Grundlinie wie die Filter-Controls"): the pictogram button is the
 * md control size (36px, --augite-control-h) like every filter/form control of dense pages, no longer a 40px box next to 36px
 * controls; touch pages 44px, pointer:coarse 40px (dense) / 48px (touch) - see the wave 42 block at the end. */
/* REQ-INTERN-FILTER-ICON-GEOMETRY-001: derselbe orangene Kasten wie die uebrigen Aktionsknoepfe
   (.augite-btn--primary/.augite-icon-btn--primary), dieselben Farbwerte - keine neue Farbe erfunden.
   Vorher stand das Piktogramm freistehend (border/background transparent) und wurde erst im
   aktiven/gefilterten Zustand eingerahmt; jetzt traegt es den Kasten immer, wie die Nachbarknoepfe. */
button.augite-filter-toggle__button.augite-filter-toggle__button.augite-filter-toggle__button{list-style:none;-webkit-appearance:none;appearance:none;position:relative;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;width:var(--augite-control-h)!important;height:var(--augite-control-h)!important;min-width:var(--augite-control-h)!important;min-height:var(--augite-control-h)!important;margin:0 0 0 10px;padding:0!important;border:1px solid var(--augite-accent-strong,#b84e08);border-radius:0;background:var(--augite-accent-strong,#b84e08);color:#fff;cursor:pointer;line-height:1}
.augite-filter-toggle__button::-webkit-details-marker{display:none}
.augite-filter-toggle__button::marker{content:""}
/* REQ-INTERN-FILTER-ICON-GEOMETRY-001, in der aufgeloesten Kaskade gemessen (nicht am Quelltext gelesen):
   die Ruheregel eine Zeile hoeher ist absichtlich dreifach geklasst und traegt damit die Spezifitaet
   (0,3,1). Jede Zustandsregel, die nur `.augite-filter-toggle__button:hover` (0,2,0) oder
   `.augite-filter-toggle__button.is-filtered` (0,2,0) heisst, VERLIERT gegen sie - im Quelltext sieht sie
   richtig aus, am Element kommt sie nie an. Gemessen mit einem CSSOM-Durchlauf plus getComputedStyle:
   ein Knopf MIT .is-filtered loeste zu rgb(184,78,8) auf, also zur RUHEFARBE. Das betraf beide Zustaende
   und war schon vor dieser Aenderung so; sichtbar wurde es erst, als Ruhe und Aktiv verschiedene Toene
   bekamen (vorher waren Aktiv und :hover byteidentisch, also fiel kein Unterschied auf). Alle
   Zustandsregeln tragen deshalb dieselbe dreifach geklasste Grundform wie die Ruheregel:
     Ruhe               (0,3,1)   button + 3x Klasse
     :hover/:focus      (0,4,1)   dieselbe Grundform + :hover
     .is-filtered       (0,4,1)   dieselbe Grundform + .is-filtered  (gleichauf mit :hover, steht spaeter, gewinnt)
     .is-filtered:hover (0,5,1)   gewinnt gegen beide
   "Die Regel steht da" und "die Regel gewinnt" sind zwei Aussagen; nur die zweite zaehlt, und nur die
   aufgeloeste Kaskade belegt sie - PART E dieses Pruefstands tut das je Zustand. */
button.augite-filter-toggle__button.augite-filter-toggle__button.augite-filter-toggle__button:hover,button.augite-filter-toggle__button.augite-filter-toggle__button.augite-filter-toggle__button:focus{border-color:var(--augite-accent-strong-hover,#9a4307);background:var(--augite-accent-strong-hover,#9a4307);color:#fff}
/* wave 20 (REQ-UI-MODAL-HELP-UNIFICATION-001): no ring after a pointer click on the toggle - :focus-visible only */
.augite-filter-toggle__button:focus{outline:0}
.augite-filter-toggle__button:focus-visible{outline:2px solid var(--augite-accent,#d9600a);outline-offset:2px}
/* REQ-INTERN-FILTER-ICON-GEOMETRY-001 (Auftraggeberentscheidung 2026-09-27 "oranger Kasten, aktiv anders
   markiert"): der Knopf traegt den orangenen Kasten dauerhaft, also muss der AKTIVE FILTER sich von der
   Ruhe UND von der Beruehrung unterscheiden. Vier paarweise verschiedene Toene, kein Ton doppelt belegt:

     Ruhe, ungefiltert   --augite-accent-strong        #b84e08   (identisch .augite-icon-btn--primary)
     :hover/:focus       --augite-accent-strong-hover  #9a4307   (identisch .augite-icon-btn--primary:hover)
     .is-filtered        --augite-accent-deep          #7a3506   + Zaehler
     .is-filtered:hover  --augite-accent-deep-hover    #6b2e05   + Zaehler

   Zwei Fehler der ersten Fassung sind hier behoben, beide byteidentische Farbkollisionen:
   (1) aktiv trug #9a4307, also denselben Ton wie :hover - ein UNgefilterter Knopf unter der Maus sah damit
       aus wie ein aktiver Filter, die Aktivkennzeichnung war nicht schwach, sondern nicht vorhanden.
   (2) [aria-expanded="true"] teilte die Regel mit .is-filtered, also zeigte blosses AUFKLAPPEN die
       Aktivmarkierung. Offen ist nicht gefiltert - genau die Unterscheidung, um die es hier geht. Das
       Attribut ist deshalb aus dem Selektor heraus; aufgeklappt-und-ungefiltert bleibt auf der Ruhefarbe.

   Der Zaehler (.augite-filter-toggle__count, bereits von filter_bar_open() und backend-ui.js setCount()
   gepflegt) ist der FUEHRENDE Marker, die Farbe der zweite: vier Helligkeitsstufen derselben Farbe sind
   bei Rotsehschwaeche eine Stufe zu fein, und der Hover-Ton liegt zwischen Ruhe und Aktiv, ist also fuer
   sich zweideutig. Die Zahl loest das eindeutig auf. Reihenfolge im Stylesheet ist tragend: :hover und
   .is-filtered haben dieselbe Spezifitaet (0,2,0), .is-filtered muss danach stehen. */
button.augite-filter-toggle__button.augite-filter-toggle__button.augite-filter-toggle__button.is-filtered{border-color:var(--augite-accent-deep,#7a3506);background:var(--augite-accent-deep,#7a3506);color:#fff}
button.augite-filter-toggle__button.augite-filter-toggle__button.augite-filter-toggle__button.is-filtered:hover,button.augite-filter-toggle__button.augite-filter-toggle__button.augite-filter-toggle__button.is-filtered:focus{border-color:var(--augite-accent-deep-hover,#6b2e05);background:var(--augite-accent-deep-hover,#6b2e05);color:#fff}
/* REQ-INTERN-FILTER-ICON-GEOMETRY-001: !important noetig, weil .arf-ops svg{width:100%;height:100%}
   (public.css) auf /intern/ hoehere Selektorspezifitaet hat (0,1,1 gegen 0,1,0) und das Piktogramm sonst
   auf die Innenflaeche des 36px-Knopfes (34px) statt auf 18px streckte - live gemessen: wp-admin 18px,
   /intern/ 34px, derselbe Knopf 36px auf beiden Flaechen. wp-admin hat keine .arf-ops-Vorfahrklasse und
   war schon vorher 18px; fuer wp-admin aendert sich dadurch nichts. */
.augite-filter-toggle__icon{display:block;flex:0 0 auto;width:18px!important;height:18px!important}
.augite-filter-toggle__icon :is(path,circle,line){stroke-width:1.5}
/* REQ-INTERN-FILTER-ICON-GEOMETRY-001: der Zaehler kehrt sich um - weisser Grund, Schrift und Rand im
   dunkelsten Akzentton. Vorher trug er background:#b84e08, und seit der Knopf denselben Ton dauerhaft als
   Grund traegt, war das ein byteidentischer Farbwert auf seinem eigenen Knopf: der Zaehler verschwand,
   und ein unsichtbarer Zaehler sieht aus wie ein fehlender, also meldet ihn niemand. Der Kasten ueberlappt
   die Knopfecke und ragt zugleich ueber den Seitenhintergrund hinaus (top/right -7px), darum braucht er
   BEIDE Kanten: weisser Grund gegen den orangenen Knopf, 1px Rand gegen den hellen Seitengrund. Gemessene
   Kontraste gegen alle vier Knopftoene (weisser Grund als Nichttext, >=3:1 gefordert): #b84e08 5,1 |
   #9a4307 6,6 | #7a3506 9,0 | #6b2e05 10,4 - der engste Fall #b84e08 liegt noch ueber dem Textschwellwert
   4,5. Schrift #7a3506 auf Weiss: 9,0. Derselbe Zaehler haengt auch an button.arf-ops-worklist-reset
   (operations.js), einem hellen Knopf - der Rand traegt ihn dort genauso. */
.augite-filter-toggle__count{position:absolute;top:-7px;right:-7px;box-sizing:border-box;min-width:18px;height:18px;padding:0 3px;border:1px solid var(--augite-accent-deep,#7a3506);border-radius:0;background:#fff;color:var(--augite-accent-deep,#7a3506);font-size:11px;font-weight:700;line-height:16px;text-align:center}
.augite-filter-toggle .screen-reader-text,.augite-filter-toggle__button .screen-reader-text{position:absolute!important;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
/* LIVE-TASK-2026-09-14-119 (2026-09-14, im Browser gemessen): die Zeile ist bewusst nowrap, damit sie
 * bis 783 px einzeilig bleibt - bei sehr vielen Bedienelementen passt sie aber auch bei 1280 px nicht
 * mehr in den Inhaltsbereich. Gemessen auf admin.php?page=augite-assetcore-instances&state=active
 * (8 Bedienelemente + Filtern + Zuruecksetzen): Inhalt scrollWidth 1287 px in einem 1030 px breiten
 * Kasten, overflow visible - der Ueberhang trat heraus und die GANZE SEITE scrollte horizontal
 * (window.scrollX 237 nach scrollTo(2000,0)). Statt die Zeile umbrechen zu lassen (das waere gegen
 * Entscheidung 46) scrollt der Ueberhang jetzt INNERHALB der Leiste - dieselbe Regel, die dieses
 * Projekt fuer breite Tabellen bereits anwendet (.arf-admin-table-scroll). overflow-y bleibt visible
 * gesetzt, damit Fokusringe oben/unten nicht abgeschnitten werden; das kleine vertikale Padding
 * faengt den Ring ab, den ein Scrollcontainer sonst beschneidet. Leisten, die ohnehin passen, aendern
 * sich dadurch nicht (nachgemessen: /intern/rentalcore/buchungen/ scrollWidth = clientWidth = 1093,
 * kein interner Scroll, Seiten-scrollX bleibt 0). */
.augite-filter-toggle__panel{position:relative;display:flow-root;min-width:0;overflow-x:auto;overflow-y:visible;padding:3px 2px 3px 0;scrollbar-width:thin}

.augite-filter-toggle .augite-filter-row{display:flex!important;flex-direction:row!important;flex-wrap:nowrap!important;align-items:center!important;justify-content:flex-start!important;gap:8px!important;grid-template-columns:none!important;box-sizing:border-box;width:auto!important;min-width:0;max-width:none!important;min-height:var(--augite-control-h);margin:0!important;padding:0!important;border:0!important;background:transparent!important;box-shadow:none!important}
.augite-filter-toggle .augite-filter-row>*{flex:0 1 auto!important;width:auto!important;min-width:0!important;max-width:100%;margin:0!important;box-sizing:border-box;grid-column:auto!important}
.augite-filter-toggle .augite-filter-row>input[type=hidden]{display:none!important}
/* visually hidden labels stay hidden (the row rules above would otherwise un-clip them) */
.augite-filter-toggle .augite-filter-row>.screen-reader-text{position:absolute!important;width:1px!important;height:1px!important;min-width:0!important;margin:-1px!important;padding:0!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;clip-path:inset(50%)!important;white-space:nowrap!important;border:0!important}
.augite-filter-toggle .augite-filter-row input:not([type=checkbox]):not([type=radio]):not([type=hidden]),.augite-filter-toggle .augite-filter-row select{display:inline-block!important;width:auto!important;min-width:0!important;max-width:100%!important;min-height:var(--augite-control-h);margin:0!important;box-sizing:border-box}
.augite-filter-toggle .augite-filter-row select{max-width:16rem!important;text-overflow:ellipsis}
.augite-filter-toggle .augite-filter-row>input[type=search],.augite-filter-toggle .augite-filter-row>.augite-filter-row__grow{flex:1 1 14rem!important;min-width:9rem!important}
.augite-filter-toggle .augite-filter-row>.augite-filter-row__grow input:not([type=checkbox]):not([type=radio]){flex:1 1 auto!important;width:auto!important;min-width:0!important}
.augite-filter-toggle .augite-filter-row>label{display:inline-flex!important;flex-direction:row!important;align-items:center!important;gap:6px!important;grid-template-columns:none!important;white-space:nowrap}
.augite-filter-toggle .augite-filter-row>label>span{flex:0 0 auto}
.augite-filter-toggle .augite-filter-row>label input[type=checkbox],.augite-filter-toggle .augite-filter-row>label input[type=radio]{flex:0 0 auto!important;margin:0!important}
.augite-filter-toggle .augite-filter-row>button,.augite-filter-toggle .augite-filter-row>.button,.augite-filter-toggle .augite-filter-row>a{flex:0 0 auto!important;display:inline-flex!important;align-items:center;justify-content:center;width:auto!important;white-space:nowrap!important;border-radius:0!important}
/* a nested "more filters" disclosure inside the row opens as an overlay, so the row itself stays one row */
.augite-filter-toggle .augite-filter-row>details{position:relative;flex:0 0 auto!important}
/* Live finding LIVE-TASK-2026-09-14-119/-122 (2026-09-15, AssetCore .augac-filter-more): this rule had no [open] guard, so a CLOSED nested filter disclosure (native details.open=false) was still shown via position:absolute;display:flex - CSS display:flex beats the UA default that hides non-summary children of a closed <details>. The panel (and its selects) stayed visible and out of flow at its overlay coordinates, overflowing the filter row/page on every page using this pattern, not only while genuinely open. [open] restores the native closed state; nested() (backend-ui.js) still
   positions it with position:fixed while it IS open. */
.augite-filter-toggle .augite-filter-row>details[open]>:not(summary){position:absolute;z-index:30;top:100%;left:0;display:flex;flex-wrap:nowrap;gap:8px;margin:4px 0 0!important;padding:8px;border:1px solid #dcdcde;background:#fff;box-shadow:0 4px 12px rgba(0,0,0,.08)}

/* view-local (client-side) search toolbar built by JS (AssetCore live tools) - same component, own row */
.augite-filter-toggle--inline{margin:0;flex:1 1 100%;min-width:0}
.augite-filter-toggle__button+.augite-filter-toggle--inline{margin-top:8px}
.augac-live-tools{display:flex;flex-wrap:wrap;align-items:center;gap:8px}

/* REQ-UI-STATUS-LABELS-SYSTEMWIDE-001 (client decision 61): ONE filter pictogram per list - AssetCore's JS live view
 * search ("Ansicht durchsuchen") is its own one-row .augite-filter-row--live at the top of the same panel, the server
 * GET form row sits directly below it (a panel holding only the live row keeps no bottom gap). */
.augite-filter-toggle .augite-filter-row.augite-filter-row--live{margin:0 0 8px!important}
.augite-filter-toggle .augite-filter-row.augite-filter-row--live:last-child{margin-bottom:0!important}

/* dates and money (ARF_Backend_UI::period_html()/money_html()): break only between start and end, never inside */
.augite-period{white-space:normal}
.augite-period__start,.augite-period__end,.augite-money{white-space:nowrap}

/* coarse pointers (REQ-DESIGN-WPADMIN-LAYOUT WPADM-TOUCH-001 / RESP-001), superseded in scope by the wave 42 coordinator density
 * decision (R295): dense desktop pages grow their controls to a 40px hit area under pointer:coarse, the tablet pages
 * (touch density) keep the 48px floor - both rule sets are in the wave 42 block at the end of this file. */

/* narrow widths only: wrap (tablet), then a single column (decision 18) - checkbox beside its text (decision 30) */
@media (max-width:782px){
 .augite-filter-toggle .augite-filter-row{flex-wrap:wrap!important}
 .augite-filter-toggle .augite-filter-row select{max-width:100%!important}
}
@media (max-width:600px){
/* axis-flip reset (2026-09-21): the base rule at the top of this file is `flex-flow:row wrap`; flipping only the
  * direction would leave `wrap` standing on a COLUMN axis, where it no longer means "break into a second line"
  * but "break into a second COLUMN to the right" - i.e. sideways page scroll instead of a taller head. */
 .augite-table-head{flex-direction:column;flex-wrap:nowrap;align-items:stretch}
/* axis-flip reset, second longhand (2026-09-21, measured in the acceptance run of REQ-INTERN-LAYOUT-CALIBRATION):
  * `flex-basis:16rem` (line 35) and `flex:1 1 16rem` (.augite-list-card__titleline, line 249) are statements about
  * WIDTH - they exist so the title line keeps the filter trigger on the title row and still shrinks. On the column
  * axis flipped one line above, flex-basis is the HEIGHT, so the title block was laid out 256px tall over 122px of
  * its own content. Measured at 400px on /intern/rentalcore/buchungen/: head 300px, title block 256px vs content
  * 122px; with this reset 166px / 122px (134px of dead whitespace per head, on every /intern/ page). Same defect
  * class as the align-items flip: the rule that flips the axis must reset EVERY longhand whose meaning changes. */
 .augite-table-head:has(.augite-filter-toggle__button)>:first-child{flex-basis:auto}
 .augite-table-head .augite-filter-toggle__button{align-self:flex-end}
 .augite-filter-toggle__button{float:none;margin:0 0 8px}
 .augite-filter-toggle .augite-filter-row{flex-direction:column!important;align-items:stretch!important}
 .augite-filter-toggle .augite-filter-row>*{flex:0 0 auto!important;width:100%!important}
 /* Third instance of the same axis-flip class, found on the screenshot of the fix above: the search field of the
    filter row carries `flex:1 1 14rem!important` (line 81) at (0,3,1), which outranks the `>*` reset one line
    above (0,3,0). The row is flipped to column here, so that 14rem is the HEIGHT - the one-line search input was
    rendered 224px tall at 400px on /intern/rentalcore/buchungen/?status=request. Same specificity, later in the
    file, and only the basis is reset: the min-width and the full width from the rules around it stay. */
 .augite-filter-toggle .augite-filter-row>input[type=search],.augite-filter-toggle .augite-filter-row>.augite-filter-row__grow{flex-basis:auto!important}
 .augite-filter-toggle .augite-filter-row>label{white-space:normal}
 /* REQ-DESIGN-PORTAL-LAYOUT (Reflow/320px) - measured 2026-09-21 at 400px on
    /intern/rentalcore/buchungen/?status=request: .augite-filter-range (line 325) is an inline-flex with
    white-space:nowrap. That is right on a wide filter row, where "Von <Datum> - <Datum>" must not break. In this
    single-column block its min-content width is ~412px, and a flex item cannot be laid out narrower than its own
    content: it dragged the whole toolbar to 414px inside a 266px head - .augite-list-card__tools right edge at
    x=481 in a 400px viewport, document.scrollWidth 481 vs clientWidth 400, and window.scrollX still 0 after
    scrollTo(3000,0). The "+ Neue Buchung" button and the right half of the open filter panel were CLIPPED, not
    scrollable, i.e. unreachable. Letting the range wrap here takes the toolbar back to 266 and the document to
    400 = 400. Measured identically against the live production stylesheets, so this is an older defect and not a
    regression of PR #629/#633. */
 .augite-filter-toggle .augite-filter-row .augite-filter-range{flex-wrap:wrap!important;white-space:normal!important}
 .augite-filter-toggle .augite-filter-row>label>input:not([type=checkbox]):not([type=radio]),.augite-filter-toggle .augite-filter-row>label>select{flex:1 1 auto!important}
 .augite-filter-toggle .augite-filter-row input:not([type=checkbox]):not([type=radio]):not([type=hidden]),.augite-filter-toggle .augite-filter-row select{width:100%!important}
 .augite-filter-toggle .augite-filter-row>details[open]>:not(summary){position:static;flex-wrap:wrap}
}

/* Wave 18 / client decisions 51+53: shared finance form parts (ARF_Finance_Forms renderers, wp-admin customer file and /intern/) */
.arf-finance-reconcile{display:inline-block;margin:0 0 0 8px;vertical-align:middle}
.arf-finance-supplement__total{margin:10px 0}
.arf-finance-supplement__reference{display:block;margin:12px 0 0}
.arf-finance-supplement__reference>span{margin-right:8px}
.arf-finance-supplement__reference select{max-width:100%}
.arf-finance-supplement--group+.arf-finance-supplement--group{margin-top:22px}
/* REQ-UI-NO-PILLS-BOXES-SYSTEMWIDE-001 (client rule 102, wave 24): "Pill ist nirgends auf dem gesamten Portal, WordPress
 * oder oeffentlichen Bereichen erlaubt! Das [sind] Boxen." This stylesheet is enqueued on every augite wp-admin page (and
 * /intern/, where the theme/public.css nets apply), so it carries the wp-admin safety net that also works when the UX
 * platform plugin is inactive: WordPress-core chrome inside augite pages (.button 2px, inputs/checkboxes 2px,
 * #screen-meta-links 0 0 4px 4px, notices) renders square. Exceptions are only the genuinely circular elements and the
 * card-terminal illustration of tools/pill_shape_scan.py ALLOW_LIST (radio buttons, status/timeline dots). Counters of
 * augite admin-menu entries are squared; core menu entries are left alone. */
body.wp-admin #wpbody-content *:not(input[type=radio]):not(.augac-health-dot):not(.arf-ops-timeline-dot):not(.arp-solo-device-body):not(.arp-solo-device-display){border-radius:0!important}
body.wp-admin #adminmenu :is(li[id^="toplevel_page_arf-"],li[id^="toplevel_page_augite-"],li[id^="toplevel_page_augri-"]) :is(.awaiting-mod,.update-plugins,.menu-counter){border-radius:0!important}

/* =====================================================================================================================
 * Wave 42 - shared backend table / list-card / control kit (client rules R285-R298, R303; docs/projektsteuerung/wave42/
 * components_design.md). Rendered by ARF_Backend_UI::table()/list_card_open()/icon_button()/check()/filter_bar_for() and
 * the JS twins in backend-ui.js. This file is the only stylesheet loaded on EVERY backend surface (all augite wp-admin
 * pages, all /intern/ views, after public.css), so the whole kit lives here. New class names (augite-btn, augite-icon-btn,
 * augite-table, ...) are never combined with .button/.arf-ops-* so the /intern/ `body:not(.wp-admin) .arf-app.arf-ops
 * .arf-ops-*{...!important}` rules (specificity 0,4,1) cannot reach them; where legacy markup must be aligned (filter row
 * controls, /intern/ checkboxes, card headings) the selectors below carry the specificity noted beside them.
 *
 * Control size scale (R298, coordinator density decision for R295):
 *   sm 28px - dense table row actions            md 36px - filter/form controls, filter toggle, list-card tools
 *   lg 44px - explicit large variant (--lg)         touch 48px - pointer:coarse floor (all pages, client decision 2026-09-17)
 *   pointer:coarse on every page: sm/md controls grow to the 48px hit area (--augite-control-h is raised to 48px there).
 * Dense = default. Touch = /intern/rentalflow/ ([data-augite-density="touch"]) and wp-admin arf-flow* / arf-workshop
 * (body.augite-density-touch), plus tables rendered with mode 'touch' (.augite-table--touch).
 * ===================================================================================================================== */

/* ---- buttons: text (.augite-btn) and pictogram-only (.augite-icon-btn, square) ---- */
.augite-btn,.augite-icon-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;box-sizing:border-box;margin:0;border:1px solid var(--augite-btn-secondary-border,#d9600a);border-radius:0;background:var(--augite-btn-secondary-bg,#fff);color:var(--augite-btn-secondary-text,#b84e08);font-family:inherit;font-size:var(--augite-control-font-size);line-height:var(--augite-control-line-height);font-weight:var(--augite-button-weight);font-size:var(--augite-control-font-size);font-weight:var(--augite-button-weight);line-height:1.2;text-decoration:none;text-transform:none;letter-spacing:normal;white-space:nowrap;vertical-align:middle;cursor:pointer;box-shadow:none}
.augite-btn--sm{min-height:var(--augite-control-h);height:var(--augite-control-h);padding:var(--augite-button-pad)}
.augite-btn--md{min-height:var(--augite-control-h);height:var(--augite-control-h);padding:var(--augite-button-pad)}
.augite-btn--lg{min-height:var(--augite-control-h);height:var(--augite-control-h);padding:var(--augite-button-pad);font-size:var(--augite-control-font-size)}
.augite-icon-btn{padding:0;gap:0;flex:0 0 auto}
.augite-icon-btn--sm{width:var(--augite-control-h);min-width:var(--augite-control-h);height:var(--augite-control-h);min-height:var(--augite-control-h)}
.augite-icon-btn--md{width:var(--augite-control-h);min-width:var(--augite-control-h);height:var(--augite-control-h);min-height:var(--augite-control-h)}
.augite-icon-btn--lg{width:var(--augite-control-h);min-width:var(--augite-control-h);height:var(--augite-control-h);min-height:var(--augite-control-h)}
/* theme site.css `button{min-height:44px}` (0,0,1) and public.css `.arf-ops svg{width:100%;height:100%}` (0,1,1) must not resize the kit */
/* REQ-BACKEND-ICON-BTN-ANKER-GESTRECKT-001 (2026-09-28, LIVE gemessen auf /intern/abwesenheiten/).
   Auftraggeberbefund woertlich: "Die Tabellenzeilen selbst haben falsche Button-Layouts."

   GEMESSEN IM BROWSER, nicht in der Quelle - und die Quelle haette es auch nicht gezeigt:
       Kopfknopf "+"   36 x 48   <a>
       Stift           28 x 48   <a>        <- 28 breit, 48 hoch
       Papierkorb      28 x 28   <button>
   Der Stift war fast doppelt so hoch wie breit und um 20px hoeher als der Papierkorb daneben.

   URSACHE, vom Browser selbst benannt (CSS.getMatchedStylesForNode, nicht document.styleSheets -
   die kommt auf dieser Seite strukturell leer zurueck): die Flaechenregel
   `.arf-app.arf-ops button, .arf-app.arf-ops .button, .arf-app.arf-ops [role="button"], ...`
   setzt min-height:48px als Beruehrungsmass. Die beiden Zeilen DIREKT DARUNTER wehren das fuer
   `button` ab - fuer `a` gibt es keine Entsprechung. Der Baustein verteidigt sich also gegen
   genau ein Tag und hat das andere vergessen; jeder als <a> gerenderte Piktogrammknopf wurde
   seitdem auf 48px gestreckt.

   Betroffen ist nicht nur diese Karte: 'tag' => 'a' ist der Regelfall fuer jeden Ausloeser, der
   OHNE JavaScript bedienbar sein soll (REQ-INTERN-TABLE-INLINE-EDIT-TO-MODAL-001) - also gerade
   die Bearbeiten-Knoepfe in Tabellenzeilen.

   WARUM DER KASKADENAUFLOESER DAS NICHT FAND: er gab fuer beide Knoepfe 28x28 zurueck. Seine
   Selektorliste kennt die Flaechenregel nicht, weil sie in einer Datei steht, die er nicht
   geladen hatte. Er hat also nicht falsch gerechnet, sondern zu wenig gelesen - und das Ergebnis
   sah genau wie ein Ergebnis aus. Fuer Knopfmasse gilt ab hier: im Browser nachmessen.

   UND EIN ZWEITER ANLAUF WAR NOETIG: die erste Fassung dieser Regel hiess
   `a.augite-icon-btn.augite-icon-btn--sm` (0,2,1) und blieb LIVE WIRKUNGSLOS - der Knopf mass
   danach unveraendert 28x48. Der Grund steht im Markup: modal_trigger() setzt role="button" am
   <a>, damit ein Anker als Schaltflaeche angekuendigt wird. Damit greift die Flaechenregel ueber
   `[role="button"]` mit (0,3,0) und schlaegt (0,2,1). Erst `a[role="button"]...` mit (0,3,1)
   gewinnt - ohne !important. Haette ich nur die Quelle gelesen, waere die erste Fassung als
   Reparatur durchgegangen. */
button.augite-icon-btn.augite-icon-btn--sm,button.augite-btn.augite-btn--sm,a.augite-icon-btn.augite-icon-btn--sm,a.augite-btn.augite-btn--sm,a[role="button"].augite-icon-btn.augite-icon-btn--sm,a[role="button"].augite-btn.augite-btn--sm{min-height:var(--augite-control-h);height:var(--augite-control-h)}
button.augite-icon-btn.augite-icon-btn--md,button.augite-btn.augite-btn--md,a.augite-icon-btn.augite-icon-btn--md,a.augite-btn.augite-btn--md,a[role="button"].augite-icon-btn.augite-icon-btn--md,a[role="button"].augite-btn.augite-btn--md{min-height:var(--augite-control-h);height:var(--augite-control-h)}
button.augite-icon-btn.augite-icon-btn--lg,button.augite-btn.augite-btn--lg,a.augite-icon-btn.augite-icon-btn--lg,a.augite-btn.augite-btn--lg,a[role="button"].augite-icon-btn.augite-icon-btn--lg,a[role="button"].augite-btn.augite-btn--lg{min-height:var(--augite-control-h);height:var(--augite-control-h)}
/* Das Beruehrungsmass bleibt: auf einem groben Zeiger gehen BEIDE Tags auf 40px, wie die
   bestehende coarse-Regel weiter unten es fuer die Groessenklassen ohnehin vorsieht. */
@media (pointer:coarse){a[role="button"].augite-icon-btn.augite-icon-btn--sm,a[role="button"].augite-icon-btn.augite-icon-btn--md,a.augite-icon-btn.augite-icon-btn--sm,a.augite-icon-btn.augite-icon-btn--md,button.augite-icon-btn.augite-icon-btn--sm,button.augite-icon-btn.augite-icon-btn--md{min-height:var(--augite-control-h);height:var(--augite-control-h)}}
.augite-icon-btn.augite-icon-btn>svg{display:block;width:16px;height:16px;min-width:16px;flex:0 0 16px}
.augite-icon-btn.augite-icon-btn--md>svg{width:18px;height:18px;min-width:18px;flex-basis:18px}
.augite-icon-btn.augite-icon-btn--lg>svg{width:20px;height:20px;min-width:20px;flex-basis:20px}
.augite-btn.augite-btn>svg{display:block;width:16px;height:16px;flex:0 0 16px}
/* REQ UX-ICON-SEMANTICS-001: raw shared SVGs in action <summary> triggers must not inherit width:100%/flex-grow from a surface. */
:is(.augac-create-drawer,.augac-inline-editor)>summary>svg{display:block!important;box-sizing:border-box;width:18px!important;height:18px!important;min-width:18px!important;max-width:18px!important;max-height:18px!important;flex:0 0 18px!important}
.augite-btn--primary,.augite-icon-btn--primary{border-color:var(--augite-accent-strong,#b84e08);background:var(--augite-accent-strong,#b84e08);color:#fff}
.augite-btn--primary:hover,.augite-icon-btn--primary:hover,.augite-btn--primary:focus,.augite-icon-btn--primary:focus{border-color:#9a4307;background:#9a4307;color:#fff}
/* REQ-UI-BUTTON-SECONDARY-UNIFIED-001 (Auftraggeberentscheidung 2026-09-29/30, Fragebox): EIN Sekundaerstil fuer ALLE Backend-
 * Flaechen (wp-admin und /intern/): weisser Grund, oranger Rand, oranger Text - wie "Abbrechen"/"NFC lesen" in den Dialogen.
 * Primaer bleibt vollflaechig orange (.augite-btn--primary), Gefahr (.augite-btn--danger) bleibt die semantische Warnfarbe.
 * KEINE zweite Sekundaervariante (grau/neutral, WordPress-Blau) mehr. Dieser Block ist die EINZIGE Quelle der drei Werte
 * (Token unten); die frueheren Einzelregeln (admin.css .arf-ops--admin .arf-ops-secondary grau, modal.css anthrazit,
 * augite-btn/icon-btn grau, WordPress .button blau) sind entfernt bzw. auf die Token umgestellt. Steuerelementhoehe
 * (36px, Touch 44px) bleibt bei den Groessenklassen - dieser Block setzt NUR Farben.
 * Geltungsbereich: body.wp-admin und body.augite-intern-page (Kundenportal/Storefront sind ausgenommen).
 * !important, weil aeltere Flaechenregeln (public.css .arf-ops-* mit !important) sonst die Reihenfolge entscheiden. */
:root{--augite-btn-secondary-bg:#fff;--augite-btn-secondary-border:#d9600a;--augite-btn-secondary-text:#b84e08;--augite-btn-secondary-hover-bg:#fdf3ec;--augite-btn-secondary-hover-border:#b84e08}
:is(body.wp-admin,body.augite-intern-page) :is(.augite-btn:not(.augite-btn--primary):not(.augite-btn--danger),.augite-icon-btn:not(.augite-icon-btn--primary):not(.augite-icon-btn--danger),.arf-ops-secondary,.augite-modal__button:not(.augite-modal__button--primary):not(.augite-modal__button--danger),.button:not(.button-primary):not(.button-link):not(.arf-button-danger),.button-secondary,.page-title-action):not(.augite-sort):not(.augite-filter-toggle__button):not(.augite-modal__close){background:var(--augite-btn-secondary-bg,#fff)!important;border-color:var(--augite-btn-secondary-border,#d9600a)!important;color:var(--augite-btn-secondary-text,#b84e08)!important}
:is(body.wp-admin,body.augite-intern-page) :is(.augite-btn:not(.augite-btn--primary):not(.augite-btn--danger),.augite-icon-btn:not(.augite-icon-btn--primary):not(.augite-icon-btn--danger),.arf-ops-secondary,.augite-modal__button:not(.augite-modal__button--primary):not(.augite-modal__button--danger),.button:not(.button-primary):not(.button-link):not(.arf-button-danger),.button-secondary,.page-title-action):not(.augite-sort):not(.augite-filter-toggle__button):not(.augite-modal__close):is(:hover,:focus){background:var(--augite-btn-secondary-hover-bg,#fdf3ec)!important;border-color:var(--augite-btn-secondary-hover-border,#b84e08)!important;color:var(--augite-btn-secondary-text,#b84e08)!important}
/* Primaer im Backend: WordPress-Kernfarbe (Blau bzw. unstyled in Dialogen ausserhalb von wp-admin) wird auf das Primaer-Orange
 * gesetzt - "Primaer bleibt vollflaechig orange" (gleiche Entscheidung). Deaktivierte bleiben grau. */
:is(body.wp-admin,body.augite-intern-page) .button-primary:not(:disabled):not(.disabled):not([aria-disabled="true"]){background:var(--augite-accent-strong,#b84e08)!important;border-color:var(--augite-accent-strong,#b84e08)!important;color:#fff!important}
:is(body.wp-admin,body.augite-intern-page) .button-primary:not(:disabled):not(.disabled):not([aria-disabled="true"]):is(:hover,:focus){background:#9a4307!important;border-color:#9a4307!important;color:#fff!important}
.augite-btn--danger,.augite-icon-btn--danger{border-color:#b32d2e;color:#b32d2e;background:#fff}
.augite-btn--danger:hover,.augite-icon-btn--danger:hover{background:#b32d2e;color:#fff}
.augite-btn:focus,.augite-icon-btn:focus{outline:0}
.augite-btn:focus-visible,.augite-icon-btn:focus-visible{outline:2px solid var(--augite-accent,#d9600a);outline-offset:2px}
.augite-btn:disabled,.augite-icon-btn:disabled,.augite-btn[aria-disabled="true"],.augite-icon-btn[aria-disabled="true"]{opacity:.5;cursor:not-allowed}
:is(.augite-icon-btn,.augite-table,.augite-list-card,.augite-filter-chips,.augite-check) .screen-reader-text{position:absolute!important;width:1px!important;height:1px!important;margin:-1px!important;padding:0!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;clip-path:inset(50%)!important;white-space:nowrap!important;border:0!important}
/* REQ-041/1 (Live-Abnahme 2026-09-21): Kartentitel, der woertlich dem Seiten-H1 entspricht, wird von
   titleline() mit dieser Klasse gerendert. Er bleibt im Dokument und im Accessibility-Tree (das
   aria-labelledby der Karte zeigt weiterhin auf ihn), verschwindet aber aus dem sichtbaren Layout,
   sodass derselbe Text nicht zweimal sichtbar auf der Seite steht. Bewusst NICHT an
   .screen-reader-text gehaengt: diese Klasse ist in wp-admin und auf /intern/ jeweils anders
   definiert bzw. nur innerhalb bestimmter Container gueltig, die Kartenueberschrift braucht die
   Regel aber auf beiden Flaechen und auch in .augite-section-head ausserhalb von .augite-list-card. */
/* REQ-INTERN-RENTALFLOW-ADAPTIVE-LAYOUT-001 (Nachtrag 2, 2026-09-25): derselbe Fall, eine Ebene
   weiter - die Beschriftung einer aufgeklappten <summary> steht im Abschnittskopf direkt darunter
   noch einmal und muss optisch weichen, ohne dass der Klappknopf seinen zugaenglichen Namen
   verliert. Dieselbe Technik, deshalb DIESELBE Regel statt einer zweiten Variante daneben; der
   zustandsabhaengige Selektor kann nicht als Klasse gesetzt werden, weil [open] erst zur Laufzeit
   entsteht. Begruendung des Kopfs und die Auswirkung auf die Kopfhoehe stehen in public.css beim
   Block .arf-ops-collapse. */
.augite-visually-hidden,.arf-ops-collapse[open]>summary>.arf-ops-collapse__label{position:absolute!important;width:1px!important;height:1px!important;margin:-1px!important;padding:0!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;clip-path:inset(50%)!important;white-space:nowrap!important;border:0!important}

/* ---- table contract (R290-R293, R297) ---- */
/* REQ-INTERN-TABLE-DESIGN-INCONSISTENCY-001: Ergebnisanzahl (UX-TBL-004) als eine Zeile des geteilten Kits
 * ueber der Tabelle - dieselbe gedaempfte Sekundaerschrift wie .arf-per-page label, damit sie die Ueberschrift
 * nicht konkurriert. */
.augite-result-count{margin:0 0 8px;color:#50575e;font-size:12px;font-weight:650}
/* REQ-INTERN-TABELLENRAHMEN-SYSTEMWEIT-001 (Auftraggeberentscheidung 2026-09-28): der 1px-Aussenrahmen
 * (rgb(220,220,222), die schon an .arf-admin-table-scroll in public.css:240 sitzende Vorgabe aus PR #1112)
 * gehoert an die BASISKLASSE, die table_open() in class-arf-backend-ui.php IMMER auf den Wrapper-Div
 * schreibt - nicht an eine der zusaetzlichen wrap_class-Varianten (arf-admin-table-scroll,
 * arf-ops-table-wrap, arf-table-wrap, arf-workshop-table-wrap), die nur an einem Teil der Aufrufstellen
 * gesetzt werden. Live gemessen (2026-09-28, angemeldet, LiveProbe rolle=arf_manager) VOR dieser Aenderung:
 * /intern/rentalcore/kunden/ (Kundentabelle, genau der Auftraggeberbefund), /intern/rentalcore/buchungen/
 * ("Buchungen im Arbeitsvorrat") und /intern/rentalpayments/ ("Gekoppelte Kartenterminals") massen alle
 * am Wrapper 0px none - der Aufrufstellen fehlte wrap_class ganz (class-arf-shortcodes.php,
 * class-arf-admin.php). Fallback #dcdcde deckt den seltenen Fall ab, dass --arf-ops-line an dieser Stelle
 * nicht definiert ist (identisch mit dem Vorgabewert, keine neue Farbe erfunden). */
.augite-table-scroll{position:relative;display:block;max-width:100%;overflow-x:auto;margin:0 0 12px;background:#fff;border:1px solid var(--arf-ops-line,#dcdcde)}
.augite-table{--augite-t-font:13px;--augite-t-th:11px;--augite-t-pad:6px 8px;--augite-t-icon:var(--augite-control-h);--augite-t-svg:16px;width:100%;border-collapse:collapse;border-spacing:0;font-size:var(--augite-t-font,13px);line-height:1.35}
.augite-table--touch{--augite-t-font:15px;--augite-t-th:12px;--augite-t-pad:10px 12px;--augite-t-icon:var(--augite-control-h);--augite-t-svg:20px}
/* specificity 0,2,4: beats wp-admin `body[class*="_page_arf-"] .widefat td` (0,2,2), augite-ux `.augite-ux-platform .widefat td` (0,2,1)
 * and /intern/ public.css `.arf-admin-table th,.arf-admin-table td{padding:10px 12px;text-align:left}` (0,1,1) */
.augite-table-scroll>table.augite-table>thead>tr>th,.augite-table-scroll>table.augite-table>tbody>tr>td{box-sizing:border-box;padding:var(--augite-t-pad,6px 8px);border-bottom:1px solid #dcdcde;text-align:left;vertical-align:middle}
.augite-table-scroll>table.augite-table>thead>tr>th{background:#f6f7f7;color:#3c434a;font-size:var(--augite-t-th,11px);font-weight:700;letter-spacing:.03em;text-transform:uppercase;white-space:nowrap}
.augite-table-scroll>table.augite-table>tbody>tr:hover>td{background:#fbf6f1}
/* R291 amounts right-aligned, tabular figures - header too, so the column title sits over the figures */
.augite-table-scroll>table.augite-table>thead>tr>th:is(.augite-col--money,.augite-col--number),.augite-table-scroll>table.augite-table>tbody>tr>td:is(.augite-col--money,.augite-col--number){text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.augite-table-scroll>table.augite-table>thead>tr>th:is(.augite-col--money,.augite-col--number) .augite-sort{flex-direction:row-reverse}
.augite-table-scroll>table.augite-table>tbody>tr>td:is(.augite-col--date,.augite-nowrap){white-space:nowrap}
.augite-table-scroll>table.augite-table>tbody>tr>td.augite-col--date .augite-period{white-space:normal}
.augite-table-scroll>table.augite-table>thead>tr>th:is(.augite-col--actions,.augite-col--status),.augite-table-scroll>table.augite-table>tbody>tr>td:is(.augite-col--actions,.augite-col--status){width:1%;white-space:nowrap}
.augite-table-scroll>table.augite-table>thead>tr>th.augite-col--actions,.augite-table-scroll>table.augite-table>tbody>tr>td.augite-col--actions{text-align:right}
/* REQ UX-TABLE-ACTIONS-INLINE-001: one row per table action set. The table wrapper owns horizontal overflow. */
.augite-table-scroll .augite-row-actions{display:inline-flex!important;flex-flow:row nowrap!important;align-items:center;justify-content:flex-end;gap:4px;vertical-align:middle;white-space:nowrap;width:max-content;min-width:max-content}
.augite-table-scroll .augite-row-actions>*{flex:0 0 auto}
/* REQ-INTERN-TABELLEN-HOMOGEN-001 (Messung 2026-09-30, 1440 px): eine Tabelle darf auf einer Desktop-Seite nicht in ihrem
   Wrapper waagerecht scrollen. Drei Ursachen, je EINE Regel am Baustein statt an der Seite: (1) Zeilenaktionen MIT
   Eingabeelement (Auswahlfeld + Knopf im Zellformular, z.B. Bearbeitungsstatus je Befund) erzwangen mit max-content 500+ px
   in einer Zeile - sie duerfen umbrechen; (2) Zahlspalten mit mehrzeiligem Zellinhalt (<br>, z.B. "0 Instanzen / Plaetze")
   verlieren ihr nowrap - nur EINZEILIGE Zahlen bleiben ungebrochen; (3) langer Fliesstext in Textspalten bricht auch an
   Zeichenketten ohne Trennstelle um. Der Rechtsbuendig-/Tabellenziffernvorrang der Zahlspalte bleibt unberuehrt. */
.augite-table-scroll td .augite-row-actions:has(:is(select,textarea,input:not([type=hidden])):not(.augite-modal *)){flex-wrap:wrap!important;width:auto!important;min-width:0!important;max-width:100%;justify-content:flex-end}
.augite-table-scroll td .augite-row-actions:has(:is(select,textarea,input:not([type=hidden])):not(.augite-modal *)) form{flex-wrap:wrap!important;white-space:normal}
.augite-table-scroll>table.augite-table>tbody>tr>td.augite-col--number:has(br){white-space:normal}
.augite-table-scroll .augite-row-actions form{display:inline-flex!important;flex-flow:row nowrap!important;margin:0;white-space:nowrap}
/* REQ-TABELLEN-SPALTENBREITE-AKTIONEN-001 (Auftraggeber 2026-09-30, /intern/abwesenheiten/): (1) Zeilenaktionen bleiben IMMER in einer
   Zeile. Die Umbruchausnahme oben gilt nur fuer Eingabeelemente, die in der Zelle SICHTBAR stehen - ein Zeilen-Modal
   (.augite-modal, display:none bis zum Oeffnen) mit seinen Feldern ist kein Zelleninhalt und hat die Symbole untereinander gestellt.
   (2) Spaltenbreite folgt dem Inhalt: 'fit' (kurzer, fester Wert: Zeitraum, Nummer, Typ ...) nimmt nur seine Inhaltsbreite und bricht
   nicht um, 'grow' (Freitext: Hinweis, Betreff, Beschreibung) bekommt die Restbreite. Vergabe zentral in ARF_Backend_UI::table()
   / AugiteBackendUI.table() (Spaltenschluessel 'width' => 'fit'|'grow' ueberschreibt die Erkennung); schmale Anzeigen duerfen umbrechen. */
.augite-table-scroll>table.augite-table>thead>tr>th.augite-col--fit,.augite-table-scroll>table.augite-table>tbody>tr>td.augite-col--fit{width:1%}
.augite-table-scroll>table.augite-table>thead>tr>th.augite-col--grow,.augite-table-scroll>table.augite-table>tbody>tr>td.augite-col--grow{width:auto;overflow-wrap:anywhere}
@media (min-width:701px){.augite-table-scroll>table.augite-table>tbody>tr>td.augite-col--fit{white-space:nowrap}}
.augite-ref{font-weight:600;text-decoration:none;color:var(--augite-accent-strong,#b84e08)}
.augite-ref:hover,.augite-ref:focus{text-decoration:underline}
.augite-table-empty-row>td{padding:18px 12px!important;text-align:center!important;color:#50575e}
.augite-table-nomatch{margin:0;padding:14px 12px;color:#50575e;text-align:center;border-top:1px solid #dcdcde}
/* sort control (button in client mode, link in server mode) + CSS-drawn square-edged indicator */
.augite-table .augite-sort{display:inline-flex;align-items:center;gap:5px;box-sizing:border-box;min-height:0;height:auto;margin:0;padding:0;border:0;border-radius:0;background:none;color:inherit;font:inherit;font-weight:inherit;letter-spacing:inherit;text-transform:inherit;text-decoration:none;cursor:pointer;box-shadow:none;white-space:nowrap}
button.augite-sort.augite-sort{min-height:0;padding:0;border:0;background:none}
.augite-table .augite-sort:focus{outline:0}
.augite-table .augite-sort:focus-visible{outline:2px solid var(--augite-accent,#d9600a);outline-offset:2px}
.augite-sort__ind{position:relative;display:inline-block;flex:0 0 8px;width:8px;height:11px}
.augite-sort__ind::before,.augite-sort__ind::after{content:"";position:absolute;left:0;width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent;border-radius:0}
.augite-sort__ind::before{top:0;border-bottom:4px solid #a7aaad}
.augite-sort__ind::after{bottom:0;border-top:4px solid #a7aaad}
th[aria-sort="ascending"] .augite-sort__ind::before{border-bottom-color:var(--augite-accent-strong,#b84e08)}
th[aria-sort="ascending"] .augite-sort__ind::after{border-top-color:transparent}
th[aria-sort="descending"] .augite-sort__ind::after{border-top-color:var(--augite-accent-strong,#b84e08)}
th[aria-sort="descending"] .augite-sort__ind::before{border-bottom-color:transparent}
th[aria-sort] .augite-sort{color:#1d2327}
/* R292 status pictogram with tooltip */
.augite-status-icon{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;width:22px;height:22px;vertical-align:middle;color:#50575e;cursor:help}
.augite-status-icon.augite-status-icon>svg{display:block;width:18px;height:18px}
.augite-status-icon:focus{outline:0}
.augite-status-icon:focus-visible{outline:2px solid var(--augite-accent,#d9600a);outline-offset:1px}
.augite-status-icon--ok{color:#1f7a4f}
.augite-status-icon--warn{color:#8a5a00}
.augite-status-icon--error{color:#b32d2e}
.augite-status-icon--info,.augite-status-icon--pending{color:#2c3338}
/* row actions of the table follow the table density (dense 28px, touch 44px) */
.augite-table--touch .augite-icon-btn.augite-icon-btn>svg{width:20px;height:20px;min-width:20px;flex-basis:20px}
.augite-table--touch .augite-status-icon{width:28px;height:28px}

/* ---- list card head + section head (R286/R296) ---- */
.augite-list-card{box-sizing:border-box;min-width:0}
.augite-list-card__head,.augite-section-head{display:flex;flex-flow:row wrap;align-items:flex-start;justify-content:space-between;gap:8px 16px;margin:0 0 12px}
.augite-list-card__titleline{display:flex;flex:1 1 16rem;align-items:flex-start;gap:10px;min-width:0}
.augite-list-card__titles{min-width:0}
.augite-list-card__icon{display:grid;flex:0 0 30px;place-items:center;box-sizing:border-box;width:30px;height:30px;margin-top:1px;color:var(--augite-accent-strong,#b84e08)}
.augite-list-card__icon.augite-list-card__icon>svg{display:block;width:20px;height:20px;max-width:20px;max-height:20px}
.augite-kicker{display:block;margin:0;color:var(--augite-accent-strong,#b84e08);font-size:.7rem;font-weight:800;letter-spacing:.11em;line-height:1.3;text-transform:uppercase}
.augite-list-card__title{margin:2px 0 0;font-size:1.125rem;line-height:1.25}
.augite-list-card__lead{margin:2px 0 0;color:#50575e;font-size:.875rem;line-height:1.4}
.augite-list-card__tools{display:flex;flex:0 1 auto;flex-wrap:wrap;align-items:flex-start;justify-content:flex-end;gap:8px;margin-left:auto;min-width:0}
.augite-list-card__tools>.augite-filter-toggle{margin:0}
.augite-list-card__tools>.augite-filter-toggle__button{margin-right:0}
/* The reset above (0,2,0) and the one at the top of the file (`:is(.augite-table-head,...)>.augite-filter-toggle__button
 * {margin:0}`, also 0,2,0) both LOSE against the triple-class sizing rule of the trigger itself, which carries
 * `margin:0 10px 0 0` at (0,3,1) - a leftover of the float layout the trigger used to have. Measured live at 1400px
 * on 2026-09-21 by the rule this project uses for right alignment (right edge of the RIGHTMOST VISIBLE tool against
 * the content edge of the head, never against .augite-list-card__tools, which is display:contents and has a null
 * rectangle): 4 of 12 heads were 10px short - exactly the four where the filter trigger is the last tool
 * (/intern/rentalcore/kunden/130/, /intern/rentalcore/disposition/, /intern/rentalflow/, /intern/rentalinvoice/).
 * Where a "+" button follows the trigger the edge was already flush at 0, so the same page showed both. Same
 * specificity as the sizing rule and later in the file, so the trailing margin is gone wherever the trigger is a
 * tool of a head; measured after: 12 of 12 heads at 0, no other gap changed. */
:is(.augite-table-head,.arf-ops-section-head,.arf-panel-head,.augite-list-card__head,.augite-list-card__tools)>button.augite-filter-toggle__button.augite-filter-toggle__button{margin-right:0}
/* REQ-BACKEND-FILTER-BAR-TRIGGER-STAYS-PUT-001 (decision 354): the toolbar has no definite width (flex:0 1 auto,
   margin-left:auto), so a full-width child inside it can never be wider than its own content - the OLD rule
   `[open]{flex:1 1 100%;order:2}` therefore did nothing, the panel's content grew the toolbar and dragged the
   pictogram to the far left (measured in Chromium 141: -839px/+69px). The toolbar dissolves into the head
   (display:contents; the head's width IS definite): the pictogram button stays on the title line, the sibling
   block wraps to a full line below it. */
.augite-list-card__tools>.augite-filter-toggle{flex:1 1 100%;order:99;margin:0}
:is(.augite-list-card__head,.augite-section-head):has(>.augite-list-card__tools>.augite-filter-toggle){justify-content:flex-start;column-gap:8px}
.augite-list-card__tools:has(>.augite-filter-toggle){display:contents}
.augite-list-card__tools:has(>.augite-filter-toggle)>:first-child{margin-left:auto}
/* card headings on /intern/ (0,5,1) beat public.css:1327 `body:not(.wp-admin) .arf-app.arf-ops .arf-ops-section-head h2` clamp(1.55rem..2.05rem)
 * (0,4,2); wp-admin admin.css:261 (0,4,2) sets the same 18px */
body.augite-intern-page .arf-app.arf-ops :is(.augite-list-card__head,.augite-section-head) .augite-list-card__title{margin:2px 0 0!important;font-size:1.125rem!important;line-height:1.25!important}
body.augite-intern-page .arf-app.arf-ops :is(.augite-list-card__head,.augite-section-head) .augite-list-card__lead{margin:2px 0 0!important;font-size:.875rem!important}
/* fallback for detail cards not yet converted to section_head() (bare <h2> as first card child) */
body.augite-intern-page .arf-app.arf-ops .arf-ops-card>h2{font-size:1.125rem!important;line-height:1.25!important}

/* ---- R285/R289: one control height per row - filter row + form rows (md on dense pages) ---- */
/* 0,5,1 + !important: beats /intern/ public.css:651 `body:not(.wp-admin) .arf-app input:not(..):not(..)` min-height 46px / padding 10px 12px!important (0,4,2) */
.augite-filter-toggle .augite-filter-row input:not([type=checkbox]):not([type=radio]):not([type=hidden]),.augite-filter-toggle .augite-filter-row select,.augite-form-row input:not([type=checkbox]):not([type=radio]):not([type=hidden]):not([type=submit]),.augite-form-row select{height:var(--augite-control-h)!important;min-height:var(--augite-control-h)!important;padding-top:0!important;padding-bottom:0!important;line-height:1.2}
/* 0,5,1 + !important: beats the /intern/ 44px REV022 buttons `body:not(.wp-admin) .arf-app.arf-ops .arf-ops-primary` (0,4,1) and the coarse 48px variants */
div.augite-filter-toggle.augite-filter-toggle>.augite-filter-toggle__panel>.augite-filter-row>:is(button,a,.button,.arf-ops-primary,.arf-ops-secondary){box-sizing:border-box;height:var(--augite-control-h)!important;min-height:var(--augite-control-h)!important;padding-top:0!important;padding-bottom:0!important}
div.augite-filter-toggle.augite-filter-toggle>.augite-filter-toggle__panel>.augite-filter-row>.augite-filter-row__result{height:auto!important;min-height:0!important;color:#50575e;font-size:12px;white-space:nowrap}
/* REQ-DISPOSITION-INSTANCE-TRANSPORT-BLOCK-LAYOUT-001 / REQ-INTERN-BOOKING-DETAIL-VISUAL-CLARITY-001 (2026-09-21):
 * `align-items:flex-end` here is a ROW-AXIS statement and nothing else. It exists so that the controls of several
 * stacked label columns of unequal height (`.augite-form-row>label`, line below) and a bare button/`.augite-check`
 * in the same row all sit on ONE bottom baseline instead of being centred against the tallest column. The
 * direction is therefore spelled out (`flex-flow:row wrap`) rather than left implicit: as soon as any other
 * stylesheet flips this box to `flex-direction:column`, `flex-end` stops meaning "bottom baseline" and starts
 * meaning "push every child to the right edge" - which is exactly how 103 `<label class="augite-form-row">`
 * fields in the dialogs ended up with their caption right-aligned over a left-aligned control (measured offsets
 * 188-970px). The rule that flips the axis owns the cross axis and must reset it (modal.css does, see there);
 * tests/test_req_flexbox_axis_flip_guard_001.py enforces that for every axis flip in the whole CSS corpus. */
.augite-form-row{display:flex;flex-flow:row wrap;align-items:flex-end;gap:8px}
.augite-form-row>label:not(.augite-check){display:flex;flex-direction:column;gap:4px;min-width:0}
.augite-form-row :is(input:not([type=checkbox]):not([type=radio]):not([type=hidden]),select){box-sizing:border-box;border:1px solid #8c8f94;border-radius:0}
.augite-form-row>:is(.augite-btn,.augite-icon-btn){align-self:flex-end}
.augite-form-row>.augite-check{min-height:var(--augite-control-h)}
.augite-form-row>:is(textarea,.large-text){box-sizing:border-box;flex:1 1 100%;min-width:0}
/* R289: an action row closes a form - the buttons sit on the row baseline, never bare under the last field. */
.augite-form-row--actions{align-items:center;margin-top:12px}
/* R289: a per-row form inside a table cell (privacy data-class decision, hold release, legal approval) is ONE row of the
   shared control scale, not an inline-styled grid with a full-width button below it. */
.augite-table td>form.augite-form-row{margin:0;align-items:center;flex-wrap:wrap;gap:6px}
.augite-table td>form.augite-form-row>label{margin:0}
/* R289/R298: TWO width steps for short settings fields (number circles, margins, BIC) instead of per-field inline
   widths - the height always comes from the shared control scale, only the width is stepped. */
.augite-input--compact{width:96px;max-width:100%}
.augite-input--medium{width:152px;max-width:100%}
/* A checkbox used as a plain table cell control (the weekday grid) carries no visible label text beside it. */
.augite-check--bare>.augite-check__label{position:absolute!important;width:1px!important;height:1px!important;margin:-1px!important;padding:0!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;clip-path:inset(50%)!important;white-space:nowrap!important;border:0!important}
/* multi-select content filter (R303): a nested disclosure with checkboxes, summary styled like a select of the row */
.augite-filter-toggle .augite-filter-row>details.augite-filter-multi>summary.augite-filter-multi__summary{display:inline-flex;align-items:center;gap:6px;box-sizing:border-box;height:var(--augite-control-h);padding:0 28px 0 10px;border:1px solid #8c8f94;background:#fff;color:#1d2327;cursor:pointer;list-style:none;white-space:nowrap;position:relative}
.augite-filter-toggle .augite-filter-row>details.augite-filter-multi>summary.augite-filter-multi__summary::-webkit-details-marker{display:none}
.augite-filter-toggle .augite-filter-row>details.augite-filter-multi>summary.augite-filter-multi__summary::after{content:"";position:absolute;right:10px;top:50%;margin-top:-2px;border-left:4px solid transparent;border-right:4px solid transparent;border-top:5px solid #50575e}
.augite-filter-toggle .augite-filter-row>details.augite-filter-multi.is-filtered>summary.augite-filter-multi__summary{border-color:var(--augite-accent,#d9600a)}
.augite-filter-multi__count{box-sizing:border-box;min-width:18px;height:18px;padding:0 4px;background:#b84e08;color:#fff;font-size:11px;font-weight:700;line-height:18px;text-align:center}
.augite-filter-toggle .augite-filter-row>details.augite-filter-multi>.augite-filter-multi__panel{flex-direction:column;align-items:flex-start;gap:6px;min-width:12rem;max-height:18rem;overflow:auto}
.augite-filter-range{display:inline-flex;align-items:center;gap:4px;white-space:nowrap}
.augite-filter-range__label{color:#50575e;font-size:12px;font-weight:600}
.augite-filter-range__sep{color:#50575e}
.augite-filter-toggle .augite-filter-row .augite-filter-range--number input{width:6.5rem!important}
/* active filters (R303): removable chips + "Alle Filter zurücksetzen" */
.augite-filter-chips{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:-4px 0 10px}
.augite-filter-chip{display:inline-flex;align-items:center;box-sizing:border-box;min-height:var(--augite-control-h);padding:0 0 0 8px;border:1px solid #c3c4c7;background:#f6f7f7;color:#1d2327;font-size:12px;line-height:1.2}
.augite-filter-chip__remove,button.augite-filter-chip__remove{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;width:26px;height:26px;min-width:26px;min-height:0;margin:0 0 0 2px;padding:0;border:0;border-radius:0;background:transparent;color:#50575e;cursor:pointer;text-decoration:none}
.augite-filter-chip__remove:hover{color:#b32d2e}
.augite-filter-chip__remove:focus{outline:0}
.augite-filter-chip__remove:focus-visible{outline:2px solid var(--augite-accent,#d9600a);outline-offset:-2px}
.augite-filter-chip__remove.augite-filter-chip__remove>svg{display:block;width:14px;height:14px}
.augite-filter-chips__reset,button.augite-filter-chips__reset{min-height:0;margin:0 0 0 4px;padding:0 2px;border:0;border-radius:0;background:none;color:var(--augite-accent-strong,#b84e08);font:inherit;font-size:12px;text-decoration:underline;cursor:pointer}

/* ---- /intern/ form controls (R286): checkbox/radio beside its label, choice groups, help icons, money ---- */
.augite-check{display:inline-flex;align-items:center;gap:8px;margin:0;font-weight:500;line-height:1.3;cursor:pointer}
.augite-check>input:is([type=checkbox],[type=radio]){flex:0 0 auto;margin:0}
/* safety net for /intern/ (0,5,2 + !important) against public.css:234/237 `.arf-app.arf-ops .arf-inline-field{flex-direction:column!important}` /
 * `.arf-app.arf-ops .arf-inline-field input{width:100%!important;min-height:43px;padding:9px 10px!important}` (0,2,0 / 0,3,1):
 * converted markup (.augite-check) and not yet converted .arf-inline-field labels that wrap a checkbox/radio */
body.augite-intern-page .arf-app.arf-ops .augite-check{display:inline-flex!important;flex-direction:row!important;align-items:center!important;gap:8px!important;flex:0 1 auto!important;min-width:0!important;font-weight:500!important}
body.augite-intern-page .arf-app.arf-ops .arf-inline-field:has(>input:is([type=checkbox],[type=radio])){display:inline-flex!important;flex-direction:row!important;align-items:center!important;gap:8px!important;flex:0 1 auto!important;min-width:0!important;font-weight:var(--augite-control-weight)!important}
body.augite-intern-page .arf-app.arf-ops .augite-check>input:is([type=checkbox],[type=radio]),body.augite-intern-page .arf-app.arf-ops .arf-inline-field>input:is([type=checkbox],[type=radio]){box-sizing:border-box!important;width:16px!important;height:16px!important;min-width:16px!important;min-height:0!important;margin:0!important;padding:0!important;flex:0 0 16px!important;appearance:auto!important}
.augite-choice{min-width:0;margin:0;padding:0;border:0}
.augite-choice__legend{margin:0 0 6px;padding:0;font-weight:600}
.augite-choice__options{display:flex;flex-wrap:wrap;align-items:center;gap:6px 18px}
.augite-choice--tiles .augite-check--tile{box-sizing:border-box;min-height:var(--augite-control-h);padding:6px 12px;border:1px solid #c3c4c7;background:#fff;flex-wrap:wrap}
.augite-choice--tiles .augite-check--tile:has(>input:checked){border-color:var(--augite-accent,#d9600a);background:var(--augite-accent-soft,#fbeee3)}
.augite-choice--tiles .augite-check--tile:has(>input:focus-visible){outline:2px solid var(--augite-accent,#d9600a);outline-offset:2px}
/* REQ-INTERN-BOOKING-DETAIL-LAYOUT Punkt E (WCAG 1.4.1 "Use of Color"): public.css:888 blendet den Radioknopf in
 * .arf-choice-row--tiles bewusst aus (position:absolute;opacity:0) - die Kachel IST das Bedienelement. Damit war die
 * Auswahl aber ausschliesslich ueber Farbe ablesbar: live gemessen trugen gewaehlte und ungewaehlte Kachel dieselbe
 * Strichstaerke (1px) und denselben Schriftschnitt (500), unterschiedlich waren nur border-color und background.
 * Die gewaehlte Kachel bekommt deshalb zwei farbunabhaengige Merkmale: ein Haekchen als FORM (per Rahmen gezeichnet,
 * erbt currentColor, braucht weder Schriftart noch mask-Unterstuetzung) und den kraeftigeren Schriftschnitt.
 * Die Strichstaerke steigt auf 2px, das Innenmass sinkt um genau 1px - dadurch springt das Layout beim Wechsel nicht.
 * Das !important beim Schriftschnitt ist noetig, weil die /intern/-Schutzregel weiter oben in dieser Datei
 * `.augite-check{font-weight:500!important}` setzt. */
.augite-choice--tiles .augite-check--tile:has(>input:checked){border-width:2px;padding:5px 11px}
body.augite-intern-page .arf-app.arf-ops .augite-choice--tiles .augite-check--tile:has(>input:checked){font-weight:650!important}
/* Der Platz des Haekchens ist auf JEDER Kachel reserviert (durchsichtige Raender), nur die Farbe kommt beim Waehlen
 * dazu. Zuerst war das ::before nur an der gewaehlten Kachel - die eigene Pruefung hat gemessen, dass die Kachel
 * dadurch beim Umschalten um 20px breiter wurde und die Zeile umbrach. Reservierter Platz haelt die Breite konstant. */
/* REQ-INTERN-BUCHUNG-ANLEGEN-MODAL-001 (Auftraggeber 2026-09-30: "Buttons bei Initialstatus haben irgendeinen Markierungsstrich drinnen"): das Haekchen
 * war ein um 45 Grad gedrehter Rahmen (10x6 px, nur links+unten). Ein gedrehtes Rahmenstueck haengt von Rundung, Zoom und Engine ab und kann als
 * schlichter Strich vor der Beschriftung erscheinen. Jetzt ein fester Haken als Hintergrundbild (SVG, Strichfarbe = Textfarbe der Marke), gleicher
 * reservierter Platz auf JEDER Kachel (14 px), damit die Zeile beim Waehlen nicht springt. Kein Rahmen, keine Drehung, kein Rest am Radioknopf. */
.augite-choice--tiles .augite-check--tile::before{content:"";flex:0 0 14px;box-sizing:border-box;width:14px;height:14px;margin:0 2px 0 0;background:none no-repeat center/14px 14px}
.augite-choice--tiles .augite-check--tile:has(>input:checked)::before{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 14'%3E%3Cpath d='M2.5 7.5l3 3 6-7' fill='none' stroke='%2314181b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")}
/* REQ-INTERN-BUCHUNG-ANLEGEN-MODAL-001: Kundensperre / Kreditlimit (ARF_Customer_Credit_Guard::override_fields_html, Buchungsanlage /intern/, wp-admin
 * und Kundenformulare): <details> ist kein Kind des Dialograsters, dessen `>label`-Regeln greifen hier also nicht. Eigenes Raster: Zeile fuer die
 * Checkbox, darunter die Begruendung als Mehrzeilenfeld in voller Breite - und nur sichtbar, solange die Freigabe gesetzt ist. */
.arf-credit-override{min-width:0}
.arf-credit-override>summary{cursor:pointer;font-weight:600;min-height:36px;display:flex;align-items:center}
/* Abstand als padding statt grid-gap: neuere Engines setzen den Inhalt eines <details> in eine eigene Box (::details-content), ein Raster am <details> erreicht die Kinder dann nicht - genau dieselbe Ursache wie beim Dialograster. */
.arf-credit-override__row{min-width:0;padding:4px 0 0}
.arf-credit-override .arf-credit-override__reason{display:flex;flex-direction:column;align-items:stretch;gap:5px;margin:0;padding:10px 0 0;min-width:0;flex:0 0 auto;font-weight:600}
.arf-credit-override .arf-credit-override__reason>textarea{box-sizing:border-box;display:block;width:100%;min-height:5.5em;resize:vertical}
.arf-credit-override:not(:has(input[name=credit_override]:checked)) .arf-credit-override__reason{display:none!important}
/* Zusatzzeile der Option (choice_group() 'hints'): eigene Zeile unter der Beschriftung, nicht Teil des Namens.
 * flex:1 0 100% erzwingt den Umbruch, ohne gegen die flex-direction:row-Schutzregel fuer .augite-check zu arbeiten. */
.augite-choice--tiles .augite-check--tile .augite-check__hint{flex:1 0 100%;margin:1px 0 0;color:#50575e;font-size:12px;font-weight:400;line-height:1.35}
/* help icon (ARF_Help::render_inline_help(), SVG since wave 42): same geometry on wp-admin (beats admin.css:70 18px!important via 0,2,0) and /intern/ */
.arf-help-icon.augite-help-icon{display:inline-flex!important;align-items:center;justify-content:center;box-sizing:border-box;width:16px!important;height:16px!important;min-width:0!important;min-height:0!important;margin:0 0 0 4px;vertical-align:-3px;color:#707377;font-size:16px!important;line-height:1;cursor:help}
.arf-help-icon.augite-help-icon>svg{display:block;width:16px!important;height:16px!important}
.arf-help-icon.augite-help-icon:hover,.arf-help-icon.augite-help-icon:focus{color:#2271b1}
.arf-help-icon.augite-help-icon:focus{outline:0}
.arf-help-icon.augite-help-icon:focus-visible{outline:2px solid #2271b1;outline-offset:2px}
/* R291 amounts: sums/definition lists and money inputs ("0,00", right-aligned) */
.augite-amount{font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap}
.augite-input--money,input.augite-input--money{text-align:right!important;font-variant-numeric:tabular-nums}
.augite-money-input{display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.augite-money-input__currency{color:#50575e;font-size:12px}

/* ---- control height contract (REQ-BACKEND-INPUT-BUTTON-CONSISTENCY-001, client decision 2026-09-17 after LIVE-TASK-2026-09-17-189):
   ONE base height for every single-line field, select and standard button on the plugin wp-admin pages - 36px
   (--augite-control-h) for mouse/pen, 48px for touch (REQ-BACKEND-KIT-COARSE-TOUCH-48-001). Measured before: 36, 38 and 40px
   side by side depending on the page (WordPress core select 40px via line-height, plugin rules with 38px, core page-title
   action 32px, grid-stretched inputs). Deliberate size variants stay: .button-small/.button-hero, the kit's --sm/--lg
   classes, the density-touch tablet pages, the borderless command search (.arf-global-search). This stylesheet is only
   enqueued on arf-/augite-/augri- admin pages, so WordPress' own screens are untouched. ---- */
/* a label wrapping caption + field keeps the field directly under its caption when a grid row stretches it (measured:
   arf-finance "Beschreibung" was a 124px box, with a fixed height it floated in the middle of the stretched label) */
body.wp-admin #wpbody-content label:has(>:is(input:is([type=text],[type=search],[type=email],[type=url],[type=tel],[type=number],[type=password],[type=date],[type=time],[type=datetime-local],[type=month],[type=week]),input:not([type]),select:not([multiple]):not([size]))),body.augite-intern-page .arf-app label:has(>:is(input:is([type=text],[type=search],[type=email],[type=url],[type=tel],[type=number],[type=password],[type=date],[type=time],[type=datetime-local],[type=month],[type=week]),input:not([type]),select:not([multiple]):not([size]))){align-content:start}
@media (pointer:fine){
 body.wp-admin #wpbody-content :is(input:is([type=text],[type=search],[type=email],[type=url],[type=tel],[type=number],[type=password],[type=date],[type=time],[type=datetime-local],[type=month],[type=week]),input:not([type]),select:not([multiple]):not([size])):not(.arf-global-search>input){height:var(--augite-control-h);min-height:var(--augite-control-h);padding-top:0;padding-bottom:0;line-height:normal;box-sizing:border-box}
 body.wp-admin #wpbody-content :is(.button,.page-title-action):not(.button-small):not(.button-hero):not(.button-link):not(.augite-btn--sm):not(.augite-btn--lg):not(.augite-icon-btn){min-height:var(--augite-control-h);display:inline-flex;align-items:center;justify-content:center;padding-top:3px;padding-bottom:3px;line-height:1.25;box-sizing:border-box}
}
/* ---- wave 42 (R289/R295/R298): legacy wp-admin form chrome brought onto the ONE control size scale ----
 * Findings of the wave-42 inventory that are CSS-only and therefore system-wide (every wp-admin page of every
 * plugin, not just the pages converted by one module worker):
 *  a) .arf-admin-check (admin.css:94) forced a 48px touch row on every wp-admin page, including the dense desktop
 *     ones - now md (36px), coarse pointer 40px, 48px only on the tablet pages (arf-flow-Seiten, arf-workshop).
 *  b) the .arf-choice-cards--select / --compact radio cards are on the md scale in admin.css itself (PR #134, 2026-09-17:
 *     .arf-choice-card span on --augite-control-h, coarse 48px) - no kit override needed, one source of truth.
 *  c) .arf-admin-form-row-action: R289 "the action closes the row" - the submit of a form grid is a grid cell that
 *     aligns with the baseline of the fields instead of a full-width row of its own below them. */
.arf-admin-page .arf-admin-check,.arf-admin-check{min-height:var(--augite-control-h)}
.arf-admin-form-grid>.arf-admin-form-row-action{display:flex;align-items:flex-end;justify-content:flex-start;min-width:0}
.arf-admin-form-grid>.arf-admin-form-row-action>:is(.augite-btn,.augite-icon-btn,button,.button){margin:0}
.arf-admin-form-actions{margin:14px 0 0}
/* R289/R298: the "Je Seite" pager form sits on the table-head baseline in the shared control scale, not in a
 * padded legacy card of its own (admin.js no longer tags it as a filter bar). */
.arf-per-page,.augac-per-page{display:inline-flex;align-items:center;gap:8px;margin:0;padding:0;border:0;background:none;box-shadow:none}
/* REQ-INTERN-KOPFABSTAND-KLAPPBOXEN-001 (Auftraggeberbefund 2026-09-28, Screenshot
   /intern/rentalcore/buchungen/, Tabellenfusszeile: "Je Seite" vor der 25er-Auswahl stand auf
   zwei Zeilen statt einer): das <label> ist als Flexkind seines <form> per CSS-Blockifizierung
   selbst display:flex (inline-flex an einem Flex-Kind rechnet der Browser zu flex um), sein Inhalt
   ist ein Textknoten + <select> als zwei Flex-Items. Ohne white-space:nowrap darf der anonyme
   Text-Flexitem "Je Seite" auf seine Wortminimalbreite schrumpfen (~29px, die Breite von "Seite"),
   sobald das <select> daneben Platz beansprucht - unabhaengig von der verfuegbaren Breite des
   umgebenden .tablenav-pages (bei 1280/1440/1920px live gemessen: 1194/1282/1722px frei, das
   .arf-per-page-Flexitem selbst blieb trotzdem bei 118px und riss "Je"/"Seite" auf zwei Zeilen).
   nowrap haelt den Text als EIN Flexitem in seiner vollen Breite zusammen; die Zeile bleibt bei
   1280, 1440 und 1920px einzeilig (per Playwright/CSSOM nachgemessen, nicht angenommen). */
.arf-per-page label,.augac-per-page label{display:inline-flex;align-items:center;gap:6px;margin:0;color:#50575e;font-size:12px;font-weight:650;white-space:nowrap}
.arf-per-page select,.augac-per-page select{box-sizing:border-box;height:var(--augite-control-h);min-height:var(--augite-control-h);border-radius:0}
/* REQ-INTERN-PAGINATION-VISUAL-STYLE-001 (Auftraggeber 2026-09-24): der Paginator war auf JEDER paginierten
 * Liste - /intern/rentalcore/buchungen/ genauso wie die wp-admin-Gegenstuecke - ein unformatierter Textlink,
 * waehrend Filterleiste, Buttons und Tabelle derselben Seite durchgehend das augite-Designsystem tragen.
 * Grund: .tablenav/.page-numbers sind WordPress-Kernklassen, fuer die weder Theme noch Plugin je eine eigene
 * visuelle Definition hatten - nur eine Touch-Zielgroessenregel (public.css) und die Float-Korrektur in
 * AssetCores admin.css. Gemessen am 2026-09-25: kein einziger Farb-/Rahmen-/Buttonwert im gesamten Repo.
 * Die Angleichung gehoert deshalb hierher (geteiltes Kit, R290/UX-COMP-002) und nicht in einen der ~24
 * Aufrufer von arf_admin_pagination()/arf_intern_pagination()/augac_admin_pagination(): eine Definition,
 * jede paginierte Liste. Die Kontrollhoehe kommt aus derselben Skala wie .augite-btn--md, damit der Pager
 * auf der Kopfzeilen-Grundlinie der Tabelle sitzt; die 48px-Regel unter pointer:coarse (public.css,
 * augite-ux.css) bleibt unberuehrt, weil sie mit !important darueber liegt. */
.tablenav-pages{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.tablenav-pages .page-numbers{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;min-width:var(--augite-control-h);min-height:var(--augite-control-h);height:var(--augite-control-h);padding:var(--augite-button-pad);border:1px solid #8c8f94;border-radius:0;background:#fff;color:#1d2327;font-family:inherit;font-size:var(--augite-control-font-size);line-height:var(--augite-control-line-height);font-weight:var(--augite-button-weight);font-size:var(--augite-control-font-size);font-weight:var(--augite-button-weight);line-height:1.2;text-decoration:none;white-space:nowrap}
.tablenav-pages a.page-numbers:hover,.tablenav-pages a.page-numbers:focus{border-color:var(--augite-accent,#d9600a);color:var(--augite-accent-strong,#b84e08);background:#fff}
.tablenav-pages a.page-numbers:focus-visible{outline:2px solid var(--augite-accent,#d9600a);outline-offset:2px}
.tablenav-pages .page-numbers.current{border-color:var(--augite-accent-strong,#b84e08);background:var(--augite-accent-strong,#b84e08);color:#fff}
/* "…" ist keine Schaltflaeche und bekommt deshalb auch keine Schaltflaechenoptik. */
.tablenav-pages .page-numbers.dots{min-width:0;padding:var(--augite-button-pad);border-color:transparent;background:none;color:#50575e;font-weight:var(--augite-button-weight)}
/* short/medium form fields of a baseline row (address house number, postcode, country) - width classes of the
 * kit instead of inline pixel widths, so they keep the control height of the scale (R289/R298). */
.augite-field--short,input.augite-field--short{width:6rem;max-width:100%}
.augite-field--mid,input.augite-field--mid{width:8rem;max-width:100%}
.form-table td>.augite-form-row{margin:0}
.form-table td>.augite-form-row>label{display:grid;gap:4px;min-width:0;color:#3c434a;font-size:12px;font-weight:650}

@media (pointer:coarse){
 body.wp-admin #wpbody-content :is(input:is([type=text],[type=search],[type=email],[type=url],[type=tel],[type=number],[type=password],[type=date],[type=time],[type=datetime-local],[type=month],[type=week]),input:not([type]),select:not([multiple]):not([size])):not(.arf-global-search>input){height:var(--augite-control-h);min-height:var(--augite-control-h);padding-top:0;padding-bottom:0;line-height:normal;box-sizing:border-box}
 body.wp-admin #wpbody-content :is(.button,.page-title-action):not(.button-small):not(.button-hero):not(.button-link):not(.augite-btn--sm):not(.augite-btn--lg):not(.augite-icon-btn){min-height:var(--augite-control-h);display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box}
}

/* ---- same contract on /intern/ (client decision 2026-09-17: "auch /intern/"): the app styles of public.css gave the staff
   surface 46px fields, 43px inline selects and 44-48px buttons for mouse users too. body.augite-intern-page limits this to the
   internal pages - the customer storefront keeps its own sizes. !important because public.css sets several of these heights
   with !important (.arf-ops-primary/.arf-ops-secondary). ---- */
/* REQ-INTERN-DIALOGE-EINHEITSSKALA-001 (Auftraggeber 2026-09-29, Screenshots Schadenfall anlegen / Direktvermietung): modal.js haengt jeden
   geoeffneten Dialog an <body> (modal.js: doc.body.appendChild), also AUS .arf-app heraus. Die Einheitsskala unten war auf .arf-app begrenzt und griff
   fuer Dialoge deshalb nie: Auswahlfelder behielten 10px Innenabstand aus public.css und wurden bei 36px Hoehe unten abgeschnitten
   ("ohne Buchungsbezug"), Schaltflaechen fielen aus der Skala. Die Skala gilt jetzt fuer .arf-app UND .augite-modal. */
@media (pointer:fine){
 body.augite-intern-page :is(.arf-app,.augite-modal) :is(input:is([type=text],[type=search],[type=email],[type=url],[type=tel],[type=number],[type=password],[type=date],[type=time],[type=datetime-local],[type=month],[type=week]),input:not([type]),select:not([multiple]):not([size])):not(.arf-global-search>input){height:var(--augite-control-h)!important;min-height:var(--augite-control-h)!important;padding-top:0!important;padding-bottom:0!important;line-height:normal!important;box-sizing:border-box}
 body.augite-intern-page :is(.arf-app,.augite-modal) :is(.arf-ops-primary,.arf-ops-secondary,.button,.augite-btn):not(.augite-btn--sm):not(.augite-btn--lg):not(.button-small):not(.button-hero):not(.augite-icon-btn):not(.arf-ops-workrow){min-height:var(--augite-control-h)!important;padding-top:0!important;padding-bottom:0!important;line-height:1.25!important;box-sizing:border-box}
}
@media (pointer:coarse){
 body.augite-intern-page :is(.arf-app,.augite-modal) :is(input:is([type=text],[type=search],[type=email],[type=url],[type=tel],[type=number],[type=password],[type=date],[type=time],[type=datetime-local],[type=month],[type=week]),input:not([type]),select:not([multiple]):not([size])):not(.arf-global-search>input){height:var(--augite-control-h)!important;min-height:var(--augite-control-h)!important;padding-top:0!important;padding-bottom:0!important;box-sizing:border-box}
 body.augite-intern-page :is(.arf-app,.augite-modal) :is(.arf-ops-primary,.arf-ops-secondary,.button,.augite-btn):not(.augite-btn--sm):not(.augite-btn--lg):not(.button-small):not(.button-hero):not(.augite-icon-btn):not(.arf-ops-workrow){min-height:var(--augite-control-h)!important;box-sizing:border-box}
}

/* ---- touch density: no own mouse size any more (client decision 2026-09-17, REQ-BACKEND-INPUT-BUTTON-CONSISTENCY-001) - the
   former 44px controls of body.augite-density-touch / [data-augite-density="touch"] / .augite-table--touch applied to mouse
   users as well; with a mouse the tablet pages now use the same sizes as every other page, under pointer:coarse the 48px
   rules below apply. ---- */

/* ---- pointer:coarse: 48px touch targets on every page (client decision 2026-09-17, REQ-BACKEND-KIT-COARSE-TOUCH-48-001 -
   supersedes the 40px dense-page hit area of R295; the project-wide 48px rule of REQ-INTERN-DESKTOP-IA-001 applies) ---- */
@media (pointer:coarse){
 div.augite-filter-toggle.augite-filter-toggle>.augite-filter-toggle__panel>.augite-filter-row>:is(button,a,.button,.arf-ops-primary,.arf-ops-secondary){min-width:var(--augite-control-h)!important}
 .augite-filter-toggle .augite-filter-row>details.augite-filter-multi>summary.augite-filter-multi__summary{height:var(--augite-control-h)!important;min-height:var(--augite-control-h)!important}
 .augite-filter-row__reset,.augite-filter-chips__reset{display:inline-flex;align-items:center;min-height:var(--augite-control-h)}
 .augite-table .augite-sort,button.augite-sort.augite-sort{min-height:var(--augite-control-h)}
 .augite-form-row>.augite-check{min-height:var(--augite-control-h)}
 button.augite-filter-toggle__button.augite-filter-toggle__button.augite-filter-toggle__button{width:var(--augite-control-h)!important;height:var(--augite-control-h)!important;min-width:var(--augite-control-h)!important;min-height:var(--augite-control-h)!important}
 .augite-filter-toggle .augite-filter-row input:not([type=checkbox]):not([type=radio]):not([type=hidden]),.augite-filter-toggle .augite-filter-row select,.augite-form-row input:not([type=checkbox]):not([type=radio]):not([type=hidden]):not([type=submit]),.augite-form-row select{height:var(--augite-control-h)!important;min-height:var(--augite-control-h)!important}
 div.augite-filter-toggle.augite-filter-toggle>.augite-filter-toggle__panel>.augite-filter-row>:is(button,a,.button,.arf-ops-primary,.arf-ops-secondary){height:var(--augite-control-h)!important;min-height:var(--augite-control-h)!important}
 .augite-icon-btn--sm,.augite-icon-btn--md,button.augite-icon-btn.augite-icon-btn--sm,button.augite-icon-btn.augite-icon-btn--md{width:var(--augite-control-h);min-width:var(--augite-control-h);height:var(--augite-control-h);min-height:var(--augite-control-h)}
 .augite-btn--sm,.augite-btn--md,button.augite-btn.augite-btn--sm,button.augite-btn.augite-btn--md{height:var(--augite-control-h);min-height:var(--augite-control-h)}
 .augite-filter-chip__remove,button.augite-filter-chip__remove{width:var(--augite-control-h);min-width:var(--augite-control-h);height:var(--augite-control-h);min-height:var(--augite-control-h)}
 /* REQ-013 tablet-first follow-up (live finding T1/T2, 2026-09-21): a touch table must not expose
    17px booking links or a 43px-wide sort button. Keep dense mouse tables compact; the 48px floor
    applies only when the actual pointer is coarse. */
 .augite-table--touch .augite-ref{display:inline-flex;align-items:center;box-sizing:border-box;min-width:var(--augite-control-h);min-height:var(--augite-control-h)}
 .augite-table--touch .augite-sort,button.augite-sort.augite-sort{min-width:var(--augite-control-h);box-sizing:border-box}
 .arf-admin-check{min-height:var(--augite-control-h)}
 .arf-per-page select,.augac-per-page select{height:var(--augite-control-h);min-height:var(--augite-control-h)}
 :is(body.augite-density-touch,[data-augite-density="touch"]) button.augite-filter-toggle__button.augite-filter-toggle__button.augite-filter-toggle__button{width:var(--augite-control-h)!important;height:var(--augite-control-h)!important;min-width:var(--augite-control-h)!important;min-height:var(--augite-control-h)!important}
 :is(body.augite-density-touch,[data-augite-density="touch"]) :is(.augite-icon-btn,.augite-btn),.augite-table--touch .augite-icon-btn{min-width:var(--augite-control-h);min-height:var(--augite-control-h);height:var(--augite-control-h)}
 :is(body.augite-density-touch,[data-augite-density="touch"]) .augite-icon-btn,.augite-table--touch .augite-icon-btn{width:var(--augite-control-h)}
}
@media (max-width:600px){
 .augite-list-card__head,.augite-section-head{flex-direction:column;flex-wrap:nowrap;align-items:stretch}
 /* same axis-flip reset as in the .augite-table-head block above: .augite-list-card__titleline carries
    `flex:1 1 16rem`, which on this column axis is a 256px HEIGHT. Section heads without a filter trigger were
    affected too - measured at 400px, every head of /intern/rentalcore/buchungen/350/ and /kunden/130/ laid its
    title block out 256px tall.
    !important, and the /intern/ twin of the class in the selector: on the external surface the same 16rem comes
    from public.css:2168 `body:not(.wp-admin) .arf-app.arf-ops .arf-ops-section-head>.arf-ops-section-titleline`
    (0,5,1, REQ-DESIGN-PORTAL-LAYOUT P3), which outranks a plain reset here - measured in Chromium: with the
    reset at (0,2,0) the computed flex-basis on /intern/rentalcore/buchungen/ stayed 256px.
    The head list is deliberately the three classes that the two rules above actually flip to column. A head that
    is ONLY .arf-ops-section-head stays a ROW even below 600px, and there the 16rem basis is the P3 fix that keeps
    /intern/rentalflow/ out of horizontal page scroll at 320px - it must not be reset. */
 :is(.augite-list-card__head,.augite-section-head,.augite-table-head)>:is(.augite-list-card__titleline,.arf-ops-section-titleline){flex-basis:auto!important}
 .augite-list-card__tools{justify-content:flex-end;margin-left:0}
 /* column layout: the toolbar is a real flex row again (stretched to the full card width, so it IS definite) - the
    pictogram and "+" sit side by side on the right, the filter block wraps to its own full line below them */
 .augite-list-card__tools:has(>.augite-filter-toggle){display:flex}
}

/* REQ-INTERN-LAYOUT-CALIBRATION (Live-Abnahme 2026-09-24, RESP-003/RESP-002): .augite-btn traegt
   white-space:nowrap und eine feste Hoehe. Ein langes Label kann dadurch nicht umbrechen und
   schiebt bei 320 CSS px das Dokument auf - real gemessen auf /intern/rentalinvoice/ mit
   "Nachberechnungsrechnung erzeugen" (button width 305,8px bei left 67 -> right 372,8;
   documentElement.scrollWidth 373 gegen clientWidth 320). Unterhalb von 480px darf ein
   Textbutton deshalb umbrechen. Die Hoehe wird von fest auf min-height umgestellt, damit das
   48px-Touchziel (RESP-001) erhalten bleibt, statt beim Umbruch abgeschnitten zu werden.
   height:auto ist dabei kein eigener Groessenentwurf, sondern die zwingende Folge des Umbruchs:
   mit der festen height der Groessenklassen wuerde eine zweite Zeile abgeschnitten. Die
   min-height derselben Klassen bleibt unangetastet und bestimmt weiterhin die Hoehe jedes
   Buttons, der NICHT umbricht - ein einzeiliger .augite-btn--sm misst vorher wie nachher 28px.
   Bewusst KEIN zusaetzliches padding-block: ein erster Entwurf hatte das, und die Messung zeigte,
   dass er 54 nicht umbrechende Buttons auf /intern/wartung/ bei 320px hoeher gemacht haette -
   eine sichtbare Aenderung ausserhalb des Zwecks dieses Fixes. Icon-Buttons bleiben unberuehrt -
   sie sind quadratisch und tragen keinen Fliesstext. */
@media(max-width:480px){
  .augite-btn{white-space:normal;overflow-wrap:break-word;max-width:100%;height:auto}
}

/* LIVE-TASK-2026-09-17-199 (REQ-UI-EXPLANATORY-TEXT-TO-HELP-001): das Inline-Hilfe-Piktogramm
   traegt bei ausgeschalteter Hilfe das hidden-Attribut. Ohne diese beiden Zeilen schlaegt ein
   display-!important der Kit-Regeln das hidden-Attribut, und das Piktogramm bleibt sichtbar,
   obwohl der Benutzer die Hilfe abgeschaltet hat - ein Schalter ohne Wirkung.
   NACHGETRAGEN AM 2026-09-28 von sicherung/stash-1-0927, wo es seit dem 20.09. lag. */
.arf-help-icon[hidden]{display:none!important}
.arf-help-icon.augite-help-icon[hidden]{display:none!important}
/* REQ-INTERN-SCAN-ODER-WAEHLEN-EINE-ZEILE-001 (Auftraggeber 2026-09-29, Screenshot Instanz planen): "Wenn hier Lesefelder fuer Assets auf Basis der ID sind, muessen die in
   die gleiche Zeile wie die geplante Instanz. Das muss ja eine Entweder/Oder-Auswahl fuer das Asset sein (Scannen oder direkt waehlen)." Der Ausloeser
   "Asset identifizieren" (ARF_Admin::asset_picker_trigger(), sechs Stellen: Instanzplanung, Transport/Sperrzeit, Werkstatt, Schaden ... auf /intern/ und wp-admin) stand
   in einer eigenen Zeile UNTER dem Auswahlfeld. Jetzt: Beschriftung oben ueber die volle Breite, Auswahlfeld und Ausloeser in EINER Zeile, Hinweis darunter.
   Zentral am Muster (Zeile mit Auswahlfeld + Ausloeser), nicht je Dialog. */
.augite-form-row:has(>.arf-admin-asset-picker-trigger){display:grid!important;grid-template-columns:minmax(0,1fr) auto;column-gap:8px;row-gap:4px;align-items:center}
.augite-form-row:has(>.arf-admin-asset-picker-trigger)>span:first-child,.augite-form-row:has(>.arf-admin-asset-picker-trigger)>.description{grid-column:1/-1}
.augite-form-row:has(>.arf-admin-asset-picker-trigger)>.arf-admin-asset-picker-trigger{margin:0!important;display:inline-flex;align-items:center}
/* REQ-INTERN-FOKUSRAHMEN-EINHEITLICH-001 (Auftraggeber 2026-09-29: "es gibt im Backend diverse Felder/Eingaben, wo ein orangener Kasten um die Eingabefelder oder Buttons ist. An
   anderen Stellen nicht. Das muss homogenisiert werden!"). URSACHE 1 (Fehler, live gemessen): in public.css standen in der Fokusregel `.arf-app select` und `.arf-app textarea`
   OHNE `:focus` (nur `input:focus`, `.augite-modal select:focus` ... waren vollstaendig) - dadurch trugen ALLE Auswahl- und Mehrzeilenfelder dauerhaft 2px Outline und orangen Rand,
   auch ohne Fokus, Texteingaben nicht (Direktvermietung: 4 von 5 Feldern mit Kasten, ohne dass eines fokussiert war). Korrigiert an beiden Stellen. URSACHE 2: mindestens sechs verschiedene
   Fokusdarstellungen (2px .18, 3px .2, 2px .24, .28, .4, voll) fuer Felder und Schaltflaechen. Jetzt EINE: Fokus sichtbar (:focus-visible) = 2px Akzentrahmen mit 2px Abstand, sonst nichts. */
html body.augite-intern-page :is(.arf-app,.augite-modal) :is(input:not([type=checkbox]):not([type=radio]):not([type=hidden]),select,textarea,button,a.button,.button,[role=button],.augite-btn,.augite-icon-btn,.arf-ops-primary,.arf-ops-secondary,.arf-ops-icon-button):focus-visible{outline:2px solid var(--augite-accent,#d9600a)!important;outline-offset:2px!important;box-shadow:none!important}


/* REQ-INTERN-PREISFREIGABE-TARIFVORSCHLAEGE-MODAL-001: Preis-/Kautionsfreigabe - Tarifvorschlaege als Liste, geaenderte Zeile markiert. */
.arf-quote-tiers{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:4px 8px}
.arf-quote-tiers li{display:inline-flex;gap:6px;align-items:baseline;padding:2px 8px;border:1px solid var(--augite-border,#d0d5dd);font-size:13px;line-height:1.5}
.arf-quote-tiers li.is-suggestion{background:var(--augite-surface-alt,#f4f6f8);font-weight:600}
.arf-quote-tiers .arf-quote-tier__label{color:var(--augite-text-muted,#555)}
.arf-quote-changed[hidden]{display:none}
.arf-quote-changed{display:inline-block;margin-left:6px;font-size:12px;font-weight:600;color:var(--augite-warning,#8a5a00)}
[data-arf-quote-row].is-changed>td{box-shadow:inset 3px 0 0 var(--augite-warning,#c27c00)}
.arf-quote-modal-tiers{margin-bottom:12px}
.augite-modal .augite-modal__fields>.arf-quote-modal-tiers{flex:1 1 100%;max-width:100%}
.arf-quote-proposals .augite-col--money{text-align:right}
.arf-quote-modal-tiers .arf-quote-tiers{margin-top:8px}
.arf-quote-modal-error{color:var(--augite-danger,#b42318);font-weight:600}
/* Das Modal liegt geoeffnet direkt unter <body> (portal), ausserhalb von #wpbody-content: die Hoehenskala greift dort nicht, daher hier ausdruecklich (36 px, Touch 44 px). */
[data-arf-quote-modal] .augite-money-input input{width:12ch;max-width:100%;height:var(--augite-control-h);min-height:var(--augite-control-h);box-sizing:border-box;padding-top:0;padding-bottom:0}
@media (pointer:coarse){[data-arf-quote-modal] .augite-money-input input{height:var(--augite-control-h);min-height:var(--augite-control-h)}}

/* REQ-INTERN-VORGANGSSTEUERUNG-SICHTBAR-001: Statuskarten - moeglich = waehlbar (Rahmen, Akzent bei Auswahl), nicht moeglich = gedaempft, gestrichelt, nicht waehlbar, aktuell = markiert. */
.arf-status-cards{--arf-status-card-font-blocked:12px;margin:0 0 12px;padding:0;border:0;min-width:0}
.arf-status-cards__legend{font-weight:600;padding:0;margin:0 0 8px}
.arf-status-cards__heading{margin:14px 0 6px;color:#50575e;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.04em}
/* REQ-INTERN-STATUSKACHELN-EINZEILIG-001: Kacheln richten sich nach dem Inhalt (kein festes Raster); reicht die Breite nicht, wandert die KACHEL in die naechste Zeile, der Text bricht nie um. */
.arf-status-cards__list{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:8px}
.arf-status-card{position:relative;box-sizing:border-box;min-height:var(--augite-control-h);margin:0;padding:8px 12px;display:flex;flex:0 1 auto;max-width:100%;flex-wrap:nowrap;align-items:center;gap:2px 8px;white-space:nowrap;border:1px solid var(--augite-border,#8c8f94);background:#fff}
.arf-status-card__choice{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;column-gap:8px;row-gap:2px;width:100%;min-width:0;margin:0;cursor:pointer;white-space:nowrap}
.arf-status-card__choice>input{margin:0;grid-column:1}
.arf-status-card__label{min-width:0;white-space:nowrap;font-weight:600}
.arf-status-card__hint,.arf-status-card__why{margin:0;font-size:12px;color:#50575e}
.arf-status-card__hint{grid-column:2;min-width:0;white-space:nowrap}
.arf-status-card.is-possible:has(input:checked){border:2px solid var(--augite-accent,#d9600a);background:var(--augite-accent-soft,#fdf1e7);padding:7px 11px}
.arf-status-card.is-possible:has(input:focus-visible){outline:2px solid var(--augite-accent,#d9600a);outline-offset:2px}
.arf-status-card.is-current{background:#f0f0f1;border-color:#50575e}
.arf-status-card__tag{margin-left:auto;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:#50575e}
.arf-status-card.is-unavailable{border-style:dashed;border-color:#c3c4c7;background:transparent;color:#646970;cursor:not-allowed}
.arf-status-card.is-unavailable .arf-status-card__label{font-weight:400;font-size:var(--arf-status-card-font-blocked,12px)}
.arf-status-card.is-unavailable input{cursor:not-allowed}
.arf-status-cards__submit{display:flex;flex-wrap:wrap;align-items:end;gap:12px}
.arf-status-cards__submit .arf-inline-field{flex:1 1 320px;display:grid;gap:4px}
.arf-status-cards__submit .arf-inline-field input{width:100%;box-sizing:border-box}

/* REQ-INTERN-ANGEBOTSKARTE-LAYOUT-001: Angebotskarte = Faktenreihe gleich breiter Kacheln + EINE Standard-Feldreihe (.augite-form-row: Unterkante Feld = Unterkante Aktion, 36px-Skala), Aktion rechtsbuendig.
   Die .arf-facts-Grundregeln (admin.css/public.css, 2 Spalten) werden mit 2 Klassen uebersteuert. */
.arf-facts.arf-offer-facts{grid-template-columns:repeat(var(--arf-offer-facts-cols,3),minmax(0,1fr));align-items:stretch;margin:12px 0 0}
.arf-facts.arf-offer-facts>div{box-sizing:border-box;min-width:0}
form.arf-offer-form.arf-offer-form--standard{display:grid;gap:12px;margin-top:16px}
.arf-offer-form--standard .arf-offer-form__row{display:flex;flex-flow:row wrap;align-items:flex-end;gap:12px 24px}
.arf-offer-form--standard .arf-offer-hours{display:flex;flex-direction:column;gap:4px;flex:0 0 auto}
.arf-offer-form--standard .arf-offer-hours input{box-sizing:border-box;width:8.5rem;max-width:100%;height:var(--augite-control-h)!important;min-height:var(--augite-control-h)!important;padding-top:0!important;padding-bottom:0!important;margin:0!important}
.arf-offer-form--standard .arf-offer-form__check{display:inline-flex;align-items:center;min-height:var(--augite-control-h)}
.arf-offer-form--standard .arf-offer-form__check .augite-context-help__trigger{min-width:24px!important;min-height:24px!important;width:24px;height:24px}
.arf-offer-form--standard .arf-offer-form__action{display:flex;margin-left:auto;align-self:flex-end}
.arf-offer-form--standard .arf-offer-form__action .augite-btn{height:var(--augite-control-h)!important;min-height:var(--augite-control-h)!important;box-sizing:border-box}
@media(max-width:640px){.arf-facts.arf-offer-facts{grid-template-columns:minmax(0,1fr)}.arf-offer-form--standard .arf-offer-form__action{margin-left:0;flex:1 1 100%}.arf-offer-form--standard .arf-offer-form__action .augite-btn{width:100%}}
form.arf-status-cards-form{display:block!important;padding:0}
.arf-status-card.is-unavailable{min-height:var(--augite-control-h);padding:5px 10px}
.arf-status-card.is-unavailable .arf-status-card__tag{display:none}
.arf-status-card__why{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.arf-status-cards__submit{margin-top:14px}

/* ===== REQ-UI-PROZESSVISUALISIERUNG-EINHEITLICH-001: gemeinsamer Stepper (ARF_Backend_UI::stepper) =====
   Ein Baustein fuer alle Schrittleisten: gleiche Hoehe (44px-Trefferflaeche), EINE Zeile, zentriert in der Box.
   Zustand ueber Flaeche + Rahmen + Textfarbe + Marker: erledigt = gruen gefuellt mit Haken, aktuell = kraeftig gefuellt,
   offen = weiss mit gestricheltem Rahmen. */
/* REQ-UI-PROZESSLEISTE-STRAHL-001 (Auftraggeber 2026-09-30): Prozessleiste = nummerierte QUADRATISCHE Marker (keine Kreise: Formregel border-radius:0) auf einem durchgehenden Strahl,
   Beschriftung darunter. Der Strahl besteht je Schritt aus zwei Halbstuecken (li::before links bis Markermitte, li::after Markermitte bis rechts) und bricht mit der Leiste um. */
.augite-stepper{list-style:none;margin:14px auto 4px;padding:0;display:flex;flex-wrap:wrap;justify-content:center;align-items:stretch;gap:10px 0}
.augite-stepper__step{position:relative;margin:0;padding:0;flex:0 0 auto;width:140px}
.augite-stepper__step::before,.augite-stepper__step::after{content:"";position:absolute;top:15px;height:0;width:50%;border-top:2px dashed #8a8d90;pointer-events:none}
.augite-stepper__step::before{left:0}
.augite-stepper__step::after{right:0}
.augite-stepper__step:first-child::before,.augite-stepper__step:last-child::after{display:none}
.augite-stepper__step.is-done::before,.augite-stepper__step.is-done::after,.augite-stepper__step.is-current::before{border-top-style:solid;border-top-color:#d9600a}
.augite-stepper__item{box-sizing:border-box;position:relative;display:flex;flex-direction:column;align-items:center;gap:6px;width:100%;min-height:var(--augite-control-h);padding:0 4px 4px;border:0;border-radius:0;background:transparent;color:#4a4d51;font-size:.8rem;font-weight:600;line-height:1.25;text-align:center;text-decoration:none}
.augite-stepper__marker{position:relative;z-index:1;flex:0 0 32px;display:inline-grid;place-items:center;box-sizing:border-box;width:32px;height:32px;border:2px solid #6b6e72;border-radius:0;background:#fff;color:#4a4d51;font-size:.85rem;font-weight:800;line-height:1}
.augite-stepper__label{display:block;box-sizing:border-box;width:100%;min-height:2.5em;min-width:0;white-space:normal;overflow-wrap:anywhere;hyphens:none}
.augite-stepper__step.is-done .augite-stepper__item{color:#9a4307}
.augite-stepper__step.is-done .augite-stepper__marker{background:#b84e08;border-color:#b84e08;color:#fff}
.augite-stepper__step.is-na .augite-stepper__item{color:#5f6266;font-weight:500}
.augite-stepper__step.is-na .augite-stepper__marker{background:#fff;border:2px dashed #8a8d90;color:#5f6266}
.augite-stepper__note{display:block;font-size:.72rem;font-weight:500;font-style:italic;line-height:1.2}
.augite-stepper__step.is-current .augite-stepper__item{color:var(--augite-accent-deep,#7a3506);font-weight:800}
.augite-stepper__step.is-current .augite-stepper__marker{background:var(--augite-accent-deep,#7a3506);border-color:var(--augite-accent-deep,#7a3506);color:#fff;box-shadow:0 0 0 3px #fff,0 0 0 5px var(--augite-accent-deep,#7a3506)}
a.augite-stepper__item{cursor:pointer}
a.augite-stepper__item:hover .augite-stepper__marker{border-color:var(--augite-accent-strong,#b84e08);box-shadow:inset 0 0 0 1px var(--augite-accent-strong,#b84e08)}
a.augite-stepper__item:hover .augite-stepper__label{text-decoration:underline}
.augite-stepper__step.is-current a.augite-stepper__item:hover .augite-stepper__marker{border-color:var(--augite-accent-deep-hover,#6b2e05);background:var(--augite-accent-deep-hover,#6b2e05);box-shadow:0 0 0 3px #fff,0 0 0 5px var(--augite-accent-deep-hover,#6b2e05)}
a.augite-stepper__item:focus-visible{outline:2px solid var(--augite-accent,#d9600a);outline-offset:2px}
@media(max-width:700px){.augite-stepper{flex-direction:column;align-items:center;gap:0;width:min(100%,320px)}.augite-stepper__step{width:100%}
.augite-stepper__step::before,.augite-stepper__step::after{width:2px;height:50%;top:auto;left:19px;right:auto;border-top:0;background:repeating-linear-gradient(to bottom,#8a8d90 0 4px,transparent 4px 7px)}
.augite-stepper__step::before{top:0}.augite-stepper__step::after{bottom:0}
.augite-stepper__step.is-done::before,.augite-stepper__step.is-done::after,.augite-stepper__step.is-current::before{background:#d9600a}
.augite-stepper__item{flex-direction:row;align-items:center;gap:12px;padding:6px 4px;text-align:left}.augite-stepper__label{min-height:0;width:auto;flex:1 1 auto}}
/* REQ-INTERN-SCHRITTFOLGEN-001 (Stufe 2): Huellen der Schrittfolgen in der Buchungsakte (/intern/ und wp-admin); Optik, Zustaende, Umbruch kommen vom Baustein. */
.arf-booking-lifecycle,.arf-ops-prep-steps{min-width:0;margin:0 0 12px}
.arf-booking-lifecycle>.augite-stepper,.arf-ops-prep-steps>.augite-stepper{margin-top:0;margin-bottom:0}
/* Stufe 3: neun Schritte (Betriebsfassung mit "Reserviert") bleiben ab 701 px einzeilig; schmalere Schritte, Beschriftung bricht um statt abgeschnitten zu werden. */
@media(min-width:701px){.arf-booking-lifecycle>.augite-stepper .augite-stepper__step,.arf-booking-lifecycle .augite-stepper__step{width:120px}}
.augite-stepper-wrap{position:relative;min-width:0}
.augite-stepper__toggle{display:none}
/* Handy (< 700 px, Auftraggeberentscheidung 2026-10-02): kompakt nur der aktuelle Schritt mit Nummer; Aufklappen zeigt alle Schritte. Die Liste bleibt im Dokument (aria-current erhalten), nur optisch eingeklappt. */
@media(max-width:700px){.augite-stepper__toggle{display:flex;align-items:center;justify-content:space-between;gap:8px;box-sizing:border-box;width:100%;min-height:var(--augite-control-h);margin:0;padding:0 var(--augite-control-pad-x);border:1px solid #8a8d90;border-radius:0;background:#fff;color:inherit;font:inherit;font-weight:700;text-align:left;cursor:pointer}
.augite-stepper__toggle::after{content:"";flex:0 0 auto;width:8px;height:8px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg)}
.augite-stepper__toggle[aria-expanded=true]::after{transform:rotate(-135deg)}
.augite-stepper__toggle:focus-visible{outline:2px solid var(--augite-accent,#d9600a);outline-offset:2px}
.augite-stepper-wrap:not(.is-open)>.augite-stepper{position:absolute;width:1px;height:1px;margin:0;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}}
@media(forced-colors:active){.augite-stepper__step.is-done .augite-stepper__marker{border-width:3px}.augite-stepper__step.is-current .augite-stepper__marker{outline:2px solid}}

/* REQ-UI-VERSIONSVERLAUF-MODAL-001: Fassungs-Modal (Liste, Inhalt, Unterschied). */
.arf-version-history{display:grid;gap:16px}
.arf-version-detail{border:1px solid var(--arf-ops-line,#d7d9dc);background:#f6f7f8;padding:14px 16px}
.arf-version-detail[hidden],.arf-version-detail__pane[hidden]{display:none}
.arf-version-detail__head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;margin:0 0 12px}
.arf-version-detail__modes{display:inline-flex;flex-wrap:wrap;gap:8px}
.arf-version-detail__modes [aria-pressed="true"]{background:#1e2124;color:#fff;border-color:#1e2124}
.arf-version-content{margin:0;max-height:50vh;overflow:auto;white-space:pre-wrap;word-break:break-word;background:#fff;border:1px solid var(--arf-ops-line,#d7d9dc);padding:12px 14px;font:inherit;line-height:1.5}
.arf-diff{background:#fff;border:1px solid var(--arf-ops-line,#d7d9dc);max-height:50vh;overflow:auto}
.arf-diff__line{display:flex;gap:10px;padding:2px 12px;white-space:pre-wrap;word-break:break-word;line-height:1.5}
.arf-diff__line.is-add{background:#eeeff0}
.arf-diff__line.is-del{background:#fbe9e7;text-decoration:line-through;text-decoration-color:rgba(148,75,24,.45)}
.arf-diff__sign{flex:0 0 14px;font-weight:800}
.arf-diff__skip{padding:4px 12px;color:var(--arf-ops-muted,#5b5e62);background:#f6f7f8;font-size:.9em}
.arf-diff__result{margin:0;padding:12px 14px;color:var(--arf-ops-muted,#5b5e62)}

/* REQ-CRM-KUNDENPREISE-KONDITIONEN-001: Preisquelle (Kundenrabatt) mit Symbol */
.arf-price-source{display:inline-flex;align-items:center;gap:6px}.arf-price-source svg{width:16px;height:16px;flex:0 0 16px}

/* REQ-HIDDEN-ATTRIBUT-GUARD-001: hidden gewinnt gegen jede display-Regel der RentalCore-Oberflaeche (siehe modal.css). */
.wrap [hidden]:not(#augite-hidden-guard),.augite-backend [hidden]:not(#augite-hidden-guard){display:none!important}
/* REQ-MAIL-EINGANG-IMAP-001: Mail ansehen (Modal) und Kundensuche im Zuordnen-Modal des Posteingangs */
.augite-modal__text{white-space:pre-wrap;word-break:break-word;max-height:40vh;overflow:auto;margin:0;padding:8px 12px;border:1px solid currentColor;font:inherit}
.augite-modal__facts{display:grid;grid-template-columns:max-content 1fr;gap:4px 12px;margin:0 0 12px}
.augite-modal__facts dt{font-weight:600}
.augite-modal__facts dd{margin:0;word-break:break-word}
.augite-suggest{list-style:none;margin:4px 0 0;padding:0;max-height:200px;overflow:auto}
.augite-suggest li button{display:block;width:100%;text-align:left;padding:6px 10px;background:transparent;border:0;border-bottom:1px solid currentColor;cursor:pointer;font:inherit;color:inherit}
.augite-suggest li button:hover,.augite-suggest li button:focus-visible{text-decoration:underline}
/* REQ-ERP-STEUER-NACHTEST-B3-001 (Nachtest 01.10.2026): zwei Aktionsgruppen mit Beschriftung, die in EINER Zeile stehen und nie einzeln umbrechen.
 * a) Kundenimport-Vorschau: Haken untereinander (je Zeile, Abstand 8px), darunter Bestaetigen + Verwerfen nebeneinander.
 * b) Kundenakte "USt-IdNr.-Pruefung": Pruefen + Pruefverlauf nebeneinander. Die Gruppe darf als Ganzes unter die Kachel rutschen (flex-wrap
 *    an der Gruppe), ein Knopf bricht nie in zwei Zeilen (white-space:nowrap am Knopf). Abstaende aus der 4er-Skala (8/16). */
.arf-import-commit{display:flex;flex-direction:column;gap:16px;padding:16px 0 0}
.arf-import-commit__checks{display:flex;flex-direction:column;gap:8px}
.arf-import-commit .arf-admin-check{grid-column:auto;margin:0}
.arf-import-commit__actions,.arf-vies-actions{display:flex;flex-flow:row wrap;align-items:center;gap:8px}
.arf-vies-actions{margin-top:16px}
.arf-import-commit__actions .augite-inline-form,.arf-vies-actions .augite-inline-form{display:inline-flex;margin:0}
.arf-import-commit__actions :is(.augite-btn,.augite-icon-btn),.arf-vies-actions :is(.augite-btn,.augite-icon-btn){white-space:nowrap;flex:0 0 auto}
.arf-import-commit__actions .augite-btn>svg,.arf-vies-actions .augite-btn>svg{flex:0 0 16px}
.arf-import-commit__actions .augite-btn,.arf-vies-actions .augite-btn{display:inline-flex;align-items:center;gap:8px}
.arf-vies-tile,.arf-vies-case{display:flex;align-items:center;gap:8px;margin:0 0 8px}
/* Segmente verwalten (Nachtest 01.10.2026, Screenshot n8-segmente-liste): Namensfeld und Stift standen untereinander - eine Zeile, Feld waechst. */
.arf-segment-rename{display:flex;flex-flow:row nowrap;align-items:center;gap:8px;margin:0}
.arf-segment-rename>input{flex:1 1 auto;min-width:0}
.arf-segment-rename>.augite-icon-btn{flex:0 0 auto}
/* REQ-ERP-CONTROLLING-STANDARDZEITRAUM-001 (Nachtest 01.10.2026): Controlling-Tabellen sind kartenbreit ohne Ueberlauf. Kopfzeilen duerfen umbrechen (ganze Woerter, nie Silbentrennung),
   Zahlen/Geld bleiben rechtsbuendig und durch das geschuetzte Leerzeichen vor der Waehrung zusammen; die Huelle scrollt nicht (Tabelle passt sich an die Kartenbreite an). */
.augite-table-scroll.arf-controlling-table-wrap{overflow:visible;max-width:100%}
/* REQ-CTRL-MOBIL-SCROLL-001 (Nachtest 8, N8-1): auf schmalen Bildschirmen (wp-admin-Umbruch 782 px, Touch 390) bekommt die Huelle wieder ihren Scroll - die Spalten sind dort breiter als die Karte, sonst scrollt die ganze Seite waagerecht. */
@media (max-width:782px){.augite-table-scroll.arf-controlling-table-wrap{overflow-x:auto}}
.augite-table-scroll.arf-controlling-table-wrap>table.augite-table{width:100%;max-width:100%;table-layout:auto}
.augite-table-scroll.arf-controlling-table-wrap>table.augite-table>thead>tr>th{white-space:normal;hyphens:none;overflow-wrap:normal;vertical-align:bottom;padding-inline:6px}
.augite-table-scroll.arf-controlling-table-wrap>table.augite-table>tbody>tr>td{padding-inline:6px;overflow-wrap:break-word;hyphens:none}
.augite-table-scroll.arf-controlling-table-wrap>table.augite-table .augite-sort{white-space:normal;text-align:inherit}
.arf-field-group .arf-field-group__field.arf-controlling-churn>input{width:9rem!important;max-width:100%!important}
/* AUGITE-CONTROL-TOKENS:BEGIN - REQ-UI-STEUERELEMENTE-EINHEITLICH-001 (Auftraggeberentscheidung 2026-09-30, Fragebox).
 * EINE Definition aller Steuerelement-Masse fuer /intern/, wp-admin (RentalCore, AssetCore, Invoice, Payments, Procurement) und
 * das Kundenportal. Der Block steht byte-gleich in backend-ui.css (kanonisch), public.css und modal.css - jede Flaeche laedt
 * mindestens eine dieser Dateien; der Pruefstand test_req_ui_steuerelemente_einheitlich_001 erzwingt die Gleichheit.
 * Oeffentliche Website/Theme bleiben ausgenommen. Ausser in diesem Block steht in den erfassten Dateien kein Hoehen-,
 * Schrift-, Innenabstands- oder Radius-Literal fuer Steuerelemente. Hoehe: 40px mit Maus/Stift, 48px bei grobem Zeiger (Touch). Feldschrift (Felder, Selects, Textbereiche): 14px, bei Touch 16px
 * (gegen den iOS-Fokuszoom, Auftraggeber 2026-10-01); Schaltflaechen bleiben 14px. */
:root{--augite-control-h:40px;--augite-control-font-size:14px;--augite-field-font-size:14px;--augite-control-weight:400;--augite-button-weight:600;--augite-control-line-height:1.3;--augite-control-pad-x:12px;--augite-control-pad:0 var(--augite-control-pad-x);--augite-control-pad-area:8px var(--augite-control-pad-x);--augite-button-pad:0 16px;--augite-control-radius:0;--augite-control-border-width:1px;--augite-field-gap:12px;--augite-group-gap:16px;--augite-focus-ring-width:2px;--augite-focus-ring-offset:2px;--augite-control-hover-border:var(--augite-accent-strong,#b84e08);--augite-control-disabled-opacity:.55;--augite-control-error-border:var(--augite-danger,#b32d2e)}
@media (pointer:coarse){:root{--augite-control-h:48px;--augite-field-font-size:16px}}
/* Basisvertrag (Element-Ebene, bewusst niedrige Spezifitaet: jede Spezialregel nennt dieselben Token, daher gleiche Masse).
 * Felder/Selects: Hoehe, Schrift 14px/400, Innenabstand, Radius. Schaltflaechen: Mindesthoehe, 14px/600. Fokusring einheitlich. */
:is(.augite-modal:not(.arf-cart-period-dialog),.arf-ops,.arf-portal,:where(body.wp-admin #wpbody-content)) :is(input:where(:not([type=checkbox]):not([type=radio]):not([type=hidden]):not([type=range]):not([type=color]):not([type=file]):not([type=image]):not([type=submit]):not([type=button]):not([type=reset])),select){box-sizing:border-box;height:var(--augite-control-h);min-height:var(--augite-control-h);padding:var(--augite-control-pad);border-radius:var(--augite-control-radius);font-family:inherit;font-size:var(--augite-field-font-size);font-weight:var(--augite-control-weight);line-height:var(--augite-control-line-height)}
:is(.augite-modal:not(.arf-cart-period-dialog),.arf-ops,.arf-portal,body.wp-admin #wpbody-content) textarea{box-sizing:border-box;padding:var(--augite-control-pad-area);border-radius:var(--augite-control-radius);font-family:inherit;font-size:var(--augite-field-font-size);font-weight:var(--augite-control-weight);line-height:var(--augite-control-line-height)}
:is(.augite-modal:not(.arf-cart-period-dialog),.arf-ops,.arf-portal,:where(body.wp-admin #wpbody-content)) :is(.button,.augite-btn,.augite-icon-btn,.arf-ops-primary,.arf-ops-secondary,.arf-ops-icon-button,.augite-modal__button,input[type=submit],input[type=button],input[type=reset]),.augite-modal:not(.arf-cart-period-dialog) :is(button,[role=button]){box-sizing:border-box;min-height:var(--augite-control-h);border-radius:var(--augite-control-radius);font-family:inherit;font-size:var(--augite-control-font-size);font-weight:var(--augite-button-weight);line-height:var(--augite-control-line-height)}
:is(.augite-modal:not(.arf-cart-period-dialog),.arf-ops,.arf-portal,:where(body.wp-admin #wpbody-content)) :is(input,select,textarea,button,.button):focus-visible{outline:var(--augite-focus-ring-width) solid var(--augite-accent,#d9600a);outline-offset:var(--augite-focus-ring-offset)}
:is(.augite-modal:not(.arf-cart-period-dialog),.arf-ops,.arf-portal,:where(body.wp-admin #wpbody-content)) :is(input,select,textarea,button,.button):disabled{opacity:var(--augite-control-disabled-opacity);cursor:not-allowed}
:is(.augite-modal:not(.arf-cart-period-dialog),.arf-ops,.arf-portal,:where(body.wp-admin #wpbody-content)) :is(input,select,textarea):is(:user-invalid,[aria-invalid=true]){border-color:var(--augite-control-error-border)}
/* AUGITE-CONTROL-TOKENS:END */
/* REQ-INTERN-AKTIONSZEILE-ABSTAND-001 (Auftraggeberbefund 2026-10-01, Buchungsakte /intern/rentalflow/buchung/651/: "fehlender Abstand zwischen
   Uebergabe abbrechen und dem darunterliegenden Block. Sowas darf nicht sein - systemweit pruefen"). Ursache: public.css setzte fuer
   .arf-ops-actions spaeter "margin:14px 0 0" (unten 0), und die uebrigen Aktionszeilen tragen nur margin-top - eine Knopfzeile klebte
   dadurch am Folgeblock, und gewrappte Zeilen hatten nur 8px Zeilenabstand. EINE zentrale Regel statt je Einzelstelle: jede Aktionszeile,
   die einen Folgeblock hat, haelt den Gruppenabstand (--augite-group-gap) nach unten und den Feldabstand (--augite-field-gap) zwischen
   umbrochenen Knopfzeilen. Nur /intern/ und wp-admin; Kundenportal bleibt unberuehrt. Tabellenzeilen-/Titelleisten-Aktionen sind
   absichtlich nicht gelistet. */
:is(body.augite-intern-page,body.wp-admin) :is(.arf-ops-actions,.arf-service-actions,.arf-work-order-actions,.arf-scan-actions,.arf-inline-actions,.arf-mc-actions,.arf-offer-actions,.arf-wartung-actions,.arf-camera-actions,.augite-process-guidance__actions,.arp-ops-overview-actions,.arp-virtual-actions,.ars-actions,.ars-form-actions,.augri-button-row,.augri-form-actions):not(:last-child){margin-bottom:var(--augite-group-gap,16px)}
:is(body.augite-intern-page,body.wp-admin) :is(.arf-ops-actions,.arf-service-actions,.arf-work-order-actions,.arf-scan-actions,.arf-inline-actions,.arf-mc-actions,.arf-offer-actions,.arf-wartung-actions,.arf-camera-actions,.augite-process-guidance__actions,.arp-ops-overview-actions,.arp-virtual-actions,.ars-actions,.ars-form-actions,.augri-button-row,.augri-form-actions){row-gap:var(--augite-field-gap,12px)}
