/* Promo codes at checkout (every event theme) and in the member's account.
   The checkout pieces draw everything in currentColor so each themed night keeps its own look. */

.promo-entry { display: grid; flex-basis: 100%; gap: 8px; width: 100%; margin-top: 12px; font-family: inherit; }
/* Everything here is thumb-sized (44px, Apple's minimum): most buyers are on phones. */
.promo-toggle { justify-self: start; min-height: 44px; padding: 4px 0; border: 0; background: none; color: inherit; cursor: pointer; font: inherit; font-size: 13px; text-decoration: underline; text-underline-offset: 3px; opacity: .85; }
.promo-toggle:hover, .promo-toggle:focus-visible { opacity: 1; }
.promo-toggle[hidden] { display: none; }

.promo-form { display: grid; gap: 6px; }
.promo-form[hidden] { display: none; }
.promo-form label { font-size: 11px; letter-spacing: .08em; text-transform: uppercase; opacity: .8; }
.promo-form-row { display: flex; gap: 8px; }
.promo-form input { flex: 1; min-width: 0; min-height: 44px; padding: 0 12px; border: 1px solid color-mix(in srgb, currentColor 45%, transparent); border-radius: 0; background: color-mix(in srgb, currentColor 6%, transparent); color: inherit; font: 500 15px 'DM Mono', ui-monospace, monospace; letter-spacing: .08em; text-transform: uppercase; }
.promo-form input::placeholder { color: inherit; opacity: .5; text-transform: none; letter-spacing: 0; }
.promo-form input:focus { outline: 2px solid currentColor; outline-offset: 1px; }
.promo-form button { min-height: 44px; padding: 0 16px; border: 1px solid currentColor; border-radius: 0; background: transparent; color: inherit; cursor: pointer; font-family: inherit; font-size: 12px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }
.promo-form button:hover { background: color-mix(in srgb, currentColor 14%, transparent); }
.promo-form button:disabled { opacity: .5; cursor: wait; }

.promo-applied { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 14px; padding: 10px 12px; border: 1px dashed currentColor; font-size: 13px; }
.promo-applied[hidden] { display: none; }
.promo-applied strong { font-family: 'DM Mono', ui-monospace, monospace; letter-spacing: .06em; }
.promo-applied .promo-savings { opacity: .85; }
.promo-applied button { margin-left: auto; min-height: 44px; padding: 0 10px; border: 1px solid color-mix(in srgb, currentColor 45%, transparent); background: none; color: inherit; cursor: pointer; font: inherit; font-size: 12px; }

.promo-suggestions { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.promo-suggestions[hidden] { display: none; }
.promo-suggestions-label { font-size: 11px; letter-spacing: .08em; text-transform: uppercase; opacity: .8; }
.promo-suggestions button { min-height: 44px; padding: 0 12px; border: 1px solid currentColor; background: color-mix(in srgb, currentColor 8%, transparent); color: inherit; cursor: pointer; font: inherit; font-size: 12px; }
.promo-suggestions button:hover { background: color-mix(in srgb, currentColor 18%, transparent); }
.promo-suggestions strong { font-family: 'DM Mono', ui-monospace, monospace; letter-spacing: .05em; }
.promo-suggestions em { font-family: 'DM Mono', ui-monospace, monospace; font-style: normal; font-size: 10px; letter-spacing: .08em; text-transform: uppercase; opacity: .75; }
/* Long codes and savings lines wrap instead of pushing the checkout wider than a small phone. */
.promo-suggestions button, .promo-applied span { max-width: 100%; overflow-wrap: anywhere; text-align: left; }

.promo-feedback { min-height: 0; margin: 0; font-size: 13px; line-height: 1.5; }
.promo-feedback:empty { display: none; }
.promo-feedback.is-error { padding-left: 10px; border-left: 2px solid currentColor; font-weight: 600; }
.promo-feedback a { color: inherit; font-weight: 700; }

/* ---------- Account → Promo codes ---------- */
.promo-tab-badge { display: inline-grid; min-width: 18px; height: 18px; margin-left: 4px; padding: 0 5px; place-items: center; border-radius: 99px; background: var(--acid); color: var(--ink); font: 700 10px 'DM Mono', monospace; vertical-align: 1px; }
.promo-tab-badge[hidden] { display: none; }
.promo-tab { display: grid; gap: 46px; max-width: 980px; }
.promo-tab-loading, .promo-empty { margin: 0; padding: 26px; border: 1px dashed rgba(16,13,24,.28); color: #5e5665; font-size: 14px; line-height: 1.6; }

/* The personal code is a membership card: dark on the paper page, with a hard purple shadow. */
.personal-pass { position: relative; display: grid; gap: 22px; max-width: 640px; padding: clamp(24px, 4vw, 38px); overflow: hidden; background: #100d18; color: #f3f0e8; box-shadow: 12px 12px 0 var(--purple); }
.personal-pass::before { content: ""; position: absolute; top: -70px; right: -70px; width: 220px; height: 220px; border-radius: 50%; background: radial-gradient(circle, rgba(167,217,29,.28), transparent 70%); pointer-events: none; }
.personal-pass > * { position: relative; }
.personal-pass-head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px; }
.personal-pass-kicker { color: var(--acid); font: 500 10px 'DM Mono', monospace; letter-spacing: .16em; text-transform: uppercase; }
.personal-pass-offer { padding: 6px 11px; border: 1px solid rgba(243,240,232,.35); font: 500 10px 'DM Mono', monospace; letter-spacing: .08em; text-transform: uppercase; }
.personal-pass-code { display: flex; flex-wrap: wrap; align-items: center; gap: 14px; }
.personal-pass-code code { font: 500 clamp(34px, 6vw, 54px)/1 'DM Mono', monospace; letter-spacing: .06em; }
.personal-pass-code code { overflow-wrap: anywhere; }
.personal-pass-actions { display: flex; flex-wrap: wrap; gap: 10px; }
.promo-share { min-height: 48px; padding: 0 22px; border: 0; background: var(--acid); color: #100d18; cursor: pointer; font: 700 12px 'DM Mono', monospace; letter-spacing: .08em; text-transform: uppercase; box-shadow: 4px 4px 0 #f3f0e8; }
.promo-share:hover { background: #d7f450; }
.promo-share:focus-visible { background: #d7f450; outline: none; box-shadow: 0 0 0 3px rgba(16,13,24,.85), 0 0 0 6px var(--acid); }
.personal-pass .promo-copy { min-height: 48px; padding: 0 18px; }
.personal-pass .promo-copy { border-color: var(--acid); color: var(--acid); }
.personal-pass .promo-copy:hover { background: var(--acid); color: #100d18; }
.punch-card { display: flex; flex-wrap: wrap; gap: 10px; }
.punch { display: grid; width: 48px; height: 48px; place-items: center; border: 2px dashed rgba(243,240,232,.32); border-radius: 50%; color: rgba(243,240,232,.45); font: 500 13px 'DM Mono', monospace; }
.punch.is-stamped { border: 2px solid var(--acid); background: var(--acid); color: #100d18; font-size: 0; transform: rotate(-8deg); }
.punch.is-stamped::after { content: "✓"; font: 800 22px Manrope, sans-serif; }
.punch.is-prize { width: 64px; border-style: solid; border-color: var(--pink); border-radius: 99px; color: var(--pink); font-size: 11px; letter-spacing: .1em; text-transform: uppercase; }
.punch.is-prize.is-stamped { background: var(--pink); color: #fff; }
.personal-pass-progress { margin: 0; font-size: 17px; line-height: 1.5; }
.personal-pass-progress strong { color: var(--acid); }
.personal-pass-fine { margin: 0; color: rgba(243,240,232,.62); font-size: 12px; line-height: 1.6; }

.promo-group { display: grid; gap: 18px; }
.promo-group > h3, .promo-how > h3 { margin: 0; font-size: 28px; text-transform: uppercase; }
.promo-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: 22px; }

.promo-copy { flex: none; min-height: 36px; padding: 0 13px; border: 1px solid #100d18; background: transparent; color: #100d18; cursor: pointer; font: 500 10px 'DM Mono', monospace; letter-spacing: .06em; text-transform: uppercase; }
.promo-copy:hover { background: #100d18; color: #fff; }

.promo-pass { position: relative; display: grid; gap: 10px; padding: 20px; border: 1px solid rgba(16,13,24,.18); background: linear-gradient(145deg, #fff, #eee9f5); box-shadow: 7px 7px 0 var(--acid); }
.promo-pass.is-monthly { box-shadow: 7px 7px 0 var(--pink); }
.promo-pass.is-reward { padding-top: 34px; box-shadow: 7px 7px 0 var(--purple); }
.promo-pass-ribbon { position: absolute; top: 0; left: 20px; padding: 5px 10px; background: var(--purple); color: #fff; font: 500 9px 'DM Mono', monospace; letter-spacing: .12em; text-transform: uppercase; }
.promo-pass.is-spent { opacity: .55; box-shadow: 7px 7px 0 #8c8592; }
.promo-pass-code { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.promo-pass-code code { color: #100d18; font: 500 18px 'DM Mono', monospace; letter-spacing: .08em; overflow-wrap: anywhere; }
.promo-pass strong { color: #100d18; font-size: 20px; }
.promo-pass small { color: #645d6c; font: 10px 'DM Mono', monospace; letter-spacing: .06em; text-transform: uppercase; }
.promo-pass p { margin: 0; color: #4a4352; font-size: 13px; line-height: 1.5; }
.promo-pass .promo-state { justify-self: start; padding: 4px 9px; border: 1px solid currentColor; font: 500 9px 'DM Mono', monospace; letter-spacing: .08em; text-transform: uppercase; }
.promo-state-ready { color: #3a5c0a; }
.promo-state-other { color: #6b6472; }

.promo-how { display: grid; gap: 18px; padding-top: 34px; border-top: 1px solid rgba(16,13,24,.16); }
.promo-how ol { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 18px; margin: 0; padding: 0; list-style: none; }
.promo-how li { display: flex; gap: 12px; }
.promo-how b { flex: none; color: var(--purple); font: 500 13px 'DM Mono', monospace; }
.promo-how span { color: #4a4352; font-size: 13px; line-height: 1.55; }
.promo-how span strong { display: block; margin-bottom: 3px; color: #100d18; font-size: 15px; }

.promo-past summary { display: flex; align-items: center; gap: 10px; padding: 12px 0; color: #5e5665; cursor: pointer; font: 500 11px 'DM Mono', monospace; letter-spacing: .08em; text-transform: uppercase; }
.promo-past summary span { padding: 2px 8px; border-radius: 99px; background: rgba(16,13,24,.08); }
.promo-past .promo-grid { margin-top: 14px; }

@media (max-width: 600px) {
  .personal-pass { box-shadow: 8px 8px 0 var(--purple); }
  .punch { width: 40px; height: 40px; }
  .punch.is-prize { width: 54px; }
  .personal-pass-progress { font-size: 15px; }
}
/* Small phones (iPhone SE, compact Androids): a whole 5-stamp card still fits on one row. */
@media (max-width: 380px) {
  .personal-pass { gap: 18px; padding: 20px 18px; }
  .punch-card { gap: 8px; }
  .punch { width: 34px; height: 34px; font-size: 12px; }
  .punch.is-stamped::after { font-size: 18px; }
  .punch.is-prize { width: 48px; font-size: 10px; }
  .personal-pass-actions > * { flex: 1 1 auto; }
}
@media (prefers-reduced-motion: reduce) { .punch.is-stamped { transform: none; } }

/* ---- Optional "text me" boxes at checkout (every event theme, and the guest popup) ----
   Same currentColor approach as the promo field above, so each night keeps its own look.
   Both boxes start unticked and the number is only asked for once one is ticked. */
.sms-optin { display: grid; gap: 10px; width: 100%; flex-basis: 100%; margin-top: 14px; font-family: inherit; }
.sms-optin-check { display: grid; grid-template-columns: auto 1fr; gap: 10px; align-items: start; min-height: 44px; padding: 4px 0; cursor: pointer; font-size: 13px; line-height: 1.4; }
.sms-optin-check input { width: 18px; height: 18px; margin: 2px 0 0; accent-color: currentColor; cursor: pointer; flex: 0 0 auto; }
.sms-optin-check span { display: grid; gap: 3px; }
.sms-optin-check small { font-size: 11px; line-height: 1.45; opacity: .72; }
.sms-optin-phone { display: grid; gap: 6px; font-size: 11px; text-transform: uppercase; letter-spacing: .06em; opacity: .85; }
.sms-optin-phone[hidden] { display: none; }
.sms-optin-phone input { min-height: 44px; padding: 10px 12px; border: 1px solid currentColor; border-radius: 0; background: transparent; color: inherit; font: inherit; font-size: 16px; text-transform: none; letter-spacing: 0; width: 100%; max-width: 280px; }
.sms-optin-phone input:focus-visible { outline: 2px solid currentColor; outline-offset: 1px; }
/* The guest popup sits on a dark panel and has its own tighter rhythm. */
.guest-dialog .sms-optin { margin-top: 4px; gap: 8px; }
.guest-dialog .sms-optin-phone input { max-width: 100%; }
