/* ═══════════════════════════════════════════════════════════════
   URTICKETS BRAND LAYER — "PRESS PROOF" (frontend)
   Loads AFTER frontendv2-public.css. Consumes urtickets-tokens.css.
   Rules:
   · overrides scoped to v2 roots (.ur-*, .urt-*) — never bare tags
   · !important permitted ONLY inside the .urt- utility namespace
   · logical properties (inline-start/end) for RTL safety
   ═══════════════════════════════════════════════════════════════ */

/* ── 1 · LEGACY VAR NORMALIZATION ──────────────────────────────
   Collapse the drifted palettes onto tokens. Pages that used
   #050608 / #0f1117 hardcodes get swapped in Blade; vars here.   */
:root {
  --bg-black: var(--urt-ink);
  --bg-panel: var(--urt-panel);
  --bg-card:  var(--urt-panel);
  --cyan:     var(--urt-accent);
  --cyan-dim: var(--urt-dim);
  --white:    var(--urt-paper);
  --gray:     var(--urt-faint);
  --gray-light: var(--urt-dim);
  --font-display: var(--urt-font-display);
  --font-body:    var(--urt-font-body);
}

/* ── 2 · PRESS PROOF FRAME ─────────────────────────────────────
   The signature container: 2px rule, inner hairline, hard offset
   shadow, lift on hover. Apply to cards/panels via .urt-frame.   */
.urt-frame {
  position: relative;
  background: var(--urt-panel);
  border: var(--urt-border);
  box-shadow: var(--urt-shadow-pop);
  border-radius: var(--urt-radius);
  transition: transform var(--urt-fast) var(--urt-ease),
              box-shadow var(--urt-fast) var(--urt-ease);
}
.urt-frame::after {
  content: '';
  position: absolute;
  inset: 5px;
  border: 1px solid rgba(255, 255, 255, 0.16);
  pointer-events: none;
}
.urt-frame--hover:hover {
  transform: translate(-3px, -3px);
  box-shadow: var(--urt-shadow-hover);
}
.urt-frame--quiet {           /* hairline variant for dense UI   */
  border: var(--urt-border-line);
  box-shadow: none;
}
.urt-frame--quiet::after { display: none; }

/* ── 3 · STAMP / LABEL / TAG ───────────────────────────────── */
.urt-stamp {
  display: inline-block;
  border: var(--urt-border-dash);
  padding: 5px 10px;
  font-family: var(--urt-font-body);
  font-size: var(--urt-text-label);
  font-weight: 700;
  letter-spacing: 0.26em;
  text-transform: uppercase;
  color: var(--urt-paper);
  background: var(--urt-scrim);
  transform: rotate(2.5deg);
}
.urt-stamp--flat { transform: none; }
.urt-label {
  display: block;
  font-family: var(--urt-font-body);
  font-size: var(--urt-text-label);
  letter-spacing: var(--urt-track-label);
  text-transform: uppercase;
  color: var(--urt-faint);
  margin-block-end: var(--urt-s3);
}
.urt-mono {
  font-family: var(--urt-font-mono) !important;
  letter-spacing: 0.08em;
}

/* ── 4 · PERFORATION + BARCODE (ticket anatomy) ──────────────── */
.urt-perf {                    /* vertical perforated divider     */
  position: relative;
  border-inline-start: 2px dashed rgba(255, 255, 255, 0.45);
}
.urt-perf::before, .urt-perf::after {
  content: '';
  position: absolute;
  inset-inline-start: -9px;
  width: 16px; height: 16px;
  border-radius: 50%;
  background: var(--urt-ink);
  border: 2px solid var(--urt-paper);
}
.urt-perf::before { top: -10px; }
.urt-perf::after  { bottom: -10px; }
.urt-perf--h {                 /* horizontal tear line            */
  border-inline-start: none;
  border-block-start: 2px dashed rgba(255, 255, 255, 0.45);
}
.urt-barcode {
  width: 46px; height: 84px;
  background: repeating-linear-gradient(180deg,
    var(--urt-paper) 0 2px, transparent 2px 4px,
    var(--urt-paper) 4px 7px, transparent 7px 9px,
    var(--urt-paper) 9px 10px, transparent 10px 14px);
}
.urt-barcode--h {
  width: 84px; height: 30px;
  background: repeating-linear-gradient(90deg,
    var(--urt-paper) 0 2px, transparent 2px 4px,
    var(--urt-paper) 4px 7px, transparent 7px 9px,
    var(--urt-paper) 9px 10px, transparent 10px 14px);
}

/* ── 5 · TEXTURE ──────────────────────────────────────────────
   Halftone dot field for heroes/panels; grain via .urt-grain.    */
.urt-halftone {
  background-image: radial-gradient(rgba(255, 255, 255, 0.13) 1px, transparent 1.4px);
  background-size: 14px 14px;
  background-color: var(--urt-panel);
}
.urt-grain { position: relative; }
.urt-grain::before {
  content: '';
  position: absolute; inset: 0;
  pointer-events: none;
  opacity: 0.05;
  mix-blend-mode: overlay;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

/* ── 6 · CONTROLS ───────────────────────────────────────────── */
.urt-btn {
  display: inline-block;
  font-family: var(--urt-font-body);
  font-weight: 700;
  font-size: 12px;
  letter-spacing: var(--urt-track-btn);
  text-transform: uppercase;
  padding: var(--urt-btn-pad);
  border-radius: var(--urt-radius);
  cursor: pointer;
  text-align: center;
  transition: transform var(--urt-fast) var(--urt-ease),
              box-shadow var(--urt-fast) var(--urt-ease),
              background var(--urt-fast), color var(--urt-fast);
}
.urt-btn--solid {
  background: var(--urt-paper) !important;
  color: var(--urt-ink) !important;
  border: 2px solid var(--urt-paper) !important;
  box-shadow: var(--urt-shadow-pop);
}
.urt-btn--solid:hover {
  transform: translate(-2px, -2px);
  box-shadow: var(--urt-shadow-hover);
  color: var(--urt-ink) !important;
}
.urt-btn--ghost {
  background: transparent !important;
  color: var(--urt-paper) !important;
  border: 2px solid var(--urt-paper) !important;
}
.urt-btn--ghost:hover { background: var(--urt-paper) !important; color: var(--urt-ink) !important; }
.urt-btn--dead, .urt-btn:disabled {
  background: transparent !important;
  color: var(--urt-faint) !important;
  border: 2px solid var(--urt-line) !important;
  box-shadow: none;
  cursor: not-allowed;
  transform: none;
}
.urt-input, .urt-select {
  background: var(--urt-ink);
  border: 2px solid var(--urt-line-2);
  border-radius: var(--urt-radius-ctl);
  color: var(--urt-paper);
  min-height: var(--urt-ctl-h);
  padding: var(--urt-ctl-pad);
  font-family: var(--urt-font-body);
  font-size: 14px;
  width: 100%;
  outline: none;
  transition: border-color var(--urt-fast), box-shadow var(--urt-fast);
}
.urt-input:focus, .urt-select:focus {
  border-color: var(--urt-paper);
  box-shadow: var(--urt-shadow-pop);
}
.urt-input::placeholder { color: var(--urt-faint); letter-spacing: 0.05em; }

/* ── 7 · STATUS CHIPS (semantic colors only) ─────────────────── */
.urt-chip {
  display: inline-block;
  font-size: var(--urt-text-label);
  font-weight: 700;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  padding: 5px 10px;
  border: 1.5px solid currentColor;
  border-radius: var(--urt-radius);
  background: transparent;
}
.urt-chip--ok   { color: var(--urt-ok); }
.urt-chip--warn { color: var(--urt-warn); }
.urt-chip--bad  { color: var(--urt-bad); }
.urt-chip--mono { color: var(--urt-paper); }
.urt-chip--dim  { color: var(--urt-faint); }

/* ── 8 · STAT BLOCK (dashboards) ─────────────────────────────── */
.urt-stat b, .urt-stat__value {
  font-family: var(--urt-font-display);
  font-size: 54px;
  line-height: 0.9;
  display: block;
  color: var(--urt-paper);
  font-weight: 400;
}
.urt-stat__label {
  font-size: var(--urt-text-label);
  letter-spacing: var(--urt-track-label);
  color: var(--urt-dim);
  text-transform: uppercase;
}
.urt-stat__delta { font-family: var(--urt-font-mono); font-size: 11px; }
.urt-stat__delta--up   { color: var(--urt-ok); }
.urt-stat__delta--down { color: var(--urt-bad); }

/* ── 9 · SCOPED BOOTSTRAP / VENDOR RESKIN ─────────────────────
   Applied only inside dark v2 page roots.                        */
.ur-checkout .form-control, .ur-hotels .form-control,
.ur-hotel-detail .form-control, .ur-cust .form-control,
.ur-dash .form-control,
.ur-checkout .nice-select, .ur-hotels .nice-select {
  background: var(--urt-ink);
  border: 2px solid var(--urt-line-2);
  border-radius: var(--urt-radius-ctl);
  color: var(--urt-paper);
  min-height: var(--urt-ctl-h);
  box-shadow: none;
}
.ur-checkout .form-control:focus, .ur-hotels .form-control:focus,
.ur-hotel-detail .form-control:focus, .ur-cust .form-control:focus,
.ur-dash .form-control:focus {
  border-color: var(--urt-paper);
  box-shadow: var(--urt-shadow-pop);
  background: var(--urt-ink);
  color: var(--urt-paper);
}
.ur-checkout .modal-content, .ur-cust .modal-content, .ur-dash .modal-content {
  background: var(--urt-panel);
  border: var(--urt-border);
  border-radius: var(--urt-radius);
  box-shadow: var(--urt-shadow-pop-lg);
  color: var(--urt-paper);
}
.ur-cust .table, .ur-dash .table { color: var(--urt-paper); }
.ur-cust .table td, .ur-cust .table th,
.ur-dash .table td, .ur-dash .table th { border-color: var(--urt-line); }
.ur-cust .badge, .ur-dash .badge { border-radius: var(--urt-radius); }

/* ── 10 · EVENT CARD v2 (shared partial reskin) ───────────────
   event_card.blade.php gains .urt-tix on its root; legacy
   .event-item styling neutralized inside that scope.             */
.urt-tix.event-item {
  background: var(--urt-panel);
  border: var(--urt-border);
  border-radius: var(--urt-radius);
  box-shadow: var(--urt-shadow-pop);
  overflow: visible;
  transition: transform var(--urt-fast) var(--urt-ease),
              box-shadow var(--urt-fast) var(--urt-ease);
}
.urt-tix.event-item:hover {
  transform: translate(-3px, -3px);
  box-shadow: var(--urt-shadow-hover);
}
.urt-tix .event-image { border-block-end: 2px dashed rgba(255,255,255,0.35); position: relative; }
.urt-tix .event-image img { filter: grayscale(1) contrast(1.06); transition: filter var(--urt-mid); }
.urt-tix.event-item:hover .event-image img { filter: grayscale(0.4) contrast(1.03); }
.urt-tix .event-content { background: transparent; }
.urt-tix .event-content h5 a {
  font-family: var(--urt-font-display);
  font-size: 24px;
  letter-spacing: 0.02em;
  color: var(--urt-paper);
  line-height: 0.95;
}
.urt-tix .time-info li, .urt-tix .time-info li span {
  font-family: var(--urt-font-mono);
  font-size: 10.5px;
  letter-spacing: 0.06em;
  color: var(--urt-dim);
}
.urt-tix .organizer { color: var(--urt-faint); font-size: 11px; letter-spacing: 0.18em; text-transform: uppercase; }
.urt-tix .event-description { color: var(--urt-dim); font-size: 13px; }
.urt-tix .price-remain .price { color: var(--urt-paper); font-weight: 700; }
.urt-tix .price-remain .price del { color: var(--urt-faint); }
.urt-tix .location, .urt-tix .location span { color: var(--urt-faint); font-size: 12px; }
.urt-tix .wishlist-btn {
  background: var(--urt-ink);
  border: 2px solid var(--urt-paper);
  color: var(--urt-paper);
  border-radius: 0;
}
.urt-tix .wishlist-btn.bg-success { background: var(--urt-ok) !important; border-color: var(--urt-ok); color: var(--urt-ink); }

/* ── 11 · A11Y + RTL GUARDS ──────────────────────────────────── */
.urt-btn:focus-visible, .urt-input:focus-visible,
.urt-frame a:focus-visible {
  outline: 2px solid var(--urt-paper);
  outline-offset: 3px;
}
@media (prefers-reduced-motion: reduce) {
  .urt-frame, .urt-btn, .urt-tix.event-item { transition: none; }
}

/* ── 12 · HEADER / FOOTER LOGO ───────────────────────────────── */
.urt-header-logo { display: flex; align-items: center; text-decoration: none; }
.urt-header-logo__img { height: 34px; width: auto; display: block; }
.urt-footer-logo__img { height: 44px; width: auto; display: block; }
@media (max-width: 760px) { .urt-header-logo__img { height: 26px; } }

/* ════════════════════════════════════════════════════════════
   13 · THE PRESS PROOF TICKET — canonical card, used everywhere
   (home featured grid, events index, organizer/wishlist partial).
   media → perforated tear → body (date stub + title) → barcode foot.
   ════════════════════════════════════════════════════════════ */
.urt-ticket {
  position: relative;
  display: flex;
  flex-direction: column;
  background: var(--urt-panel);
  border: 2px solid var(--urt-paper);
  box-shadow: var(--urt-shadow-pop);
  color: var(--urt-paper);
  text-decoration: none;
  isolation: isolate;
  transition: transform var(--urt-fast) var(--urt-ease), box-shadow var(--urt-fast) var(--urt-ease);
}
.urt-ticket:hover {
  transform: translate(-3px, -3px);
  box-shadow: var(--urt-shadow-hover);
  color: var(--urt-paper);
}
/* inner hairline (the double-rule press frame) */
.urt-ticket::after {
  content: '';
  position: absolute;
  inset: 5px;
  border: 1px solid rgba(255, 255, 255, 0.16);
  pointer-events: none;
  z-index: 3;
}
/* ADMIT ONE stamp */
.urt-ticket__stamp {
  position: absolute;
  top: 12px;
  inset-inline-end: 12px;
  z-index: 4;
  border: 1.5px dashed rgba(255, 255, 255, 0.6);
  background: var(--urt-scrim);
  color: var(--urt-paper);
  font-family: var(--urt-font-body);
  font-weight: 700;
  font-size: 9px;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  padding: 4px 8px;
  transform: rotate(3deg);
}
/* media body — grayscale event imagery */
.urt-ticket__media {
  position: relative;
  height: 168px;
  background: var(--urt-raised) center/cover no-repeat;
  filter: grayscale(1) contrast(1.05);
  transition: filter var(--urt-mid);
}
.urt-ticket:hover .urt-ticket__media { filter: grayscale(0.45) contrast(1.03); }
.urt-ticket__media::before {   /* bottom scrim so the stub reads */
  content: '';
  position: absolute; inset: 0;
  background: linear-gradient(180deg, transparent 55%, rgba(5,5,5,0.55) 100%);
}
/* date stub — white block, Space Mono month + Bebas day */
.urt-ticket__date {
  position: absolute;
  bottom: 0;
  inset-inline-start: 0;
  z-index: 2;
  background: var(--urt-paper);
  color: var(--urt-ink);
  padding: 6px 12px 5px;
  text-align: center;
  line-height: 0.85;
  display: flex;
  flex-direction: column;
  align-items: center;
}
.urt-ticket__date-mon { font-family: var(--urt-font-mono); font-size: 9px; letter-spacing: 0.18em; font-weight: 700; }
.urt-ticket__date-day { font-family: var(--urt-font-display); font-size: 28px; }
/* perforated tear line between media and body */
.urt-ticket__perf {
  position: relative;
  height: 0;
  border-top: 2px dashed rgba(255, 255, 255, 0.4);
  margin: 0 5px;
  z-index: 2;
}
.urt-ticket__perf::before, .urt-ticket__perf::after {
  content: '';
  position: absolute;
  top: 50%;
  width: 16px; height: 16px;
  border-radius: 50%;
  background: var(--urt-ink);
  border: 2px solid var(--urt-paper);
  transform: translateY(-50%);
}
.urt-ticket__perf::before { inset-inline-start: -13px; }
.urt-ticket__perf::after  { inset-inline-end: -13px; }
/* body */
.urt-ticket__body { padding: 16px 16px 10px; flex: 1; }
.urt-ticket__title {
  font-family: var(--urt-font-display);
  font-size: clamp(20px, 2vw, 26px);
  line-height: 0.95;
  letter-spacing: 0.01em;
  color: var(--urt-paper);
  margin: 0 0 8px;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.urt-ticket__venue {
  font-family: var(--urt-font-mono);
  font-size: 10.5px;
  letter-spacing: 0.06em;
  color: var(--urt-dim);
  text-transform: uppercase;
  margin: 0;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.urt-ticket__venue i { opacity: 0.6; margin-inline-end: 4px; }
/* barcode footer */
.urt-ticket__foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 10px 16px 14px;
  border-top: 1px solid var(--urt-line);
}
.urt-ticket__barcode {
  flex: 1;
  height: 26px;
  background: repeating-linear-gradient(90deg,
    rgba(255,255,255,0.85) 0 2px, transparent 2px 4px,
    rgba(255,255,255,0.85) 4px 7px, transparent 7px 9px,
    rgba(255,255,255,0.85) 9px 10px, transparent 10px 14px);
  opacity: 0.6;
}
.urt-ticket__cta {
  font-family: var(--urt-font-body);
  font-weight: 700;
  font-size: 10px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--urt-paper);
  white-space: nowrap;
}
.urt-ticket__cta i { transition: transform var(--urt-fast) var(--urt-ease); }
.urt-ticket:hover .urt-ticket__cta i { transform: translateX(4px); }

/* category tags + search → Press Proof controls */
.ur-tag {
  border: 2px solid var(--urt-line-2) !important;
  border-radius: 0 !important;
  font-family: var(--urt-font-body);
  font-weight: 700;
  letter-spacing: 0.12em;
  transition: background var(--urt-fast), color var(--urt-fast), border-color var(--urt-fast);
}
.ur-tag:hover { background: var(--urt-paper) !important; color: var(--urt-ink) !important; border-color: var(--urt-paper) !important; }
.ur-search__btn { border-radius: 0; }

/* ── 14 · HOME HERO SLIDESHOW → MONO GRADE ────────────────────
   Keep the landing imagery in the same grayscale grade as cards
   so the split hero reads as one consistent black/white system.  */
.ur-slideshow-img { filter: grayscale(1) contrast(1.08) brightness(0.92); }

/* ── 15 · EVENTS INDEX CARDS → MONO GRADE ─────────────────────
   /events uses .ur-events__card with an inline <style>; bring its
   imagery into the grayscale grade for system consistency.       */
.ur-events__card-img { filter: grayscale(1) contrast(1.05); transition: filter var(--urt-mid); }
.ur-events__card:hover .ur-events__card-img { filter: grayscale(0.5) contrast(1.03); }

/* ── 16 · SECTION HERO BACKDROPS ──────────────────────────────
   Drop the mono-graded imagery behind the Bebas section heroes,
   with a scrim so the outline/solid headline stays legible.      */
.ur-hotels__hero {
  position: relative;
  background: var(--urt-ink) center/cover no-repeat;
  background-image:
    linear-gradient(rgba(5,5,5,0.42), rgba(5,5,5,0.68)),
    url('/assets/brand/imagery/hero-hotels-1920x800.webp');
  background-size: cover;
  background-position: center 32%;
  isolation: isolate;
}
.ur-hotels__hero-inner { position: relative; z-index: 1; }

/* ════════════════════════════════════════════════════════════
   17 · EVENTS INDEX CARDS → PRESS PROOF TICKET
   /events uses .ur-events__card (own inline <style> + JS filters).
   Markup untouched; this layer imposes the ticket signature:
   frame + inner hairline, white date stub, ADMIT-ONE-style type
   stamp, perforated tear with punch-holes, barcode footer + price.
   ════════════════════════════════════════════════════════════ */
.ur-events__card {
  position: relative;
  background: var(--urt-panel) !important;
  border: 2px solid var(--urt-paper) !important;
  border-radius: 0 !important;
  box-shadow: var(--urt-shadow-pop);
  transition: transform var(--urt-fast) var(--urt-ease), box-shadow var(--urt-fast) var(--urt-ease);
  overflow: visible !important;
}
.ur-events__card:hover { transform: translate(-3px,-3px); box-shadow: var(--urt-shadow-hover); }
.ur-events__card::before {       /* inner hairline */
  content: ''; position: absolute; inset: 5px;
  border: 1px solid rgba(255,255,255,0.16); pointer-events: none; z-index: 4;
}
.ur-events__card-img { border-radius: 0 !important; }
/* date → white stub, bottom-left of media */
.ur-events__card-date {
  top: auto !important; bottom: 0 !important; left: 0 !important; right: auto !important;
  background: var(--urt-paper) !important;
  color: var(--urt-ink) !important;
  border-radius: 0 !important;
  padding: 6px 12px 5px !important;
  display: flex !important; flex-direction: column; align-items: center; line-height: 0.85;
  z-index: 3;
}
.ur-events__card-day { font-family: var(--urt-font-display) !important; font-size: 28px !important; color: var(--urt-ink) !important; }
.ur-events__card-month { font-family: var(--urt-font-mono) !important; font-size: 9px !important; letter-spacing: 0.18em !important; font-weight: 700; color: var(--urt-ink) !important; }
/* type → ADMIT-ONE-style dashed stamp, top-right */
.ur-events__card-type {
  border: 1.5px dashed rgba(255,255,255,0.6) !important;
  border-radius: 0 !important;
  background: var(--urt-scrim) !important;
  color: var(--urt-paper) !important;
  font-family: var(--urt-font-body) !important;
  font-weight: 700; font-size: 9px !important; letter-spacing: 0.22em !important;
  transform: rotate(3deg); z-index: 3;
}
/* perforated tear at top of body */
.ur-events__card-body { position: relative; border-top: 2px dashed rgba(255,255,255,0.4); margin: 0 5px; }
.ur-events__card-body::before, .ur-events__card-body::after {
  content: ''; position: absolute; top: -9px; width: 16px; height: 16px; border-radius: 50%;
  background: var(--urt-ink); border: 2px solid var(--urt-paper); z-index: 5;
}
.ur-events__card-body::before { left: -13px; }
.ur-events__card-body::after { right: -13px; }
.ur-events__card-title { font-family: var(--urt-font-display) !important; letter-spacing: 0.01em; }
.ur-events__card-meta span { font-family: var(--urt-font-mono) !important; letter-spacing: 0.05em; }
.ur-events__card-org { font-family: var(--urt-font-mono) !important; }
/* footer → barcode + price */
.ur-events__card-footer { position: relative; border-top: 1px solid var(--urt-line); padding-top: 12px !important; }
.ur-events__card-footer::before {
  content: ''; position: absolute; top: 14px; left: 0; width: 70px; height: 22px;
  background: repeating-linear-gradient(90deg,
    rgba(255,255,255,0.85) 0 2px, transparent 2px 4px,
    rgba(255,255,255,0.85) 4px 7px, transparent 7px 9px,
    rgba(255,255,255,0.85) 9px 10px, transparent 10px 14px);
  opacity: 0.55;
}
.ur-events__card-org { padding-left: 80px; }   /* clear the barcode */
.ur-events__card-price { font-family: var(--urt-font-display) !important; color: var(--urt-paper) !important; }
.ur-events__card-wishlist { border-radius: 0 !important; border: 2px solid var(--urt-paper) !important; background: var(--urt-scrim) !important; z-index: 6; }

/* ── 18 · EVENT_CARD PARTIAL (.urt-tix) → match ticket signature ── */
.urt-tix .event-image { position: relative; }
.urt-tix .event-image::before, .urt-tix .event-image::after {
  content: ''; position: absolute; bottom: -9px; width: 14px; height: 14px; border-radius: 50%;
  background: var(--urt-ink); border: 2px solid var(--urt-paper); z-index: 5;
}
.urt-tix .event-image::before { left: -9px; }
.urt-tix .event-image::after { right: -9px; }
.urt-tix .time-info li, .urt-tix .time-info li span { font-family: var(--urt-font-mono); }

/* ── 19 · EMPTY-MEDIA FALLBACK ────────────────────────────────
   Events without a photo get the ticket-grid motif instead of a
   blank panel, so every ticket reads as intentional.             */
.urt-ticket__media, .ur-events__card-img {
  background-color: var(--urt-raised);
  background-image: url('/assets/brand/pattern/ticket-grid.svg');
  background-repeat: repeat;
  background-size: 180px auto;
}
/* a real photo (set via inline style) layers above and wins */
