/* ---------- Ticket Modal (app-like fixed footer for general entrance) ----------
 *
 * Shared by the standard event page and the timed-entry entry-time picker, so
 * a buyer choosing tickets meets the same modal whichever kind of event they
 * are on. Layouts that belong to one page only (assigned-seat chart, cart
 * panel, mobile bar) stay in that page's own <style>.
 */
#ticketModal .modal-body {
  min-height: 60vh; max-height: 85vh;
  display: flex; flex-direction: column;
  overflow: hidden !important; padding: 0;
}
#modalLoading { flex-shrink: 0; }
#modalGeneralEntrance {
  flex-direction: column;
  flex: 1; min-height: 0;
}
#geTicketRows {
  flex: 1; overflow-y: auto; min-height: 0;
  padding: 1rem; -webkit-overflow-scrolling: touch;
}
@media (min-width: 768px) {
  #geTicketRows { padding: 1.5rem; }
}
.tm-ticket-row {
  display:flex; align-items:center; gap:1rem;
  padding:1rem; margin-bottom:.75rem;
  background:var(--bat-white); border:1px solid var(--bat-gray-200); border-radius:var(--bat-radius-lg);
}
.tm-ticket-info { flex:1; }
.tm-ticket-name { font-size:1.1rem; font-weight:var(--bat-font-weight-semibold); }
.tm-ticket-desc { font-size:.85rem; color:var(--bat-text-secondary); margin-top:2px; }
.tm-ticket-price { font-size:1rem; font-weight:var(--bat-font-weight-bold); color:var(--bat-green); margin-top:2px; }
.tm-ticket-remaining { font-size:.8rem; color:var(--bat-text-muted); margin-top:2px; }
.tm-ticket-remaining.low-stock { color:#e74c3c; font-weight:var(--bat-font-weight-semibold); }
.tm-qty-control {
  display:flex; align-items:center; gap:0;
  border:1px solid var(--bat-gray-300); border-radius:999px; overflow:hidden;
}
.tm-qty-btn {
  width:36px; height:36px; border:none; background:var(--bat-white);
  font-size:1.1rem; cursor:pointer; display:flex;
  align-items:center; justify-content:center; color:var(--bat-text-primary);
}
.tm-qty-btn:hover { background:var(--bat-gray-200); }
.tm-qty-btn:disabled { opacity:.35; cursor:not-allowed; }
.tm-qty-val {
  width:40px; text-align:center; font-weight:var(--bat-font-weight-semibold);
  font-size:1rem; border:none; background:var(--bat-white);
}
.tm-summary {
  border-top:2px solid var(--bat-gray-200); padding-top:1rem; margin-top:1rem;
}
.tm-summary-row {
  display:flex; justify-content:space-between; padding:.25rem 0;
  font-size:.95rem;
}
/* Step footer — fixed at bottom of flex layout */
.tm-step-footer {
  flex-shrink:0;
  background:var(--bat-white); z-index:10;
  padding:.75rem 1rem;
  border-top:1px solid var(--bat-gray-200);
  box-shadow:0 -2px 8px rgba(0,0,0,.06);
}
@media (min-width: 768px) {
  .tm-step-footer { padding:.75rem 1.5rem; }
}
.tm-total-row {
  display:flex; justify-content:space-between; align-items:center;
  font-weight:var(--bat-font-weight-bold); font-size:1.1rem; padding:.5rem 0;
}
.tm-breakdown-toggle {
  display:inline-flex; align-items:center;
  border:none; background:none;
  color:var(--bat-green); cursor:pointer; padding:.15rem .35rem;
  font-size:1rem; line-height:1;
}
.tm-breakdown-toggle i { transition:transform .2s; }
.tm-breakdown-details {
  display:none;
  padding-bottom:.5rem; margin-bottom:.25rem;
  border-bottom:1px solid var(--bat-gray-200);
}
.tm-breakdown-details.show { display:block; }
.tm-checkout-btn {
  width:100%; padding:.75rem; font-size:1.1rem; font-weight:var(--bat-font-weight-semibold);
  border-radius:var(--bat-radius-lg); margin-top:1rem;
}
.tm-error-row {
  font-size:.85rem; color:#dc3545; margin-top:4px;
}
.tm-loading {
  display:flex; align-items:center; justify-content:center;
  min-height:200px; color:var(--bat-text-secondary);
}
.tm-fees-detail {
  background:var(--bat-gray-100); border-radius:var(--bat-radius-sm); padding:.5rem .75rem;
  margin-bottom:.5rem; font-size:.85rem;
}
.tm-fees-detail .tm-fee-line {
  display:flex; justify-content:space-between; padding:2px 0;
}
.tm-fees-info { line-height:1; }
