/* =====================================================================
   QP IBA RESERVE MODAL — styles (schedule arc S5, Phase 3). Extracted from
   css/course-pages.css (the page-scope prefix stripped so the modal styles
   apply wherever window.QPReserve.open mounts it — course pages AND
   academy/schedule.html). Single source; loaded by both consumers.
   ===================================================================== */

/* W13b: self-contained brand vars — the modal is mounted on pages that do
   NOT define these (schedule.html has no shared.css / body.qp-course), so
   the CTA fell back to white. Scoped to the overlay root; identical values,
   so course pages are unaffected. */
.iba-reg-overlay {
  --teal: #5ba8b2;
  --gold: #c9a96e;
  --taupe: #ad9b84;
}

/* ============================================================
   STAGE 4 — Reserve Seat modal (cloned visual pattern from
   .iba-wl-* waitlist modal, renamed to .iba-reg-* for clean
   per-modal scoping. Mirrors waitlist styling almost exactly;
   diverges only where reservation-specific UI requires it
   (price callout, textarea, "already registered" state).
   ============================================================ */

.iba-reg-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, .88);
  z-index: 9998;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 20px;
  opacity: 0;
  transition: opacity .3s ease;
}
.iba-reg-overlay.open { opacity: 1; }
.iba-reg-box {
  background: linear-gradient(170deg, rgba(16,28,52,.98) 0%, rgba(12,22,42,.99) 50%, rgba(14,26,48,.98) 100%);
  border: 1px solid rgba(91, 168, 178, .12);
  border-radius: 24px;
  max-width: 520px;
  width: 100%;
  max-height: calc(100vh - 60px);
  overflow-y: auto;
  padding: 48px 40px 40px;
  position: relative;
  box-shadow:
    0 32px 80px rgba(0, 0, 0, .6),
    0 0 60px rgba(91, 168, 178, .06),
    inset 0 1px 0 rgba(255, 255, 255, .05);
  transform: translateY(20px) scale(.97);
  transition: transform .3s ease;
  overflow-x: hidden;
}
.iba-reg-overlay.open .iba-reg-box {
  transform: translateY(0) scale(1);
}
.iba-reg-glow {
  position: absolute;
  top: -80px;
  left: 50%;
  transform: translateX(-50%);
  width: 400px;
  height: 160px;
  background: radial-gradient(ellipse, rgba(91, 168, 178, .08), transparent 70%);
  pointer-events: none;
}
.iba-reg-close {
  position: absolute;
  top: 16px;
  right: 16px;
  width: 36px;
  height: 36px;
  border-radius: 50%;
  border: 1px solid rgba(255, 255, 255, .1);
  background: rgba(255, 255, 255, .04);
  color: rgba(255, 255, 255, .4);
  font-size: 20px;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: all .15s;
  padding: 0;
  line-height: 1;
  z-index: 1;
}

/* RELAY-12 (ported from parked fix/iba-modal-polish): the close button is absolutely
   positioned at top:16px/right:16px and 36px tall, so it occupies y=16..52 inside a
   box whose padding-top is 48 — the first control of the pay/auth panels ran under
   it. Reserve that band. */
.iba-reg-step-pay,
.iba-reg-step-auth { padding-top: 16px; }

/* Rendered waiver Markdown (replaces the raw-text <pre> once loaded). Tags are a
   closed set produced by renderWaiverMarkdown over ESCAPED text — see
   js/iba-reserve-modal.js. */
.iba-sheet-waiver-md { text-align: left; font-size: 13px; line-height: 1.65; color: inherit; word-break: break-word; }
.iba-sheet-waiver-md h3 { font-family: 'Playfair Display', Georgia, serif; font-size: 16px; color: var(--teal, #5ba8b2); margin: 20px 0 8px; letter-spacing: .01em; }
.iba-sheet-waiver-md h3:first-child { margin-top: 0; }
.iba-sheet-waiver-md h4 { font-size: 13px; font-weight: 700; color: rgba(255, 255, 255, .88); margin: 16px 0 6px; text-transform: none; }
.iba-sheet-waiver-md p { margin: 0 0 10px; }
.iba-sheet-waiver-md strong { color: rgba(255, 255, 255, .92); font-weight: 600; }
.iba-sheet-waiver-md em { font-style: italic; }
.iba-sheet-waiver-md code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 12px; background: rgba(255, 255, 255, .06); border-radius: 4px; padding: 1px 5px; }
.iba-sheet-waiver-md ul, .iba-sheet-waiver-md ol { margin: 0 0 12px; padding-left: 20px; }
.iba-sheet-waiver-md li { margin-bottom: 5px; }
.iba-sheet-waiver-md hr { border: 0; border-top: 1px solid rgba(255, 255, 255, .08); margin: 18px 0; }
.iba-sheet-waiver-md blockquote { margin: 0 0 12px; padding: 8px 12px; border-left: 2px solid rgba(91, 168, 178, .35); background: rgba(91, 168, 178, .05); border-radius: 0 6px 6px 0; color: rgba(255, 255, 255, .72); }
.iba-reg-close:hover {
  background: rgba(255, 255, 255, .1);
  color: #fff;
  border-color: rgba(255, 255, 255, .2);
}
.iba-reg-header {
  text-align: center;
  margin-bottom: 28px;
}
.iba-reg-kicker {
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .2em;
  text-transform: uppercase;
  color: var(--teal, #5ba8b2);
  margin-bottom: 12px;
}
.iba-reg-title {
  font-family: 'Playfair Display', 'Cormorant Garamond', Georgia, serif;
  font-size: 28px;
  font-weight: 400;
  color: #fff;
  margin: 0 0 10px;
  line-height: 1.2;
}
.iba-reg-subtitle {
  color: rgba(255, 255, 255, .55);
  font-size: 13px;
  margin: 0 0 18px;
  line-height: 1.5;
}
/* DEAD: see .iba-reg-pricing — left in place pending cleanup. */
.iba-reg-price {
  display: inline-block;
  padding: 8px 22px;
  background: rgba(91, 168, 178, .10);
  border: 1px solid rgba(91, 168, 178, .25);
  border-radius: 24px;
  font-family: 'Playfair Display', 'Cormorant Garamond', Georgia, serif;
  font-size: 24px;
  font-weight: 600;
  color: var(--teal, #5ba8b2);
  letter-spacing: .02em;
  box-shadow: 0 0 20px rgba(91, 168, 178, .15);
}
.iba-reg-early-bird {
  display: inline-block;
  margin-top: 20px;
  padding: 7px 20px;
  background: rgba(201, 169, 110, .10);
  border: 1px solid rgba(201, 169, 110, .25);
  border-radius: 24px;
  font-size: 13px;
  letter-spacing: .02em;
  text-align: center;
  box-shadow: 0 0 20px rgba(201, 169, 110, .15);
  line-height: 1.4;
}
.iba-eb-save {
  color: var(--gold, #c9a96e);
  font-weight: 700;
  filter: brightness(1.15);
}
.iba-eb-detail {
  color: rgba(201, 169, 110, .8);
  font-weight: 500;
}
.iba-reg-overlay.open .iba-reg-early-bird {
  animation: earlyBirdShimmer 1.2s ease-out 0.4s both;
}
.iba-reg-form {
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.iba-reg-input,
.iba-reg-textarea {
  padding: 14px 16px;
  border-radius: 8px;
  border: 1px solid rgba(91, 168, 178, .2);
  background: rgba(255, 255, 255, .06);
  color: #fff;
  font-size: 14px;
  font-family: inherit;
  outline: none;
  -webkit-text-fill-color: #fff;
  transition: border-color .15s;
}
.iba-reg-input::placeholder,
.iba-reg-textarea::placeholder {
  color: rgba(255, 255, 255, .35);
}
.iba-reg-input:focus,
.iba-reg-textarea:focus {
  border-color: rgba(91, 168, 178, .5);
}
.iba-reg-input.error,
.iba-reg-textarea.error {
  border-color: rgba(232, 93, 93, .6);
}
.iba-reg-textarea {
  resize: vertical;
  min-height: 72px;
  line-height: 1.5;
}
/* Neutralize browser autofill (matches the waitlist modal fix) */
.iba-reg-input:-webkit-autofill,
.iba-reg-input:-webkit-autofill:hover,
.iba-reg-input:-webkit-autofill:focus,
.iba-reg-input:-webkit-autofill:active {
  -webkit-box-shadow: 0 0 0 1000px rgba(255, 255, 255, .04) inset !important;
  -webkit-text-fill-color: #ffffff !important;
  caret-color: #ffffff;
  transition: background-color 5000s ease-in-out 0s;
}
.iba-reg-error {
  color: #e85d5d;
  font-size: 13px;
  min-height: 18px;
  margin: -4px 0 0;
}
.iba-reg-submit {
  width: 100%;
  margin-top: 4px;
  padding: 16px;
  font-size: 13px;
  letter-spacing: .15em;
}
.iba-reg-submit:disabled {
  opacity: .6;
  cursor: not-allowed;
}
.iba-reg-loading {
  font-size: 12px;
  color: rgba(255, 255, 255, .45);
  text-align: center;
  margin: 8px 0 0;
  font-style: italic;
}
/* ─── Two-step modal: step panels + sign-in help-text ─────────
   .iba-reg-step-read (PANEL 1) header + meta + Continue + help-text
   .iba-reg-step-pay  (PANEL 2) the reg form
   Panels are toggled with the `hidden` attribute (same mechanic as
   the form-state/already-state switch), so no display rules needed.
   .iba-reg-continue mirrors .iba-reg-submit (teal, full-width).
   .iba-reg-gate-notice is quiet help-text below the Continue button,
   shown only when no session is detected. The button's smart-copy
   ("Sign in to continue →") is the load-bearing signal; the notice
   just clarifies why. */
.iba-reg-continue {
  width: 100%;
  margin-top: 4px;
  padding: 16px;
  font-size: 13px;
  letter-spacing: .15em;
}
.iba-reg-gate-notice {
  margin: 10px 0 0;
  color: rgba(255, 255, 255, .5);
  font-size: 12px;
  line-height: 1.5;
  text-align: center;
}
.iba-reg-back {
  display: inline-block;
  margin-top: 22px;
  font-size: 12px;
  color: rgba(255, 255, 255, .45);
  text-decoration: none;
  letter-spacing: .04em;
  transition: color .15s;
}
.iba-reg-back:hover {
  color: rgba(255, 255, 255, .8);
}
/* "Already registered" alternate state */
.iba-reg-already {
  text-align: center;
  padding: 20px 0;
}
.iba-reg-already-icon {
  width: 56px;
  height: 56px;
  border-radius: 50%;
  background: rgba(91, 168, 178, .12);
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 0 auto 20px;
}
.iba-reg-already-title {
  color: var(--teal, #5ba8b2);
  font-family: 'Playfair Display', 'Cormorant Garamond', Georgia, serif;
  font-size: 24px;
  font-weight: 400;
  margin: 0 0 12px;
}
.iba-reg-already-body {
  color: rgba(255, 255, 255, .55);
  font-size: 14px;
  line-height: 1.7;
  margin: 0 0 28px;
}
.iba-reg-already-body a {
  color: var(--teal, #5ba8b2);
  text-decoration: underline;
}
.iba-reg-already .btn {
  padding: 12px 36px;
  font-size: 12px;
}
/* ─── Step 3: Registration metadata block ─────────────────────
   Labeled rows rendered between .iba-reg-header and .iba-reg-form
   when row has time / venue / format / coordinator / logistics data.
   Sparse rows hidden in JS — no empty labels. */
.iba-reg-meta {
  display: grid;
  gap: 14px;
  padding: 22px 4px 0;
  margin: 0 0 26px;
  border-top: 1px solid rgba(91, 168, 178, .12);
}
.iba-reg-meta-row {
  display: grid;
  grid-template-columns: 92px 1fr;
  gap: 14px;
  align-items: baseline;
}
.iba-reg-meta-label {
  font-size: 10px;
  font-weight: 700;
  letter-spacing: .18em;
  text-transform: uppercase;
  color: var(--teal, #5ba8b2);
  opacity: .78;
}
.iba-reg-meta-value {
  font-size: 13px;
  color: rgba(255, 255, 255, .82);
  line-height: 1.55;
}
.iba-reg-meta-sub {
  color: rgba(255, 255, 255, .45);
  font-size: 12px;
}
.iba-reg-meta-note {
  white-space: pre-line;
}
/* Inline accordion for long Details values. Native <details>/<summary>
   — same a11y pattern as the per-day schedule below. Preview text +
   "Read more" when closed; full body + "Show less" when open. */
.iba-reg-meta-details {
  display: block;
}
.iba-reg-meta-details-toggle {
  cursor: pointer;
  list-style: none;
  user-select: none;
  display: inline;
  outline: none;
  border-radius: 2px;
}
.iba-reg-meta-details-toggle::-webkit-details-marker {
  display: none;
}
.iba-reg-meta-details-preview {
  color: rgba(255, 255, 255, .82);
}
.iba-reg-meta-details-cta-more,
.iba-reg-meta-details-cta-less {
  color: var(--teal, #5ba8b2);
  font-weight: 600;
  font-size: 12px;
  letter-spacing: .04em;
  transition: color .15s ease;
}
.iba-reg-meta-details-cta-less {
  display: none;
}
.iba-reg-meta-details[open] .iba-reg-meta-details-preview,
.iba-reg-meta-details[open] .iba-reg-meta-details-cta-more {
  display: none;
}
.iba-reg-meta-details[open] .iba-reg-meta-details-cta-less {
  display: inline;
}
.iba-reg-meta-details-toggle:hover .iba-reg-meta-details-cta-more,
.iba-reg-meta-details-toggle:hover .iba-reg-meta-details-cta-less,
.iba-reg-meta-details-toggle:focus-visible .iba-reg-meta-details-cta-more,
.iba-reg-meta-details-toggle:focus-visible .iba-reg-meta-details-cta-less {
  color: #8bd0d8;
}
.iba-reg-meta-details-full {
  margin-top: 4px;
  white-space: pre-line;
}
.iba-reg-meta-action {
  display: inline-block;
  margin-left: 4px;
  padding: 3px 12px;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .04em;
  color: var(--teal, #5ba8b2);
  border: 1px solid rgba(91,168,178,.45);
  border-radius: 999px;
  text-decoration: none;
  white-space: nowrap;
  transition: background .15s ease, color .15s ease;
}
.iba-reg-meta-action:hover {
  background: var(--teal, #5ba8b2);
  color: #0b1733;
}
/* ─── Step 2C: Per-day schedule block ─────────────────────────
   Compact summary + optional viewer-local sub-line + expandable
   day-by-day detail (<details>/<summary> for native a11y).
   Rendered when iba_course_date_days has rows for this parent. */
.iba-reg-sched-summary {
  display: block;
}
.iba-reg-sched-time {
  display: block;
  margin-top: 2px;
  font-size: 13px;
  color: rgba(255, 255, 255, .82);
  white-space: nowrap;
}
.iba-reg-sched-viewer {
  display: block;
  color: rgba(255, 255, 255, .45);
  font-size: 12px;
  margin-top: 4px;
}
.iba-reg-sched-detail {
  margin-top: 10px;
}
.iba-reg-sched-toggle {
  cursor: pointer;
  color: var(--teal, #5ba8b2);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .12em;
  text-transform: uppercase;
  padding: 4px 0;
  list-style: none;
  user-select: none;
  display: inline-block;
  outline: none;                 /* kill the default focus box (looks like a pressed button) */
  border-radius: 2px;            /* shape the subtle focus-visible underline corners */
}
.iba-reg-sched-toggle::-webkit-details-marker {
  display: none;
}
/* Keep keyboard a11y: subtle underline + brighter teal on focus-visible
   only (mouse clicks won't trigger it; tab-nav users still get a cue). */
.iba-reg-sched-toggle:focus-visible {
  text-decoration: underline;
  text-underline-offset: 3px;
  text-decoration-thickness: 1px;
  color: #8bd0d8;                /* slightly brighter teal2 for the cue */
}
.iba-reg-sched-toggle:hover {
  color: #8bd0d8;
}
.iba-reg-sched-toggle::after {
  content: ' \25BE';
  display: inline-block;
  margin-left: 4px;
  transition: transform .15s ease;
}
details[open] > .iba-reg-sched-toggle::after {
  transform: rotate(180deg);
}
.iba-reg-sched-days {
  display: grid;
  gap: 8px;
  padding: 10px 0 4px;
  border-top: 1px solid rgba(91, 168, 178, .12);
  margin-top: 6px;
}
.iba-reg-sched-day {
  display: grid;
  grid-template-columns: 60px 1fr auto;
  gap: 12px;
  align-items: baseline;
  font-size: 13px;
  color: rgba(255, 255, 255, .82);
  line-height: 1.4;
}
.iba-reg-sched-day-num {
  font-size: 10px;
  font-weight: 700;
  letter-spacing: .18em;
  text-transform: uppercase;
  color: var(--teal, #5ba8b2);
  opacity: .78;
}
.iba-reg-sched-day-time {
  white-space: nowrap;
  color: rgba(255, 255, 255, .82);
}
/* ─── S101: Embedded sign-in step (.iba-reg-step-auth) ─────────
   Third panel inside .iba-reg-form-state, between step-read and
   step-pay. Toggled via [hidden] like its siblings. Two-tab UI
   (Sign In / Create Account) with taupe-accented active tab. */
@keyframes fadeUp {
  from { opacity: 0; transform: translateY(8px); }
  to   { opacity: 1; transform: translateY(0); }
}
.iba-reg-step-auth {
  animation: fadeUp .4s ease;
}
.iba-reg-auth-prompt {
  font-size: 13px;
  letter-spacing: .02em;
  color: rgba(255, 255, 255, .6);
  text-align: center;
  margin: 0 0 24px;
}
.iba-reg-auth-tabs {
  display: flex;
  justify-content: center;
  gap: 0;
  border-bottom: 1px solid rgba(255, 255, 255, .08);
  margin-bottom: 24px;
}
.iba-reg-auth-tab {
  background: none;
  border: none;
  padding: 12px 24px;
  font-family: 'Inter', 'Lato', sans-serif;
  font-size: 13px;
  letter-spacing: .15em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, .45);
  border-bottom: 2px solid transparent;
  margin-bottom: -1px;
  cursor: pointer;
  transition: color .2s, border-color .25s ease;
}
.iba-reg-auth-tab:hover {
  color: rgba(255, 255, 255, .7);
}
.iba-reg-auth-tab.active {
  color: var(--taupe, #b8976a);
  border-bottom-color: var(--taupe, #b8976a);
}
.iba-reg-auth-form {
  display: none;
}
.iba-reg-auth-form.active {
  display: flex;
  flex-direction: column;
  gap: 12px;
  animation: fadeUp .3s ease both;
}
.iba-reg-password-wrapper {
  position: relative;
  display: block;
  width: 100%;
}
.iba-reg-password-wrapper .iba-reg-input {
  width: 100%;
  box-sizing: border-box;
  padding-right: 48px;
}
.iba-reg-auth-reset {
  animation: fadeUp .3s ease both;
}
.iba-reg-password-toggle {
  position: absolute;
  right: 16px;
  top: 50%;
  transform: translateY(-50%);
  background: none;
  border: none;
  color: rgba(255, 255, 255, .4);
  font-size: 16px;
  cursor: pointer;
  padding: 4px;
  transition: color .15s;
}
.iba-reg-password-toggle:hover {
  color: rgba(91, 168, 178, .9);
}
.iba-reg-auth-error {
  color: #e58a8a;
  background: rgba(232, 93, 93, .08);
  border-left: 2px solid rgba(232, 93, 93, .5);
  padding: 10px 14px;
  border-radius: 0 8px 8px 0;
  font-size: 13px;
  line-height: 1.5;
  margin: 0;
  animation: fadeUp .2s ease;
}
.iba-reg-auth-error a {
  color: var(--teal, #5ba8b2);
  text-decoration: underline;
}
.iba-reg-auth-helper {
  display: block;
  text-align: center;
  font-size: 12px;
  color: rgba(255, 255, 255, .5);
  margin-top: 14px;
  text-decoration: none;
  transition: color .15s;
}
.iba-reg-auth-helper:hover {
  color: rgba(255, 255, 255, .75);
}
.iba-reg-auth-helper a {
  color: var(--teal, #5ba8b2);
  text-decoration: none;
  border-bottom: 1px solid rgba(91, 168, 178, .3);
  transition: border-color .15s;
}
.iba-reg-auth-helper a:hover {
  border-bottom-color: rgba(91, 168, 178, .9);
}
.iba-reg-auth-submit.loading {
  pointer-events: none;
  opacity: .7;
  position: relative;
}
/* ─── S104: Trigger overrides for the three rewired disclosures ───
   The schedule + details triggers were <summary>/<span> inside <details>;
   they're now <button>s. Same shared class names so the existing teal
   colors carry over — we only suppress the browser button defaults. */
button.iba-reg-sched-toggle {
  background: none;
  border: 0;
  font: inherit;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .12em;
  text-transform: uppercase;
}
button.iba-reg-meta-details-cta-more {
  background: none;
  border: 0;
  padding: 0;
  font: inherit;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: .04em;
  cursor: pointer;
}
/* Early-bird chip is now keyboard-interactive (role="button"). */
.iba-reg-early-bird[role="button"] {
  cursor: pointer;
}
.iba-reg-early-bird[role="button"]:focus-visible {
  outline: 2px solid rgba(201, 169, 110, .6);
  outline-offset: 2px;
}
.iba-reg-early-bird-link {
  display: block;
  margin: 10px auto 0;
  width: max-content;
  padding: 4px 0;
  font-size: 11px;
  letter-spacing: .12em;
  text-transform: uppercase;
  font-weight: 600;
  color: rgba(201, 169, 110, .8);
  text-decoration: none;
  text-align: center;
}
.iba-reg-early-bird-link:hover,
.iba-reg-early-bird-link:focus-visible {
  color: var(--gold, #c9a96e);
  outline: none;
}
/* Registration-gate waiver consent (S111): checkbox + label inline, above submit. */
.iba-reg-waiver {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  margin: 4px 0 10px;
  font-size: 13px;
  line-height: 1.5;
  color: rgba(255, 255, 255, .78);
  text-align: left;
  cursor: pointer;
}
.iba-reg-waiver-check {
  margin-top: 2px;
  flex-shrink: 0;
  cursor: pointer;
}
.iba-reg-waiver-link {
  color: var(--teal2, #8bd0d8);
  text-decoration: underline;
  cursor: pointer;
}
/* ─── S105/S106: Early-Bird live countdown ───
   Now lives as a direct child of .iba-reg-pricing (the S106 unified module),
   anchored at the bottom with a hairline gold divider above it. Keeps its
   visual primacy (14/700, full-gold, brightness 1.1). Motion still comes
   from the existing whole-chip earlyBirdShimmer keyframe (the pricing
   module carries .iba-reg-early-bird as a 2nd class). Sheet variant
   (.iba-sheet-countdown) keeps its own quieter sub-line style below. */
.iba-eb-countdown {
  display: block;
  margin-top: 14px;
  padding-top: 12px;
  border-top: 0.5px solid rgba(201, 169, 110, .20);
  text-align: center;
  font-size: 14px;
  font-weight: 700;
  letter-spacing: .03em;
  color: var(--gold, #c9a96e);
  filter: brightness(1.1);
}
/* ─── S106: Unified pricing module (.iba-reg-pricing) ───
   Replaces the legacy teal .iba-reg-price pill + gold .iba-reg-early-bird
   chip with a single gold-edged two-row module: STANDARD PRICE on top,
   EARLY BIRD beneath, countdown anchored at the bottom. Self-degrades to
   a single "Price" row when no future early-bird exists.

   When the early-bird row is present, the module ALSO carries the legacy
   .iba-reg-early-bird class as a 2nd class so the existing earlyBirdShimmer
   keyframe (L457-459, one-time on .open) still fires on the new module. */
.iba-reg-pricing {
  /* Defensive overrides for the legacy .iba-reg-early-bird rule (L431) which
     the full-shape module also carries as a 2nd class (shimmer trigger). The
     legacy rule sets display: inline-block + text-align: center; neither
     matches this module's grid-based layout. Explicit overrides until the
     legacy rule is cleaned up in a separate pass. */
  display: block;
  text-align: left;
  background: linear-gradient(180deg, rgba(201, 169, 110, .10), rgba(201, 169, 110, .04));
  border: 1px solid rgba(201, 169, 110, .28);
  border-radius: 18px;
  padding: 14px 18px;
  margin-top: 20px;
  box-shadow:
    0 0 24px rgba(201, 169, 110, .14),
    inset 0 1px 0 rgba(255, 255, 255, .04);
}
.iba-reg-pricing-row {
  display: grid;
  grid-template-columns: 1fr auto;
  column-gap: 14px;
  align-items: center;
  padding: 10px 0;
}
.iba-reg-pricing-row--eb {
  border-top: 0.5px solid rgba(201, 169, 110, .20);
  padding-top: 13px;
  margin-top: 2px;
}
.iba-reg-pricing-leftstack {
  /* container so label + meta stack vertically on the left without
     affecting the price baseline on the right */
}
.iba-reg-pricing-label {
  font-size: 11px;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, .9);
  font-weight: 700;
}
.iba-reg-pricing-label--eb {
  color: var(--gold, #c9a96e);
  font-weight: 600;
}
.iba-reg-pricing-meta {
  margin-top: 3px;
  font-size: 11px;
  color: rgba(201, 169, 110, .7);
  line-height: 1.4;
}
.iba-reg-pricing-pricecol {
  text-align: right;
  white-space: nowrap;
}
.iba-reg-pricing-price {
  font-family: 'Playfair Display', 'Cormorant Garamond', Georgia, serif;
  font-size: 22px;
  color: rgba(255, 255, 255, .92);
  line-height: 1;
}
.iba-reg-pricing-price--eb {
  color: #e8d3a8;
  font-weight: 500;
}
.iba-reg-pricing-usd {
  font-size: 9px;
  letter-spacing: .16em;
  color: rgba(255, 255, 255, .45);
  margin-left: 3px;
  font-weight: 600;
  vertical-align: baseline;
  position: relative;
  top: 2px;
}
.iba-reg-pricing-usd--eb {
  color: rgba(201, 169, 110, .62);
}

/* keyframes the reserve rules reference */
@keyframes earlyBirdShimmer {
  0%   { box-shadow: 0 0 20px rgba(201, 169, 110, .15); border-color: rgba(201, 169, 110, .25); }
  45%  { box-shadow: 0 0 34px rgba(201, 169, 110, .45), 0 0 12px rgba(201, 169, 110, .3); border-color: rgba(201, 169, 110, .6); }
  100% { box-shadow: 0 0 20px rgba(201, 169, 110, .15); border-color: rgba(201, 169, 110, .25); }
}

/* reserve modal responsive (moved from course-pages.css @media) */
@media (max-width: 480px) {
  .iba-reg-meta-row {
    grid-template-columns: 1fr;
    gap: 2px;
  }
}
@media (max-width: 480px) {
  .iba-reg-sched-day {
    grid-template-columns: 60px 1fr;
    row-gap: 2px;
  }
  .iba-reg-sched-day-time {
    grid-column: 2;
  }
}

/* W14: coordinator-inquiry + disclosure-sheet modal styles (moved so the
   module owns its full interaction surface on both consumers) */
/* ─── S103: Coordinator inquiry modal (iba-inq-*) ─── */
.iba-inq-overlay {
  position: fixed; inset: 0;
  background: rgba(8, 14, 28, .8);
  backdrop-filter: blur(8px);
  display: none;
  align-items: center; justify-content: center;
  z-index: 10000;
  padding: 20px;
  opacity: 0;
  transition: opacity .3s ease;
}
.iba-inq-overlay.open {
  opacity: 1;
}
.iba-inq-box {
  background: linear-gradient(170deg, rgba(16,28,52,.98) 0%, rgba(12,22,42,.99) 50%, rgba(14,26,48,.98) 100%);
  border: 1px solid rgba(91, 168, 178, .12);
  border-radius: 24px;
  max-width: 520px; width: 100%;
  max-height: calc(100vh - 60px);
  overflow-y: auto;
  padding: 48px 40px 40px;
  position: relative;
  box-shadow:
    0 32px 80px rgba(0, 0, 0, .6),
    0 0 60px rgba(91, 168, 178, .06),
    inset 0 1px 0 rgba(255, 255, 255, .05);
  transform: translateY(20px) scale(.97);
  transition: transform .3s ease;
  overflow-x: hidden;
}
.iba-inq-overlay.open .iba-inq-box {
  transform: translateY(0) scale(1);
}
.iba-inq-glow {
  position: absolute; top: -1px; left: 50%;
  transform: translateX(-50%);
  width: 60%; height: 1px;
  background: linear-gradient(90deg, transparent, rgba(91,168,178,.6), transparent);
}
.iba-inq-close {
  position: absolute; top: 16px; right: 16px;
  background: rgba(255, 255, 255, .04);
  border: 1px solid rgba(255, 255, 255, .08);
  color: rgba(255, 255, 255, .55);
  width: 36px; height: 36px; border-radius: 50%;
  font-size: 20px; line-height: 1;
  cursor: pointer;
  display: flex; align-items: center; justify-content: center;
  transition: all .15s;
}
.iba-inq-close:hover {
  background: rgba(255, 255, 255, .08);
  color: rgba(255, 255, 255, .9);
}
.iba-inq-header {
  text-align: center;
  margin-bottom: 28px;
}
.iba-inq-kicker {
  font-family: 'Inter', sans-serif;
  font-size: 11px;
  letter-spacing: .25em;
  text-transform: uppercase;
  color: var(--teal, #5ba8b2);
  margin-bottom: 12px;
}
.iba-inq-title {
  font-family: 'Playfair Display', serif;
  font-size: 32px;
  font-weight: 400;
  color: #fff;
  line-height: 1.2;
  margin: 0 0 16px;
}
.iba-inq-sub {
  color: rgba(255, 255, 255, .65);
  font-size: 14px;
  line-height: 1.5;
  margin: 0;
}
.iba-inq-sub-quiet {
  color: rgba(255, 255, 255, .4);
  font-size: 12px;
}
.iba-inq-form {
  display: flex;
  flex-direction: column;
  gap: 12px;
  animation: fadeUp .3s ease both;
}
.iba-inq-input,
.iba-inq-textarea {
  width: 100%; box-sizing: border-box;
  background: rgba(8, 14, 28, .6);
  border: 1px solid rgba(91, 168, 178, .15);
  border-radius: 10px;
  padding: 14px 16px;
  color: #fff;
  font-family: 'Inter', sans-serif;
  font-size: 14px;
  transition: border-color .2s, background .2s;
}
.iba-inq-textarea {
  min-height: 80px;
  max-height: 200px;
  resize: vertical;
  line-height: 1.5;
}
.iba-inq-input::placeholder,
.iba-inq-textarea::placeholder {
  color: rgba(255, 255, 255, .35);
}
.iba-inq-input:focus,
.iba-inq-textarea:focus {
  outline: none;
  border-color: rgba(91, 168, 178, .5);
  background: rgba(8, 14, 28, .8);
}
.iba-inq-error {
  color: #e58a8a;
  background: rgba(232, 93, 93, .08);
  border-left: 2px solid rgba(232, 93, 93, .5);
  padding: 10px 14px;
  border-radius: 0 8px 8px 0;
  font-size: 13px;
  line-height: 1.5;
  margin: 0;
}
.iba-inq-submit {
  margin-top: 4px;
  width: 100%;
  padding: 16px;
  font-size: 13px;
  letter-spacing: .15em;
}
.iba-inq-submit.loading {
  pointer-events: none;
  opacity: .7;
}
.iba-inq-helper {
  text-align: center;
  font-size: 12px;
  color: rgba(255, 255, 255, .5);
  margin: 14px 0 0;
}
.iba-inq-helper a {
  color: var(--teal, #5ba8b2);
  text-decoration: none;
  border-bottom: 1px solid rgba(91, 168, 178, .3);
}
.iba-inq-helper a:hover {
  border-bottom-color: rgba(91, 168, 178, .9);
}
.iba-inq-success-state {
  text-align: center;
  padding: 20px 0;
  animation: fadeUp .4s ease both;
}
.iba-inq-success-icon {
  width: 64px; height: 64px;
  margin: 0 auto 20px;
  border-radius: 50%;
  background: rgba(91, 168, 178, .12);
  border: 1px solid rgba(91, 168, 178, .3);
  display: flex; align-items: center; justify-content: center;
}
.iba-inq-success-title {
  font-family: 'Playfair Display', serif;
  font-size: 24px;
  font-weight: 400;
  color: #fff;
  margin: 0 0 12px;
}
.iba-inq-success-sub {
  color: rgba(255, 255, 255, .65);
  font-size: 14px;
  line-height: 1.5;
  margin: 0 0 28px;
}
/* ─── S104: Over-modal disclosure sheet (iba-sheet-*) ───
   Centered card cloning the .iba-inq box. Sits ABOVE both the Reserve
   modal (z 9998) and the Coordinator-Inquiry overlay (z 10000) — always
   topmost. Open/close transitions match the Reserve+Inquiry pattern. The
   legacy native-<details>/<summary> CSS at L673-679 and L772-774 is left
   in place (harmless dead rules now that the three disclosures have been
   converted into sheet triggers — separate cleanup). */
.iba-sheet-overlay {
  position: fixed; inset: 0;
  background: rgba(8, 14, 28, .92);
  display: none;
  align-items: center; justify-content: center;
  z-index: 10001;
  padding: 20px;
  opacity: 0;
  transition: opacity .3s ease;
}
.iba-sheet-overlay.open { opacity: 1; }
.iba-sheet-box {
  background: linear-gradient(170deg, rgba(16,28,52,.98) 0%, rgba(12,22,42,.99) 50%, rgba(14,26,48,.98) 100%);
  border: 1px solid rgba(91, 168, 178, .12);
  border-radius: 24px;
  max-width: 520px; width: 100%;
  max-height: calc(100vh - 60px);
  overflow-y: auto;
  padding: 48px 40px 40px;
  position: relative;
  box-shadow:
    0 32px 80px rgba(0, 0, 0, .6),
    0 0 60px rgba(91, 168, 178, .06),
    inset 0 1px 0 rgba(255, 255, 255, .05);
  transform: translateY(20px) scale(.97);
  transition: transform .3s ease;
  overflow-x: hidden;
}
.iba-sheet-overlay.open .iba-sheet-box {
  transform: translateY(0) scale(1);
}
.iba-sheet-glow {
  position: absolute; top: -1px; left: 50%;
  transform: translateX(-50%);
  width: 60%; height: 1px;
  background: linear-gradient(90deg, transparent, rgba(91,168,178,.6), transparent);
}
.iba-sheet-back,
.iba-sheet-close {
  position: absolute; top: 16px;
  background: rgba(255, 255, 255, .04);
  border: 1px solid rgba(255, 255, 255, .08);
  color: rgba(255, 255, 255, .55);
  width: 36px; height: 36px; border-radius: 50%;
  font-size: 20px; line-height: 1;
  cursor: pointer; padding: 0;
  display: flex; align-items: center; justify-content: center;
  transition: all .15s;
}
.iba-sheet-back  { left: 16px; }
.iba-sheet-close { right: 16px; }
.iba-sheet-back:hover,
.iba-sheet-close:hover {
  background: rgba(255, 255, 255, .08);
  color: rgba(255, 255, 255, .9);
}
.iba-sheet-header {
  text-align: center;
  margin-bottom: 24px;
}
.iba-sheet-title {
  font-family: 'Playfair Display', serif;
  font-size: 26px;
  font-weight: 400;
  color: #fff;
  line-height: 1.2;
  margin: 0;
}
.iba-sheet-body {
  color: rgba(255, 255, 255, .82);
  font-size: 14px;
  line-height: 1.6;
}
/* Waiver viewer (S111): the fetched .md rendered as wrapped, readable prose.
   The .iba-sheet-box already scrolls (max-height + overflow-y:auto). */
.iba-sheet-waiver-pre {
  margin: 0;
  white-space: pre-wrap;
  word-break: break-word;
  font-family: inherit;
  font-size: 13px;
  line-height: 1.6;
  color: inherit;
  text-align: left;
}
.iba-sheet-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
}
.iba-sheet-card {
  background: rgba(8, 14, 28, .6);
  border: 1px solid rgba(91, 168, 178, .15);
  border-radius: 12px;
  padding: 16px;
}
.iba-sheet-card-label {
  font-size: 10px;
  font-weight: 700;
  letter-spacing: .18em;
  text-transform: uppercase;
  color: var(--teal, #5ba8b2);
  margin-bottom: 8px;
  opacity: .82;
}
.iba-sheet-card-value {
  font-family: 'Playfair Display', 'Cormorant Garamond', Georgia, serif;
  font-size: 20px;
  color: #fff;
  line-height: 1.15;
}
.iba-sheet-fine {
  margin: 18px 0 0;
  font-size: 12px;
  line-height: 1.55;
  color: rgba(255, 255, 255, .55);
}
.iba-sheet-sched-days {
  display: grid;
  gap: 8px;
}
.iba-sheet-sched-viewer {
  margin: 14px 0 0;
  font-size: 12px;
  color: rgba(255, 255, 255, .55);
}
.iba-sheet-note {
  white-space: pre-line;
  color: rgba(255, 255, 255, .85);
}
.iba-sheet-back-cta {
  margin-top: 24px;
  width: 100%;
}
.iba-sheet-card-sub {
  margin-top: 6px;
  font-size: 12px;
  font-weight: 500;
  letter-spacing: .02em;
  color: rgba(201, 169, 110, .75);
}
@media (max-width: 480px) {
  .iba-sheet-grid {
    grid-template-columns: 1fr;
  }
}

/* W13b: the modal's buttons use the course-page .btn system (.btn / .btn.teal
   / .btn.dark / .btn.outline / .btn.gold), which is scoped to body.qp-course
   and absent on schedule.html — so the CTA fell back to a default grey button.
   Re-scope those rules to the modal so its buttons are self-styled anywhere.
   (Course pages keep their own body.qp-course .btn for the rest of the page.) */
.iba-reg-overlay .btn, .iba-inq-overlay .btn, .iba-sheet-overlay .btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 10px;
  border: 1px solid transparent; cursor: pointer; border-radius: 999px;
  padding: 15px 28px; font-size: 11px; font-weight: 850; letter-spacing: .15em;
  text-transform: uppercase; transition: .32s cubic-bezier(.23,1,.32,1); white-space: nowrap;
}
.iba-reg-overlay .btn.teal, .iba-inq-overlay .btn.teal, .iba-sheet-overlay .btn.teal {
  background: linear-gradient(135deg,#78ccd5,#5ba8b2); color: #071426; text-shadow: none;
  box-shadow: 0 12px 34px rgba(91,168,178,.28), inset 0 1px 0 rgba(255,255,255,.24);
}
.iba-reg-overlay .btn.teal:hover, .iba-inq-overlay .btn.teal:hover, .iba-sheet-overlay .btn.teal:hover {
  transform: translateY(-2px); box-shadow: 0 18px 46px rgba(91,168,178,.38);
}
.iba-reg-overlay .btn.dark, .iba-inq-overlay .btn.dark, .iba-sheet-overlay .btn.dark {
  background: #0a1e33; color: #fff; box-shadow: 0 10px 28px rgba(19,30,61,.18);
}
.iba-reg-overlay .btn.outline, .iba-inq-overlay .btn.outline, .iba-sheet-overlay .btn.outline {
  background: rgba(255,255,255,.06); border-color: rgba(255,255,255,.32); color: #fff;
}
.iba-reg-overlay .btn.outline:hover, .iba-inq-overlay .btn.outline:hover, .iba-sheet-overlay .btn.outline:hover {
  background: rgba(255,255,255,.11); border-color: rgba(255,255,255,.52);
}
.iba-reg-overlay .btn.gold, .iba-inq-overlay .btn.gold, .iba-sheet-overlay .btn.gold {
  background: linear-gradient(135deg,#e0c48d,var(--gold)); color: #081427;
  box-shadow: 0 12px 34px rgba(201,169,110,.22);
}
