/* NuzLabs v6.34.3.2.32 — Sitewide Mobile Viewport Containment Hotfix
   Contract: the document itself never becomes a horizontal scrolling surface.
   Intentionally wide controls scroll inside their own bounded container. */

html,
body,
#app,
.page,
.dashboard {
  width: 100%;
  max-width: 100%;
  min-width: 0;
}

/* Safari can preserve a document-level horizontal pan after one child overflows.
   Clip it at the root; local scrollers below remain independently scrollable. */
html,
body {
  overflow-x: clip;
}

@supports not (overflow: clip) {
  html,
  body { overflow-x: hidden; }
}

/* Common page shells and layout children must be allowed to shrink below their
   intrinsic text/content width instead of widening the viewport. */
.section-shell,
.header-inner,
.dash-shell,
.platform-header,
.platform-header .header-inner,
.dashboard main,
.dashboard section,
.dashboard article,
.organization-platform-dashboard,
.organization-section-page,
.structure-detail-page,
.coach-platform-dashboard,
.athlete-dashboard,
.player-progress-page,
.planner-page,
.planner-page-v6174 {
  min-width: 0;
  max-width: 100%;
}

/* Flex/grid min-content is a frequent source of phone-only document overflow. */
.header-inner > *,
.platform-header .header-inner > *,
.dash-hero > *,
.organization-hero > *,
.organization-hero-compact > *,
.coach-hero > *,
.athlete-dashboard-hero > *,
.organization-two-column > *,
.organization-structure-grid > *,
.organization-module-grid > *,
.organization-team-grid > *,
.organization-overview > *,
.organization-overview-five > *,
.org-overview-links > *,
.module-grid > *,
.athlete-module-grid > *,
.oversight-athlete-grid > *,
.season-report-athlete-list > *,
.season-report-athlete-grid > *,
.season-ops-window-grid > *,
.season-ops-athlete-grid > * {
  min-width: 0;
}

img,
svg,
video,
canvas,
iframe {
  max-width: 100%;
}

input,
select,
textarea,
button {
  min-width: 0;
  max-width: 100%;
}

/* Header identity/actions must shrink before they can force a wider page. */
.platform-header .brand-logo,
.platform-header .header-actions,
.platform-header .workspace-switcher,
.platform-header .workspace-switcher-compact,
.platform-header .platform-nav,
.account-menu-wrap {
  min-width: 0;
}

.platform-header .workspace-switcher,
.platform-header .workspace-switcher-compact {
  max-width: 100%;
}

.platform-header .workspace-switcher select,
.platform-header .workspace-switcher-compact select {
  min-width: 0;
  max-width: 100%;
  text-overflow: ellipsis;
}

/* Organization mobile nav: this is the direct fix for the screenshot regression.
   It may scroll horizontally, but it may never expand the document. */
@media (max-width: 820px) {
  .organization-platform-dashboard .organization-primary-nav,
  .organization-section-page .organization-primary-nav,
  .structure-detail-page .organization-primary-nav,
  .organization-primary-nav {
    display: flex !important;
    flex-wrap: nowrap !important;
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
    overflow-x: auto !important;
    overflow-y: hidden !important;
    justify-content: flex-start !important;
    overscroll-behavior-inline: contain;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
  }
  .organization-primary-nav::-webkit-scrollbar { display: none; }
  .organization-primary-nav > button,
  .organization-primary-nav > .organization-nav-more {
    flex: 0 0 auto;
  }

  /* More is portaled visually with fixed positioning while the nav rail itself
     stays clipped. This prevents the dropdown from being cut off by the local
     horizontal scroller without reopening document-level overflow. */
  .organization-nav-more-menu.is-viewport-popover {
    position: fixed !important;
    right: auto !important;
    min-width: 0 !important;
    max-width: calc(100vw - 24px) !important;
    max-height: calc(100dvh - 24px);
    overflow-y: auto;
    z-index: 1000;
  }

  /* Keep shared coach/player navigation local as well. */
  .coach-primary-nav,
  .athlete-dashboard .platform-nav,
  .player-primary-nav {
    max-width: 100%;
    min-width: 0;
    overflow-x: auto;
    overscroll-behavior-inline: contain;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
  }
  .coach-primary-nav::-webkit-scrollbar,
  .athlete-dashboard .platform-nav::-webkit-scrollbar,
  .player-primary-nav::-webkit-scrollbar { display: none; }
}

/* Authenticated module monogram bar already scrolls locally; make the bounding
   contract explicit so an item can never contribute to body width. */
.nuz-global-nav,
.nuz-global-nav-inner {
  max-width: 100%;
  min-width: 0;
}
.nuz-global-nav-inner {
  overflow-x: auto;
  overscroll-behavior-inline: contain;
}

/* Intentionally wide planner/report strips stay local. */
.brand-strip,
.planner-scheduling-table-wrap,
.planner-horizon-strip,
.assessment-target-progress-points,
.nuz-module-tabs,
.season-calendar-scroll,
.season-calendar-grid-wrap {
  max-width: 100%;
  min-width: 0;
  overflow-x: auto;
  overscroll-behavior-inline: contain;
  -webkit-overflow-scrolling: touch;
}

/* Dialogs are always viewport-bounded. Their own vertical scrolling remains
   available without creating a body-level horizontal pan. */
.auth-overlay,
.organization-overlay,
.planner-scheduling-overlay {
  max-width: 100%;
  overflow-x: clip;
}

.auth-card,
.organization-create-card,
.platform-auth-card,
.team-roster-card,
.staff-invite-card,
.staff-access-modal,
.module-workflow-modal,
.athlete-invite-modal,
.oversight-review-card,
.program-template-modal,
.program-template-assign-modal,
.program-periodization-modal,
.program-season-modal,
.program-template-assign-periodized,
.planner-scheduling-card,
.season-calendar-editor,
.season-participation-editor,
.account-timezone-card {
  min-width: 0;
  max-width: min(100%, calc(100vw - 20px));
}

/* Long names, notes and generated copy should wrap inside cards rather than
   turning a flex/grid child into a viewport-width requirement. */
.organization-platform-dashboard h1,
.organization-platform-dashboard h2,
.organization-platform-dashboard h3,
.coach-platform-dashboard h1,
.coach-platform-dashboard h2,
.coach-platform-dashboard h3,
.athlete-dashboard h1,
.athlete-dashboard h2,
.athlete-dashboard h3,
.player-progress-page h1,
.player-progress-page h2,
.player-progress-page h3,
.organization-panel,
.organization-team-card,
.org-section-card,
.season-report-athlete,
.season-ops-athlete-card,
.message,
.org-empty,
.empty-access {
  overflow-wrap: anywhere;
}

/* On very narrow phones, action groups should wrap/stack instead of pushing the
   viewport. Preserve explicit nav/timeline nowrap behavior above. */
@media (max-width: 480px) {
  .header-actions,
  .hero-actions,
  .organization-team-actions,
  .organization-assessment-athlete-actions,
  .season-report-athlete-actions,
  .season-calendar-actions,
  .planner-actions,
  .oversight-card-actions {
    max-width: 100%;
    min-width: 0;
    flex-wrap: wrap;
  }

  .button,
  .btn {
    overflow-wrap: anywhere;
  }
}

/* Module headers use different historical class names. Bound all shared module
   tab/navigation rows so they cannot turn the document into a pan surface. */
.arm-topbar-inner,
.mental-topbar-inner,
.iq-topbar-inner,
.arm-top-actions,
.mental-top-actions,
.iq-top-actions,
.arm-nav,
.mental-nav,
.iq-nav,
.nuz-module-tabs {
  min-width: 0 !important;
  max-width: 100% !important;
}

@media (max-width: 980px) {
  .arm-nav,
  .mental-nav,
  .iq-nav,
  .nuz-module-tabs {
    overflow-x: auto !important;
    overflow-y: visible !important;
    overscroll-behavior-inline: contain;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
  }
  .arm-nav::-webkit-scrollbar,
  .mental-nav::-webkit-scrollbar,
  .iq-nav::-webkit-scrollbar,
  .nuz-module-tabs::-webkit-scrollbar { display: none; }
}


/* v6.34.3.2.32 — Loaded module roots are app chrome, not loading cards.
   The loading classes intentionally carry centered padding while data hydrates.
   Once a module renders, its root must return to the full viewport and leave
   content spacing to the module topbar/main containers. */
#armApp:not(.arm-loading),
#barrelApp:not(.barrel-loading),
#rangeApp:not(.range-loading),
#catchApp:not(.catch-loading),
#xplosiveApp:not(.xplosive-loading),
#strengthApp:not(.strength-loading),
#recoveryApp:not(.recovery-loading),
#mentalApp:not(.mental-loading),
#iqApp:not(.iq-loading) {
  width: 100%;
  min-width: 0;
  max-width: 100%;
  margin: 0;
  padding: 0;
}

/* Common module content shells and cards must be shrinkable. */
.arm-shell,.arm-main,.arm-content,.arm-card,
.mental-shell,.mental-main,.mental-content,.mental-card,
.iq-shell,.iq-main,.iq-content,.iq-card,
.barrel-shell,.barrel-main,.barrel-content,
.range-shell,.range-main,.range-content,
.catch-shell,.catch-main,.catch-content,
.strength-shell,.strength-main,.strength-content,
.recovery-shell,.recovery-main,.recovery-content,
.xplosive-shell,.xplosive-main,.xplosive-content,
.nuz-module-content {
  min-width: 0;
  max-width: 100%;
}

/* Legacy module intrinsic-width containment (introduced in v6.30.2.4.1).
   Barrel, Catch, Xplosive, Strength and Recovery share an older cloned shell.
   Range already carried equivalent local hardening. These rules make every
   cloned shell obey the same viewport contract without disabling local nav
   scrolling. */
#barrelApp:not(.barrel-loading),
#catchApp:not(.catch-loading),
#xplosiveApp:not(.xplosive-loading),
#strengthApp:not(.strength-loading),
#recoveryApp:not(.recovery-loading),
.barrel-shell,.barrel-topbar,.barrel-topbar-inner,.barrel-main,.barrel-content,.barrel-card,
.catch-shell,.catch-topbar,.catch-topbar-inner,.catch-main,.catch-content,.catch-card,
.xplosive-shell,.xplosive-topbar,.xplosive-topbar-inner,.xplosive-main,.xplosive-content,.xplosive-card,
.strength-shell,.strength-topbar,.strength-topbar-inner,.strength-main,.strength-content,.strength-card,
.recovery-shell,.recovery-topbar,.recovery-topbar-inner,.recovery-main,.recovery-content,.recovery-card {
  width: 100%;
  min-width: 0;
  max-width: 100%;
}

.barrel-topbar-inner > *, .barrel-main > *, .barrel-content > *, .barrel-card > *, .barrel-hero > *,
.catch-topbar-inner > *, .catch-main > *, .catch-content > *, .catch-card > *, .catch-hero > *,
.xplosive-topbar-inner > *, .xplosive-main > *, .xplosive-content > *, .xplosive-card > *, .xplosive-hero > *,
.strength-topbar-inner > *, .strength-main > *, .strength-content > *, .strength-card > *, .strength-hero > *,
.recovery-topbar-inner > *, .recovery-main > *, .recovery-content > *, .recovery-card > *, .recovery-hero > *,
.barrel-form > *, .barrel-form-grid > *, .barrel-check-grid > *,
.catch-form > *, .catch-form-grid > *, .catch-check-grid > *,
.xplosive-form > *, .xplosive-form-grid > *, .xplosive-check-grid > *,
.strength-form > *, .strength-form-grid > *, .strength-check-grid > *,
.recovery-form > *, .recovery-form-grid > *, .recovery-check-grid > * {
  min-width: 0;
  max-width: 100%;
}

.barrel-card h1,.barrel-card h2,.barrel-card h3,.barrel-card p,.barrel-card label,.barrel-card span,
.catch-card h1,.catch-card h2,.catch-card h3,.catch-card p,.catch-card label,.catch-card span,
.xplosive-card h1,.xplosive-card h2,.xplosive-card h3,.xplosive-card p,.xplosive-card label,.xplosive-card span,
.strength-card h1,.strength-card h2,.strength-card h3,.strength-card p,.strength-card label,.strength-card span,
.recovery-card h1,.recovery-card h2,.recovery-card h3,.recovery-card p,.recovery-card label,.recovery-card span {
  max-width: 100%;
  overflow-wrap: anywhere;
}

@media (max-width: 760px) {
  .barrel-topbar-inner,.catch-topbar-inner,.xplosive-topbar-inner,.strength-topbar-inner,.recovery-topbar-inner {
    padding-left: max(13px, env(safe-area-inset-left));
    padding-right: max(13px, env(safe-area-inset-right));
  }

  .barrel-nav,.catch-nav,.xplosive-nav,.strength-nav,.recovery-nav {
    flex: 1 1 100%;
    width: 100%;
    min-width: 0 !important;
    max-width: 100% !important;
    overflow-x: auto !important;
    overflow-y: hidden !important;
    overscroll-behavior-inline: contain;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
  }
  .barrel-nav::-webkit-scrollbar,.catch-nav::-webkit-scrollbar,.xplosive-nav::-webkit-scrollbar,
  .strength-nav::-webkit-scrollbar,.recovery-nav::-webkit-scrollbar { display: none; }

  .barrel-main,.catch-main,.xplosive-main,.strength-main,.recovery-main {
    padding-left: max(13px, env(safe-area-inset-left));
    padding-right: max(13px, env(safe-area-inset-right));
  }
}

