/* The seat page does not load widget.css, which is where the gold aliases are
   mapped onto the brand accent; without this the seated widget's buttons stay
   gold on a pink brand. Same three lines as widget.css. */
:root {
  --orch-gold:        var(--orch-accent, #FFBB57);
  --orch-gold-bright: var(--orch-accent-bright, #FFD089);
  --orch-gold-deep:   var(--orch-accent-deep, #E0922E);
}
/* ── Orchestra Experience — Seat Selection Widget ───────────────────────────
   Scoped under .orch-seatw (root element, rendered by Task 9 PHP template).
   Design: Candlelight Glass — deep black #060504, warm gold var(--orch-accent, #FFBB57), Playfair titles.
   Tokens: reused verbatim from widget.css (--orch-gold, --orch-bg, etc.).

   ARCHITECTURE NOTE: .orch-scrim and .orch-sheet are appended to document.body
   by seat-widget.js (not inside .orch-seatw). Any class that appears inside
   the sheet must be styled at the top level, not scoped under .orch-seatw.
   Root-only structural classes (grid, left/right cols, hall-svg, bar, etc.)
   are scoped under .orch-seatw for isolation.
*/

/* ════════════════════════════════════════════════════════════════════════════
   RESET
════════════════════════════════════════════════════════════════════════════ */
.orch-seatw *,
.orch-seatw *::before,
.orch-seatw *::after {
  box-sizing: border-box;
  -webkit-tap-highlight-color: transparent;
}

/* ════════════════════════════════════════════════════════════════════════════
   ROOT WIDGET CONTAINER
════════════════════════════════════════════════════════════════════════════ */
.orch-seatw {
  position: relative;
  width: 100%;
  background: var(--orch-bg, #060504);
  color: #fff;
  font-family: 'Inter', system-ui, sans-serif;
  font-weight: 300;
  -webkit-font-smoothing: antialiased;
  -webkit-text-size-adjust: 100%;
}

/* Warm candlelight halo */
.orch-seatw::before {
  content: '';
  position: absolute;
  top: 0; left: 50%;
  width: 420px; height: 140px;
  transform: translateX(-50%);
  background: radial-gradient(ellipse at center top, rgba(255,187,87,0.12), transparent 70%);
  background: radial-gradient(ellipse at center top, rgba(var(--orch-accent-rgb, 255,187,87),0.12), transparent 70%);
  pointer-events: none;
  z-index: 0;
}
.orch-seatw > * { position: relative; z-index: 1; }

/* ════════════════════════════════════════════════════════════════════════════
   LOADING / ERROR STATES
════════════════════════════════════════════════════════════════════════════ */
.orch-seat-loading {
  text-align: center;
  padding: 40px 20px;
  color: var(--orch-muted, rgba(255,255,255,0.55));
  font-size: 14px;
}
.orch-seat-error {
  text-align: center;
  padding: 40px 20px;
  color: #ff6b6b;
  font-size: 14px;
}

/* ════════════════════════════════════════════════════════════════════════════
   SHARED / UNSCOPED — these classes appear inside .orch-sheet (body level)
   so they must NOT be scoped under .orch-seatw
════════════════════════════════════════════════════════════════════════════ */

/* ── Error banner (SF9) ──────────────────────────────────────────────────── */
.orch-error-banner {
  display: none;
  background: #3a1010;
  color: #ffaaaa;
  border: 1px solid #a03030;
  border-radius: 6px;
  padding: 12px 16px;
  margin-bottom: 12px;
  font-size: 14px;
}

/* ── Resume payment banner (SF6) ─────────────────────────────────────────── */
.orch-resume-banner {
  background: rgba(255,187,87,0.09);
  background: rgba(var(--orch-accent-rgb, 255,187,87),0.09);
  border: 1px solid rgba(255,187,87,0.28);
  border: 1px solid rgba(var(--orch-accent-rgb, 255,187,87),0.28);
  border-radius: 6px;
  padding: 10px 14px;
  margin-bottom: 10px;
  font-size: 13px;
  color: var(--orch-muted, rgba(255,255,255,0.55));
}
.orch-resume-banner a {
  color: var(--orch-gold, var(--orch-accent, #FFBB57));
  text-decoration: underline;
}

/* ── Zone chips ──────────────────────────────────────────────────────────── */
.orch-chips {
  display: flex;
  gap: 7px;
  overflow-x: auto;
  padding: 6px 0 7px;
  scrollbar-width: none;
}
.orch-chips::-webkit-scrollbar { display: none; }

/* SF11: chip touch targets */
.orch-chip {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 8px 11px;
  min-width: 44px;
  min-height: 44px;
  border-radius: 30px;
  background: rgba(255,255,255,0.04);
  border: 1px solid var(--orch-border, rgba(255,255,255,0.09));
  font-family: inherit;
  font-size: 11px;
  white-space: nowrap;
  cursor: pointer;
  color: #fff;
  transition: border-color 0.2s, background 0.2s;
}
.orch-chip.orch-chip-on {
  border-color: var(--orch-gold, var(--orch-accent, #FFBB57));
  background: rgba(255,187,87,0.13);
  background: rgba(var(--orch-accent-rgb, 255,187,87),0.13);
}
.orch-chip-dot {
  width: 8px;
  height: 8px;
  border-radius: 3px;
  flex-shrink: 0;
}
.orch-chip b { font-weight: 600; }
.orch-chip-pr { color: var(--orch-muted, rgba(255,255,255,0.55)); }

/* ── Zone header ─────────────────────────────────────────────────────────── */
.orch-zhd {
  display: flex;
  align-items: baseline;
  gap: 8px;
  padding: 7px 0 4px;
  border-top: 1px solid rgba(255,255,255,0.06);
}
.orch-zn {
  font-family: 'Playfair Display', Georgia, serif;
  font-size: 16px;
}
.orch-rows {
  font-size: 11px;
  color: var(--orch-faint, rgba(255,255,255,0.4));
}
.orch-zp {
  margin-left: auto;
  color: var(--orch-gold, var(--orch-accent, #FFBB57));
  font-weight: 600;
  font-size: 13px;
  font-variant-numeric: tabular-nums;
}

/* ── Inputs ──────────────────────────────────────────────────────────────── */
/* Matches the zone widget's .orch-field input exactly (widget.css) — same
   font-family/weight, border-radius, and background opacity, so the buyer-info
   fields look identical between the zone and seat purchase flows. */
.orch-inp {
  width: 100%;
  padding: 13px 14px;
  border: 1px solid var(--orch-border, rgba(255,255,255,0.09));
  border-radius: 10px !important; /* theme/WC input reset (3px) otherwise wins here */
  background: rgba(0,0,0,0.25);
  color: #fff !important;
  font-family: 'Inter', 'Montserrat', system-ui, sans-serif;
  font-size: 16px;
  font-weight: 400;
  margin-top: 8px;
  outline: none;
  min-height: 46px;
  transition: border-color 0.2s, box-shadow 0.2s;
}
.orch-inp::placeholder { color: rgba(255,255,255,0.32); font-size: 11px; }
.orch-inp:focus {
  border-color: var(--orch-gold, var(--orch-accent, #FFBB57));
  box-shadow: 0 0 0 3px rgba(255,187,87,0.14);
  box-shadow: 0 0 0 3px rgba(var(--orch-accent-rgb, 255,187,87),0.14);
}
/* Seat checkout stacks the same zone-widget controls vertically. Keep every
   control metric and font identical; only the inter-field gap is different. */
.orch-seat-right .orch-inp {
  display: block;
  box-sizing: border-box;
  margin: 0 0 12px;
  font-family: 'Inter', 'Montserrat', system-ui, sans-serif;
  font-size: 16px;
  font-weight: 400;
  line-height: normal;
  color: #fff !important;
  -webkit-text-fill-color: #fff !important;
  caret-color: #fff;
}
.orch-seat-right .orch-inp::placeholder { font-size: 11px; color: rgba(255,255,255,.32); }
.orch-sheet .orch-inp {
  display: block;
  box-sizing: border-box;
  margin: 0 0 12px;
}
.orch-seat-right .orch-coupon-row { margin: 6px 0 10px; }
.orch-seat-right .orch-coupon-row .orch-inp { margin: 0; }

/* Phone numbers are entered in international format. Elementor can initialise
   intl-tel-input after render, including around the body-level mobile sheet;
   hide its redundant country flag on every checkout surface. */
.orch-seatw .iti,
.orch-sheet .iti { display: block; width: 100%; margin: 0 0 12px; }
.orch-seatw .iti .orch-inp,
.orch-sheet .iti .orch-inp { margin: 0; }
.orch-seatw .iti__flag-container,
.orch-seatw .iti__selected-flag,
.orch-seatw .iti--separate-dial-code .iti__selected-flag,
.orch-sheet .iti__flag-container,
.orch-sheet .iti__selected-flag,
.orch-sheet .iti--separate-dial-code .iti__selected-flag { display: none !important; }
.orch-seatw .iti input[type="tel"],
.orch-sheet .iti input[type="tel"] { padding-left: 14px !important; }

/* ── CTA button ──────────────────────────────────────────────────────────── */
.orch-cta {
  position: relative;
  overflow: hidden;
  padding: 14px 20px;
  border: none;
  border-radius: 13px;
  background: linear-gradient(135deg, var(--orch-gold-bright, #FFD089), var(--orch-gold, var(--orch-accent, #FFBB57)) 55%, var(--orch-gold-deep, #E0922E));
  color: #1a1206;
  font-family: inherit;
  font-weight: 700;
  font-size: 14px;
  box-shadow: 0 8px 24px rgba(255,187,87,0.34);
  box-shadow: 0 8px 24px rgba(var(--orch-accent-rgb, 255,187,87),0.34);
  white-space: nowrap;
  cursor: pointer;
  min-height: 48px;
  transition: transform 0.2s, box-shadow 0.2s;
  -webkit-tap-highlight-color: transparent;
}
.orch-cta:hover    { transform: translateY(-2px); box-shadow: 0 12px 32px rgba(var(--orch-accent-rgb, 255,187,87),0.4); }
.orch-cta:active   { transform: scale(0.98); }
.orch-cta:disabled { opacity: 0.4; box-shadow: none; cursor: default; transform: none; }
.orch-cta-full     { width: 100%; padding: 16px; margin-top: 10px; }

/* ── Theme-override guard: force gold gradient on CTA buttons ───────────────
   .orch-sheet lives on document.body (not inside .orch-seatw), so both
   selectors are required to cover mobile sheet Pay + desktop/bar Order buttons. */
.orch-seatw .orch-cta,
.orch-sheet .orch-cta,
.orch-seat-map-modal .orch-cta {
  background-image: linear-gradient(135deg, var(--orch-gold-bright,#FFD089), var(--orch-gold,var(--orch-accent, #FFBB57)) 55%, var(--orch-gold-deep,#E0922E)) !important;
  background-color: transparent !important;
  color: #1a1206 !important;
}
.orch-seatw .orch-cta:disabled,
.orch-sheet .orch-cta:disabled { opacity: .4 !important; }

/* Scope-protect chips and inputs from theme/WC/Elementor reset */
.orch-seatw .orch-chip { background: rgba(255,255,255,0.04) !important; }
.orch-seatw .orch-chip.orch-chip-on { background: rgba(var(--orch-accent-rgb, 255,187,87),0.13) !important; }
.orch-seatw .orch-inp,
.orch-sheet .orch-inp { background: rgba(0,0,0,0.25) !important; color: #fff !important; }

/* The standalone checkout still calls wp_head(), so late theme/Elementor button
   rules can reach this page. Keep every seat-control in the candlelight system. */
body .orch-seatw button.orch-seat-about-toggle {
  border: 1px solid rgba(255,255,255,.12) !important;
  border-radius: 7px !important;
  background: rgba(255,255,255,.035) !important;
  color: rgba(255,255,255,.82) !important;
}
body .orch-seatw button.orch-seat-about-toggle:hover {
  border-color: rgba(255,187,87,.35) !important;
  border-color: rgba(var(--orch-accent-rgb, 255,187,87),.35) !important;
  color: #fff !important;
}
body .orch-seatw button.orch-expand-map {
  border: 1px solid rgba(255,187,87,.32) !important;
  border: 1px solid rgba(var(--orch-accent-rgb, 255,187,87),.32) !important;
  border-radius: 7px !important;
  background: rgba(255,187,87,.08) !important;
  background: rgba(var(--orch-accent-rgb, 255,187,87),.08) !important;
  color: #ffcf85 !important;
}
body .orch-seatw button.orch-expand-map:hover {
  background: rgba(255,187,87,.15) !important;
  background: rgba(var(--orch-accent-rgb, 255,187,87),.15) !important;
  color: #fff !important;
}
body .orch-seatw button.orch-zoom-btn {
  border: 0 !important;
  border-radius: 7px !important;
  background: transparent !important;
  color: var(--orch-gold-bright, #ffd089) !important;
}
body .orch-seatw button.orch-zoom-btn + button.orch-zoom-btn {
  border-top: 1px solid rgba(255,255,255,.14) !important;
}

/* Shimmer — only when motion is allowed (orch-animated on root) */
.orch-seatw.orch-animated .orch-cta:not(:disabled)::after {
  content: '';
  position: absolute;
  top: 0; left: -60%; width: 40%; height: 100%;
  background: linear-gradient(100deg, transparent, rgba(255,255,255,0.55), transparent);
  transform: skewX(-20deg);
  animation: orchSeatShimmer 3.4s ease-in-out 1.2s infinite;
}

/* ── Trust line ──────────────────────────────────────────────────────────── */
.orch-trust {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  margin-top: 11px;
  font-size: 11px;
  color: var(--orch-faint, rgba(255,255,255,0.4));
}
.orch-trust svg { width: 12px; height: 12px; }
/* Xendit lockup — mark + word as one tight inline-flex unit */
.orch-xendit-logo { display: inline-flex; align-items: center; gap: 2px; flex-shrink: 0; }
/* Xendit mark: override squash, specificity 0,2,0 beats 0,1,1 */
.orch-trust .orch-xendit-mark { width: auto; height: 14px; opacity: 1; }
/* No margin-left: gap on .orch-xendit-logo handles spacing */
.orch-trust .orch-xendit-word { font-weight: 700; font-size: 14px; letter-spacing: -0.01em; line-height: 1; text-transform: lowercase; vertical-align: middle; }

/* ── Coupon ──────────────────────────────────────────────────────────────── */
.orch-coupon-note {
  font-size: 11px;
  color: var(--orch-muted, rgba(255,255,255,0.55));
  margin-top: 6px;
}
.orch-coupon-row { margin-top: 6px; }

/* ── Selected seat rows ──────────────────────────────────────────────────── */
.orch-ss {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 11px 13px;
  border-radius: 11px;
  background: rgba(0,0,0,0.3);
  border: 1px solid var(--orch-border, rgba(255,255,255,0.09));
  margin-bottom: 8px;
}
.orch-ss-left  { display: flex; align-items: center; gap: 9px; }
.orch-ss-right { display: flex; align-items: center; gap: 10px; }
.orch-dot  { width: 10px; height: 10px; border-radius: 3px; flex-shrink: 0; }
.orch-sid  { font-weight: 600; font-size: 13.5px; }
.orch-zn-sm { font-size: 10.5px; color: var(--orch-muted, rgba(255,255,255,0.55)); }
.orch-pr   { color: var(--orch-gold, var(--orch-accent, #FFBB57)); font-weight: 600; font-size: 13px; font-variant-numeric: tabular-nums; }
.orch-x    {
  color: var(--orch-faint, rgba(255,255,255,0.4));
  cursor: pointer; font-size: 16px;
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 24px; min-height: 24px; padding: 4px;
}
.orch-x:hover { color: #ff6b6b; }

/* ── Total / subtotal row ────────────────────────────────────────────────── */
.orch-tot,
.orch-panel-total {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  margin: 15px 0 4px;
  padding-top: 13px;
  border-top: 1px solid rgba(255,255,255,0.08);
}
.orch-tot-l { font-size: 12.5px; color: var(--orch-muted, rgba(255,255,255,0.55)); }
.orch-tot-v { font-size: 20px; font-weight: 700; color: var(--orch-gold, var(--orch-accent, #FFBB57)); font-variant-numeric: tabular-nums; }

/* ════════════════════════════════════════════════════════════════════════════
   DESKTOP TWO-COLUMN LAYOUT (≥900px)
   Hall map left (1.6fr) + persistent purchase panel right (1fr)
════════════════════════════════════════════════════════════════════════════ */
@media (min-width: 900px) {
  .orch-seatw {
    padding: 20px;
  }

  /* SF7 / B2: single column by default (900–1099px) — the purchase panel
     stacks BELOW the hall map instead of squeezing into a cramped sidebar
     (or disappearing). Widened to a true side-by-side grid at ≥1100px,
     see the dedicated media query below. This range is still JS "desktop
     mode" (isDesktop, no bottom-sheet) — only the CSS column layout changes. */
  .orch-seat-grid {
    display: grid;
    grid-template-columns: 1fr;
    gap: 24px;
  }

  /* Left column — hall map */
  .orch-seat-left {
    min-width: 0;
  }

  /* Right column — purchase panel. Non-sticky/static by default (stacked
     layout); becomes a sticky sidebar only once there's room for two
     columns side by side (≥1100px, see below). */
  .orch-seat-right {
    position: static;
    background: rgba(255,255,255,0.025);
    border: 1px solid var(--orch-border, rgba(255,255,255,0.09));
    border-radius: 16px;
    padding: 20px;
  }

  /* Full hall SVG */
  .orch-hall-svg {
    display: block;
    width: 100%;
    height: auto;
    border-radius: 10px;
    background: rgba(255,255,255,0.01);
    border: 1px solid rgba(255,255,255,0.06);
    margin-top: 10px;
    cursor: crosshair;
  }

  /* Panel "Your Order" title */
  .orch-panel-title {
    font-family: 'Playfair Display', Georgia, serif;
    font-size: 19px;
    margin-bottom: 14px;
    color: #fff;
  }

  /* Hover tooltip */
  .orch-tooltip {
    position: absolute;
    z-index: 100;
    background: rgba(10,8,6,0.92);
    border: 1px solid rgba(255,187,87,0.3);
    border: 1px solid rgba(var(--orch-accent-rgb, 255,187,87),0.3);
    border-radius: 7px;
    padding: 6px 10px;
    font-size: 12px;
    color: rgba(255,255,255,0.9);
    pointer-events: none;
    white-space: nowrap;
    backdrop-filter: blur(4px);
    -webkit-backdrop-filter: blur(4px);
  }

  /* Zone legend */
  .orch-legend {
    margin-top: 20px;
    padding-top: 16px;
    border-top: 1px solid rgba(255,255,255,0.07);
  }
  .orch-legend-row {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 5px 0;
    font-size: 12px;
  }
  .orch-legend-dot {
    width: 10px;
    height: 10px;
    border-radius: 3px;
    flex-shrink: 0;
  }
  .orch-legend-nm { flex: 1; color: rgba(255,255,255,0.7); }
  .orch-legend-pr { color: var(--orch-gold, var(--orch-accent, #FFBB57)); font-variant-numeric: tabular-nums; font-weight: 600; font-size: 11px; }

  /* Status legend separator */
  .orch-legend-sep {
    border-top: 1px solid rgba(255,255,255,0.06);
    margin: 8px 0 4px;
  }
  .orch-legend-statuses {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 4px 14px;
  }
  .orch-legend-statuses .orch-legend-row {
    flex: 0 0 auto;
    gap: 6px;
    padding: 4px 0;
  }
  .orch-legend-statuses .orch-legend-nm { flex: none; }
  .orch-legend-statuses .orch-legend-x { margin-left: -3px; }
  /* Sold × glyph in legend */
  .orch-legend-x {
    color: rgba(255,255,255,0.55);
    font-size: 13px;
    margin-left: auto;
  }

  /* Chips: horizontal padding comes from .orch-seat-left container */
  .orch-seat-left .orch-chips { padding-left: 0; padding-right: 0; }

  /* No bottom sheet on desktop */
  .orch-sheet,
  .orch-scrim { display: none !important; }

  /* Mobile-only elements hidden on desktop */
  .orch-mag-svg,
  .orch-map-wrap,
  .orch-zoom-ctl,
  .orch-price-legend,
  .orch-bar { display: none; }
}

/* ════════════════════════════════════════════════════════════════════════════
   WIDE DESKTOP (≥1100px) — side-by-side two-column grid
   Below this (900–1099px) the block above already gives a single-column
   stack (map on top, purchase panel below) instead of squeezing both.
════════════════════════════════════════════════════════════════════════════ */
@media (min-width: 1100px) {
  .orch-seat-grid {
    grid-template-columns: 1.6fr 1fr;
    align-items: start;
  }
  .orch-seat-right {
    position: sticky;
    top: 24px;
    max-height: calc(100vh - 48px);
    overflow-y: auto;
  }
}

/* ════════════════════════════════════════════════════════════════════════════
   MOBILE LAYOUT (<900px)
   One continuous pinch-zoomable map + price legend + sticky bottom bar + rising sheet
════════════════════════════════════════════════════════════════════════════ */
@media (max-width: 899px) {
  .orch-seatw {
    display: flex;
    flex-direction: column;
    -webkit-user-select: none;
    user-select: none;
    -webkit-touch-callout: none;
  }

  /* Desktop-only elements hidden on mobile */
  .orch-seat-right,
  .orch-panel-title,
  .orch-legend,
  .orch-legend-row,
  .orch-tooltip { display: none !important; }

  /* Chips (desktop zone tabs) are not used on mobile at all anymore */
  .orch-chips { display: none; }

  /* Zone header (old single-zone-focus display) is not used on mobile anymore */
  .orch-zhd { display: none; }

  /* Map + zoom-control wrapper. Row layout: map fills remaining width,
     zoom column is a narrow flex sibling instead of an absolute overlay —
     align-items:stretch (the flex default) makes it match the map's full
     height automatically, so it never sits on top of seats. */
  .orch-map-wrap {
    position: relative;
    flex: 1;
    display: flex;
    gap: 8px;
    min-height: 0;
    isolation: isolate;
  }

  /* Height is set inline by JS to match the hall's own aspect ratio (see
     seat-widget.js) instead of a fixed min-height that doesn't relate to
     the actual hall shape and forces letterboxing above/below the seats. */
  .orch-mag-svg {
    flex: 1 1 auto;
    min-width: 0;
    display: block;
    touch-action: none;
    cursor: grab;
  }
  .orch-mag-svg:active { cursor: grabbing; }

  /* SF11: visible magnifier seat dots are >= adequate size (r=8 user-units).
     Transparent hit circles are sized in JS to half the intra-zone pitch so
     adjacent seats never share a tap target. */
  .orch-mseat { cursor: pointer; }

  /* Zoom controls: a narrow lane beside the map, not an overlay on top of it. */
  .orch-zoom-ctl {
    position: static;
    flex: none;
    width: 48px;
    display: flex;
    flex-direction: column;
    gap: 0;
    z-index: 8;
    overflow: hidden;
    padding: 3px;
    border: 1px solid rgba(255,207,133,0.42);
    border-radius: 10px;
    background: rgba(15,13,11,0.88);
    box-shadow: 0 8px 24px rgba(0,0,0,0.38);
    backdrop-filter: blur(12px);
  }
  /* Each button fills exactly half the lane's height (its own zone), and the
     whole zone — not just the glyph — is the tap target; the glyph is
     centered within it via the button's own flex centering. */
  .orch-zoom-btn {
    flex: 1 1 0;
    width: 100%;
    min-height: 44px;
    border: 0;
    border-radius: 7px;
    background: transparent;
    color: var(--orch-gold-bright, #FFD089);
    font-size: 23px;
    font-weight: 500;
    line-height: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
  }
  .orch-zoom-btn + .orch-zoom-btn { border-top: 1px solid rgba(255,255,255,0.14); }
  .orch-zoom-btn:active { background: rgba(var(--orch-accent-rgb, 255,187,87),0.22); color: #fff; }
  .orch-zoom-btn:focus-visible { outline: 2px solid #FFCF85; outline-offset: -2px; }

  /* The map is an interaction surface, not selectable page content. Form
     controls remain selectable so contact data can still be corrected. */
  .orch-seatw input,
  .orch-seatw textarea {
    -webkit-user-select: text;
    user-select: text;
    -webkit-touch-callout: default;
  }

  /* Zone price legend — replaces the old horizontal zone-chip row */
  .orch-price-legend {
    flex: none;
    display: flex;
    flex-wrap: wrap;
    gap: 6px 14px;
    padding: 10px 16px 2px;
  }
  .orch-legend-zone {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 11px;
    color: rgba(255,255,255,0.75);
    white-space: nowrap;
  }
  .orch-legend-zone-dot {
    width: 9px;
    height: 9px;
    border-radius: 50%;
    flex-shrink: 0;
  }
  .orch-legend-zone-pr {
    color: var(--orch-gold, var(--orch-accent, #FFBB57));
    font-weight: 600;
  }

  /* Compact status legend on mobile */
  .orch-status-legend {
    display: flex;
    flex-wrap: wrap;
    gap: 6px 12px;
    padding: 4px 16px 8px;
  }
  .orch-sleg-item {
    display: flex;
    align-items: center;
    gap: 5px;
    font-size: 10px;
    color: rgba(255,255,255,0.55);
    white-space: nowrap;
  }
  .orch-sleg-dot {
    width: 8px;
    height: 8px;
    border-radius: 3px;
    flex-shrink: 0;
  }
  .orch-sleg-lbl { color: rgba(255,255,255,0.55); }

  /* Sticky bottom bar — labelled "sticky" but never actually was: .orch-seatw
     has no bounded height on an embedded (non-fullscreen) page, so flex:1 on
     .orch-map-wrap had nothing to grow into and the bar just sat in normal
     document flow, scrolling away with the rest of the page. */
  .orch-bar {
    position: sticky;
    bottom: 0;
    flex: none;
    padding: 12px 16px;
    padding-bottom: max(18px, env(safe-area-inset-bottom));
    background: #060504;
    display: flex;
    align-items: center;
    gap: 12px;
    border-top: 1px solid rgba(255,255,255,0.07);
    z-index: 10;
  }
  .orch-bar-info { flex: 1; min-width: 0; }
  .orch-bar-l { font-size: 11px; color: var(--orch-muted, rgba(255,255,255,0.55)); }
  .orch-bar-v { font-size: 18px; font-weight: 700; color: var(--orch-gold, var(--orch-accent, #FFBB57)); font-variant-numeric: tabular-nums; }
}

/* ── Held seat ring — used by both desktop and mobile paint() ───────────────
   JS sets fill/stroke as SVG attributes; this class drives the pulse animation.
   stroke-dasharray is set inline by JS (2 1.5) for the dashed ring. */
.orch-seat-held {
  stroke: rgba(200,130,20,0.72);
  stroke-width: 1.1;
}

/* ════════════════════════════════════════════════════════════════════════════
   SCRIM + SHEET — body-level fixed elements (document.body.appendChild in JS)
   Styled unscoped; orch- prefix provides namespacing.
════════════════════════════════════════════════════════════════════════════ */

/* Scrim overlay */
.orch-scrim {
  position: fixed;
  inset: 0;
  background: rgba(4,3,2,0.62);
  z-index: 18;
  opacity: 0;
  pointer-events: none;
}
.orch-scrim.orch-show {
  opacity: 1;
  pointer-events: auto;
}

/* Rising checkout sheet */
.orch-sheet {
  position: fixed;
  bottom: 0;
  left: 0; right: 0;
  background: #0f0d0b;
  border-radius: 26px 26px 0 0;
  border-top: 1px solid rgba(255,187,87,0.2);
  border-top: 1px solid rgba(var(--orch-accent-rgb, 255,187,87),0.2);
  padding: 12px 18px;
  padding-bottom: max(24px, env(safe-area-inset-bottom));
  box-shadow: 0 -20px 60px rgba(0,0,0,0.7);
  z-index: 20;
  max-height: 88vh;
  overflow-y: auto;
  transform: translateY(100%);
}
.orch-sheet.orch-show {
  transform: translateY(0);
}

/* Drag grab handle */
.orch-grab {
  width: 42px;
  height: 4px;
  border-radius: 4px;
  background: rgba(255,255,255,0.22);
  margin: 2px auto 14px;
  cursor: grab;
  /* SF11: enlarge tap area without changing visual */
  position: relative;
  /* Native drag: the browser must NOT claim this gesture for scroll/overscroll,
     so the JS pointer handler can track the finger 1:1. */
  touch-action: none;
}
.orch-grab::after {
  content: '';
  position: absolute;
  inset: -14px -40px;
  touch-action: none;
}

/* Sheet title */
.orch-sh-ttl {
  font-family: 'Playfair Display', Georgia, serif;
  font-size: 19px;
  margin-bottom: 14px;
  color: #fff;
}

/* ════════════════════════════════════════════════════════════════════════════
   ANIMATIONS — keyed off .orch-animated (only added by JS when motion is OK)
════════════════════════════════════════════════════════════════════════════ */

/* Sheet slide-up — only when motion is allowed */
body:has(.orch-seatw.orch-animated) .orch-sheet {
  transition: transform 0.32s cubic-bezier(0.16, 1, 0.3, 1);
}
body:has(.orch-seatw.orch-animated) .orch-scrim {
  transition: opacity 0.25s;
}

/* Held seat pulse — inside root, so can use .orch-animated scope */
.orch-seatw.orch-animated .orch-seat-held {
  animation: orchSeatHeldPulse 2s ease-in-out infinite;
}

/* ── Keyframes ──────────────────────────────────────────────────────────── */
@keyframes orchSeatShimmer {
  0%           { left: -60%; }
  28%, 100%    { left: 130%; }
}
@keyframes orchSeatHeldPulse {
  0%, 100% { opacity: 0.65; }
  50%      { opacity: 0.9; }
}

/* ════════════════════════════════════════════════════════════════════════════
   SVG SEAT STATUS STYLES (data-status attribute + JS-assigned class)
   Note: JS sets fill/fill-opacity as SVG presentation attributes for performance;
   these CSS rules apply to any static / server-rendered seats with data-status.
════════════════════════════════════════════════════════════════════════════ */
/* SF11: transparent hit circles — pointer-events & cursor set inline by JS */
.orch-seatw .orch-seat-dot { transition: r 0.1s, fill 0.1s; }

/* Held / sold via data-status (passive / fallback) */
.orch-seatw circle[data-status="sold"] { fill: #444; opacity: 0.5;  cursor: not-allowed; }
.orch-seatw circle[data-status="held"] { fill: #888; opacity: 0.65; cursor: not-allowed; }

/* ════════════════════════════════════════════════════════════════════════════
   SF10: REDUCED MOTION
   Disables transitions, animations, sheet slide, scrim fade, shimmer.
════════════════════════════════════════════════════════════════════════════ */
@media (prefers-reduced-motion: reduce) {
  /* Scoped elements inside root */
  .orch-seatw *,
  .orch-seatw *::before,
  .orch-seatw *::after {
    animation-duration:       0.01ms !important;
    animation-iteration-count: 1     !important;
    transition-duration:      0.01ms !important;
  }

  /* Body-level sheet and scrim */
  .orch-sheet { transition: none !important; }
  .orch-scrim { transition: none !important; }
}
/* Localized event context above the assigned-seat map. */
.orch-seat-event{max-width:1180px;margin:0 auto 20px;padding:4px 4px 0}.orch-seat-event h1{margin:0;color:#fff;font-family:'Playfair Display',Georgia,serif;font-size:clamp(27px,3vw,38px);font-weight:500;letter-spacing:0;line-height:1.18}.orch-seat-event-line{margin-top:9px;color:var(--orch-accent, #FFBB57);font-size:15px;font-weight:600}.orch-seat-about-toggle{display:inline-flex;align-items:center;gap:7px;margin:15px 0 0;padding:9px 12px;border:1px solid rgba(255,255,255,.12);border-radius:7px;background:rgba(255,255,255,.035);color:rgba(255,255,255,.82);font:500 14px/1 Inter,system-ui,sans-serif;cursor:pointer}.orch-seat-about-toggle:hover{border-color:rgba(var(--orch-accent-rgb, 255,187,87),.35);color:#fff}.orch-seat-about-toggle .orch-arrow{color:var(--orch-accent, #FFBB57);transition:transform .2s ease}.orch-seat-about-toggle.open .orch-arrow{transform:rotate(180deg)}.orch-seat-about-content{display:none;max-width:790px;margin-top:10px;color:rgba(255,255,255,.72);font-size:15px;line-height:1.7}.orch-seat-about-content.open{display:block}.orch-seat-about-content p{margin:0 0 12px}.orch-seat-about-content p:last-child{margin-bottom:0}.orch-seat-about-content h1,.orch-seat-about-content h2,.orch-seat-about-content h3,.orch-seat-about-content h4{margin:17px 0 8px;color:#fff;font-family:'Playfair Display',Georgia,serif;font-weight:500;line-height:1.28}.orch-seat-about-content h1:first-child,.orch-seat-about-content h2:first-child,.orch-seat-about-content h3:first-child,.orch-seat-about-content h4:first-child{margin-top:0}.orch-seat-about-content ul,.orch-seat-about-content ol{margin:0 0 12px;padding-left:23px}.orch-seat-about-content li{margin:4px 0}.orch-seat-about-content a{color:#ffcf85;text-decoration:underline;text-underline-offset:3px}
.orch-seat-left>.orch-chips .orch-chip{padding:10px 13px;font-size:12px}.orch-expand-map{display:inline-flex;align-items:center;gap:8px;margin:0 0 10px;padding:10px 13px;border:1px solid rgba(var(--orch-accent-rgb, 255,187,87),.32);border-radius:7px;background:rgba(var(--orch-accent-rgb, 255,187,87),.08);color:#ffcf85;font:600 13px/1 Inter,system-ui,sans-serif;cursor:pointer}.orch-expand-map:hover{background:rgba(var(--orch-accent-rgb, 255,187,87),.15);color:#fff}.orch-seat-map-modal{position:fixed;inset:0;z-index:10020;display:grid;place-items:center;padding:20px;background:rgba(3,3,2,.8);backdrop-filter:blur(12px)}.orch-seat-map-dialog{position:relative;width:min(1440px,100%);height:min(900px,100%);display:flex;flex-direction:column;overflow:hidden;padding:18px;border:1px solid rgba(255,255,255,.14);border-radius:12px;background:linear-gradient(145deg,rgba(31,27,23,.98),rgba(9,8,7,.98));box-shadow:0 30px 90px rgba(0,0,0,.7)}.orch-seat-map-modal-head{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:0 2px 13px;color:#fff;font-family:'Playfair Display',Georgia,serif;font-size:21px}.orch-seat-map-close{display:inline-flex;align-items:center;justify-content:center;min-height:42px;padding:0 14px;border:1px solid rgba(var(--orch-accent-rgb, 255,187,87),.35);border-radius:7px;background:rgba(var(--orch-accent-rgb, 255,187,87),.09);color:#ffe0ac;font:600 13px/1 Inter,system-ui,sans-serif;cursor:pointer;white-space:nowrap}.orch-seat-map-close:hover{border-color:rgba(255,207,133,.72);background:rgba(var(--orch-accent-rgb, 255,187,87),.18);color:#fff}.orch-seat-map-close:focus-visible{outline:2px solid #ffcf85;outline-offset:3px}.orch-expanded-controls{display:flex;align-items:center;gap:14px;min-width:0;margin:0 0 12px}.orch-expanded-chips{flex:1 1 auto;min-width:0;margin:0;padding:0;gap:8px}.orch-expanded-chips .orch-chip{padding:10px 13px;font-size:12px}.orch-expanded-summary{display:flex;align-items:center;justify-content:flex-end;gap:7px;flex:0 0 auto;min-height:40px;padding:7px 10px;border:1px solid rgba(255,255,255,.12);border-radius:7px;background:rgba(255,255,255,.045);color:rgba(255,255,255,.84);font:600 12px/1.2 Inter,system-ui,sans-serif;white-space:nowrap}.orch-expanded-summary-zone{display:inline-flex;align-items:center;gap:5px}.orch-expanded-summary-zone i{width:8px;height:8px;border-radius:50%;box-shadow:0 0 0 1px rgba(255,255,255,.16)}.orch-expanded-summary-total{padding-left:7px;border-left:1px solid rgba(255,255,255,.16);color:#ffcf85}.orch-seat-map-dialog .orch-hall-svg{width:100%;height:100%;max-height:none;margin:0;cursor:crosshair}.orch-seat-map-dialog .orch-hall-svg .orch-seat-dot{filter:drop-shadow(0 1px 2px rgba(0,0,0,.45))}.orch-seat-map-dialog .orch-hall-svg .orch-seat-num{font-size:9.2px}.orch-seat-map-dialog .orch-hall-svg .orch-row-label{font-size:8.4px;fill:#fff1d6}.orch-seat-map-dialog .orch-hall-svg text{user-select:none}.orch-seat-hover-card{position:absolute;z-index:3;max-width:260px;padding:10px 12px;border:1px solid rgba(255,255,255,.18);border-radius:7px;background:rgba(38,33,28,.82);box-shadow:0 12px 28px rgba(0,0,0,.32);backdrop-filter:blur(14px);color:#fff;font:600 13px/1.4 Inter,system-ui,sans-serif;pointer-events:none}

/* Assigned-seat checkout follows the same candlelight-glass surface as the zone widget. */
.orch-seatw{background:transparent}.orch-seatw::before{width:min(620px,100%);height:180px}.orch-seat-right{background:linear-gradient(160deg,rgba(255,255,255,.07),rgba(255,255,255,.025))!important;border-color:rgba(255,255,255,.12)!important;box-shadow:inset 0 1px 0 rgba(255,255,255,.05),0 16px 42px rgba(0,0,0,.2)}.orch-hall-svg,.orch-mag-svg{background:linear-gradient(160deg,rgba(255,255,255,.025),rgba(var(--orch-accent-rgb, 255,187,87),.018))!important;border-color:rgba(255,255,255,.1)!important}.orch-seat-dot,.orch-mseat{filter:drop-shadow(0 1px 1px rgba(0,0,0,.32))}.orch-seat-dot[stroke="#FFF1D6"],.orch-mseat[stroke="#FFF1D6"]{filter:drop-shadow(0 0 8px rgba(var(--orch-accent-rgb, 255,187,87),.85))}.orch-coupon-note.success{color:#a9ce91}.orch-coupon-note.error{color:#ff8f8f}.orch-coupon-note.checking{color:rgba(255,255,255,.54)}
.orch-seat-map-modal-head .orch-seat-map-close{flex:0 0 auto;padding:0 18px;border:0;border-radius:7px;background:linear-gradient(135deg,var(--orch-gold-bright,#FFD089),var(--orch-gold,var(--orch-accent, #FFBB57)) 55%,var(--orch-gold-deep,#E0922E));color:#1a1206;font:700 13px/1 Inter,system-ui,sans-serif;box-shadow:0 8px 24px rgba(var(--orch-accent-rgb, 255,187,87),.34)}.orch-seat-map-modal-head .orch-seat-map-close:hover{background:linear-gradient(135deg,var(--orch-gold-bright,#FFD089),var(--orch-gold,var(--orch-accent, #FFBB57)) 55%,var(--orch-gold-deep,#E0922E));color:#1a1206}
/* Seat labels use the SVG center as their baseline; this keeps one-, two- and
   three-digit numbers optically centered at every map scale. */
.orch-seat-map-dialog .orch-hall-svg .orch-seat-num{font-size:6.4px;dominant-baseline:central}
@media (max-width:899px){.orch-seat-event{padding:8px 16px 0}.orch-seat-event-line{font-size:14px}.orch-seat-about-toggle{font-size:14px}.orch-seat-about-content p{font-size:14px}.orch-map-wrap{padding:8px 12px 0}.orch-mag-svg{border-radius:14px}.orch-bar{border-top:1px solid rgba(255,255,255,.12);background:rgba(15,13,11,.92);backdrop-filter:blur(16px)}}
@media (max-width:899px){.orch-expand-map{display:none}.orch-seat-map-modal{padding:10px}.orch-seat-map-dialog{padding:12px}.orch-seat-map-modal-head{font-size:18px}.orch-expanded-controls{align-items:flex-start;flex-direction:column;gap:8px}.orch-expanded-chips{width:100%}.orch-expanded-summary{width:100%;justify-content:flex-start;overflow-x:auto}}

/* ── Tier switcher (stalls / balcony) ──────────────────────────────────── */

/* Colours are literal, not var()-driven, and the box properties are forced:
   these are <button> elements dropped into a page whose theme styles buttons,
   and on staging that theme painted a red border and red label straight over
   the token-based version of this rule. */
.orch-level-tabs {
  display: flex;
  gap: 6px;
  margin: 0 0 8px;
  padding: 4px;
  border-radius: 30px;
  background: rgba(255,255,255,0.04);
  border: 1px solid rgba(255,255,255,0.09) !important;
}

.orch-level-tab {
  flex: 1 1 0;
  min-height: 38px;
  padding: 8px 12px;
  border: 0 !important;
  border-radius: 26px !important;
  background: transparent !important;
  box-shadow: none !important;
  font-family: inherit;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.02em;
  color: rgba(255,255,255,0.62) !important;
  white-space: nowrap;
  cursor: pointer;
  transition: background 0.2s, color 0.2s;
}

.orch-level-tab:hover { background: rgba(255,255,255,0.06) !important; }

.orch-level-tab.orch-level-tab-on {
  background: rgba(255,187,87,0.15) !important;
  background: rgba(var(--orch-accent-rgb, 255,187,87),0.15) !important;
  color: var(--orch-accent, #FFBB57) !important;
}

.orch-lvl-off { display: none !important; }

/* ── Promo discount line ───────────────────────────────────────────────── */

.orch-panel-discount,
.orch-tot.orch-tot-discount {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 10px;
  margin: 0 0 2px;
  font-size: 12px;
  color: var(--orch-gold, var(--orch-accent, #FFBB57));
}

.orch-disc-l {
  font-weight: 600;
  letter-spacing: 0.02em;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.orch-disc-v {
  flex: 0 0 auto;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
}
