/**
 * rmc-isomorphic-grid-sweep.css — Secondary sweep / zero-bleed layer (v3.90.60)
 * -------------------------------------------------------------------------------
 * Surgical guardrail ONLY — no brand colors, fonts, or tenant cascade changes.
 * Loads AFTER rmc-isomorphic-grid.css. Composes on rmc-app-shell preview contract.
 *
 * Mandates:
 *  1. Dynamic viewport matrix (100dvh / 100lvh) — PWA + mobile Safari address bar
 *  2. Scroll isolation — single canvas scroll; no nested double scrollbars
 *  3. Text expansion shield — buttons, forms, tables, modals (40% i18n expansion)
 *  4. Micro-spacing scrub — 8px grid on content flex/grid stacks
 */

/* ── 1. Dynamic viewport matrix ── */
:root {
  --rmc-iso-viewport-h: 100dvh;
  --rmc-iso-viewport-h-fallback: 100vh;
  --rmc-iso-safe-top: env(safe-area-inset-top, 0px);
  --rmc-iso-safe-bottom: env(safe-area-inset-bottom, 0px);
}

@supports (height: 100lvh) {
  :root {
    --rmc-iso-viewport-h: 100lvh;
  }
}

html:not([data-rmc-shell="off"]),
html:not([data-rmc-shell="off"]) body {
  min-height: var(--rmc-iso-viewport-h-fallback);
  min-height: var(--rmc-iso-viewport-h);
  max-height: var(--rmc-iso-viewport-h);
}

/* Document-scroll shells (portal, marketing, tenant base) — never clip page height */
html:not([data-rmc-shell="off"]) body[data-rmc-cp-scroll="document"],
html:not([data-rmc-shell="off"]) body.portal-body-with-layout[data-rmc-cp-scroll="document"],
html:not([data-rmc-shell="off"]) body.base-document-shell[data-rmc-cp-scroll="document"],
html:not([data-rmc-shell="off"]) body.marketing-surface[data-rmc-cp-scroll="document"] {
  max-height: none !important;
  height: auto !important;
  overflow-x: clip;
  overflow-y: auto !important;
}

html:not([data-rmc-shell="off"]) body[data-rmc-cp-scroll="document"] .rmc-app-shell,
html:not([data-rmc-shell="off"]) body.portal-body-with-layout .rmc-app-shell {
  height: auto !important;
  max-height: none !important;
  min-height: var(--rmc-iso-viewport-h-fallback);
  min-height: var(--rmc-iso-viewport-h);
}

html:not([data-rmc-shell="off"]) .rmc-app-shell {
  height: var(--rmc-iso-viewport-h-fallback);
  height: var(--rmc-iso-viewport-h);
  max-height: var(--rmc-iso-viewport-h);
  min-height: 0;
  padding-block: 0;
  padding-top: var(--rmc-iso-safe-top);
  padding-bottom: var(--rmc-iso-safe-bottom);
}

/* PWA standalone — iOS home-screen chrome */
@media (display-mode: standalone) {
  html:not([data-rmc-shell="off"]) .rmc-app-shell {
    height: var(--rmc-iso-viewport-h);
    max-height: var(--rmc-iso-viewport-h);
  }
}

/* Document-scroll shells (marketing, public base) still use dynamic min-height */
body.base-document-shell[data-rmc-cp-scroll="document"] {
  min-height: var(--rmc-iso-viewport-h-fallback);
  min-height: var(--rmc-iso-viewport-h);
  max-height: none;
}

/* ── 2. Scroll isolation — canvas owns Y scroll ── */
html:not([data-rmc-shell="off"]) body.control-plane-shell[data-rmc-cp-scroll="canvas"],
html:not([data-rmc-shell="off"]) body.portal-body-with-layout[data-rmc-cp-scroll="canvas"],
html:not([data-rmc-shell="off"]) body.admin-manager-shell[data-rmc-cp-scroll="canvas"] {
  overflow: hidden;
}

.rmc-app-shell__canvas {
  overflow-y: auto;
  overflow-x: hidden;
  overscroll-behavior: contain;
  contain: layout style;
  min-height: 0;
}

.rmc-app-shell__sidebar {
  overscroll-behavior: contain;
  contain: layout style;
}

.rmc-app-shell__canvas-body {
  min-height: 0;
  flex: 1 1 auto;
  overflow: visible;
  contain: layout style;
}

/* Only explicit scroll zones may scroll inside the canvas */
.rmc-app-shell__canvas
  :is(.card-body, .modal-body, .offcanvas-body, .table-responsive, .list-group, pre)
  :not([data-rmc-iso-scroll-zone="1"]):not(.rmc-iso-split-pane__scroll) {
  overflow-y: visible;
  max-height: none;
}

/* Permitted inner scroll zones */
[data-rmc-iso-scroll-zone="1"],
.rmc-iso-split-pane__scroll,
.rmc-iso-scroll-zone {
  overflow-y: auto;
  overflow-x: hidden;
  overscroll-behavior: contain;
  contain: content;
  min-height: 0;
  min-width: 0;
  -webkit-overflow-scrolling: touch;
}

/* Tables: horizontal scroll in canvas; vertical belongs to canvas */
.rmc-app-shell__canvas .table-responsive:not([data-rmc-iso-scroll-zone="1"]) {
  overflow-x: auto;
  overflow-y: visible;
  max-height: none;
}

.rmc-app-shell__canvas .rmc-data-table-wrapper {
  overflow-x: auto;
  overflow-y: visible;
  min-width: 0;
}

/* Double-scroll risk marker (audit-only; sweep JS skips intentional inner zones) */
[data-rmc-double-scroll-risk="1"]:not([data-rmc-iso-scroll-zone="1"]) {
  outline: 1px dashed transparent;
  outline-offset: -1px;
}

/* ── 3. Text expansion shield (40% i18n / RTL) ── */
.rmc-text-shield,
[data-rmc-text-shield="1"] {
  display: block;
  min-width: 0;
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
}

[data-rmc-isomorphic-template] .btn:not(.rmc-btn-wrap):not(.btn-link),
[data-rmc-isomorphic-template] .input-group-text,
[data-rmc-isomorphic-template] .cp-primary-nav__pill,
[data-rmc-isomorphic-template] .tp-primary-nav__pill,
[data-rmc-isomorphic-template] .nav-link:not(.dropdown-toggle),
[data-rmc-isomorphic-template] .modal-title,
[data-rmc-isomorphic-template] .rmc-card__title,
[data-rmc-isomorphic-template] .rmc-stat-card__label,
[data-rmc-isomorphic-template] .rmc-stat-card__value,
[data-rmc-isomorphic-template] .form-label:not(.rmc-label-wrap) {
  min-width: 0;
  max-width: 100%;
}

[data-rmc-isomorphic-template] .btn:not(.rmc-btn-wrap):not(.btn-link):not(.dropdown-toggle),
[data-rmc-isomorphic-template] .cp-primary-nav__pill,
[data-rmc-isomorphic-template] .tp-primary-nav__pill {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

[data-rmc-isomorphic-template] input.form-control:not([type="hidden"]):not(textarea),
[data-rmc-isomorphic-template] select.form-select {
  min-width: 0;
  max-width: 100%;
  text-overflow: ellipsis;
}

[data-rmc-isomorphic-template] .input-group {
  flex-wrap: nowrap;
  min-width: 0;
  max-width: 100%;
}

[data-rmc-isomorphic-template] .input-group > :not(textarea) {
  min-width: 0;
}

[data-rmc-isomorphic-template] .modal-header,
[data-rmc-isomorphic-template] .modal-footer,
[data-rmc-isomorphic-template] .card-header,
[data-rmc-isomorphic-template] .card-footer {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--rmc-iso-space-1, 8px);
  min-width: 0;
}

[dir="rtl"] [data-rmc-isomorphic-template] .btn,
[dir="rtl"] [data-rmc-isomorphic-template] .rmc-text-shield,
[dir="rtl"] [data-rmc-isomorphic-template] .rmc-text-container {
  text-align: start;
}

/* ── 4. Micro-spacing scrub (8px grid on content stacks) ── */
[data-rmc-isomorphic-template]
  :is(#cp-main-content, #content-main, #main-content, .portal-page-body, .rmc-app-shell__canvas-body)
  > :is(.row, .rmc-wcx-grid, .rmc-iso-grid, .d-flex, .vstack, .hstack):not([class*="gap-"]) {
  gap: var(--rmc-iso-gap, var(--rmc-iso-space-2, 16px));
}

[data-rmc-isomorphic-template]
  :is(#cp-main-content, #content-main, #main-content, .portal-page-body)
  > .container-fluid:not([class*="py-"]):not([class*="pt-"]):not([class*="pb-"]) {
  padding-block: var(--rmc-iso-canvas-pad-y, var(--rmc-iso-space-2, 16px));
}

/* Balanced grid tracks — equal min-height on ultra-wide */
.rmc-iso-grid--balanced > *,
.rmc-iso-grid--3col > *,
.rmc-iso-grid--2col > * {
  min-height: 0;
  align-self: stretch;
}

@media (min-width: 1400px) {
  .rmc-iso-grid--balanced {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}

/* Empty panel sweep footprint (JS may inject; CSS ensures grid slot never collapses) */
[data-rmc-iso-panel="1"][data-rmc-panel-sweep-empty="1"] {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  justify-content: center;
  min-height: min(12rem, 38dvh);
}

[data-rmc-iso-panel="1"][data-rmc-panel-sweep-empty="1"] .rmc-iso-panel-empty {
  flex: 1 1 auto;
}

/* Scroll zone height tokens (replace inline max-height traps) */
.rmc-iso-scroll-zone--h-16 {
  max-height: 16rem;
}

.rmc-iso-scroll-zone--h-18 {
  max-height: 18rem;
}

.rmc-iso-scroll-zone--h-22 {
  max-height: 22rem;
}

.rmc-iso-scroll-zone--h-50vh {
  max-height: 50vh;
  max-height: 50dvh;
}

.rmc-iso-scroll-zone--h-31 {
  max-height: 31.25rem; /* 500px @ 16px root */
}

.rmc-iso-scroll-zone.rmc-iso-scroll-zone--h-16,
.rmc-iso-scroll-zone.rmc-iso-scroll-zone--h-18,
.rmc-iso-scroll-zone.rmc-iso-scroll-zone--h-22,
.rmc-iso-scroll-zone.rmc-iso-scroll-zone--h-50vh,
.rmc-iso-scroll-zone.rmc-iso-scroll-zone--h-31 {
  overflow-y: auto;
  overflow-x: auto;
}

/* Tenant portal nav pills — 40% script expansion shield */
body.portal-body-with-layout .tp-primary-nav__item {
  min-width: 0;
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

[data-rmc-isomorphic-template] .cp-primary-nav__pill > span:last-child {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* Data table channel — horizontal scroll wrapper */
.rmc-data-table-wrapper {
  overflow-x: auto;
  overflow-y: visible;
  min-width: 0;
  width: 100%;
}

/* Sweep utility: mark irregular padding for devtools / audit */
.rmc-iso-space-normalize {
  margin: 0 !important;
  padding: var(--rmc-iso-space-2, 16px) !important;
  gap: var(--rmc-iso-space-2, 16px) !important;
}
