/* MP-20260831-006 · AUFMASS LAYOUT CONTRACT
   Einzige aktive Quelle fuer Aufmass-Breite, Rail und Sticky-Geometrie.
   Die Tabhoehe wird aus der echten Bounding Box gemessen; CSS liefert nur
   den ersten, layoutstabilen Renderwert. */
#view-aufmass {
  --mp-ws-rail-open:420px;
  --mp-ws-rail-closed:64px;
  --mp-ws-top:58px;
  --mp-ws-dock-safe:var(--mp-side-rail-space,90px);
  --mp-ws-bottom-safe:124px;
  --mp-aufmass-tabs-height:66px;
  --mp-aufmass-sticky-gap:8px;
}

html body #view-aufmass.view.active {
  box-sizing:border-box !important;
  /* Derselbe App-Canvas wie Angebote/Baustellen. Die historische eigene
     #f5f5f7-Flaeche liess das Aufmass wie eine zusaetzliche Grosskarte wirken. */
  background:transparent !important;
  background-image:none !important;
  /* MP-20260905-002-NACHBESSERUNG-2 (Koordinator-Messung, echtes iPhone,
     installierte PWA): `height:calc(100dvh - top)` stand hier UNCONDITIONAL
     — eine Eigenheit, die KEINE der vier Referenzansichten (#view-kva/
     -rechnung/-projekte/-kunden) hat. Die App-weite Grundregel
     (css/legacy_styles/core/layout.css:318-320, .view bekommt dort
     position:absolute plus inset:0, OHNE eigene Hoehe) liefert JEDER
     anderen View bereits eine korrekte, insets-abgeleitete Hoehe.
     `100dvh` verhaelt sich in einer
     INSTALLIERTEN iOS-PWA (kein Browser-Chrome, andere UA-Stylesheet-
     Grundwerte) nachweislich anders als in der Chrome-Desktop-Emulation
     (dort lieferte 390x844 identische Werte fuer Angebote UND Aufmass —
     der Unterschied trat nur auf dem echten Geraet auf). `.mp-aufmass-
     master` ist zwar `position:fixed` und insets sich selbst gegen den
     Viewport (unabhaengig von dieser Hoehe hier) — trotzdem AUF `≤1199px`
     entfernt, um jede indirekte Kopplung (WebKit-Sonderfaelle bei
     scrollenden Vorfahren mit -webkit-overflow-scrolling:touch) sicher
     auszuschliessen, statt sie zu vermuten. `≥1200px` (Desktop, dort bereits
     getestet/funktionierend) behaelt den Wert unveraendert — siehe
     @media (min-width:1200px) unten. */
  min-height:0 !important;
  min-width:0 !important;
  max-width:100% !important;
  overflow-x:clip !important;
  overflow-y:auto !important;
  overscroll-behavior-y:contain !important;
  -webkit-overflow-scrolling:touch !important;
  /* MP-20260903-015-Wiedereröffnung (Parallelbefund KVA-Nacharbeit,
     MP-20260902-045, mechanisch identische Klasse dort hart belegt):
     legacy_styles/core/layout.css setzt auf JEDER `.view.active`
     `transform:translateY(0)` — numerisch ein optischer No-Op, spannt aber
     einen Containing Block/Stacking-Context auf (jeder Transform-Wert
     ungleich dem Keyword `none`, auch eine rechnerisch identische Matrix,
     zählt). Die app-weite Härtung dafür (`mp-structural-mobile-cleanup.css`
     `.view.active{transform:none!important}`) ist NUR ein verlässlicher
     Kontrakt, WENN sie geladen hat — sie hängt an
     `media="print" onload="this.media='all'"` (index.html), lädt also lazy
     und ASYNCHRON zu legacy_styles/core/layout.css. Auf einem echten Gerät
     mit langsamerem Laden/Interaktion vor diesem `onload` bliebe
     `#view-aufmass` in genau diesem Zeitfenster ungehärtet. Diese Regel
     (mp-aufmass-layout-contract.css, NICHT lazy) ist deshalb die eigene,
     verlässliche Härtung für #view-aufmass — unabhängig vom Ladezustand der
     App-weiten Datei. Rein defensiv: ändert am Ruhezustand nichts sichtbar
     (translateY(0) hatte ohnehin keine optische Wirkung), betrifft NUR die
     Containing-Block-Eigenschaft. */
  transform:none !important;
}

html body #view-aufmass.view.active > .view-box,
html body #view-aufmass.view.active .mp-aufmass-workspace,
html body #view-aufmass.view.active .mp-aufmass-detail,
html body #view-aufmass.view.active :is(#aufmassInnenContainer,#aufmassFassadeContainer),
html body #view-aufmass.view.active .aufmass-room-card {
  box-sizing:border-box !important;
  min-width:0 !important;
  max-width:100% !important;
  transform:none !important;
  contain:none !important;
}
html body #view-aufmass.view.active > .view-box {
  overflow:visible !important;
}

html body #view-aufmass.view.active .mp-aufmass-workspace,
html body #view-aufmass.view.active .mp-aufmass-detail {
  display:block !important;
  width:100% !important;
  margin:0 !important;
  padding:0 0 clamp(80px, 12vh, 120px) 0 !important;
  overflow:visible !important;
}

html body #view-aufmass.view.active .mp-aufmass-detail > :is(
  .mp-aufmass-section-nav,.aufmass-sticky-header,#aufmassInnenContainer,
  #aufmassFassadeContainer,.mp-aufmass-summary
) {
  box-sizing:border-box !important;
  width:100% !important;
  min-width:0 !important;
  max-width:100% !important;
  margin-right:0 !important;
  margin-left:0 !important;
}

html body #view-aufmass.view.active .view-header.mp-module-view-header,
html body #view-aufmass.view.active .mp-aufmass-hero {
  position:relative !important;
  top:auto !important;
  justify-content:space-between !important;
  text-align:left !important;
  transform:none !important;
}

html body #view-aufmass.view.active .mp-aufmass-section-nav {
  position:sticky !important;
  top:0 !important;
  z-index:620 !important;
  display:flex !important;
  width:100% !important;
  min-width:0 !important;
  min-height:66px !important;
  flex-wrap:nowrap !important;
  overflow-x:auto !important;
  overflow-y:hidden !important;
  visibility:visible !important;
  opacity:1 !important;
  pointer-events:auto !important;
  transform:none !important;
  scrollbar-width:none !important;
  -ms-overflow-style:none !important;
  overscroll-behavior-inline:contain !important;
  -webkit-overflow-scrolling:touch !important;
  touch-action:pan-x pan-y !important;
}
html body #view-aufmass.view.active .mp-aufmass-section-nav::-webkit-scrollbar {
  display:none !important;
  width:0 !important;
  height:0 !important;
}
html body #view-aufmass.view.active .mp-aufmass-section-nav > * {
  flex:0 0 auto !important;
  white-space:nowrap !important;
}

html body #view-aufmass.view.active .aufmass-room-card {
  overflow:visible !important;
  scroll-margin-top:calc(var(--mp-aufmass-tabs-height) + var(--mp-aufmass-sticky-gap) + 12px) !important;
}
html body #view-aufmass.view.active .aufmass-room-card > :is(.aufmass-room-header,.card-header.aufmass-room-header) {
  position:sticky !important;
  top:calc(var(--mp-aufmass-tabs-height) + var(--mp-aufmass-sticky-gap)) !important;
  z-index:610 !important;
}

html body #view-aufmass.view.active > :is(.mp-aufmass-master,.mp-workspace-list-master),
html body #view-aufmass.view.active > .view-box .mp-aufmass-workspace > .mp-aufmass-master {
  box-sizing:border-box !important;
  display:flex !important;
  min-width:0 !important;
  margin:0 !important;
  padding:0 !important;
  flex-direction:column !important;
  overflow:hidden !important;
  border:1px solid rgba(15,23,42,.10) !important;
  border-left:0 !important;
  background:rgb(var(--mp-flaeche-rgb)) !important;
}
html body #view-aufmass.view.active .mp-aufmass-master > .aufmass-list-card {
  box-sizing:border-box !important;
  display:flex !important;
  flex:1 1 auto !important;
  width:100% !important;
  min-width:0 !important;
  min-height:0 !important;
  max-height:none !important;
  margin:0 !important;
  padding:0 !important;
  flex-direction:column !important;
  overflow:hidden !important;
}
html body #view-aufmass.view.active .mp-aufmass-master > .aufmass-list-card > .card-body {
  display:flex !important;
  flex:1 1 auto !important;
  min-height:0 !important;
  flex-direction:column !important;
  overflow:hidden !important;
}
/* MP-20260905-002-NACHBESSERUNG (Marcel, Screenshot: "hier nutzt die Kiste
   nicht den ganzen Platz"): padding-bottom:112px stand hier OHNE Media
   Query, galt also auch auf dem Handy — dort endet die Schublade aber
   bereits knapp ÜBER dem Dock (position:fixed, inset unten auf
   `calc(88px + safe-area)`, siehe @media max-width:767px unten), die 112px
   waren also eine Dock-Reserve, die INNERHALB des bereits dock-freien
   Kastens ein zweites Mal abgezogen wurde — sichtbarer Leerraum am Ende
   der Liste. Aufgeteilt nach Breite, siehe die beiden Regeln unten
   (Desktop behält die Reserve, Mobil bekommt denselben Wert wie
   #kvaOffersGroupedList mobil, siehe dortige Begründung). */
html body #view-aufmass.view.active .mp-aufmass-master :is(#aufmassSavedList,.aufmass-list-scroll) {
  flex:1 1 auto !important;
  min-height:0 !important;
  max-height:none !important;
  overflow-y:auto !important;
  overscroll-behavior:contain !important;
  -webkit-overflow-scrolling:touch !important;
}

html body #view-aufmass.view.active .mp-aufmass-rail-toggle,
html body #view-aufmass.view.active > :is(.mp-aufmass-external-rail-toggle,.mp-workspace-external-rail-toggle) {
  box-sizing:border-box !important;
  width:42px !important;
  min-width:42px !important;
  max-width:42px !important;
  height:42px !important;
  min-height:42px !important;
  max-height:42px !important;
  padding:0 !important;
  place-items:center !important;
  border-radius:13px !important;
}
html body #view-aufmass.view.active .mp-aufmass-rail-toggle {
  display:grid !important;
}
html body #view-aufmass.view.active > :is(.mp-aufmass-external-rail-toggle,.mp-workspace-external-rail-toggle) {
  display:none !important;
}
html body #view-aufmass.view.active.is-list-rail-collapsed > :is(.mp-aufmass-external-rail-toggle,.mp-workspace-external-rail-toggle),
html body #view-aufmass.view.active:has(> .view-box.is-rail-collapsed) > :is(.mp-aufmass-external-rail-toggle,.mp-workspace-external-rail-toggle) {
  display:grid !important;
}
html body #view-aufmass.view.active :is(.mp-aufmass-rail-toggle,.mp-aufmass-external-rail-toggle) svg,
html body #view-aufmass.view.active .mp-aufmass-rail-toggle-icon svg {
  display:block !important;
  width:21px !important;
  min-width:21px !important;
  max-width:21px !important;
  height:21px !important;
  min-height:21px !important;
  max-height:21px !important;
}

@media (min-width:1200px) {
  html:not(#mp-record-contract):not(#mp-record-contract-2) body :is(#view-kva,#view-rechnung,#view-projekte,#view-kunden,#view-mail).view.active
    > .view-container {
    box-sizing:border-box !important;
    width:100% !important;
    max-width:none !important;
    margin:0 !important;
    padding:0 !important;
  }
  /* MP-20260905-002-NACHBESSERUNG-2: Desktop-Zweig der oben entfernten
     unconditional Hoehe — hier unveraendert, siehe Begruendung dort. */
  html body #view-aufmass.view.active {
    height:calc(100dvh - var(--mp-ws-top)) !important;
  }
  html body #view-aufmass.view.active > .view-box {
    display:block !important;
    width:calc(100% - var(--mp-ws-rail-open)) !important;
    min-width:0 !important;
    max-width:none !important;
    margin:0 0 0 var(--mp-ws-rail-open) !important;
    padding:24px var(--mp-ws-dock-safe) var(--mp-ws-bottom-safe) 24px !important;
    transition: width 560ms cubic-bezier(.22, 1, .36, 1), margin-left 560ms cubic-bezier(.22, 1, .36, 1) !important;
  }
  html body #view-aufmass.view.active.is-list-rail-collapsed > .view-box,
  html body #view-aufmass.view.active > .view-box.is-rail-collapsed,
  html body #view-aufmass.view.active > .view-box.is-list-rail-collapsed {
    width:calc(100% - var(--mp-ws-rail-closed)) !important;
    margin-left:var(--mp-ws-rail-closed) !important;
  }
  html body #view-aufmass.view.active > :is(.mp-aufmass-master,.mp-workspace-list-master),
  html body #view-aufmass.view.active > .view-box .mp-aufmass-workspace > .mp-aufmass-master {
    position:fixed !important;
    z-index:4660 !important;
    inset:var(--mp-ws-top) auto 0 0 !important;
    width:var(--mp-ws-rail-open) !important;
    height:auto !important;
    min-height:0 !important;
    max-height:none !important;
    border-radius:0 28px 28px 0 !important;
    transform: translateX(0) !important;
    transition: transform 560ms cubic-bezier(.22, 1, .36, 1), box-shadow 360ms ease !important;
  }
  html body #view-aufmass.view.active.is-list-rail-collapsed > :is(.mp-aufmass-master,.mp-workspace-list-master),
  html body #view-aufmass.view.active > .view-box.is-rail-collapsed .mp-aufmass-master,
  html body #view-aufmass.view.active.is-list-rail-collapsed > .mp-aufmass-master {
    display:none !important;
  }
  /* MP-20260905-002-NACHBESSERUNG: Dock-Sicherheitsreserve bleibt AUSSCHLIESSLICH
     hier (≥1200px) — auf dieser Breite ist .mp-aufmass-master eine echte,
     bis zum Fensterrand reichende Spalte (kein eigener unterer Anschlag),
     dieselbe Begründung wie mp-ui-final-hardwall.css:1660-1673 fuer die
     Notizen-/Chat-Liste (dort ebenfalls nur ≥1200px). */
  html body #view-aufmass.view.active .mp-aufmass-master :is(#aufmassSavedList,.aufmass-list-scroll) {
    padding-bottom:112px !important;
  }
}

@media (min-width:768px) and (max-width:1199px) {
  html:not(#mp-record-contract):not(#mp-record-contract-2) body :is(#view-kva,#view-rechnung,#view-projekte,#view-kunden,#view-mail).view.active
    > .view-container {
    box-sizing:border-box !important;
    width:100% !important;
    max-width:none !important;
    margin:0 !important;
    padding:0 !important;
  }
  html body #view-aufmass.view.active > .view-box {
    display:block !important;
    width:100% !important;
    min-width:0 !important;
    max-width:none !important;
    margin:0 !important;
    padding:16px var(--mp-ws-dock-safe) var(--mp-ws-bottom-safe) 74px !important;
  }
  html body #view-aufmass.view.active::before {
    content:"" !important;
    position:fixed !important;
    z-index:4640 !important;
    inset:var(--mp-ws-top) 0 0 !important;
    display:block !important;
    background:rgba(15,23,42,.18) !important;
    opacity:1 !important;
    visibility:visible !important;
    pointer-events:auto !important;
    -webkit-backdrop-filter:blur(2px) !important;
    backdrop-filter:blur(2px) !important;
  }
  html body #view-aufmass.view.active.is-list-rail-collapsed::before,
  html body #view-aufmass.view.active:has(> .view-box.is-rail-collapsed)::before {
    opacity:0 !important;
    visibility:hidden !important;
    pointer-events:none !important;
  }
  html body #view-aufmass.view.active > :is(.mp-aufmass-master,.mp-workspace-list-master),
  html body #view-aufmass.view.active > .view-box .mp-aufmass-workspace > .mp-aufmass-master {
    position:fixed !important;
    z-index:4660 !important;
    inset:var(--mp-ws-top) auto calc(104px + env(safe-area-inset-bottom,0px)) 0 !important;
    width:min(520px,calc(100vw - 90px)) !important;
    height:auto !important;
    min-height:0 !important;
    max-height:none !important;
    border-radius:0 26px 26px 0 !important;
    overscroll-behavior:contain !important;
    touch-action:pan-y !important;
  }
  html body #view-aufmass.view.active.is-list-rail-collapsed > :is(.mp-aufmass-master,.mp-workspace-list-master),
  html body #view-aufmass.view.active > .view-box.is-rail-collapsed .mp-aufmass-master {
    display:none !important;
  }
  html body #view-aufmass.view.active .mp-aufmass-hero-actions {
    margin-right:0 !important;
  }
  /* MP-20260905-014 (Jonas Falk, product-engineer, Marcel-Foto Tablet quer):
     `.aufmass-list-card` traegt aus mp-aufmass-golden.css (Zeile ~586, dort
     UNCONDITIONAL, also auch hier gueltig) eine EIGENE Rundung/Border/Schatten
     — Aufmass ist das einzige der vier Referenzmodule mit einem *inneren*
     Karten-Element unter der bereits gerundeten Drawer-Flaeche
     (`.mp-aufmass-master`, Zeile oben, `border-radius:0 26px 26px 0`).
     Angebote/Rechnungen/Projekte/Kunden haben KEINEN solchen inneren Wrapper
     — bei ihnen IST `.mp-workspace-list-master` bereits die sichtbare Karte.
     Ergebnis ohne diese Regel: zwei sichtbare Rundungen ineinander (18px
     innen in 26px aussen) — genau der von Marcel gemeldete Rundungs-
     Unterschied. golden.css macht exakt diesen Reset bereits bei ≥1200px
     (dort dreifach, Zeilen 116-126/170-180/420-427) — hier fuer die
     768-1199px-Drawer-Stufe nachgezogen, dieselbe Begruendung. */
  html body #view-aufmass.view.active .mp-aufmass-master > .aufmass-list-card {
    border:0 !important;
    border-radius:0 !important;
    background:transparent !important;
    box-shadow:none !important;
  }
  html body #view-aufmass.view.active .mp-aufmass-master > .aufmass-list-card > .card-body {
    display:flex !important;
    flex:1 1 auto !important;
    min-height:0 !important;
    max-height:none !important;
    flex-direction:column !important;
    overflow:hidden !important;
  }
  html body #view-aufmass.view.active .mp-aufmass-master #aufmassSavedList {
    display:block !important;
    flex:1 1 0 !important;
    width:100% !important;
    height:0 !important;
    min-height:0 !important;
    max-height:none !important;
    overflow-x:hidden !important;
    overflow-y:auto !important;
    overscroll-behavior:contain !important;
    touch-action:pan-y !important;
    -webkit-overflow-scrolling:touch !important;
    scrollbar-width:none !important;
    -ms-overflow-style:none !important;
  }
  html body #view-aufmass.view.active .mp-aufmass-master #aufmassSavedList::-webkit-scrollbar {
    display:none !important;
    width:0 !important;
    height:0 !important;
  }
}

/* Nur #view-aufmass ist der vertikale Scrollcontainer. Ein overflow auf der
   View-Box würde in Safari/Chromium eine zweite Scrollwurzel erzeugen und
   beide Sticky-Ebenen wirkungslos machen. */
html:not(#mp-record-contract):not(#mp-record-contract-2) body
  #view-aufmass.view.active > .view-box {
  overflow:visible !important;
}

/* MP-20260905-014 (Jonas Falk, product-engineer, Marcel-Foto Tablet quer):
   `#aufmassListHint` ist eine eigene Fussleiste UNTER der Liste
   ("Autosave ✓ (Sync läuft im Hintergrund)") — Angebote/Rechnungen/
   Projekte/Kunden haben in `.mp-workspace-list-master` KEIN solches
   Element; ihr Scrollbereich ist dort das letzte Kind. Weil die Fussleiste
   als eigenes Flex-Kind NACH `#aufmassSavedList` im selben
   `.card-body`-Spalten-Flex steht, nimmt sie dem Scrollbereich reservierte
   Hoehe weg — sichtbar als "Inhalt endet frueher als bei Angebote" plus
   eine Leiste, die es bei Angebote nicht gibt. Der Kopf traegt mit
   `.mp-aufmass-sync` ("Automatisch gesichert") bereits einen dauerhaften
   Hinweis; Bestaetigungen je Speichervorgang gehoeren laut UI-Regel ohnehin
   in eine kompakte `MP_SEND_FX`-Meldung, nicht in eine Dauer-Fussleiste der
   Liste. `aufmass.js` liest dieses Element nirgends zurueck (nur ein
   Schreib-Ort, Zeile ~1820) — Ausblenden hat keine Logik-Wirkung.
   Nur ab 768px (Karten-Layout, wo der Vergleich mit Angebote gilt); auf dem
   Handy (≤767px, eigener Sonderweg unten) bleibt der Zustand unveraendert. */
@media (min-width:768px) {
  html body #view-aufmass.view.active .mp-aufmass-master #aufmassListHint {
    display:none !important;
  }
}

@media (max-width:767px) {
  #view-aufmass { --mp-aufmass-tabs-height:60px; }
  html body #view-aufmass.view.active > .view-box {
    display:block !important;
    width:100% !important;
    min-width:0 !important;
    max-width:none !important;
    margin:0 !important;
    padding:12px 12px 118px !important;
  }
  html body #view-aufmass.view.active > :is(.mp-aufmass-master,.mp-workspace-list-master),
  html body #view-aufmass.view.active > .view-box .mp-aufmass-workspace > .mp-aufmass-master {
    position:fixed !important;
    z-index:4660 !important;
    inset:var(--mp-ws-top) auto calc(88px + env(safe-area-inset-bottom,0px)) 0 !important;
    display:none !important;
    width:min(430px,calc(100vw - 16px)) !important;
    height:auto !important;
    min-height:0 !important;
    max-height:none !important;
    border-radius:0 24px 24px 0 !important;
  }
  html body #view-aufmass.view.active.is-mobile-list-open > :is(.mp-aufmass-master,.mp-workspace-list-master),
  html body.mp-aufmass-mobile-list-open #view-aufmass.view.active > :is(.mp-aufmass-master,.mp-workspace-list-master) {
    display:flex !important;
  }
  /* MP-20260905-002-NACHBESSERUNG-3 (Lena Berger, QA — NICHT BESTANDEN,
     echte Live-Messung): meine vorige Annahme "105px wie #kvaOffersGroupedList"
     war FALSCH — Lena hat den tatsaechlich WIRKSAMEN (nicht nur den zuerst
     gefundenen) Wert am echten, gerenderten #kvaOffersGroupedList gemessen:
     `padding-bottom: 0px`. Eine andere/spaetere Regel in der echten Kaskade
     ueberschreibt die von mir zitierte 105px-Regel offenbar auf 0 — genau
     die Klasse Fehler, vor der dieses Repo mehrfach warnt ("Grüner
     Pruefstand ≠ Beleg", zuletzt beim @media-not-all-Fund im selben
     Vorgang). Aufmaß bekommt jetzt denselben LIVE gemessenen Wert (0px)
     statt eines aus dem Quelltext geratenen. */
  html body #view-aufmass.view.active .mp-aufmass-master :is(#aufmassSavedList,.aufmass-list-scroll) {
    padding-bottom:0 !important;
  }
}

/* MP-20260901-022 (mp022e, dritte Ausprägung derselben Kollisionsklasse —
   Lenas Kurz-QA, belegt per CDP CSS.getMatchedStylesForNode mit einem
   ECHTEN #view-aufmass.view.active-Element, das der script-gestrippte
   Testrahmen sonst nie erzeugt hätte: die :has()-Regel gewann bei
   body.sheet-open mit opacity:1/pointer-events:auto). Bewusste
   Grundsatzentscheidung (Marcels Befunde): er wollte Docks weg bei
   Eingabe-Dialogen, die RECHTE Modul-Leiste (#mpSideRail) war nie sein
   Störer. Deshalb hier aufgeteilt — #mpSideRail bleibt UNGESCHÜTZT (wie
   bisher immer sichtbar in der Aufmaß-Ansicht), nur nav.bottom-nav
   bekommt :not(.sheet-open), damit die Regel dort gar nicht erst matcht
   statt mit body.sheet-open nav.bottom-nav{opacity:0} um Vorrang zu
   konkurrieren (derselbe Trick wie in mp-dock-nav.css/mp-ui-final-
   hardwall.css, siehe SHARED_LEARNINGS.md L-2026-09-02-K/-Q). */
/* MP-20260902-011 ③: die #mpSideRail-Hälfte dieser Regel ist ENTFERNT —
   Marcels neues Zielbild (02.09.): im Aufmaß-Modus ersetzt das
   Aufmaß-Schnelldock die rechte Modulleiste vollständig (Ausblendung
   besitzt mp-aufmass-golden.css, MP-011-③-Block). Nur nav.bottom-nav
   behält seine Sichtbarkeitsgarantie. */
html body:has(#view-aufmass.view.active):not(.sheet-open) nav.bottom-nav {
  visibility:visible !important;
  opacity:1 !important;
  pointer-events:auto !important;
  z-index:4690 !important;
}

/* Abzüge & Zuschläge: fachlich getrennte, schnell erfassbare Karten. */
#view-aufmass .mp-aufmass-adjustments {
  padding:20px !important;
  background:rgb(var(--mp-flaeche-2-rgb)) !important;
  border:1px solid #dce5ef !important;
  border-radius:18px !important;
}
#view-aufmass .mp-aufmass-adjustments-head {
  display:flex !important;
  align-items:flex-start !important;
  gap:12px !important;
  margin:0 0 16px !important;
  padding:0 0 15px !important;
  border-bottom:1px solid #dce5ef !important;
}
#view-aufmass .mp-aufmass-adjustments-head h4 { margin:0 !important; }
#view-aufmass .mp-aufmass-adjustments-head p {
  margin:3px 0 0 !important;
  color:rgb(var(--mp-t3-64748b)) !important;
  font-size:13px !important;
  font-weight:550 !important;
  line-height:1.35 !important;
}
/* MP-20260901-022 Befund ②: dieser Wrapper hatte fest ZWEI Spalten
   `!important`, obwohl `renderBauelementCardSection()` (aufmass.js) nur
   noch EIN Kind hineinrendert (die einzelne `.is-standalone`-Sektion der
   Bauelement-Positionsliste — die alten drei nebeneinanderliegenden
   Abzug/Zuschlag/Separat-Karten sind seit MP-20260901-019/K-336 entfallen,
   siehe Kommentar unten). Ergebnis auf Breitbild (≥1200px, wo die
   `@media(max-width:1199px)`-Gegenregel weiter unten NICHT greift): die
   Karte füllte nur die erste 1fr-Spalte, die zweite blieb leer — exakt
   Marcels Screenshot-Befund ("Karte nutzt ~50% Breite, viel Leerraum
   rechts, Felder gequetscht"). EIN Kind → EINE Spalte, bei jeder Breite;
   das bestehende `.form-grid` INNERHALB der Karte bleibt unverändert
   2-spaltig (Basisregel in legacy_styles/modules/aufmass.css) und nutzt
   die jetzt volle Kartenbreite für Feldpaare nebeneinander — keine
   zusätzliche Breakpoint-Regel nötig, die `@media(max-width:1199px)`-Regel
   weiter unten liefert für <1200px bereits denselben Wert und wird durch
   diese Änderung redundant, aber bewusst unverändert stehen gelassen
   (kein Risiko, keine zusätzliche Änderung an einer Stelle, die nicht Teil
   des Befunds war). */
#view-aufmass .mp-aufmass-adjustments-grid {
  display:grid !important;
  grid-template-columns:minmax(0,1fr) !important;
  gap:14px !important;
  align-items:stretch !important;
}
#view-aufmass .mp-aufmass-adjustment-card {
  display:flex !important;
  flex-direction:column !important;
  min-width:0 !important;
  margin:0 !important;
  padding:16px !important;
  background:rgb(var(--mp-flaeche-rgb)) !important;
  border:1px solid #dce5ef !important;
  border-radius:15px !important;
  box-shadow:0 6px 18px rgba(15,23,42,.045) !important;
}
/* MP-20260901-019: .is-deduction/.is-addition/.is-partial Kartenrahmen-
   Akzente entfernt — die alten drei Kategorie-Karten (Öffnungen/
   Zurechnungen/Teilflächen) sind mit dem Neuentwurf „Abzüge & Zuschläge"
   (EINE Liste statt drei Karten) vollständig entfallen; grep bestätigt vor
   dem Entfernen: keine andere Stelle im Modul verwendet diese drei
   Selektor-Kombinationen noch (Bauelement-Positionskarten nutzen
   ausschließlich .is-standalone, ohne eigene Farb-Variante). Ersatz für
   „Abzug/Zuschlag/Separat" ist jetzt .mp-au-kind-badge in
   mp-aufmass-golden.css (Farbtokens dort unverändert übernommen).
   .mp-adjustment-card-head BLEIBT — wird weiterhin von den Bauelement-
   Positionskarten gebraucht (renderRollladenkastenPosition u. a.,
   mp-aufmass-golden.css:.mp-bauelement-position .mp-adjustment-card-head). */
/* MP-20260901-022 Befund ③: die Bauelement-Positionsköpfe
   (renderRollladenkastenPosition/renderGelaenderPosition/
   renderHolzwerkPosition, aufmass.js) rendern GENAU ZWEI Kinder — ein
   Titel-`<div>` und den Entfernen-Knopf (`data-pos-del`, SVG-Papierkorb).
   Diese Regel hatte DREI Spalten (`38px minmax(0,1fr) auto`) für ein
   Kopf-Layout, das früher zusätzlich ein Icon-Feld vorne hatte — mit nur
   zwei tatsächlichen Kindern landete das Titel-`<div>` in der 38px-Spalte
   (Text gequetscht/umgebrochen) und der Entfernen-Knopf in der breiten
   `1fr`-Spalte (füllte sie als leere, abgerundete Fläche, die den Titel
   überlappte) — exakt Marcels Screenshot-Befund. Fix: zwei Spalten für
   zwei Kinder (Titel bekommt den Platz, Knopf bleibt bei seiner
   Eigenbreite von 40px, siehe .btn-icon in mp-button-system.css). */
#view-aufmass .mp-adjustment-card-head {
  display:grid !important;
  grid-template-columns:minmax(0,1fr) auto !important;
  align-items:center !important;
  gap:10px !important;
  margin:0 0 12px !important;
  padding:0 0 12px !important;
  border-bottom:1px solid #e8eef5 !important;
}
#view-aufmass .mp-adjustment-card-head > div {
  min-width:0 !important;
}
#view-aufmass .mp-adjustment-card-head h5 {
  margin:0 !important;
  color:rgb(var(--mp-t1-172033)) !important;
  font-size:15px !important;
  font-weight:800 !important;
  letter-spacing:0 !important;
  text-transform:none !important;
}
#view-aufmass .mp-adjustment-card-head > div > span {
  display:block !important;
  margin-top:2px !important;
  color:rgb(var(--mp-t3-718096)) !important;
  font-size:11px !important;
  font-weight:600 !important;
}
/* MP-20260901-019: .mp-adjustment-card-icon (+ drei Farb-Varianten) und
   .mp-adjustment-kind (+ drei Farb-Varianten, trug border-radius:999px —
   K-336, verbotene Pille) restlos entfernt. Grep bestätigt vor dem
   Entfernen: keine der beiden Klassen wird noch irgendwo im Modul
   verwendet (weder Bauelement-Positionskarten noch renderBauelementCardSection
   nutzen sie). Ersatz: .mp-au-kind-badge (8px Radius) in
   mp-aufmass-golden.css. */

/* .aufmass-oeffnungen-list bleibt in Verwendung (Variante B, eigenständige
   Fenster-/Türen-Karte, MP-20260901-005) — hängt seit dem Neuentwurf aber
   NICHT mehr unter .mp-aufmass-adjustment-card (diese Karte ist für
   Variante B entfallen), deshalb hier unscoped statt wie zuvor unter
   ".mp-aufmass-adjustment-card :is(...)". .aufmass-zurechnungen-list/
   .aufmass-teilflaechen-list haben keine Verwendung mehr (Variante A
   rendert alle drei Kategorien jetzt in einer flachen .mp-au-entries-Liste,
   siehe mp-aufmass-golden.css) — Regel entsprechend nur noch für
   .aufmass-oeffnungen-list, keine drei-Klassen-:is()-Gruppe mehr. */
#view-aufmass .aufmass-oeffnungen-list {
  display:flex !important;
  flex-direction:column !important;
  gap:8px !important;
  min-width:0 !important;
  margin:0 0 12px !important;
}
#view-aufmass .mp-adjustment-empty {
  display:flex !important;
  align-items:center !important;
  gap:9px !important;
  min-height:58px !important;
  margin:0 !important;
  padding:11px 12px !important;
  border:1px dashed #cbd5e1 !important;
  border-radius:11px !important;
  background:rgb(var(--mp-flaeche-2-rgb)) !important;
  color:rgb(var(--mp-t3-718096)) !important;
  line-height:1.35 !important;
}
#view-aufmass .mp-adjustment-empty svg { flex:0 0 21px !important; width:21px !important; height:21px !important; color:#94a3b8 !important; }
#view-aufmass .mp-adjustment-add {
  display:inline-flex !important;
  align-items:center !important;
  justify-content:center !important;
  gap:7px !important;
  align-self:flex-start !important;
  margin-top:auto !important;
}
#view-aufmass .mp-adjustment-add svg { width:15px !important; height:15px !important; }

@media (max-width:1199px) {
  /* .mp-aufmass-adjustments-grid bleibt in Verwendung
     (renderBauelementCardSection, Rollladenkasten/Geländer/Holzwerk) —
     .is-deduction darunter hat keine Verwendung mehr, entfernt (K-336-
     Aufräumung, siehe oben). */
  #view-aufmass .mp-aufmass-adjustments-grid { grid-template-columns:minmax(0,1fr) !important; }
}
@media (max-width:599px) {
  #view-aufmass .mp-aufmass-adjustments { padding:14px !important; }
  /* .mp-adjustment-kind existiert nicht mehr (entfernt).
     .mp-adjustment-add{width:100%} war K-336 — verbotener breiter Knopf
     (Marcels Regel „kein width:100% auf Knöpfen") — restlos entfernt,
     betraf sowohl die jetzt entfallenen drei Kategorie-Buttons ALS AUCH die
     "+ <Element> hinzufügen"/"+1 <Element>"-Buttons der Bauelement-Karten
     (renderBauelementCardSection) — dort war es derselbe Verstoß, jetzt für
     beide behoben, keine neue Regel kopiert ihn.
     MP-20260901-022 Befund ③: die frühere `36px minmax(0,1fr)`-Zweispalten-
     Regel hier passte NICHT zu den zwei tatsächlichen Kindern des Kopfs
     (Titel + Entfernen-Knopf) — Teil derselben Ursache wie der Basisfehler
     oben (`.mp-adjustment-card-head`), jetzt restlos entfernt statt für
     Mobile erneut falsch nachgebaut; die Basisregel (`minmax(0,1fr) auto`)
     gilt jetzt einheitlich für alle Breiten und ist bei schmaler Karte
     genauso korrekt (Titel schrumpft/bricht um, Knopf bleibt bei 40px). */
}

/* Kontrollierte Übertragung des gemeinsamen Record-Workspace-Vertrags.
   Genau diese vier Listenmodule sind die Referenz für das Aufmaß; andere
   Module werden hier ausdrücklich nicht berührt. */
@media (min-width:1200px) {
  html:not(#mp-record-contract):not(#mp-record-contract-2) body :is(#view-kva,#view-rechnung,#view-projekte,#view-kunden,#view-mail).view.active
    > .view-container > .view-box {
    box-sizing:border-box !important;
    display:block !important;
    width:calc(100% - var(--mp-ws-rail-open,420px)) !important;
    min-width:0 !important;
    max-width:none !important;
    margin:0 0 0 var(--mp-ws-rail-open,420px) !important;
    padding:24px var(--mp-side-rail-space,90px) 124px 24px !important;
  }
  html:not(#mp-record-contract):not(#mp-record-contract-2) body :is(#view-kva,#view-rechnung,#view-projekte,#view-kunden,#view-mail).view.active.is-list-rail-collapsed
    > .view-container > .view-box,
  html:not(#mp-record-contract):not(#mp-record-contract-2) body :is(#view-kva,#view-rechnung,#view-projekte,#view-kunden,#view-mail).view.active
    > .view-container > .view-box.is-list-rail-collapsed {
    width:calc(100% - 64px) !important;
    margin-left:64px !important;
    padding:24px var(--mp-side-rail-space,90px) 124px 24px !important;
  }
  html:not(#mp-record-contract):not(#mp-record-contract-2) body #view-aufmass.view.active.is-list-rail-collapsed > .view-box,
  html:not(#mp-record-contract):not(#mp-record-contract-2) body #view-aufmass.view.active > .view-box.is-rail-collapsed {
    width:calc(100% - 64px) !important;
    margin:0 0 0 64px !important;
    padding:24px var(--mp-side-rail-space,90px) 124px 24px !important;
  }
}

@media (min-width:768px) and (max-width:1199px) {
  html:not(#mp-record-contract):not(#mp-record-contract-2) body :is(#view-kva,#view-rechnung,#view-projekte,#view-kunden,#view-mail).view.active
    > .view-container > .view-box,
  html:not(#mp-record-contract):not(#mp-record-contract-2) body :is(#view-kva,#view-rechnung,#view-projekte,#view-kunden,#view-mail).view.active.is-list-rail-collapsed
    > .view-container > .view-box,
  html:not(#mp-record-contract):not(#mp-record-contract-2) body :is(#view-kva,#view-rechnung,#view-projekte,#view-kunden,#view-mail).view.active
    > .view-container > .view-box.is-list-rail-collapsed,
  html:not(#mp-record-contract):not(#mp-record-contract-2) body #view-aufmass.view.active > .view-box,
  html:not(#mp-record-contract):not(#mp-record-contract-2) body #view-aufmass.view.active.is-list-rail-collapsed > .view-box,
  html:not(#mp-record-contract):not(#mp-record-contract-2) body #view-aufmass.view.active > .view-box.is-rail-collapsed {
    box-sizing:border-box !important;
    display:block !important;
    width:100% !important;
    min-width:0 !important;
    max-width:none !important;
    margin:0 !important;
    padding:16px var(--mp-side-rail-space,90px) 124px var(--mp-tablet-list-inset,74px) !important;
  }
}

/* Finaler Scrollwurzel-Guard nach dem geteilten Breitenvertrag. */
html:not(#mp-record-scroll-root):not(#mp-record-scroll-root-2) body
  #view-aufmass.view.active > .view-box {
  overflow:visible !important;
}

/* P0 Tablet-Portrait: Das Aufmass darf die globale Navigation weder ueber
   alte max-width-Regeln noch ueber einen veralteten hidden-/sheet-Zustand
   verlieren. Dieser Vertrag liegt als letzte Aufmass-Datei hinter allen
   historischen Modulregeln und fixiert auch die echte Viewport-Boundingbox.
   MP-20260901-022 (mp022e, Lenas Kurz-QA): auch dieses "Tablet-Band" kannte
   body.sheet-open nirgends — die beiden negierten :not(#id)-Klauseln
   liefern zusammen bereits mehr Spezifitaet als jede reine sheet-open-
   Klassenregel, der Kommentar "ueber einen veralteten hidden-/sheet-
   Zustand verlieren" meinte historische, LÄNGST entfernte Zustände, nicht
   den heutigen App-weiten Dialog-Mechanismus. :not(.sheet-open) ergänzt,
   damit die Regel im Dialog-Zustand gar nicht erst matcht. */
@media (min-width:768px) and (max-width:1199px) {
  html:not(#mp-aufmass-dock-contract):not(#mp-aufmass-dock-contract-2) body:has(#view-aufmass.view.active):not(.sheet-open) nav.bottom-nav,
  html:not(#mp-aufmass-dock-contract):not(#mp-aufmass-dock-contract-2) body.mp-view-aufmass:not(.sheet-open) nav.bottom-nav,
  html:not(#mp-aufmass-dock-contract):not(#mp-aufmass-dock-contract-2) body.mp-view-view-aufmass:not(.sheet-open) nav.bottom-nav {
    position:fixed !important;
    inset:auto auto max(8px,env(safe-area-inset-bottom,0px)) 50% !important;
    z-index:4690 !important;
    display:flex !important;
    width:max-content !important;
    min-width:0 !important;
    max-width:calc(100vw - 32px) !important;
    height:auto !important;
    visibility:visible !important;
    opacity:1 !important;
    pointer-events:auto !important;
    transform:translateX(-50%) !important;
  }
}
/* Der Mapping-/Preisdialog ist ein echter modaler Arbeitszustand. Globale
   Navigation darf weder optisch noch interaktiv ueber seinem Scrim liegen. */
html body #aufmassLeistungEditorOverlay {
  z-index: 9100 !important;
}
html body.mp-aufmass-mapping-modal-open #mpFwinHubBtn,
html body.mp-aufmass-mapping-modal-open #mpLauncherMenu,
html body.mp-aufmass-mapping-modal-open #mpDockStartMenu {
  visibility: hidden !important;
  opacity: 0 !important;
  pointer-events: none !important;
}
/* Die regulaere Tablet-Dock-Wache ist absichtlich sehr spezifisch, damit
   historische Modul-CSS das Dock nicht mehr verlieren kann. Nur dieser
   echte Modalzustand darf sie ueberstimmen. */
html:not(#mp-am-modal-1):not(#mp-am-modal-2):not(#mp-am-modal-3):not(#mp-am-modal-4)
  body.mp-aufmass-mapping-modal-open nav.bottom-nav {
  display:none !important;
  visibility:hidden !important;
  opacity:0 !important;
  pointer-events:none !important;
}

/* =========================================================
   PFLICHTFELD-HINWEIS & FOKUS-PULSE (CI BRANDING)
   ========================================================= */
.mp-field-attention,
#view-aufmass select.mp-field-attention,
#view-aufmass input.mp-field-attention {
  outline: none !important;
  border-color: #f59e0b !important;
  box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.35) !important;
  transition: border-color 200ms ease, box-shadow 200ms ease !important;
  animation: mpFieldAttentionPulse 700ms ease-in-out 3 !important;
}
@keyframes mpFieldAttentionPulse {
  0%, 100% {
    box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.35);
  }
  50% {
    box-shadow: 0 0 0 6px rgba(245, 158, 11, 0.15);
  }
}

