/* JustiX Production Build 0.8.1 — Stabilization guardrails
   Final global invariants only. Component styling remains in its owning stylesheet. */

/* 1) Layout containment */
html,body{max-width:100%;overflow-x:hidden}
.app,.main,.view,.content{min-width:0;max-width:100%}
:where(.grid,.metrics,.settings-grid,.provider-grid,.library-grid,.cert-grid,.sim-grid,
       .court-layout,.learning-grid,.learning-layout,.talent-grid,.talent-layout,
       .passport-grid,.passport-layout,.backend-grid,.prod-grid,.beta-grid)>*{min-width:0}

/* 2) Text must remain readable inside cards, not escape them */
:where(.glass,.glass-soft,.card,.metric,.setting,.speech,.case-data,.case-row,
       .jurisdiction-card,.source-card,.provider-card,.settings-card,.backend-service,
       .learning-kpi,.analytics-card,.talent-card,.passport-card,.prod-card,.beta-card)
:where(h1,h2,h3,h4,p,span,small,strong,b,label){max-width:100%;overflow-wrap:anywhere;word-break:normal}

/* 3) Controls are native-touch friendly and cannot collapse below usable targets */
:where(button,[role="button"],a[href],select,input,textarea,summary){touch-action:manipulation}
:where(button:not(.icon-btn):not(.round-btn),[role="button"]){min-height:40px}
@media(max-width:920px){:where(button:not(.icon-btn):not(.round-btn),[role="button"],select){min-height:44px}}

/* 4) Hidden dialog shells never intercept pointer events */
:where([hidden],.passport-modal:not(.open),.objection-modal:not(.open),.notification-panel:not(.open)){pointer-events:none!important}
:where(.passport-modal.open,.objection-modal.open,.notification-panel.open){pointer-events:auto}

/* 5) Dense tab rows degrade to controlled horizontal scrolling instead of overlap */
:where(.learning-tabs,.talent-tabs,.passport-tabs,.beta-tabs){max-width:100%;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain}
:where(.learning-tabs,.talent-tabs,.passport-tabs,.beta-tabs)>button{flex:0 0 auto;white-space:nowrap}

/* 6) Tables/matrices never force the page wider than the viewport */
:where(.table,.case-table,.talent-table,.passport-table,.season-board,.talent-compare-table){max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}

/* 7) Fixed overlays use dynamic viewport units and retain their own scrolling */
:where(.passport-modal,.objection-modal,.jx-context-modal,.jx-legal-modal,.jx80-case-modal){max-height:100dvh;overscroll-behavior:contain}
:where(.passport-modal-card,.objection-card,.jx-context-card,.jx-legal-card,.jx80-case-card){max-width:calc(100vw - 24px)}

/* 8) Safe responsive stacking */
@media(max-width:760px){
  .page-head,.section-title,.head-actions{min-width:0}
  .page-head,.section-title{gap:12px}
  .page-head>*,.section-title>*{min-width:0}
  .head-actions{width:100%;display:flex;flex-wrap:wrap}
  .head-actions>*{flex:1 1 160px;max-width:100%}
}
