/* =============================================================
   Mobile QoL — last-loaded containment overlay
   Phones first (≤768), tablet pass (≤960). Desktop unchanged.
   Vanilla CSS only. Do not use 100vw for layout widths.
   ============================================================= */

:root {
  --mobile-qol-gutter: clamp(12px, 4vw, 20px);
  --mobile-qol-fab-gap: 0.75rem;
  --mobile-qol-chat-size: 60px;
}

@media (max-width: 960px) {
  .ds-topbar,
  .ds-main,
  .account-workspace,
  .account-content-shell,
  .admin-workspace,
  .booking,
  .booking__form,
  .booking-pay-layout,
  .booking-pay-recap,
  .booking-pay-bar,
  .merch-checkout,
  .merch-checkout__layout,
  .merch-checkout__panel,
  .site-footer,
  .footer-grid,
  .lp-footer,
  .sd-page,
  .account-panel,
  .account-kpi-grid,
  .sz-kpi-row,
  .admin-kpi-grid {
    min-width: 0;
    max-width: 100%;
  }

  .ds-topbar__lead,
  .ds-topbar__hello,
  .ds-topbar__hello strong,
  .account-kpi,
  .sz-kpi,
  .admin-kpi,
  .account-detail-stat,
  .sd-facts > * {
    min-width: 0;
  }
}

/* ── Chat FAB above account / admin bottom nav ─────────────── */

body.ds-body--account .cm-chat-root,
body.ds-body--admin .cm-chat-root,
body.admin-body .cm-chat-root {
  bottom: calc(
    var(--acct-bottom-nav-h, var(--adm-bottom-nav-h, 4.5rem)) + var(--mobile-qol-fab-gap)
  ) !important;
  right: max(0.75rem, env(safe-area-inset-right, 0px)) !important;
}

body.ds-body--account .cm-toast-stack,
body.ds-body--admin .cm-toast-stack,
body.ds-body--account .toast-stack,
body.ds-body--admin .toast-stack {
  bottom: calc(
    var(--acct-bottom-nav-h, var(--adm-bottom-nav-h, 4.5rem)) + var(--mobile-qol-chat-size) +
      1rem
  );
  right: max(0.75rem, env(safe-area-inset-right, 0px));
  max-width: min(92%, 400px);
}

@media (max-width: 768px) {
  html,
  body {
    overflow-x: hidden;
  }

  body.ds-body--account .account-main {
    padding-bottom: var(--acct-mobile-pad-bottom, calc(var(--acct-bottom-nav-h, 4.5rem) + 1.5rem));
  }

  body.ds-body--admin .admin-workspace,
  body.admin-body .admin-workspace {
    padding-bottom: var(--adm-mobile-pad-bottom, calc(var(--adm-bottom-nav-h, 3.65rem) + 1.5rem));
  }

  body:not(.ds-body--account):not(.ds-body--admin):not(.admin-body) main {
    padding-bottom: calc(var(--mobile-qol-chat-size) + 2.25rem + env(safe-area-inset-bottom, 0px));
  }

  /* Topbar: greeting shrinks, actions stay on-screen */
  .ds-topbar {
    width: 100%;
    max-width: 100%;
    gap: 0.35rem;
    padding-inline: max(0.65rem, env(safe-area-inset-left, 0px))
      max(0.65rem, env(safe-area-inset-right, 0px));
    box-sizing: border-box;
  }

  .ds-topbar__lead {
    flex: 1 1 auto;
    min-width: 0;
  }

  .ds-topbar__hello strong {
    max-width: 9.5rem;
  }

  .ds-topbar__spacer {
    display: none;
  }

  .ds-topbar__actions {
    flex: 0 0 auto;
    flex-shrink: 0;
    min-width: 0;
    gap: 0.3rem;
  }

  .ds-topbar__icon-btn {
    width: 40px;
    height: 40px;
    min-width: 40px;
    min-height: 40px;
  }

  /* 2×2 KPI tracks must shrink */
  body.ds-body--account .sz-kpi-row,
  body.ds-body--account .account-kpi-grid.sz-kpi-row,
  body.ds-body--admin .admin-kpi-grid,
  .sz-kpi-row {
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    width: 100%;
  }

  body.ds-body--account .account-kpi,
  body.ds-body--account .sz-kpi,
  body.ds-body--admin .admin-kpi {
    min-width: 0 !important;
    max-width: 100%;
    overflow: hidden;
  }

  body.ds-body--account .account-kpi-value,
  body.ds-body--account .sz-kpi__value,
  body.ds-body--admin .admin-kpi-value {
    overflow-wrap: anywhere;
    word-break: break-word;
  }

  .account-panel-head {
    flex-wrap: wrap;
    align-items: flex-start;
  }

  .account-panel-head > div {
    min-width: 0;
    flex: 1 1 10rem;
  }

  .account-panel-head .btn {
    flex: 1 1 auto;
    width: auto;
    max-width: 100%;
    white-space: normal;
    text-align: center;
    line-height: 1.25;
    overflow: hidden;
  }

  .account-empty,
  .account-next-session .account-empty {
    white-space: normal;
    overflow: visible;
    text-overflow: unset;
  }

  .account-detail-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .account-detail-stat strong,
  .account-detail-stat small {
    overflow-wrap: anywhere;
    word-break: break-word;
  }

  .sd-facts {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  /* Booking pay: never 2-col beside a 240px recap */
  .booking-pay-layout {
    grid-template-columns: minmax(0, 1fr) !important;
    width: 100%;
  }

  .booking__form {
    padding: 0.85rem var(--mobile-qol-gutter) !important;
    width: 100%;
    max-width: 100%;
  }

  #payment-container.booking-subpanel,
  .booking-subpanel,
  .booking-pay-recap,
  .booking-pay-bar {
    width: 100%;
    max-width: 100%;
    min-width: 0;
    box-sizing: border-box;
    overflow-x: auto;
  }

  .booking-pay-bar {
    flex-wrap: wrap;
    align-items: flex-start;
    gap: 0.65rem;
  }

  .booking-pay-bar__ref,
  .booking-pay-bar__total {
    min-width: 0;
    flex: 1 1 8rem;
  }

  .booking-pay-bar__total strong,
  #pay-recap-total {
    overflow-wrap: anywhere;
  }

  .booking__nav,
  .booking__nav .btn,
  #btn-pay,
  .merch-checkout__nav,
  .merch-checkout__nav .btn {
    width: 100%;
    max-width: 100%;
    white-space: normal;
    text-align: center;
    overflow: hidden;
    line-height: 1.3;
    height: auto;
    min-height: 44px;
  }

  .merch-checkout__layout,
  .merch-checkout__panel {
    width: 100%;
    min-width: 0;
  }

  body:not(.ds-body--admin):not(.ds-body--account):not(.admin-body) .site-header .container.nav {
    max-width: 100% !important;
    width: 100%;
    box-sizing: border-box;
  }

  .site-footer .footer-grid > *,
  .footer-brand,
  .footer-col {
    min-width: 0;
    max-width: 100%;
  }
}

@media (max-width: 768px) {
  body.ds-body--admin .ds-topbar__site,
  body.ds-body--admin .ds-spotlight-trigger__kbd,
  body.ds-body--admin .ds-cmd-pill kbd {
    display: none !important;
  }

  body.ds-body--admin .ds-spotlight-trigger {
    width: 40px;
    min-width: 40px;
    height: 40px;
    padding: 0;
    justify-content: center;
  }

  body.ds-body--admin .admin-schedule-cal {
    display: grid !important;
    grid-template-columns: repeat(7, minmax(0, 1fr)) !important;
    width: 100%;
    max-width: 100%;
  }

  body.ds-body--admin .admin-schedule-day-btn {
    min-height: 38px;
    height: 38px;
    aspect-ratio: auto;
  }

  body.ds-body--admin .admin-schedule-item,
  body.ds-body--admin .admin-schedule-line1,
  body.ds-body--admin .admin-badge {
    max-width: 100%;
    min-width: 0;
    box-sizing: border-box;
  }

  body.ds-body--admin .admin-schedule-line1 .admin-badge {
    flex-shrink: 0;
    white-space: nowrap;
  }

  body.ds-body--admin .admin-view--schedule .admin-view-body {
    padding-bottom: 1.25rem;
  }
}

@media (max-width: 640px) {
  .booking__nav {
    flex-direction: column-reverse;
    align-items: stretch;
  }

  #payment-container #card-element,
  #payment-container .payment-express-field,
  .merch-checkout__stripe {
    width: 100%;
    min-width: 0;
    max-width: 100%;
  }
}

@media (max-width: 640px) {
  .ds-topbar__spacer,
  .ds-topbar__tools,
  .ds-topbar__chip,
  .ds-topbar__site {
    display: none !important;
  }

  .ds-topbar {
    overflow: hidden;
    gap: 0.3rem;
  }

  .ds-topbar__hello strong {
    max-width: min(42vw, 8.5rem);
  }

  .ds-topbar__user-caret {
    display: none;
  }

  /* Selects: never wrap glyphs vertically */
  .cm-select-wrap,
  .cm-select,
  .cm-custom-select {
    min-width: 0;
    max-width: 100%;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
    background: transparent !important;
    border: none !important;
    box-shadow: none !important;
  }

  .form-field--birth-tripart .cm-select__trigger,
  .form-field--birth-tripart select:not([multiple]) {
    min-width: 4.75rem;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }

  .cm-select__trigger,
  .cm-custom-select__btn {
    white-space: nowrap;
  }

  .cm-select__option,
  .cm-custom-select__opt {
    white-space: nowrap !important;
    word-break: normal !important;
    overflow-wrap: normal !important;
  }

  .form-field--birth-tripart__grid {
    display: grid !important;
    grid-template-columns: repeat(3, minmax(5.25rem, 1fr)) !important;
    gap: 0.45rem !important;
    width: 100% !important;
  }

  .booking-detail-card:has(.cm-select.is-open),
  .account-panel:has(.cm-select.is-open),
  .admin-panel:has(.cm-select.is-open),
  .glass-form:has(.cm-select.is-open) {
    transform: none !important;
    filter: none !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
  }

  /* Dashboard cards stay inside the viewport */
  body.ds-body--account .account-main .container,
  body.ds-body--account .account-shell,
  body.ds-body--account .account-workspace,
  body.ds-body--account .account-views,
  body.ds-body--account .account-view,
  body.ds-body--admin .admin-workspace {
    width: 100%;
    max-width: 100%;
    min-width: 0;
    box-sizing: border-box;
  }

  body.ds-body--account .account-panel,
  body.ds-body--account .account-shortcut,
  body.ds-body--admin .admin-panel,
  body.ds-body--admin .admin-kpi {
    width: 100%;
    max-width: 100%;
    min-width: 0;
    box-sizing: border-box;
  }

  body.ds-body--account .account-shortcuts {
    grid-template-columns: minmax(0, 1fr) !important;
    width: 100%;
  }

  body.ds-body--account .account-shortcut {
    flex-direction: row;
    align-items: center;
    min-height: 0;
    padding: 0.85rem 0.95rem;
  }

  body.ds-body--account .account-main {
    padding-bottom: calc(var(--acct-bottom-nav-h, 4.5rem) + 5.5rem) !important;
  }

  body.ds-body--admin .admin-workspace,
  body.admin-body .admin-workspace {
    padding-bottom: calc(var(--adm-bottom-nav-h, 3.65rem) + 5.5rem);
  }
}

@media (max-width: 1279px) {
  body.ds-body--admin .admin-view--roles .admin-view-header,
  body.ds-body--admin .admin-view--roles #admin-role-new,
  body.ds-body--admin .admin-roles-perm,
  body.ds-body--admin .admin-roles-cat__check,
  body.ds-body--admin .admin-roles-editor.is-open,
  body.ds-body--admin .admin-roles-editor.is-open .admin-roles-editor__foot,
  body.ds-body--admin .admin-roles-editor.is-open .admin-roles-editor__foot .admin-btn {
    pointer-events: auto !important;
  }

  body.ds-body--admin .admin-roles-list.is-editing-mobile,
  body.ds-body--admin .admin-roles-placeholder[hidden],
  body.ds-body--admin .admin-roles-editor[hidden] {
    display: none !important;
    pointer-events: none !important;
  }
}

@media (max-width: 420px) {
  .ds-topbar__hello strong {
    max-width: 6.25rem;
  }

  body.ds-body--account .sz-kpi-row,
  body.ds-body--account .account-kpi-grid.sz-kpi-row {
    gap: 0.45rem;
  }

  .sd-facts,
  .account-detail-grid {
    grid-template-columns: minmax(0, 1fr);
  }
}

@media (prefers-reduced-motion: reduce) {
  .cm-chat-launcher {
    animation: none !important;
  }
}

/* Inactive admin views are position:absolute and keep interactive children.
   Parent pointer-events:none does not hide those children from the hit-test
   tree, so they steal clicks on the last pill of every console page. */
body.admin-body .admin-view:not(.is-active),
body.ds-body--admin .admin-view:not(.is-active) {
  display: none !important;
  pointer-events: none !important;
}

body.admin-body .admin-view:not(.is-active) *,
body.ds-body--admin .admin-view:not(.is-active) * {
  pointer-events: none !important;
}

body.ds-body--admin .ds-user-menu:not(.is-open),
body.ds-body--admin .ds-user-menu:not(.is-open) *,
body.ds-body--admin .ds-spotlight:not(.is-open),
body.ds-body--admin .ds-spotlight:not(.is-open) *,
body.ds-body--admin .ds-modal:not(.is-open),
body.ds-body--admin .ds-modal:not(.is-open) * {
  pointer-events: none !important;
}

body.ds-body--admin .admin-form-foot,
body.ds-body--admin .admin-reservation-edit-actions,
body.ds-body--admin .admin-roles-editor__foot,
body.ds-body--admin .av-form-foot,
body.ds-body--admin .admin-merch-form-actions {
  position: static !important;
  inset: auto !important;
  bottom: auto !important;
}

@media (max-width: 1279px) {
  body.admin-body .admin-view:not(.is-active),
  body.ds-body--admin .admin-view:not(.is-active) {
    display: none !important;
  }

  body.ds-body--admin .ag-dd:not(.is-open) .ag-dd__menu,
  body.ds-body--admin .av-month:not(.is-open) .av-month__menu,
  body.ds-body--admin .av-coach:not(.is-open) .av-coach__menu {
    display: none !important;
    pointer-events: none !important;
  }
}

/* Public + portal: never let the primary shine stripe leak on touch. */
.btn--primary,
a.btn--primary {
  overflow: hidden !important;
  isolation: isolate;
}
@media (hover: none), (pointer: coarse) {
  .btn--primary::before,
  a.btn--primary::before {
    content: none !important;
    display: none !important;
  }
}
