/* =========================================================
   MP-20260902-043 — AUFMASS: MOBILE SCHRITT-ANSICHTEN (CSS)
   Jonas Falk (product-engineer), 02.09.2026.

   NACHTRAG 03.09.2026 (Vollbild-Elevation griff nicht, Marcels Handy-
   Meldung): Der elevierte Slot erschien "als Karte oben im normalen
   Layout-Fluss" statt als Vollbild. BESTÄTIGTE URSACHE (Puppeteer-Probe,
   siehe tools/test-aufmass-schritt-ansichten-mobile-touch.js): `.aufmass-
   room-card` trägt `content-visibility: auto` (public/css/mp-tablet-
   perf.css:19-22, Tablet-Scroll-Performance, lädt laut eigenem Kommentar
   bewusst zuletzt). `content-visibility: auto` impliziert IMMER `contain:
   layout style paint` (CSS Containment Spec, unabhängig vom sichtbaren/
   übersprungenen Zustand) — und `contain: layout` macht das Element zu
   einem Containing Block für `position: fixed`-Nachfahren, genau wie ein
   `transform`. Das bereits vorhandene `contain: none !important` aus
   mp-ui-final-hardwall.css (:39-40) hebt das NICHT auf — geprüft per
   Probe: mit `contain:none !important` UND `content-visibility:auto`
   gleichzeitig bleibt das "fixed"-Kind trotzdem auf die Kartenbox
   beschränkt (`getBoundingClientRect()` == Kartenposition im Dokument,
   nicht Viewport-Ecke). Nur `content-visibility: visible` entfernt die
   implizite Containment — Probe bestätigt: mit `visible` liefert
   `getBoundingClientRect()` exakt `top:0;left:0;width:innerWidth;
   height:innerHeight`. Fix unten: `content-visibility: visible` NUR auf
   der Karte/dem Container, NUR solange ein Schritt aktiv ist — kein
   DOM-move nötig (ein DOM-move zu <body> hätte umgekehrt die an
   `#view-aufmass .aufmass-room-card ...` gebundene Sektions-CSS aus
   mp-aufmass-v2.css/mp-aufmass-golden.css abgerissen, siehe aufmass-
   mobile-steps.js Dateikopf) — und kein Performance-Verlust (die Karte
   ist exakt dann, wenn sie den ganzen Viewport füllt, ohnehin vollständig
   im Bild; `content-visibility:auto`s Off-Screen-Ersparnis griff für sie
   in diesem Zustand nie). #aufmassFassadeContainer bekommt dieselbe Regel
   aus Symmetrie/Vorsorge (hat aktuell KEIN content-visibility, Fix ist
   dort ein No-Op — geprüft per grep, kein Fehlerbild dort gemeldet).

   Gilt AUSSCHLIESSLICH unter max-width:767px (identischer Umschaltpunkt
   wie der bestehende #mpFasRundgangOverlay-Breakpoint,
   mp-aufmass-golden.css:2412). Desktop/Tablet (>=768px) sind von dieser
   Datei komplett unberührt — die drei bzw. vier Sektionen bleiben dort
   die durchgehende Ein-Karten-Ansicht wie heute.

   z-Index-Familie 100000–100200 (zentrale Skala MP-004, siehe UX-Spec
   A1): Backdrop/Sheet der bestehenden Rundgang-Overlays liegen bei
   100000, das Leistungskatalog-Fenster bei 100100/100120 — dieses Modul
   bleibt bewusst UNTER 100100, damit ein aus der Schritt-Ansicht heraus
   geöffnetes Katalogfenster weiterhin korrekt darüberliegt.

   Regelkonformität (Marcels UI-Standard): keine Emoji (Inline-SVG),
   kein border-radius:999px (Badge nutzt die bestehende .mp-fas-step-
   Optik, 9px, unverändert), Zurück/Weiter/Fertig nutzen die bestehenden
   .btn-ghost/.btn-primary-Klassen aus mp-button-system.css ohne eigene
   Breiten-/Radius-Overrides. Die volle Zeile klickbar zu machen ist bei
   einer Listen-Navigationszeile Konvention (wie .mp-au-menu-item), keine
   "breite Schaltfläche" im Sinn der Knopf-Regel (siehe UX-Spec
   „Regelkonformität").

   NACHFIX 03.09.2026 (MP-20260903-010, Content-Anschnitt griff im
   RUHEZUSTAND NICHT trotz mp010a — Marcel sah Schritt 2 auch nach ZWEI
   vollen App-Neustarts oben angeschnitten, ohne zu scrollen): der vorige
   Fix verließ sich vollständig auf eine synchron im selben Tick wie das
   Öffnen gemessene JS-Höhe. Verdacht (deckt sich mit QA): auf dem echten
   Gerät ist der Step-Kopf zu diesem Zeitpunkt noch nicht final gelayoutet
   (u. a. die content-visibility:auto→visible-Umschaltung des Vollbild-
   Fixes oben braucht vermutlich einen Frame). Der CSS-Fallback unten
   (`var(--mp-aufmass-step-head-h, 84px)`) ist deshalb jetzt bewusst
   KONSERVATIV über der tatsächlichen Kopfhöhe (~73px) angesetzt — dieser
   Wert gilt so lange, bis aufmass-mobile-steps.js die Variable per
   requestAnimationFrame NACH dem Layout (nicht mehr nur synchron davor)
   verfeinert; ein `scroll-padding-top` in derselben Höhe sorgt zusätzlich
   dafür, dass ein programmatisches Scrollen (z. B. Fokus-Sprung auf ein
   Eingabefeld) ebenfalls unter dem Kopf andockt, nicht dahinter. Der
   Foot-Fallback (64px) bleibt unverändert — nur der Kopf war gemeldet.

   NACHARBEIT 03.09.2026 (MP-20260903-010, QA NICHT BESTANDEN — Lena Berger,
   docs/ai-company/qa/2026-09-03-browser-qa-neue-bauelement-karten-mobil.md,
   F2): der mp010a/mp010c-Fix behob NICHT die tatsächliche Ursache. Belegt
   per `CSS.getMatchedStylesForNode` im echten Browser: die JS-Messung ist
   korrekt (`--mp-aufmass-step-head-h` steht auf 73px), aber die
   `padding-top`-Deklaration der Elevations-Regel unten (Selektor-
   Spezifität (1,2,0)) VERLIERT gegen konkurrierende `!important`-Regeln in
   mp-aufmass-v2.css — u. a. `#view-aufmass .aufmass-room-card
   .form-section.section-secondary{padding:14px 14px 12px !important}`
   (Spezifität (1,3,0)) und die zur Laufzeit injizierte
   `.is-dokument .form-section.section-secondary`-Regel (aufmass.js
   __mpEnsureAufmassDocStyles(), Spezifität (1,4,0)) — beide sind
   spezifischer als die alte Elevations-Regel, ein reiner CSS-Fallback-Bump
   (mp010c, 64px→84px) ändert daran NICHTS, weil er nur den Fallback-WERT,
   nicht die SPEZIFITÄT der Regel erhöht. Fix (dieser Vorgang): die
   Elevations-Regel bekommt ein zusätzliches `#view-aufmass`-Präfix
   (Selektor-Spezifität (1,2,0)→(2,2,0)) — ZWEI IDs schlagen JEDE Regel mit
   nur einer ID, unabhängig von deren Klassenanzahl, also auch die (1,4,0)-
   Regel oben. `#view-aufmass` ist im echten DOM immer Vorfahre (sowohl von
   `.aufmass-room-card` als auch von `#aufmassFassadeContainer`, siehe
   aufmass.html), die Regel bleibt unverändert wirksam, nur ihre
   Gewinnchance in der Kaskade steigt. */

/* ── Übersichtszeilen: Grundzustand (alle Breiten) ────────────────── */
.mp-aufmass-step-overview {
  display: none;
}

.mp-aufmass-step-row {
  display: flex;
  align-items: center;
  width: 100%;
  min-height: 56px;
  padding: 10px 14px;
  gap: 12px;
  border: 1px solid rgba(15, 23, 42, .09);
  border-radius: 12px;
  background: rgb(var(--mp-flaeche-rgb));
  text-align: left;
  font: inherit;
  color: inherit;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}

.mp-aufmass-step-row:active {
  background: rgba(43, 176, 255, .07);
}

.mp-aufmass-step-row:focus-visible {
  outline: 2px solid #2bb0ff;
  outline-offset: 2px;
}

.mp-aufmass-step-row-text {
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
  min-width: 0;
  gap: 2px;
}

.mp-aufmass-step-row-title {
  overflow: hidden;
  color: rgb(var(--mp-t1-172033));
  font-size: 14.5px;
  font-weight: 760;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.mp-aufmass-step-row-sub {
  overflow: hidden;
  color: rgb(var(--mp-t3-64748b));
  font-size: 12.5px;
  font-weight: 520;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.mp-aufmass-step-row-chev {
  flex: 0 0 auto;
  color: #94a3b8;
}

/* ── Kopf/Fuß-Chrome (als Geschwister eingefügt, siehe JS) ────────── */
.mp-aufmass-step-head {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 100045;
  padding: 10px 12px;
  border-bottom: 1px solid rgba(15, 23, 42, .08);
  /* MP-20260903-010 (Marcels 2. Repro, 03.09.2026): "Inhalt scrollt hinter
     den Step-Header und verschwindet darunter" -- ein fast-aber-nicht-ganz
     opaker Hintergrund (.98 Alpha) ist der zweite Klassiker neben einem zu
     kleinen padding-top (K-367/K-Nachtrag). Jetzt vollständig opak (kein
     Alpha-Kanal mehr), der backdrop-filter bleibt als reiner Zusatzeffekt
     auf einem bereits blickdichten Hintergrund. */
  background: rgb(var(--mp-flaeche-rgb));
  -webkit-backdrop-filter: blur(6px);
  backdrop-filter: blur(6px);
}

.mp-aufmass-step-head-row {
  display: flex;
  align-items: center;
  gap: 10px;
}

.mp-aufmass-step-close {
  display: inline-flex;
  flex: 0 0 auto;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border: 0;
  border-radius: 12px;
  background: rgba(15, 23, 42, .05);
  color: rgb(var(--mp-t1-172033));
  cursor: pointer;
}

.mp-aufmass-step-close:active {
  background: rgba(15, 23, 42, .10);
}

.mp-aufmass-step-head-text {
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
  min-width: 0;
  gap: 1px;
}

.mp-aufmass-step-kicker {
  overflow: hidden;
  color: #1499ea;
  font-size: 10.5px;
  font-weight: 800;
  letter-spacing: .07em;
  text-overflow: ellipsis;
  text-transform: uppercase;
  white-space: nowrap;
}

/* MP-20260905-003 (Angleichen an -062, Marcel): 15.5px -> 17px, identisch
   zu .mp-kva-step-title (css/mp-kva-mobile-steps.css:316-324). Bleibt
   trotzdem unter der 40px-Zeilenhöhe, die ohnehin schon durch den
   40px-Schließen-Knopf (und jetzt zusätzlich das 38-40px-Raum-Symbol,
   siehe .mp-aufmass-step-head-icon unten) in .mp-aufmass-step-head-row
   bestimmt ist — Kicker 10.5px + Gap 1px + Titel 17px bleibt ein
   niedrigerer Textstapel als die 40px-Zeile, der Kopf wird dadurch NICHT
   höher. */
.mp-aufmass-step-title {
  overflow: hidden;
  margin: 0;
  color: rgb(var(--mp-t1-172033));
  font-size: 17px;
  font-weight: 800;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* MP-20260905-003: kein eigenes Layout-CSS nötig — .room-type-icon
   (mp-aufmass-v2.css/mp-aufmass-golden.css, gescopt unter #view-aufmass)
   bringt bereits flex:0 0 auto + feste Breite/Höhe/Radius/Farbe mit, genau
   wie im Kartenkopf. .mp-aufmass-step-head-icon dient hier nur als
   JS-Suchanker (head.querySelector), keine eigene Optik. */

.mp-aufmass-step-head-spacer {
  flex: 0 0 40px;
}

.mp-aufmass-step-progress {
  height: 4px;
  margin-top: 8px;
  overflow: hidden;
  border-radius: 999px;
  background: rgba(15, 23, 42, .07);
}

.mp-aufmass-step-progress > span {
  display: block;
  height: 100%;
  border-radius: inherit;
  background: linear-gradient(90deg, #2bb0ff, #5b8cff);
}

.mp-aufmass-step-foot {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 100045;
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 10px;
  padding: 10px 14px calc(10px + env(safe-area-inset-bottom));
  border-top: 1px solid rgba(15, 23, 42, .08);
  /* MP-20260903-010: vollständig opak, siehe Kommentar an .mp-aufmass-step-head. */
  background: rgb(var(--mp-flaeche-rgb));
}

.mp-aufmass-step-foot > button {
  min-height: 44px;
}

.mp-aufmass-step-foot > button[hidden] {
  display: none;
}

/* Sticky Kompakt-Kennzahl in Fassade-Schritt 3 (liest #aufmassFassadeOutput
   aus, siehe aufmass-mobile-steps.js ensureFassadeKpiLine) */
.mp-aufmass-fassade-kpi-sticky {
  position: sticky;
  top: 0;
  z-index: 1;
  padding: 10px 4px;
  margin-bottom: 10px;
  border-bottom: 1px solid rgba(15, 23, 42, .08);
  background: rgba(43, 176, 255, .07);
  color: #0b4f78;
  font-size: 13px;
  font-weight: 750;
}

@media (max-width: 767px) {
  :is(.aufmass-room-card, #aufmassFassadeContainer):not([data-mp-step-active]) .mp-aufmass-step-overview {
    display: flex;
    flex-direction: column;
    gap: 8px;
    margin: 2px 0 12px;
  }

  /* Grundzustand mobil: alle drei Slots verborgen (Übersicht zeigt statt
     dessen die drei Zeilen). Wird pro aktivem Schritt unten wieder gezielt
     sichtbar/elevated gemacht. */
  :is(.aufmass-room-card, #aufmassFassadeContainer) [data-mp-step-slot] {
    display: none;
  }

  /* NACHARBEIT 03.09.2026 (F2, siehe Dateikopf): `#view-aufmass`-Präfix
     ergänzt — hebt die Selektor-Spezifität von (1,2,0) auf (2,2,0), damit
     die padding-Deklaration unten JEDE bekannte konkurrierende
     `!important`-Regel aus mp-aufmass-v2.css schlägt, auch die (1,4,0)-
     Regel für `.is-dokument .form-section.section-secondary`. */
  /* NACHARBEIT 03.09.2026 (MP-20260903-015-Wiedereröffnung, K-371
     WIDERLEGT — Marcel meldete nach frischem mp015a-Deploy dieselbe
     Fehlerklasse erneut, per Fassade-Screenshot 15:30 belegt). ECHTE
     URSACHE, per Puppeteer GEGEN DIE VOLLSTÄNDIGEN 186 in index.html
     verlinkten CSS-Dateien in ECHTER Reihenfolge + der ECHTEN
     mp-list-workspaces-golden.js (window.MP_AUFMASS_GOLDEN_NAV.scan(),
     baut die ECHTE .mp-aufmass-section-nav-Modul-Tableiste) gefunden —
     die frühere Diagnose hatte NUR #aufmassFassadeContainer isoliert
     extrahiert (kein umgebendes Modul-Chrome, keine echte mp-app-premium.css):
     `mp-app-premium.css` `.view .card:hover{transform:translateY(-2px)}`
     (KEIN !important). Ein Tap auf die Übersichtszeile lässt auf
     Touch-Geräten `:hover` an der getroffenen `.card` "kleben" (bekanntes
     Mobile-Browser-Verhalten, in Puppeteer per `touchscreen.tap()`
     reproduziert: `.card.matches(":hover")` blieb `true`). JEDER
     Transform-Wert ungleich dem Keyword `none` — auch eine rechnerisch
     identische Matrix wie `translateY(0)` — spannt einen Containing Block
     für `position:fixed`-Nachfahren auf (CSS Transforms Level 1 § wird
     hier praktisch bestätigt: `getBoundingClientRect()` der Elevation
     folgte exakt der Position/Breite der inneren `.card`, NICHT dem
     Viewport — Marcels Screenshot: abgerundete Karte, Wallpaper ringsum,
     Modul-Tableiste bleibt sichtbar). Bei der Raumkarte tritt der Fehler
     NICHT auf: dort ist die elevierte Wurzel selbst `.card.aufmass-room-card`
     (aufmass.js `div.className = "card glass aufmass-room-card is-dokument"`)
     — genau dieses Element steht bereits in mp-aufmass-layout-contract.css
     Zeile 31-41 in der `transform:none !important`-Liste. Bei der Fassade
     liegt zwischen `#aufmassFassadeContainer` (das dort steht) und dem
     elevierten Slot ein ZUSÄTZLICHES, eigenes `<div class="card">`
     (aufmass.html) — genau DAS bekam den Reset bisher nicht. Fix hier statt
     in mp-aufmass-layout-contract.css: NUR während ein Schritt aktiv ist
     (gleiches Gating wie der content-visibility-Fix direkt darunter) —
     die Hover-Lift-Optik von `.card` bleibt in JEDEM anderen Zustand
     erhalten, kein unbeabsichtigter Verhaltenswechsel app-weit. */
  #aufmassFassadeContainer[data-mp-step-active] :is(.card, .card-body, .fassade-grid) {
    transform: none !important;
    filter: none !important;
    perspective: none !important;
    contain: none !important;
    will-change: auto !important;
  }

  #view-aufmass :is(.aufmass-room-card, #aufmassFassadeContainer)[data-mp-step-active="1"] [data-mp-step-slot="1"],
  #view-aufmass :is(.aufmass-room-card, #aufmassFassadeContainer)[data-mp-step-active="2"] [data-mp-step-slot="2"],
  #view-aufmass :is(.aufmass-room-card, #aufmassFassadeContainer)[data-mp-step-active="3"] [data-mp-step-slot="3"] {
    display: block !important;
    position: fixed !important;
    top: 0 !important;
    left: 0 !important;
    right: 0 !important;
    bottom: 0 !important;
    z-index: 100040;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    box-sizing: border-box;
    margin: 0 !important;
    /* MP-20260903-010 (Marcels Handy-Befund, Screenshot 390px "Schritt 2 von
       3"): der Content-Offset stand vorher auf einem GERATENEN Festwert
       (64px oben) — der echte Kopf ist ~73px hoch (Padding + Schließen-
       Zeile + Fortschrittsbalken), 9px mehr, dadurch war die erste
       Content-Zeile oben halb abgeschnitten. Der Offset rechnet aus der
       gemessenen Kopf-/Fuß-Höhe (aufmass-mobile-steps.js
       syncStepChromeHeights(), per getBoundingClientRect() NACH dem
       Layout gesetzt, siehe Dateikopf "NACHFIX 03.09.2026") + 8px Luft.
       NACHFIX 03.09.2026: der Kopf-Fallback ist jetzt 84px (statt 64px) —
       bewusst ÜBER der tatsächlichen Kopfhöhe (~73px), damit ein
       Ruhezustand VOR/OHNE erfolgreiche JS-Messung nie zu knapp ist; die
       JS-Variable darf diesen Wert nur nach OBEN verfeinern (siehe
       aufmass-mobile-steps.js DEFAULT_STEP_HEAD_H-Guard). Der Foot-
       Fallback bleibt bei 64px (kein gemeldeter Anschnitt am Fuß). */
    padding: calc(var(--mp-aufmass-step-head-h, 84px) + 8px) 14px calc(var(--mp-aufmass-step-foot-h, 64px) + 8px + env(safe-area-inset-bottom)) !important;
    /* NACHFIX 03.09.2026: dockt auch ein PROGRAMMATISCHES Scrollen (z. B.
       Fokus-Sprung auf ein Eingabefeld via scrollIntoView) unter dem
       fixen Kopf an, statt dahinter. */
    scroll-padding-top: calc(var(--mp-aufmass-step-head-h, 84px) + 8px);
    border: 0 !important;
    border-radius: 0 !important;
    background: rgb(var(--mp-flaeche-rgb));
    /* "ZACK umgeschaltet, nix flackern" (Marcel) — kein Übergang beim
       Elevieren/Zurücksetzen, reines Attribut-getriebenes CSS-Umschalten. */
    transition: none !important;
    animation: none !important;
  }

  /* NACHTRAG 03.09.2026 (Vollbild-Fix, s. Dateikopf): `.aufmass-room-card`
     bekommt von mp-tablet-perf.css `content-visibility: auto`, was IMMER
     `contain: layout style paint` impliziert und damit — genau wie ein
     `transform` — einen Containing Block für `position: fixed`-Nachfahren
     aufspannt. Solange ein Schritt aktiv ist, ist die Karte ohnehin exakt
     bildschirmfüllend (kein Off-Screen-Zustand, keine Ersparnis durch
     content-visibility), daher hier gefahrlos neutralisiert. `!important`
     nicht wegen Spezifität nötig (dieser Selektor ist ohnehin spezifischer
     als `.aufmass-room-card` allein), sondern zur Absicherung gegen
     künftige Ladereihenfolge-/Spezifitätsänderungen in mp-tablet-perf.css. */
  :is(.aufmass-room-card, #aufmassFassadeContainer)[data-mp-step-active] {
    content-visibility: visible !important;
  }
}

@media (prefers-reduced-motion: reduce) {
  .mp-aufmass-step-progress > span {
    transition: none !important;
  }
}

/* MP-20260903-016 (Marcel, Handy 15:32: „+ Fenster hinzufügen" im
   elevierten Schritt 2 zeigt sichtbar nichts): BESTÄTIGTE URSACHE
   (Puppeteer-Diagnose gegen die echte Kaskade — echte legacy_styles/
   modules/aufmass.css + mp-sheet-global.css + diese Datei geladen):
   `.aufmass-overlay`/`.aufmass-sheet` — die generische, app-weite
   Sheet-Basis, über die JEDES OVZ-/Zurechnung-/Teilfläche-Fenster
   läuft (aufmass.js openOvzSheet(), auch "+ Fenster/Tür hinzufügen"
   auf den Bauelement-Karten) — liegt bei z-index 1000–1400
   (legacy_styles/modules/aufmass.css:1642, mp-sheet-global.css:59-68).
   Als die Elevations-Familie 100000–100200 am 02.09. festgelegt wurde
   (siehe Dateikopf), wurden NUR die schon bekannten Dialoge geprüft
   (Rundgang-Overlay 100000, Leistungskatalog-Fenster 100100/100120,
   Zimmer-Menü `.mp-au-menu-portal` z-index 2147482300) — das
   `.aufmass-overlay`-System blieb unentdeckt, weil es zum Zeitpunkt
   der MP-043-Planung nie aus einer elevierten Schritt-Ansicht heraus
   geöffnet wurde (die Bauelement-Karten-Elevation kam erst mit
   MP-20260903-009 hinzu). Beleg: `elementFromPoint()` an der Position
   des OVZ-„Speichern"-Knopfs trifft stattdessen den ELEVIERTEN
   „Weiter"-Knopf (z-index 100045) — das Sheet existiert, öffnet auch
   (`.show`/`.open`-Klassen korrekt gesetzt), liegt aber vollständig
   UNTER dem elevierten Slot (100040) und Kopf/Fuß (100045).
   Fix: NUR während eine Schritt-Ansicht offen ist (`[data-mp-step-active]`
   irgendwo im Dokument), rückt `.aufmass-overlay` über die Elevation
   — bewusst NICHT global (die Basis wird von mindestens Rechnungen/
   Zeiterfassung/Termin-verwandten Sheets geteilt, ein pauschaler Bump
   hätte einen ungeprüften Blast-Radius). Bleibt UNTER 100100, damit ein
   aus dem OVZ-Sheet heraus geöffnetes Katalog-/Pakete-Fenster weiterhin
   korrekt darüberliegt (gleiche Regel wie die Elevation selbst, siehe
   Dateikopf). `.aufmass-sheet` braucht KEINEN eigenen z-index-Wert: sie
   ist DOM-Kind von `.aufmass-overlay`, das per `position:fixed` + eigenem
   z-index bereits einen neuen Stacking-Context aufspannt — alles darin
   rendert automatisch über allem außerhalb mit niedrigerem Context-
   z-index, unabhängig vom eigenen z-index-Wert des Kindes. */
body:has([data-mp-step-active]) .aufmass-overlay {
  z-index: 100060 !important;
}

/* MP-20260903-016-NACHARBEIT 03.09.2026 (Zusatzfund Marcel, echtes Handy):
   „Leistungspakete hinzufügen" öffnet EBENFALLS hinter dem Vollbildfenster
   — derselbe Fehlerklasse wie oben (K-370/MP-016a), nur bei OVZ nur für
   `.aufmass-overlay` geschlossen. Vollständige Inventur ALLER aus einer
   offenen Schritt-Ansicht erreichbaren Sheets/Fenster/Menüs (Quelltext
   gelesen, jeweiliger echter z-index-Wert geprüft, nicht nur der
   Dateikopf-Kommentar von MP-043 übernommen — der nannte für die
   Rundgang-Overlays "100000", was schon FÜR SICH GENOMMEN unter der
   Elevation (100040/100045) liegt und nie geprüft wurde):
     - `.overlay` (window.openPaketeSheet, core/app.core.js) — z-index 9999
       (legacy_styles/core/components.css). Erreichbar über die "Pakete"-
       Aktion in Fassade-Schritt 3/Raum-Leistungen.
     - `.mp-a4-reorder-ov`/`.mp-a4-addmenu-ov` (window.MP_A4_PREVIEW.manage,
       core/mp-a4-live-preview.js — "Leistungen verwalten", von
       openAufmassRoomManage() aufgerufen) — z-index 100000/100002, BEIDE
       unter der Elevation (100040/100045).
     - `#mpFasRundgangOverlay`/`#mpRaumRundgangOverlay` (Rundgang-Sheet,
       legacy_styles/modules/aufmass.css) — z-index 100000. Der Fassade-
       "Rundgang erfassen"-Knopf (`#aufmassFassadeRundgangBtn`) sitzt
       WÖRTLICH INNERHALB von `[data-mp-step-slot="1"]`
       (modules/aufmass/aufmass.html) — aus einer elevierten Fassade-
       Schritt-1-Ansicht heraus tatsächlich erreichbar.
     - `#aufmassLeistungEditorOverlay` (openAufmassLeistungEditor(),
       Mapping-/Zuordnungsdialog) — z-index 9100 (mp-aufmass-layout-
       contract.css). Aufrufer bei Fassade (~Z.12245ff) liegen in der
       Leistungen-Sektion, die in Schritt 3 elevated wird.
     - `.aufmass-leistung-overlay`/`#aufmassSheet` (openLeistungPopup(),
       statisch in aufmass.html definiert) — z-index 1000
       (legacy_styles/modules/aufmass.css).
   NICHT betroffen (geprüft, bewusst unverändert):
     - Universelles LV-/Leistungskatalog-Fenster (window.openUniversalLvSheet,
       core/app.core.js `ensureUniversalLvSheetDOM()`) trägt SELBST die
       Klasse `.aufmass-overlay` (`overlay.className = "aufmass-overlay
       hidden"`) — bereits über den Fix oben (100060) abgedeckt, KEINE
       eigene Regel nötig.
     - `.mp-confirm-overlay` (core/mp-confirm.js, window.MP_CONFIRM) liegt
       fest bei z-index 120100 — bereits weit über der gesamten
       100000–100200-Familie, unverändert korrekt.
     - Zimmer-Menü (`.mp-au-menu-portal`) liegt bei z-index 2147482300 —
       unverändert korrekt.
   Fix: exakt dasselbe, bereits geprüfte Muster wie beim OVZ-Fix oben — NUR
   während eine Schritt-Ansicht offen ist (`body:has([data-mp-step-active])`),
   bewusst NICHT global (mindestens `.overlay` und die `.mp-a4-*-ov`-Klassen
   sind KEIN aufmass-eigenes Vokabular, sondern werden von Angebote/
   Rechnungen mitbenutzt — ein pauschaler Bump hätte dort einen ungeprüften
   Blast-Radius; das Gating auf `[data-mp-step-active]`, ein ausschließlich
   von aufmass-mobile-steps.js gesetztes Attribut, hält den Effekt exakt auf
   den Aufmaß-Kontext beschränkt). Bleibt unter 100100 (Leistungskatalog-/
   Zimmer-Menü-Familie), unterschiedliche Werte erhalten die BISHERIGE
   relative Reihenfolge innerhalb je einer Sheet-Familie (z. B.
   `.mp-a4-addmenu-ov` bleibt über `.mp-a4-reorder-ov`, wie zuvor
   100002 > 100000). */
body:has([data-mp-step-active]) .overlay {
  z-index: 100064 !important;
}
body:has([data-mp-step-active]) .mp-a4-reorder-ov {
  z-index: 100061 !important;
}
body:has([data-mp-step-active]) .mp-a4-addmenu-ov {
  z-index: 100062 !important;
}
body:has([data-mp-step-active]) :is(#mpFasRundgangOverlay, #mpRaumRundgangOverlay) {
  z-index: 100063 !important;
}
body:has([data-mp-step-active]) #aufmassLeistungEditorOverlay {
  z-index: 100065 !important;
}
body:has([data-mp-step-active]) .aufmass-leistung-overlay {
  z-index: 100066 !important;
}

/* MP-20260905-006 — "Neues Aufmaß" als eigene, volle Zeile unter dem
   Kopf-Status (Marcel, Nachtrag 02:00: kein Drei-Punkt-Menü mehr, "dann
   können wir das mit in den Header packen"). Grundzustand (alle Breiten):
   unsichtbar — der bestehende, enge Knopf in .mp-aufmass-hero-actions
   bleibt für Tablet/Desktop die einzige Quelle. Kein width:100%-Knopf
   (Hausregel) — die ZEILE ist volle Breite, der Knopf bleibt so breit wie
   sein Text (linksbündig in der Zeile). */
.mp-aufmass-header-new-row {
  display: none;
}
.mp-aufmass-header-new-btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
}

@media (max-width: 767px) {
  /* Sichtbar NUR in der Hauptansicht (kein Raum-/Fassaden-Schritt gerade
     im Vollbild) — dieselbe :has()-Technik, die diese Datei bereits für
     die z-Index-Anhebungen weiter oben verwendet. */
  #view-aufmass:not(:has([data-mp-step-active])) .mp-aufmass-header-new-row {
    display: block;
    width: 100%;
    margin: -4px 0 12px;
  }
}
