/**
 * ============================================================================
 * Chaitanya 2k26 — Events Page & Competition Arena Styles
 * ============================================================================
 * High-impact brutalist glassmorphic aesthetic matching the main site & /contact:
 * - Frosted ethereal glassmorphism with subtle noise texture
 * - Bold display headers in DrukMedium
 * - Monospace tags, brackets, and badges in IBM Plex Mono
 * - High-contrast responsive card grid and slide-in dossier drawer
 */

/* Main Page Container */
.events-page-root {
  min-height: 100vh;
  width: 100%;
  padding: 88px 24px 64px;
  /* Dot pattern + sky gradient (tokens.css). */
  background-image: var(--page-bg);
  background-repeat: repeat;
  background-size: var(--page-bg-size);
  color: var(--ink);
  background-attachment: fixed;
  box-sizing: border-box;
  position: relative;
}

body:has(.events-page-root) .transition-component {
  display: none !important;
  opacity: 0 !important;
  clip-path: circle(0 at 50% 50%) !important;
  -webkit-clip-path: circle(0 at 50% 50%) !important;
  pointer-events: none !important;
}

/* Separate rule: browsers without :has() drop a whole selector list. */
.has-events-page .transition-component {
  display: none !important;
  opacity: 0 !important;
  clip-path: circle(0 at 50% 50%) !important;
  -webkit-clip-path: circle(0 at 50% 50%) !important;
  pointer-events: none !important;
}

@media (max-width: 991px) {
  .events-page-root {
    padding: 72px 12px 48px;
  }
}

.events-container {
  max-width: 1280px;
  margin: 0 auto;
}

/* ============================================================================
 * 1. HERO SECTION
 * ============================================================================ */
.events-hero {
  text-align: center;
  margin-bottom: 32px;
  position: relative;
  width: 100%;
  opacity: 1;
}

.events-hero-tag {
  display: inline-block;
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  font-weight: 600;
  letter-spacing: var(--track-label);
  text-transform: uppercase;
  color: var(--ink-muted);
  margin-bottom: 12px;
}

.events-hero-title {
  font-family: "DrukMedium", sans-serif;
  font-size: clamp(42px, 7vw, 92px);
  line-height: 1.1;
  letter-spacing: var(--track-display);
  text-transform: uppercase;
  color: var(--ink);
  margin: 0 0 12px;
}

.events-hero-subtitle {
  font-family: "IBM Plex Mono", monospace;
  font-size: 14px;
  font-weight: 500;
  color: var(--ink);
  color: color-mix(in srgb, var(--ink) 75%, transparent);
  letter-spacing: var(--track-body);
  text-transform: none;
  max-width: 680px;
  margin: 0 auto 24px;
  line-height: 1.4;
}

/* Stats Pill Strip */
.events-stats-strip {
  display: flex;
  justify-content: center;
  flex-wrap: wrap;
  gap: 12px;
  margin-bottom: 24px;
}

.events-stat-pill {
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  font-weight: 600;
  color: var(--ink);
  background: var(--surface);
  border: 1.5px solid var(--surface);
  padding: 8px 16px;
  border-radius: 30px;
  box-shadow: 0 4px 12px rgba(15, 23, 42, 0.06);
  letter-spacing: var(--track-label);
  text-transform: uppercase;
}

.events-stat-pill.highlight {
  background: var(--ink);
  color: var(--ink-on-dark);
  border-color: var(--line-strong);
}

/* ============================================================================
 * 2. STICKY FILTER BAR & SEARCH
 * ============================================================================ */
.events-toolbar {
  position: sticky;
  top: 70px;
  z-index: 50;
  margin-bottom: 32px;
  padding: 12px 16px;
  background: var(--surface);
  border: 1.5px solid var(--surface);
  border-radius: 40px;
  box-shadow: 0 12px 36px rgba(15, 23, 42, 0.06);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 12px;
  transition: transform var(--motion-150) var(--ease-out), opacity var(--motion-150) var(--ease-out), background-color var(--motion-150) ease, color var(--motion-150) ease, border-color var(--motion-150) ease, box-shadow var(--motion-150) ease;
}

.events-toolbar.is-pinned {
  top: 70px;
  background: var(--surface);
  border-color: color-mix(in srgb, var(--ink) 18%, transparent);
  box-shadow: 0 16px 40px rgba(15, 23, 42, 0.06), 0 2px 8px rgba(0, 0, 0, 0.04);
  transform: translateZ(0);
}

@media (max-width: 991px) {
  .events-toolbar {
    top: 62px;
    align-items: stretch;
    border-radius: 20px;
    padding: 12px;
    gap: 12px;
  }
}

/* Category Filter Tabs */
.events-categories {
  display: flex;
  align-items: center;
  gap: 8px;
  overflow-x: auto;
  scrollbar-width: none;
  -ms-overflow-style: none;
  padding: 2px 0;
  max-width: 100%;
}

.events-categories::-webkit-scrollbar {
  display: none;
}

.events-cat-btn {
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  font-weight: 600;
  color: var(--ink);
  background: var(--surface);
  border: 1px solid color-mix(in srgb, var(--ink) 15%, transparent);
  border-radius: 30px;
  padding: 8px 16px;
  cursor: pointer;
  white-space: nowrap;
  transition: transform var(--motion-150) var(--ease-out), opacity var(--motion-150) var(--ease-out), background-color var(--motion-150) ease, color var(--motion-150) ease, border-color var(--motion-150) ease, box-shadow var(--motion-150) ease;
  text-transform: uppercase;
  letter-spacing: var(--track-label);
  display: flex;
  align-items: center;
  gap: 8px;
}

.events-cat-btn:hover {
  background: var(--surface);
  border-color: var(--line-strong);
  transform: translateY(-1px);
}

.events-cat-btn.active {
  background: var(--ink);
  color: var(--ink-on-dark);
  border-color: var(--line-strong);
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.06);
}

.events-cat-btn .cat-count {
  font-size: var(--fs-label);
  opacity: 0.7;
}

/* Search Box: centred, icon left / clear right, same inset on both sides. */
.events-search-wrap {
  position: relative;
  width: min(560px, 100%);
  color: var(--ink-muted);
}

.events-search-icon {
  position: absolute;
  left: 16px;
  top: 50%;
  transform: translateY(-50%);
  pointer-events: none;
}

.events-search-input {
  width: 100%;
  background: var(--surface);
  border: 1.5px solid color-mix(in srgb, var(--ink) 15%, transparent);
  border-radius: 12px;
  min-height: 40px;
  padding: 8px 48px;
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  font-weight: 500;
  color: var(--ink);
  outline: none;
  box-sizing: border-box;
  transition: border-color 0.2s ease, box-shadow 0.2s ease;
  letter-spacing: var(--track-body);
}

.events-search-input::-webkit-search-cancel-button {
  -webkit-appearance: none;
}

.events-search-input:focus {
  border-color: var(--line-strong);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--ink) 8%, transparent);
}

.events-search-clear {
  position: absolute;
  right: 16px;
  top: 50%;
  transform: translateY(-50%);
  background: transparent;
  border: none;
  font-size: 14px;
  cursor: pointer;
  color: var(--ink-muted);
  padding: 0;
  display: none;
}

.events-search-clear.active {
  display: block;
}

/* ============================================================================
 * 3. EVENT CARDS GRID
 * ============================================================================ */
.events-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(320px, 100%), 1fr));
  gap: 24px;
}

@media (max-width: 767px) {
  .events-grid {
    gap: 16px;
  }
}

/* Individual Event Card */
.event-card {
  position: relative;
  background: var(--surface);
  background-image: url(/images/footerPatern.png);
  background-repeat: repeat;
  background-size: 70px;
  border: 2px solid var(--surface);
  border-radius: 24px;
  padding: 24px;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  box-shadow: 
    0 20px 48px rgba(15, 23, 42, 0.06),
    0 2px 10px rgba(0, 0, 0, 0.03),
    inset 0 1px 0 var(--surface);
  opacity: 0;
  /* Transitions audit: list items enter with a short lift, not a large slide. */
  transform: translateY(8px);
  transition: 
    opacity 300ms cubic-bezier(0.16, 1, 0.3, 1),
    transform 300ms cubic-bezier(0.16, 1, 0.3, 1),
    box-shadow 0.3s ease,
    border-color 0.3s ease;
  /* No will-change: the reveal is a CSS transform/opacity transition, which the
     browser composites on its own; a permanent layer per card cost memory. */
  box-sizing: border-box;
}

.event-card.is-revealed {
  opacity: 1;
  transform: translateY(0) scale(1);
}

.event-card.is-revealed:hover {
  transform: translateY(-3px);
  box-shadow: 
    0 32px 64px rgba(15, 23, 42, 0.06),
    0 4px 16px rgba(0, 0, 0, 0.05),
    inset 0 1px 0 var(--surface);
  border-color: var(--line-strong);
}

/* Card state: added to cart / registered. */
.event-card.is-added {
  border-color: var(--line-strong);
}

.event-card.is-registered {
  border-color: var(--ok);
}

/* Card Top Badges */
.event-card-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 8px;
  margin-bottom: 16px;
}

.event-badge-category {
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  font-weight: 600;
  letter-spacing: var(--track-label);
  text-transform: uppercase;
  padding: 4px 8px;
  border-radius: 6px;
  border: 1px solid currentColor;
}

.event-badge-format {
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  font-weight: 600;
  letter-spacing: var(--track-label);
  color: var(--ink);
  color: color-mix(in srgb, var(--ink) 80%, var(--surface));
  background: color-mix(in srgb, var(--ink) 5%, transparent);
  padding: 4px 8px;
  border-radius: 6px;
  text-transform: uppercase;
}

/* Card Titles */
.event-card-title {
  font-family: "DrukMedium", sans-serif;
  font-size: 28px;
  line-height: 1.1;
  letter-spacing: var(--track-display);
  text-transform: uppercase;
  color: var(--ink);
  margin: 0 0 8px;
  overflow-wrap: anywhere;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  line-clamp: 2;
  overflow: hidden;
}

.event-card-tagline {
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  font-weight: 500;
  color: var(--ink);
  color: color-mix(in srgb, var(--ink) 70%, transparent);
  line-height: 1.4;
  margin-bottom: 16px;
  text-transform: none;
  /* Two lines, always: the meta blocks line up across a row of cards. */
  min-height: 2.8em;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  line-clamp: 2;
  overflow: hidden;
}

/* Card Metadata Grid */
.event-card-meta {
  display: flex;
  flex-direction: column;
  gap: 8px;
  background: var(--surface);
  border: 1px solid color-mix(in srgb, var(--ink) 8%, transparent);
  border-radius: 12px;
  padding: 12px 12px;
  margin-bottom: 16px;
}

.event-meta-row {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  letter-spacing: var(--track-body);
}

.event-meta-label {
  color: var(--ink-muted);
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: var(--track-label);
  flex-shrink: 0;
}

.event-meta-val {
  color: var(--ink);
  font-weight: 600;
  text-transform: none;
  text-align: right;
  min-width: 0;
  overflow-wrap: anywhere;
}

.event-meta-val.prize {
  color: var(--ok);
  font-weight: 600;
}

/* Card Action Buttons */
.event-card-actions {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-top: auto;
}

.event-btn-details {
  flex: 1;
  background: var(--surface);
  border: 1.5px solid var(--line-strong);
  color: var(--ink);
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  font-weight: 600;
  letter-spacing: var(--track-label);
  padding: 12px;
  border-radius: 30px;
  cursor: pointer;
  text-align: center;
  text-transform: uppercase;
  transition: transform var(--motion-150) var(--ease-out), opacity var(--motion-150) var(--ease-out), background-color var(--motion-150) ease, color var(--motion-150) ease, border-color var(--motion-150) ease, box-shadow var(--motion-150) ease;
}

.event-btn-details:hover {
  background: var(--surface);
  background: color-mix(in srgb, var(--ink) 6%, var(--surface));
  transform: translateY(-1px);
}

.event-btn-register {
  flex: 1.2;
  background: var(--ink);
  border: 1.5px solid var(--line-strong);
  color: var(--ink-on-dark);
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  font-weight: 600;
  letter-spacing: var(--track-label);
  padding: 12px;
  border-radius: 30px;
  cursor: pointer;
  text-align: center;
  text-transform: uppercase;
  transition: transform var(--motion-150) var(--ease-out), opacity var(--motion-150) var(--ease-out), background-color var(--motion-150) ease, color var(--motion-150) ease, border-color var(--motion-150) ease, box-shadow var(--motion-150) ease;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.06);
}

.event-btn-register:hover {
  background: var(--ink);
  background: color-mix(in srgb, var(--ink) 87%, var(--surface));
  transform: translateY(-1px);
  box-shadow: 0 6px 16px rgba(0, 0, 0, 0.06);
}

.event-btn-register.registered {
  background: var(--ok);
  border-color: var(--ok);
  color: var(--ink-on-dark);
}

/* Empty State */
.events-empty {
  text-align: center;
  padding: 64px 24px;
  font-family: "IBM Plex Mono", monospace;
  color: var(--ink-muted);
  grid-column: 1 / -1;
}

.events-empty h3 {
  font-family: "DrukMedium", sans-serif;
  font-size: 32px;
  color: var(--ink);
  margin-bottom: 8px;
  text-transform: uppercase;
}

/* ============================================================================
 * 4. EVENT DETAILS DOSSIER DRAWER
 * ============================================================================ */
.event-dossier-overlay {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 99999 !important;
  background: var(--sky-top);
  background: color-mix(in srgb, color-mix(in srgb, var(--sky-bottom) 40%, var(--sky-top)) 60%, transparent);
  opacity: 0;
  pointer-events: none;
  /* visibility keeps the closed drawer out of the tab order and a11y tree. */
  visibility: hidden;
  transition: opacity 0.3s cubic-bezier(0.16, 1, 0.3, 1), visibility 0s linear 0.3s;
  display: flex;
  justify-content: flex-end;
}

.event-dossier-overlay.active {
  opacity: 1;
  pointer-events: auto;
  visibility: visible;
  transition: opacity 0.3s cubic-bezier(0.16, 1, 0.3, 1), visibility 0s;
}

.event-dossier-panel {
  color: var(--ink);
  width: 100%;
  max-width: 620px;
  height: 100%;
  background: var(--surface);
  background-image: url(/images/footerPatern.png);
  background-repeat: repeat;
  background-size: 80px;
  border-left: 2px solid var(--surface);
  box-shadow: -20px 0 60px rgba(15, 23, 42, 0.06);
  overflow-y: auto;
  scrollbar-width: none;
  padding: 32px 32px 40px;
  box-sizing: border-box;
  transform: translateX(100%);
  transition: transform 300ms cubic-bezier(0.16, 1, 0.3, 1);
  display: flex;
  flex-direction: column;
}

.event-dossier-panel::-webkit-scrollbar {
  display: none;
}

.event-dossier-overlay.active .event-dossier-panel {
  transform: translateX(0);
}

.event-dossier-close {
  align-self: flex-end;
  background: var(--surface);
  border: 1.5px solid var(--line-strong);
  color: var(--ink);
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  font-weight: 600;
  padding: 8px 16px;
  border-radius: 30px;
  cursor: pointer;
  text-transform: uppercase;
  letter-spacing: var(--track-label);
  margin-bottom: 24px;
  transition: transform var(--motion-150) var(--ease-out), opacity var(--motion-150) var(--ease-out), background-color var(--motion-150) ease, color var(--motion-150) ease, border-color var(--motion-150) ease, box-shadow var(--motion-150) ease;
}

.event-dossier-close:hover {
  background: var(--ink);
  color: var(--ink-on-dark);
}

/* Dossier Header */
.event-dossier-badge {
  display: inline-block;
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  font-weight: 600;
  padding: 4px 8px;
  border-radius: 6px;
  border: 1px solid currentColor;
  margin-bottom: 8px;
  text-transform: uppercase;
  letter-spacing: var(--track-label);
}

.event-dossier-title {
  font-family: "DrukMedium", sans-serif;
  font-size: 38px;
  line-height: 1.1;
  letter-spacing: var(--track-display);
  text-transform: uppercase;
  color: var(--ink);
  margin: 0 0 12px;
}

.event-dossier-tagline {
  font-family: "IBM Plex Mono", monospace;
  font-size: 12px;
  font-weight: 500;
  color: var(--ink);
  color: color-mix(in srgb, var(--ink) 73%, var(--surface));
  margin-bottom: 24px;
  line-height: 1.4;
  /* Sentence-length copy: keep its natural case for readability. */
  text-transform: none;
}

/* Dossier Specs Grid */
.event-dossier-specs {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 12px;
  background: var(--surface);
  border: 1px solid color-mix(in srgb, var(--ink) 10%, transparent);
  border-radius: 16px;
  padding: 16px;
  margin-bottom: 24px;
}

/* Date and venue get the full row; the short facts pair up two per row,
   phones included (one column made a seven-row list before the content). */
.event-spec-item.wide {
  grid-column: 1 / -1;
}

.event-spec-item {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
  overflow-wrap: anywhere;
}

.event-spec-k {
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  font-weight: 600;
  color: var(--ink-muted);
  text-transform: uppercase;
  letter-spacing: var(--track-label);
}

.event-spec-v {
  font-family: "IBM Plex Mono", monospace;
  font-size: 12px;
  font-weight: 600;
  color: var(--ink);
  text-transform: none;
}

/* Dossier Content Blocks */
.event-dossier-section {
  margin-bottom: 24px;
}

.event-dossier-heading {
  font-family: "IBM Plex Mono", monospace;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: var(--track-label);
  text-transform: uppercase;
  color: var(--ink);
  border-bottom: 1.5px solid var(--line-strong);
  padding-bottom: 8px;
  margin-bottom: 12px;
}

.event-dossier-text {
  font-family: "IBM Plex Mono", monospace;
  font-size: 12px;
  color: var(--ink);
  color: color-mix(in srgb, var(--ink) 87%, var(--surface));
  line-height: 1.6;
}

.event-dossier-list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.event-dossier-list li {
  font-family: "IBM Plex Mono", monospace;
  font-size: 12px;
  line-height: 1.5;
  color: var(--ink);
  color: color-mix(in srgb, var(--ink) 93%, var(--surface));
  position: relative;
  padding-left: 24px;
}

.event-dossier-list li:before {
  content: "+";
  position: absolute;
  left: 0;
  top: 0;
  font-weight: 600;
  color: var(--ink);
}

.event-rulebook-btn {
  display: inline-flex;
  align-items: center;
  min-height: var(--tap, 44px);
  margin-bottom: 16px;
  padding: 8px 14px;
  border: 1.5px solid var(--line-strong);
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  font-weight: 600;
  color: var(--ink);
  text-decoration: none;
}

.event-rulebook-btn:hover {
  background: var(--ink);
  color: var(--surface);
}

.event-rulebook-btn:focus-visible {
  outline: 2px solid var(--ink);
  outline-offset: 2px;
}

/* Coordinator Box */
.event-coordinator-card {
  background: var(--surface);
  border: 1px solid color-mix(in srgb, var(--ink) 10%, transparent);
  border-radius: 12px;
  padding: 12px 16px;
  margin-bottom: 8px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 12px;
}

.event-coord-info {
  display: flex;
  flex-direction: column;
}

.event-coord-name {
  font-family: "IBM Plex Mono", monospace;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: var(--track-name);
  color: var(--ink);
}

.event-coord-role {
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  color: var(--ink-muted);
  text-transform: none;
}

.event-coord-actions {
  display: flex;
  gap: 8px;
}

.event-coord-btn {
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  font-weight: 600;
  color: var(--ink);
  background: var(--surface);
  border: 1px solid var(--line-strong);
  padding: 4px 12px;
  border-radius: 20px;
  text-decoration: none;
  text-transform: uppercase;
  letter-spacing: var(--track-label);
  transition: transform var(--motion-150) var(--ease-out), opacity var(--motion-150) var(--ease-out), background-color var(--motion-150) ease, color var(--motion-150) ease, border-color var(--motion-150) ease, box-shadow var(--motion-150) ease;
}

.event-coord-btn:hover {
  background: var(--ink);
  color: var(--ink-on-dark);
}

/* ============================================================================
 * 5. REGISTRATION & PAYMENT MODAL
 * ============================================================================ */
.event-reg-modal {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 100000 !important;
  background: var(--sky-top);
  background: color-mix(in srgb, color-mix(in srgb, var(--sky-bottom) 40%, var(--sky-top)) 60%, transparent);
  opacity: 0;
  pointer-events: none;
  visibility: hidden;
  transition: opacity 0.3s cubic-bezier(0.16, 1, 0.3, 1), visibility 0s linear 0.3s;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 16px;
  box-sizing: border-box;
}

.event-reg-modal.active {
  opacity: 1;
  pointer-events: auto;
  visibility: visible;
  transition: opacity 0.3s cubic-bezier(0.16, 1, 0.3, 1), visibility 0s;
}

.event-reg-card {
  color: var(--ink);
  position: relative;
  width: 100%;
  max-width: 540px;
  /* % of the overlay, which is sized to the visible viewport (100dvh on
     phones): 90vh alone could put the bottom under the browser toolbar. */
  max-height: min(90vh, 100%);
  overflow-y: auto;
  overscroll-behavior: contain;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
  background: var(--surface);
  background-image: url(/images/footerPatern.png);
  background-repeat: repeat;
  background-size: 80px;
  border: 2px solid var(--surface);
  border-radius: 28px;
  padding: 32px 32px;
  box-shadow: 0 30px 90px rgba(15, 23, 42, 0.06);
  box-sizing: border-box;
}

.event-reg-card::-webkit-scrollbar {
  display: none;
}

.event-reg-close {
  position: absolute;
  top: 16px;
  right: 16px;
  background: var(--surface);
  border: 1.5px solid var(--line-strong);
  color: var(--ink);
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  font-weight: 600;
  padding: 4px 12px;
  border-radius: 30px;
  cursor: pointer;
  text-transform: uppercase;
  letter-spacing: var(--track-label);
}

.event-reg-close:hover {
  background: var(--ink);
  color: var(--ink-on-dark);
}

.event-reg-form {
  display: flex;
  flex-direction: column;
  gap: 16px;
  margin-top: 16px;
}

.event-reg-group {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.event-reg-label {
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  font-weight: 600;
  color: var(--ink);
  text-transform: uppercase;
  letter-spacing: var(--track-label);
}

.event-reg-input {
  width: 100%;
  min-width: 0;
  box-sizing: border-box;
  background: var(--surface);
  border: 1.5px solid color-mix(in srgb, var(--ink) 20%, transparent);
  border-radius: 12px;
  padding: 12px 16px;
  font-family: "IBM Plex Mono", monospace;
  font-size: 12px;
  color: var(--ink);
  outline: none;
  transition: border-color 0.2s ease;
}

.event-reg-input:focus {
  border-color: var(--line-strong);
}

/* Payment Box with QR Code */
.event-upi-payment-box {
  background: var(--surface);
  border: 1.5px solid var(--line-strong);
  border-radius: 16px;
  padding: 16px;
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: 12px;
}

.event-qr-display {
  /* Big enough to scan from a laptop screen; always white (dark mode too). */
  width: 200px;
  height: 200px;
  margin: 4px auto;
  background: #ffffff;
  border: 1px solid var(--line-strong);
  border-radius: 10px;
  padding: 8px;
  box-sizing: border-box;
}

.event-qr-display img {
  width: 100%;
  height: 100%;
  object-fit: contain;
}

.event-upi-id-copy {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  max-width: 100%;
  min-width: 0;
  overflow-wrap: anywhere;
  background: var(--surface);
  background: color-mix(in srgb, var(--ink) 6%, var(--surface));
  padding: 8px 12px;
  border-radius: 20px;
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  font-weight: 600;
  color: var(--ink);
}

.event-upi-copy-btn {
  background: var(--ink);
  color: var(--ink-on-dark);
  border: none;
  padding: 4px 8px;
  border-radius: 12px;
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  cursor: pointer;
  text-transform: uppercase;
  letter-spacing: var(--track-label);
}

.event-submit-btn {
  background: var(--ink);
  color: var(--ink-on-dark);
  border: none;
  border-radius: 30px;
  padding: 12px 24px;
  font-family: "IBM Plex Mono", monospace;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: var(--track-label);
  cursor: pointer;
  text-transform: uppercase;
  margin-top: 8px;
  transition: transform var(--motion-150) var(--ease-out), opacity var(--motion-150) var(--ease-out), background-color var(--motion-150) ease, color var(--motion-150) ease, border-color var(--motion-150) ease, box-shadow var(--motion-150) ease;
  box-shadow: 0 4px 14px rgba(0, 0, 0, 0.06);
}

.event-submit-btn:hover {
  background: var(--ink);
  background: color-mix(in srgb, var(--ink) 87%, var(--surface));
  transform: translateY(-1px);
}

/* ============================================================================
 * 9. SCROLL MOTION UI & FLOATING HUD
 * ============================================================================ */

/* Top Scroll Progress Accent Bar */
#events-scroll-progress {
  position: fixed;
  top: 0;
  left: 0;
  height: 3.5px;
  width: 100%;
  transform: scaleX(0);
  transform-origin: left center;
  background: var(--ink);
  z-index: 100001;
  pointer-events: none;
  /* Set every frame from a rAF: a transition here restarted a new animation
     per scroll frame for no visible gain. */
  box-shadow: none;
}

/* Hero Ambient Parallax Coordinates */
.events-hero-coords {
  display: block;
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  color: var(--ink-muted);
  letter-spacing: var(--track-label);
  margin-bottom: 8px;
  user-select: none;
}

/* Brutalist Floating Scroll HUD */
.events-scroll-hud {
  position: fixed;
  bottom: 24px;
  right: 24px;
  z-index: 990;
  display: flex;
  align-items: center;
  gap: 12px;
  background: var(--surface);
  border: 1.5px solid var(--line-strong);
  padding: 8px 16px;
  border-radius: 40px;
  box-shadow: 0 16px 36px rgba(15, 23, 42, 0.06), inset 0 1px 0 var(--surface);
  opacity: 0;
  transform: translateY(8px) scale(0.98);
  pointer-events: none;
  /* Hidden HUD's TOP button must not be a focus stop. */
  visibility: hidden;
  transition: opacity 0.3s ease, transform 0.3s cubic-bezier(0.16, 1, 0.3, 1), visibility 0s linear 0.3s;
}

.events-scroll-hud.active {
  opacity: 1;
  transform: translateY(0) scale(1);
  pointer-events: auto;
  visibility: visible;
  transition: opacity 0.3s ease, transform 0.3s cubic-bezier(0.16, 1, 0.3, 1), visibility 0s;
}

.events-scroll-metric {
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  font-weight: 600;
  color: var(--ink);
  letter-spacing: var(--track-label);
  display: flex;
  align-items: center;
  gap: 8px;
  user-select: none;
}

.events-scroll-metric .pulse-dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--ok);
  /* Static: the counter is not live data, so no pulsing. */
}

.events-scroll-top-btn {
  background: var(--ink);
  color: var(--ink-on-dark);
  border: none;
  padding: 8px 16px;
  border-radius: 20px;
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  font-weight: 600;
  letter-spacing: var(--track-label);
  cursor: pointer;
  display: flex;
  align-items: center;
  gap: 8px;
  transition: transform var(--motion-150) var(--ease-out), opacity var(--motion-150) var(--ease-out), background-color var(--motion-150) ease, color var(--motion-150) ease, border-color var(--motion-150) ease, box-shadow var(--motion-150) ease;
}

.events-scroll-top-btn:hover {
  transform: translateY(-2px);
  box-shadow: 0 4px 12px rgba(15, 23, 42, 0.06);
}

/* Reduced Motion Overrides */
@media (prefers-reduced-motion: reduce) {
  .event-card {
    transition: opacity 150ms ease !important;
    transform: none !important;
    opacity: 1 !important;
  }
  .events-scroll-hud {
    transition: opacity 150ms ease !important;
    transform: none !important;
  }
  #events-scroll-progress {
    transition: none !important;
  }
}

/* ==========================================================================
   Registration modal & entry pass (v2)
   ========================================================================== */
.events-hero-note {
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  /* Sits on the gradient's darker band + dot pattern; muted ink fell to ~4.1:1. */
  color: var(--ink);
  margin-top: 16px;
  letter-spacing: var(--track-body);
}

.event-reg-head {
  text-align: center;
  margin-bottom: 16px;
}

.event-reg-kicker {
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  font-weight: 600;
  color: var(--ok);
  letter-spacing: var(--track-label);
}

.event-reg-title {
  font-family: "DrukMedium", sans-serif;
  font-size: clamp(26px, 6vw, 34px);
  line-height: 1.1;
  margin: 8px 0;
  text-transform: uppercase;
  overflow-wrap: anywhere;
}

.event-reg-sub {
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  color: var(--ink-muted);
  line-height: 1.5;
}

.event-reg-sub a,
.event-reg-closed-note a {
  color: var(--ink);
  text-decoration: underline;
}

.event-reg-mode {
  border: none;
  padding: 0;
  margin: 0;
}

.event-reg-mode label {
  font-family: "IBM Plex Mono", monospace;
  font-size: 12px;
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 8px 0;
  cursor: pointer;
}

.event-reg-hint {
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  color: var(--ink-muted);
}

.event-reg-code,
.event-reg-utr {
  letter-spacing: 1.5px;
  font-weight: 600;
}

.event-reg-code {
  text-transform: uppercase;
}

.event-reg-input:focus-visible,
.event-submit-btn:focus-visible,
.event-upi-copy-btn:focus-visible,
.event-upi-app-btn:focus-visible {
  outline: 2px solid var(--line-strong);
  outline-offset: 2px;
}

.event-reg-input[readonly] {
  background: var(--surface);
  background: color-mix(in srgb, var(--ink) 4%, var(--surface));
  color: var(--ink-muted);
}

.event-reg-free-note,
.event-reg-closed-note {
  border-radius: 12px;
  padding: 12px 16px;
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  line-height: 1.5;
}

.event-reg-free-note {
  background: var(--ok-bg);
  border: 1.5px solid #2ecc71;
  color: var(--ok);
  font-weight: 600;
  text-align: center;
}

.event-reg-closed-note {
  background: var(--warn-bg);
  border: 1.5px solid #f5a623;
  color: var(--warn-ink);
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.event-upi-amount {
  font-family: "IBM Plex Mono", monospace;
  font-size: 12px;
  font-weight: 600;
}

.event-upi-app-btn {
  display: inline-block;
  background: var(--ok);
  color: var(--ink-on-dark);
  border-radius: 30px;
  padding: 12px 16px;
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  font-weight: 600;
  text-decoration: none;
}

.event-upi-help {
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  color: var(--ink);
  color: color-mix(in srgb, var(--ink) 73%, var(--surface));
  line-height: 1.5;
  margin: 0;
}

#reg-payment-box .event-reg-group {
  width: 100%;
  text-align: left;
}

.event-reg-error {
  color: var(--danger);
  background: var(--danger-bg);
  border: 1px solid #f5c2c7;
  border-radius: 10px;
  padding: 8px 12px;
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
}

.event-submit-btn:disabled {
  opacity: 0.45;
  cursor: not-allowed;
}

.event-submit-btn.secondary {
  background: transparent;
  color: var(--ink);
  border: 1.5px solid var(--line-strong);
  box-shadow: none;
  width: 100%;
}

.event-pass,
.event-pass-loading {
  text-align: center;
  font-family: "IBM Plex Mono", monospace;
}

.event-pass-loading {
  padding: 40px 0;
  font-size: 12px;
  color: var(--ink-muted);
}

.event-pass-status {
  display: inline-block;
  font-size: var(--fs-label);
  font-weight: 600;
  padding: 4px 16px;
  border-radius: 20px;
}

.event-pass-status.ok {
  color: var(--ok);
  background: var(--ok-bg);
}

.event-pass-status.pending {
  color: var(--warn-ink);
  background: var(--warn-bg);
}

.event-pass-status.bad {
  color: var(--danger-ink);
  background: var(--danger-bg);
}

.event-pass-ticket {
  background: var(--surface);
  border: 2px dashed var(--line-strong);
  border-radius: 16px;
  padding: 16px 16px;
  margin: 16px 0 12px;
  text-align: left;
}

.event-pass-ticket dl {
  margin: 0;
  display: grid;
  gap: 8px;
}

.event-pass-ticket dl > div {
  display: grid;
  grid-template-columns: 72px 1fr;
  gap: 12px;
  font-size: var(--fs-label);
}

.event-pass-ticket dt {
  color: var(--ink-muted);
  font-weight: 600;
}

.event-pass-ticket dd {
  margin: 0;
  color: var(--ink);
  overflow-wrap: anywhere;
}

.event-pass-ticket .mono {
  letter-spacing: 1px;
  font-weight: 600;
}

.event-pass-code {
  margin-top: 16px;
  padding-top: 12px;
  border-top: 1px solid color-mix(in srgb, var(--ink) 12%, transparent);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  font-size: var(--fs-label);
  color: var(--ink-muted);
}

.event-pass-code strong {
  font-family: "DrukMedium", sans-serif;
  font-size: 30px;
  letter-spacing: 2px;
  color: var(--ink);
}

.event-pass-note {
  font-size: var(--fs-label);
  color: var(--ink);
  color: color-mix(in srgb, var(--ink) 73%, var(--surface));
  line-height: 1.5;
  margin: 0 0 12px;
}

@media (max-width: 480px) {
  .event-reg-card {
    padding: 24px 16px;
    border-radius: 20px;
  }
}

/* ==========================================================================
   Performance: phones, tablets and low-power devices
   Backdrop blur is the most expensive effect while scrolling; the cards are
   already near-opaque, so swap blur for a solid tint where it costs most.
   ========================================================================== */
@media (hover: none), (max-width: 1024px) {
  .event-card,
  .events-toolbar,
  .events-toolbar.is-pinned,
  .events-scroll-hud,
  .event-dossier-panel,
  .event-reg-card {
    -webkit-backdrop-filter: none !important;
    backdrop-filter: none !important;
  }

  .event-card {
    background-color: var(--surface);
    box-shadow: 0 6px 18px rgba(15, 23, 42, 0.06);
    transition: opacity 300ms ease, transform 300ms ease;
  }

  .events-toolbar.is-pinned,
  .events-scroll-hud,
  .event-dossier-panel,
  .event-reg-card {
    background-color: var(--surface);
  }

  .event-reg-modal,
  .event-dossier-overlay {
    -webkit-backdrop-filter: none !important;
    backdrop-filter: none !important;
    background: var(--sky-top);
    background: color-mix(in srgb, color-mix(in srgb, var(--sky-top) 89%, var(--ink)) 75%, transparent);
  }
}

.event-card {
  contain: layout paint;
}


.event-btn-register.is-closed,
.event-btn-register:disabled {
  background: transparent;
  color: var(--ink-muted);
  border-color: color-mix(in srgb, var(--ink) 20%, transparent);
  cursor: not-allowed;
  box-shadow: none;
}

/* Display headings: open up the condensed Druk letterforms for readability */
.events-hero-title,
.event-card-title,
.events-empty h3,
.event-dossier-title,
.event-reg-title {
  letter-spacing: 0.04em;
  word-spacing: 0.08em;
}

.event-pass-code strong {
  letter-spacing: 0.12em;
}

/* ==========================================================================
   Cart, checkout & event actions
   ========================================================================== */
.event-btn-register.in-cart,
.event-action-large.in-cart {
  background: var(--surface);
  color: var(--ink);
}

.event-btn-register.registered,
.event-action-large.registered {
  background: var(--ok-bg);
  border-color: #2ecc71;
  color: var(--ok);
  box-shadow: none;
}

.event-dossier-cta {
  display: flex;
  flex-direction: column;
  gap: 12px;
  margin-top: 24px;
}

.event-action-large {
  width: 100%;
  border: 1.5px solid var(--line-strong);
}

.event-link-btn {
  border: none;
  background: none;
  padding: 4px 0;
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  color: var(--ink);
  text-decoration: underline;
  cursor: pointer;
  text-align: left;
}

/* Floating cart button */
.events-cart-fab {
  position: fixed;
  left: 24px;
  bottom: 24px;
  z-index: 990;
  display: inline-flex;
  align-items: center;
  gap: 12px;
  padding: 12px 16px;
  border-radius: 30px;
  border: 2px solid var(--line-strong);
  background: var(--surface);
  color: var(--ink);
  font-family: "IBM Plex Mono", monospace;
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.06);
  transition: transform 0.2s ease, background 0.2s ease;
}

.events-cart-fab.has-items {
  background: var(--ink);
  color: var(--ink-on-dark);
}

.events-cart-fab-count {
  min-width: 22px;
  min-height: 22px;
  border-radius: 11px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: var(--cat-cultural);
  color: var(--ink-on-dark);
  font-size: var(--fs-label);
  padding: 0 8px;
}

/* Cart drawer */
.events-cart-overlay {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 99999;
  background: var(--sky-top);
  background: color-mix(in srgb, color-mix(in srgb, var(--sky-top) 87%, var(--ink)) 60%, transparent);
  opacity: 0;
  visibility: hidden;
  transition: opacity 300ms ease, visibility 0s linear 300ms;
}

.events-cart-overlay.active {
  opacity: 1;
  visibility: visible;
  transition: opacity 300ms ease, visibility 0s;
}

.events-cart-panel {
  position: absolute;
  top: 0;
  right: 0;
  height: 100%;
  width: min(420px, 100vw);
  display: flex;
  flex-direction: column;
  background: var(--surface);
  color: var(--ink);
  border-left: 2px solid var(--surface);
  box-shadow: -20px 0 60px rgba(15, 23, 42, 0.06);
  font-family: "IBM Plex Mono", monospace;
  transform: translateX(100%);
  transition: transform 300ms cubic-bezier(0.2, 0.8, 0.2, 1);
}

.events-cart-overlay.active .events-cart-panel {
  transform: none;
}

.cart-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 24px 24px 12px;
}

.cart-head h3 {
  font-family: "DrukMedium", sans-serif;
  font-size: 30px;
  margin: 0;
  letter-spacing: 0.04em;
}

.cart-close {
  border: none;
  background: none;
  color: var(--ink);
  font-family: inherit;
  font-size: var(--fs-label);
  font-weight: 600;
  cursor: pointer;
}

.cart-list {
  list-style: none;
  margin: 0;
  padding: 0 24px;
  flex: 1;
  overflow-y: auto;
}

.cart-item {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  padding: 16px 0;
  border-bottom: 1px solid color-mix(in srgb, var(--ink) 8%, transparent);
}

.cart-item-main {
  display: flex;
  flex-direction: column;
  gap: 4px;
  min-width: 0;
  font-size: var(--fs-label);
}

.cart-item-main strong {
  font-size: 12px;
}

.cart-item-main span {
  color: var(--ink-muted);
}

.cart-item-side {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 8px;
  flex-shrink: 0;
}

.cart-amount {
  font-size: 12px;
  font-weight: 600;
}

.cart-remove {
  border: none;
  background: none;
  padding: 2px 0;
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  color: var(--danger);
  text-decoration: underline;
  cursor: pointer;
}

.cart-type {
  font-size: var(--fs-label) !important;
  font-weight: 600;
  color: var(--ink) !important;
}

.cart-mode {
  display: inline-flex;
  border: 1.5px solid var(--line-strong);
  border-radius: 20px;
  overflow: hidden;
  width: max-content;
  margin-top: 2px;
}

.cart-mode button {
  border: none;
  background: transparent;
  color: var(--ink);
  padding: 4px 12px;
  font-family: inherit;
  font-size: var(--fs-label);
  font-weight: 600;
  cursor: pointer;
}

.cart-mode button.active {
  background: var(--ink);
  color: var(--ink-on-dark);
}

.cart-foot {
  padding: 16px 24px 24px;
  border-top: 2px solid var(--line-strong);
}

.cart-total {
  display: flex;
  justify-content: space-between;
  font-size: 12px;
  margin-bottom: 12px;
}

.cart-done {
  width: 100%;
}

.cart-empty {
  padding: 40px 24px;
  text-align: center;
  font-size: 12px;
  color: var(--ink-muted);
}

/* Toast */
.events-toast {
  position: fixed;
  left: 50%;
  bottom: 84px;
  z-index: 100002;
  transform: translate(-50%, 12px);
  opacity: 0;
  pointer-events: none;
  background: var(--ink);
  color: var(--ink-on-dark);
  font-family: "IBM Plex Mono", monospace;
  font-size: 12px;
  padding: 12px 16px;
  border-radius: 30px;
  transition: opacity 200ms ease, transform 200ms ease;
  max-width: calc(100vw - 32px);
  text-align: center;
}

.events-toast.show {
  opacity: 1;
  transform: translate(-50%, 0);
}

/* Checkout */
.checkout-steps {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  list-style: none;
  margin: 16px 0 16px;
  padding: 0;
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  font-weight: 600;
}

.checkout-steps li {
  flex: 1 1 0;
  min-width: max-content;
  text-align: center;
  padding: 8px 8px;
  border-radius: 20px;
  border: 1.5px solid transparent;
  color: var(--ink-muted);
  white-space: nowrap;
  user-select: none;
}

.checkout-steps li.current {
  border-color: var(--ink);
  color: var(--ink);
}

.checkout-steps li.done {
  color: var(--ok);
}

.checkout-step {
  animation: pp-fade-in 300ms ease both;
}

.checkout-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: 12px;
}

.checkout-nav {
  display: flex;
  gap: 12px;
  margin-top: 8px;
}

.checkout-nav .event-submit-btn {
  flex: 1;
}

.co-team {
  border: 1.5px solid color-mix(in srgb, var(--ink) 15%, transparent);
  border-radius: 16px;
  padding: 12px 16px;
  margin: 0 0 12px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.co-team legend {
  font-family: "IBM Plex Mono", monospace;
  font-size: 12px;
  font-weight: 600;
  padding: 0 8px;
}

.co-team legend span {
  font-weight: 400;
  color: var(--ink-muted);
}

.co-leader {
  font-family: "IBM Plex Mono", monospace;
  font-size: 12px;
  padding: 12px 16px;
  border-radius: 12px;
  background: var(--surface);
  background: color-mix(in srgb, var(--ink) 4%, var(--surface));
}

.co-member {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) auto;
  gap: 8px;
  align-items: center;
  margin-bottom: 8px;
}

.checkout-summary {
  list-style: none;
  margin: 0;
  padding: 0;
  font-family: "IBM Plex Mono", monospace;
  font-size: 12px;
}

.checkout-summary li {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  min-width: 0;
  overflow-wrap: anywhere;
  padding: 8px 0;
  border-bottom: 1px dashed color-mix(in srgb, var(--ink) 15%, transparent);
}

.checkout-summary em {
  display: block;
  font-style: normal;
  font-size: var(--fs-label);
  color: var(--ink-muted);
}

.checkout-total {
  display: flex;
  justify-content: space-between;
  font-family: "IBM Plex Mono", monospace;
  font-size: 14px;
  font-weight: 600;
  margin: 12px 0 16px;
}

.checkout-codes {
  background: var(--surface);
  border: 2px dashed var(--line-strong);
  border-radius: 16px;
  padding: 12px 16px;
  margin-bottom: 16px;
}

.checkout-codes ul {
  list-style: none;
  margin: 8px 0 0;
  padding: 0;
  font-family: "IBM Plex Mono", monospace;
  font-size: 12px;
}

.checkout-codes li {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 4px 12px;
  overflow-wrap: anywhere;
  padding: 4px 0;
}

.checkout-codes .mono {
  letter-spacing: 1.5px;
}

select.event-reg-input {
  appearance: auto;
}

@media (max-width: 600px) {
  .events-cart-fab {
    left: 16px;
    bottom: 16px;
  }
}

@media (max-width: 640px) {
  .checkout-row {
    grid-template-columns: minmax(0, 1fr);
  }

  /* Each member: name + remove on one row, email full width below. */
  .co-member {
    grid-template-columns: minmax(0, 1fr) auto;
    grid-template-areas: "name remove" "email email";
    padding-bottom: 12px;
    margin-bottom: 12px;
    border-bottom: 1px dashed color-mix(in srgb, var(--ink) 15%, transparent);
  }
  .co-member .co-member-name { grid-area: name; }
  .co-member .co-member-email { grid-area: email; }
  .co-member .cart-remove { grid-area: remove; }
}

@media (hover: none), (max-width: 1024px) {
  .events-cart-overlay {
    -webkit-backdrop-filter: none;
    backdrop-filter: none;
    background: var(--sky-top);
    background: color-mix(in srgb, color-mix(in srgb, var(--sky-top) 87%, var(--ink)) 75%, transparent);
  }
}

/* Event details: rounds & scoring */
.event-rounds {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.event-round {
  background: var(--surface);
  border: 1px solid color-mix(in srgb, var(--ink) 10%, transparent);
  border-radius: 12px;
  padding: 12px 12px;
  font-family: "IBM Plex Mono", monospace;
}

.event-round-head {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  font-size: var(--fs-label);
}

.event-round-head span {
  color: var(--ink-muted);
  font-size: var(--fs-label);
  text-align: right;
}

.event-round p {
  margin: 4px 0 0;
  font-size: var(--fs-label);
  color: var(--ink);
  color: color-mix(in srgb, var(--ink) 80%, var(--surface));
  line-height: 1.5;
}

.event-scoring {
  background: var(--surface);
  border: 1px solid color-mix(in srgb, var(--ink) 10%, transparent);
  border-radius: 12px;
  padding: 8px 12px;
}

.event-score-row {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  padding: 4px 0;
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-label);
  border-bottom: 1px dashed color-mix(in srgb, var(--ink) 10%, transparent);
}

.event-score-row:last-child {
  border-bottom: none;
}

/* ==========================================================================
   Performance
   ========================================================================== */
/* The cards are near-opaque, so the blur behind them was invisible but forced
   the browser to re-blur 20 card areas on every scroll frame. */
.event-card {
  -webkit-backdrop-filter: none;
  backdrop-filter: none;
  background-color: var(--surface);
}

/* Once revealed, drop the permanent GPU layer and let the hover tilt follow
   the mouse quickly (the 0.6s reveal transition made it trail behind). */
.event-card.is-revealed {
  will-change: auto;
  transition:
    opacity 300ms cubic-bezier(0.16, 1, 0.3, 1),
    transform 200ms ease-out,
    box-shadow 0.3s ease,
    border-color 0.3s ease;
}

/* A fixed background repaints the whole page on every scroll frame. */
.events-page-root {
  background-attachment: scroll;
}

/* The sticky toolbar and scroll counter sit over cards that move on every
   scroll frame, so their backdrop blur had to be recomputed constantly. */
.events-toolbar,
.events-toolbar.is-pinned,
.events-scroll-hud {
  -webkit-backdrop-filter: none;
  backdrop-filter: none;
}

.events-toolbar {
  background: var(--surface);
}

.events-toolbar.is-pinned,
.events-scroll-hud {
  background: var(--surface);
}

/* Touch screens: every control is at least 44px tall (WCAG 2.5.8 / Apple HIG). */
@media (pointer: coarse), (max-width: 767px) {
  .events-cat-btn,
  .event-reg-close,
  .events-scroll-top-btn,
  .event-btn-register,
  .event-btn-details,
  .event-submit-btn,
  .event-link-btn,
  .cart-remove,
  .events-search-input {
    min-height: var(--tap);
  }

  .events-cat-btn,
  .event-reg-close,
  .events-scroll-top-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
  }

  .cart-remove {
    min-width: var(--tap);
  }
}

/* ==========================================================================
   Polish pass
   ========================================================================== */

/* Desktop: the category chips wrap (centred, above the search row) instead
   of scrolling. */
@media (min-width: 992px) {
  .events-categories {
    flex-wrap: wrap;
    justify-content: center;
    overflow: visible;
    row-gap: 8px;
  }
}

/* Phones: keep the hero's small lines on one line each. */
@media (max-width: 767px) {
  .events-hero-coords {
    letter-spacing: var(--track-body);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }

  /* Fits on one line at 375px; wraps (rather than truncating) when text is
     enlarged or the screen is narrower. */
  .events-hero-tag {
    letter-spacing: var(--track-body);
    max-width: 100%;
    box-sizing: border-box;
    text-wrap: balance;
  }

  /* Checkout: start every step's content below the close button
     (it covered "3. CONFIRM" and would hit the done-step status pill). */
  .event-reg-card {
    padding-top: 80px;
  }

  .event-reg-card .checkout-steps {
    margin-top: 0;
  }

  /* Phones: 16px page gutter so hero copy and cards sit at least 16px
     from the viewport edges (was 12px from the 991px block). */
  .events-page-root {
    padding-left: 16px;
    padding-right: 16px;
  }
}

@media (min-width: 768px) {
  /* Breathing room between the close button and the step bar. */
  .event-reg-card .checkout-steps {
    margin-top: 40px;
  }
}
/* Placeholders: browser default grey is too faint; use the muted ink. */
.events-search-input::placeholder,
.event-reg-input::placeholder {
  color: var(--ink-muted);
  opacity: 1;
}
/* Dialog titles take programmatic focus (tabindex="-1") when a drawer/modal
   opens or a checkout step changes; they are not controls, so no ring. */
.event-dossier-title:focus,
.event-reg-title:focus,
.cart-head h3:focus {
  outline: none;
}

/* Phones: registration is a full-screen sheet (one scroll area, edge to edge)
   instead of a floating card with a scroll area inside a padded overlay. */
@media (max-width: 600px) {
  .event-reg-modal {
    padding: 0;
    align-items: stretch;
  }

  .event-reg-card {
    max-width: none;
    max-height: none;
    height: 100%;
    border-radius: 0;
    border: 0;
    /* Solid: phones drop the backdrop blur, so the 94% tint showed the page through. */
    background-color: var(--surface);
    padding-bottom: calc(24px + env(safe-area-inset-bottom));
  }
}

/* Swipes that reach the end of a drawer or dialog stay in it instead of
   scrolling the page underneath. */
.event-dossier-panel,
.events-cart-panel {
  overscroll-behavior: contain;
}

/* Small phones: hero stat pills stay on one line (the dates pill wrapped,
   leaving "]" alone on line two at 320px). */
@media (max-width: 420px) {
  .events-stat-pill {
    white-space: nowrap;
    font-size: clamp(10px, 3.3vw, 12px);
    letter-spacing: 0;
    padding: 8px 12px;
  }
}

/* Phones: event details as a solid sheet with the register action pinned to
   its bottom edge, so it is reachable without scrolling past the rules. */
@media (max-width: 767px) {
  .event-dossier-panel {
    background-color: var(--surface);
    padding: 24px 24px 0;
  }

  .event-dossier-cta {
    position: sticky;
    bottom: 0;
    z-index: 2;
    margin: 24px -24px 0;
    padding: 12px 24px calc(12px + env(safe-area-inset-bottom));
    background: var(--surface);
    border-top: 1px solid color-mix(in srgb, var(--ink) 10%, transparent);
  }
}

/* The page's reading-progress bar sat above open drawers and dialogs. */
html:has(.event-dossier-overlay.active, .events-cart-overlay.active, .event-reg-modal.active) #events-scroll-progress {
  opacity: 0;
}

/* ==========================================================================
   Type polish: reading text on the body token (12px was too small on
   phones), fluid display titles, balanced headline breaks.
   ========================================================================== */
.event-dossier-title {
  font-size: clamp(34px, 9vw, 48px);
}

.events-hero-title,
.event-card-title,
.event-dossier-title,
.event-reg-title,
.events-empty h3 {
  text-wrap: balance;
}

.event-card-title {
  font-size: clamp(24px, 6.4vw, 30px);
}

.event-dossier-text,
.event-dossier-list li,
.event-round p {
  font-size: var(--fs-body);
  line-height: 1.65;
}

.event-card-tagline,
.event-reg-sub,
.event-spec-v {
  font-size: 14px;
  line-height: 1.5;
}

.events-hero-subtitle,
.event-dossier-tagline {
  text-wrap: pretty;
}

/* Spacing audit: cap reading measure on long-form event copy (65–75ch). */
.event-dossier-text,
.event-round p {
  max-width: 70ch;
}

/* ---- Motion audit: enter eases out, exit eases in ------------------------- */
.event-dossier-overlay,
.event-reg-modal,
.events-cart-overlay {
  transition: opacity var(--motion-150) var(--ease-in), visibility 0s linear var(--motion-150);
}
.event-dossier-overlay.active,
.event-reg-modal.active,
.events-cart-overlay.active {
  transition: opacity var(--motion-200) var(--ease-out), visibility 0s;
}
.event-dossier-panel,
.events-cart-panel {
  transition: transform var(--motion-150) var(--ease-in);
}
.event-dossier-overlay.active .event-dossier-panel,
.events-cart-overlay.active .events-cart-panel {
  /* Full-height drawers: the larger-surface token. */
  transition: transform var(--motion-300) var(--ease-out);
}
.event-reg-card {
  transition: transform var(--motion-150) var(--ease-in), opacity var(--motion-150) var(--ease-in);
}
.event-reg-modal.active .event-reg-card {
  transition: transform var(--motion-200) var(--ease-out), opacity var(--motion-200) var(--ease-out);
}

/* Keyboard audit: the search field's own focus cue (an 8% ink halo) is far
   below 3:1, so keyboard focus also gets the site's standard ring. */
.events-search-input:focus-visible {
  outline: var(--focus-ring);
  outline-offset: 2px;
}

/* ==========================================================================
   Responsive pass: 320px floor, touch targets, iOS input zoom, safe areas
   ========================================================================== */
/* Nothing on the events page may widen the viewport (clip keeps the sticky
   toolbar working, unlike overflow: hidden). */
.events-page-root {
  overflow-x: clip;
}

:where(.events-page-root, .event-dossier-panel, .event-reg-card, .events-cart-panel) img {
  max-width: 100%;
  height: auto;
}

.events-hero-title,
.event-dossier-title,
.cart-head h3,
.cart-item-main strong,
.co-team legend,
.event-coord-info {
  overflow-wrap: anywhere;
  min-width: 0;
}

/* Drawers and the cart: % of the overlay, not 100vw (which counts the
   scrollbar), and the last row clears the home indicator. */
.events-cart-panel {
  width: min(420px, 100%);
}

.cart-foot {
  padding-bottom: calc(24px + env(safe-area-inset-bottom));
}

/* Phones pin the CTA bar to the bottom (it adds its own inset). */
@media (min-width: 768px) {
  .event-dossier-panel {
    padding-bottom: calc(40px + env(safe-area-inset-bottom));
  }
}

.events-toast {
  bottom: calc(84px + env(safe-area-inset-bottom));
}

/* Touch: remaining small controls reach the 44px target. */
@media (pointer: coarse), (max-width: 767px) {
  .event-dossier-close,
  .event-coord-btn,
  .event-upi-copy-btn,
  .event-upi-app-btn,
  .cart-close,
  .cart-mode button,
  .events-cart-fab,
  .event-reg-mode label {
    min-height: var(--tap);
  }

  .event-coord-btn,
  .event-upi-copy-btn,
  .event-upi-app-btn,
  .cart-close {
    display: inline-flex;
    align-items: center;
    justify-content: center;
  }

  .cart-close {
    min-width: var(--tap);
  }

  /* The clear (x) is a full 44px square at the input's right edge. */
  .events-search-clear {
    right: 0;
    width: var(--tap);
    height: var(--tap);
  }

  /* 16px stops iOS Safari zooming the page when a field takes focus. */
  .events-search-input,
  .event-reg-input {
    font-size: 16px;
  }
}

/* Tablet: two-up grid with a tighter gap; the drawer leaves some page visible. */
@media (min-width: 768px) and (max-width: 991px) {
  .events-grid {
    gap: 16px;
  }

  .event-dossier-panel {
    max-width: min(620px, 88%);
  }
}

/* Phones: the floating cart button and scroll HUD share the bottom edge, so
   the HUD drops its counter (the TOP button stays) and both clear the
   home indicator. */
@media (max-width: 480px) {
  .events-scroll-hud {
    right: 16px;
    bottom: calc(16px + env(safe-area-inset-bottom));
    padding: 4px;
  }

  .events-scroll-metric {
    display: none;
  }

  .events-cart-fab {
    bottom: calc(16px + env(safe-area-inset-bottom));
  }
}

/* Small phones (≤379px): tighter card and sheet padding so content keeps
   its width. */
@media (max-width: 379px) {
  .event-card {
    padding: 16px;
    border-radius: 20px;
  }

  .event-card-actions {
    gap: 8px;
  }

  .event-dossier-panel {
    padding-left: 16px;
    padding-right: 16px;
  }

  .event-dossier-cta {
    margin-left: -16px;
    margin-right: -16px;
    padding-left: 16px;
    padding-right: 16px;
  }

  .event-dossier-specs {
    padding: 12px;
    gap: 8px;
  }

  .cart-head {
    padding: 16px 16px 8px;
  }

  .cart-list {
    padding: 0 16px;
  }

  .cart-foot {
    padding: 16px 16px calc(16px + env(safe-area-inset-bottom));
  }

  .checkout-steps li {
    min-width: 0;
    white-space: normal;
    padding: 8px 4px;
  }

  .co-team {
    padding: 12px;
  }

  .events-cart-fab {
    gap: 8px;
    padding: 8px 12px;
  }
}

/* ============================================================================
 * VISUAL REFRESH (Oct 2026): compact hero with chips, visual cards with a
 * category panel, one-line descriptions, scrollable filter rail on phones.
 * Full details stay in the dossier drawer.
 * ============================================================================ */

/* Hero: title, one-line tagline, three chips. */
.events-hero {
  margin-bottom: 24px;
}

.events-hero-coords {
  margin-bottom: 8px;
}

.events-hero-title {
  font-size: clamp(40px, 6vw, 80px);
  line-height: 1;
  margin: 0 0 12px;
}

.events-hero-subtitle {
  max-width: 520px;
  margin: 0 auto 16px;
  font-size: 14px;
  line-height: 1.5;
}

.events-stats-strip {
  list-style: none;
  padding: 0;
  margin: 0 0 12px;
  gap: 8px;
}

.events-stat-pill {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 8px 14px;
}

.events-stat-pill svg {
  width: 15px;
  height: 15px;
  flex-shrink: 0;
}

.events-hero-note {
  margin: 0;
  font-family: "IBM Plex Mono", monospace;
  font-size: 11px;
  letter-spacing: var(--track-label);
  text-transform: uppercase;
  color: var(--ink-muted);
}

/* Filters: one compact row; counts read as small superscript badges. */
.events-toolbar {
  flex-direction: row;
  flex-wrap: wrap;
  justify-content: center;
  padding: 8px;
  gap: 8px;
  margin-bottom: 24px;
}

.events-cat-btn {
  padding: 8px 14px;
  min-height: 40px;
}

.events-cat-btn .cat-count {
  font-size: 10px;
  min-width: 20px;
  padding: 2px 6px;
  border-radius: 999px;
  background: color-mix(in srgb, currentColor 12%, transparent);
  opacity: 1;
  text-align: center;
}

.events-search-wrap {
  width: min(320px, 100%);
}

@media (min-width: 992px) {
  .events-categories {
    flex-wrap: nowrap;
    overflow-x: auto;
  }
}

@media (max-width: 1199px) {
  .events-search-wrap {
    width: min(560px, 100%);
  }
}

/* Cards: visual panel first, then name, category, one line, chips, CTAs. */
.event-card {
  padding: 0;
  overflow: hidden;
  justify-content: flex-start;
}

.event-card-visual {
  position: relative;
  display: block;
  width: 100%;
  aspect-ratio: 16 / 7;
  min-height: 132px;
  margin: 0;
  padding: 0;
  border: 0;
  cursor: pointer;
  color: var(--ink-on-dark);
  background-color: var(--cat, var(--ink));
  background-image:
    radial-gradient(circle at 85% 20%, rgba(255, 255, 255, 0.22), transparent 55%),
    radial-gradient(rgba(255, 255, 255, 0.18) 1px, transparent 1.2px);
  background-size: auto, 14px 14px;
  overflow: hidden;
  text-align: left;
  font: inherit;
}

.event-visual-num {
  position: absolute;
  right: 12px;
  bottom: -14px;
  font-family: "DrukMedium", sans-serif;
  font-size: 112px;
  line-height: 1;
  letter-spacing: var(--track-display);
  color: rgba(255, 255, 255, 0.92);
  transition: transform 400ms cubic-bezier(0.16, 1, 0.3, 1);
}

.event-visual-icon {
  position: absolute;
  left: 20px;
  top: 20px;
  width: 48px;
  height: 48px;
  display: grid;
  place-items: center;
  border-radius: 14px;
  background: rgba(255, 255, 255, 0.16);
  border: 1px solid rgba(255, 255, 255, 0.35);
}

.event-visual-icon svg {
  width: 26px;
  height: 26px;
}

.event-visual-flag {
  position: absolute;
  right: 16px;
  top: 16px;
  max-width: calc(100% - 100px);
  padding: 4px 10px;
  border-radius: 999px;
  background: var(--surface);
  color: var(--ink);
  font-family: "IBM Plex Mono", monospace;
  font-size: 10px;
  font-weight: 600;
  letter-spacing: var(--track-label);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.event-card.is-revealed:hover .event-visual-num {
  transform: translateY(-6px);
}

.event-card-visual:focus-visible {
  outline: var(--focus-ring);
  outline-offset: -4px;
}

.event-card-body {
  display: flex;
  flex-direction: column;
  flex: 1;
  padding: 20px 24px 24px;
}

.event-card .event-badge-category {
  align-self: flex-start;
  border: 0;
  padding: 0;
  margin-bottom: 8px;
  color: var(--cat, var(--ink));
}

.event-card-title {
  font-size: 30px;
  margin-bottom: 6px;
}

.event-card-tagline {
  min-height: 0;
  margin: 0 0 14px;
  /* Two lines at most; the full overview lives in VIEW DETAILS. */
  min-height: 2.8em;
}

.event-card-actions {
  flex-wrap: wrap;
}

.event-card-actions > button {
  flex: 1 1 auto;
  white-space: nowrap;
}

.event-card-chips {
  list-style: none;
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  padding: 0;
  margin: 0 0 18px;
}

.event-chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 5px 10px;
  border-radius: 999px;
  background: color-mix(in srgb, var(--ink) 5%, transparent);
  font-family: "IBM Plex Mono", monospace;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: var(--track-label);
  text-transform: uppercase;
  white-space: nowrap;
}

.event-chip svg {
  width: 13px;
  height: 13px;
  flex-shrink: 0;
}

/* Tablet and down: filters stack above a full-width search. */
@media (max-width: 991px) {
  .event-card-visual {
    aspect-ratio: 16 / 6;
  }

  .events-toolbar {
    flex-direction: column;
    flex-wrap: nowrap;
    align-items: stretch;
  }

  .events-search-wrap {
    width: 100%;
  }
}

/* Phones: short hero, filter rail scrolls sideways, full-width cards. */
@media (max-width: 767px) {
  .events-hero {
    margin-bottom: 16px;
  }

  .events-hero-title {
    font-size: clamp(36px, 11vw, 52px);
    margin-bottom: 8px;
  }

  .events-hero-subtitle {
    font-size: 13px;
    margin-bottom: 12px;
  }

  .events-hero-note {
    font-size: 10px;
  }

  .events-stats-strip {
    gap: 6px;
  }

  .events-stat-pill {
    gap: 6px;
    padding: 7px 10px;
    font-size: 11px;
    letter-spacing: 0.04em;
  }

  .events-stat-pill svg {
    width: 13px;
    height: 13px;
  }

  .events-toolbar {
    margin-bottom: 16px;
  }

  .events-categories {
    flex-wrap: nowrap;
    justify-content: flex-start;
    overflow-x: auto;
    scroll-snap-type: x proximity;
    margin: 0 -12px;
    padding: 2px 12px;
    max-width: none;
    /* Fade the right edge so the rail reads as scrollable. */
    -webkit-mask-image: linear-gradient(90deg, #000 calc(100% - 32px), transparent);
    mask-image: linear-gradient(90deg, #000 calc(100% - 32px), transparent);
  }

  .events-cat-btn {
    scroll-snap-align: start;
    flex-shrink: 0;
  }

  .events-grid {
    grid-template-columns: 1fr;
  }

  .event-card-visual {
    aspect-ratio: 16 / 6;
    min-height: 116px;
  }

  .event-visual-num {
    font-size: 96px;
  }

  .event-card-body {
    padding: 16px 20px 20px;
  }

  .event-card-title {
    font-size: 28px;
  }
}

@media (max-width: 379px) {
  .event-card {
    padding: 0;
  }

  .event-card-body {
    padding: 14px 16px 16px;
  }

  .event-visual-icon {
    left: 16px;
    top: 16px;
    width: 42px;
    height: 42px;
  }

}

@media (prefers-reduced-motion: reduce) {
  .event-visual-num {
    transition: none;
  }

  .event-card.is-revealed:hover .event-visual-num {
    transform: none;
  }
}
