/* =========================================================
   BusGo — design tokens
   Ink navy #16213E · Paper cream #F7F3E9 · Route amber #E8A93A
   Transit teal #1F7A6C (paid/confirmed) · Alert rust #C1440E (full/taken)
   Display: Space Grotesk · Body: Inter · Utility: IBM Plex Mono
   ========================================================= */

@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;700&family=Inter:wght@400;500;600&family=IBM+Plex+Mono:wght@500;600&display=swap');

:root{
  --ink:      #16213E;
  --ink-2:    #1F2E52;
  --paper:    #F7F3E9;
  --paper-2:  #FBF9F3;
  --amber:    #E8A93A;
  --amber-2:  #C98A1E;
  --teal:     #1F7A6C;
  --rust:     #C1440E;
  --graphite: #575B66;
  --line:     #DCD5C4;

  --display: 'Space Grotesk', sans-serif;
  --body: 'Inter', sans-serif;
  --mono: 'IBM Plex Mono', monospace;
}

*{ box-sizing:border-box; }
html,body{ margin:0; padding:0; }
body{
  background:linear-gradient(180deg, #f8f4ea 0%, var(--paper) 100%);
  color:var(--ink);
  font-family:var(--body);
  line-height:1.5;
  min-height:100vh;
}
a{ color:inherit; }
button, input, select{ font-family:inherit; font-size:1rem; }

::selection{ background:var(--amber); color:var(--ink); }

/* ---------- layout shell ---------- */
.app{
  max-width:480px;
  margin:0 auto;
  min-height:100vh;
  background:var(--paper-2);
  box-shadow:0 0 40px rgba(22,33,62,0.08);
  position:relative;
  padding-bottom:2rem;
}

.topbar{
  background:linear-gradient(90deg, var(--ink) 0%, #22355d 100%);
  color:var(--paper);
  padding:1.1rem 1.25rem;
  display:flex;
  align-items:center;
  justify-content:space-between;
  position:sticky;
  top:0;
  z-index:20;
}
.topbar .brand{
  font-family:var(--display);
  font-weight:700;
  font-size:1.15rem;
  letter-spacing:0.02em;
  display:flex;
  align-items:center;
  gap:0.4rem;
}
.topbar .brand .dot{
  width:8px; height:8px; border-radius:50%;
  background:var(--amber);
  display:inline-block;
}
.topbar .tag{
  font-family:var(--mono);
  font-size:0.68rem;
  color:var(--amber);
  border:1px solid rgba(232,169,58,0.5);
  padding:0.15rem 0.5rem;
  border-radius:99px;
  letter-spacing:0.04em;
}
.topbar .who{
  font-size:0.8rem;
  color:#C9CFE0;
  display:flex;
  align-items:center;
  gap:0.6rem;
}
.topbar button.link{
  background:none; border:none; color:var(--amber);
  font-size:0.8rem; cursor:pointer; padding:0;
  text-decoration:underline;
}

.route-strip{
  height:3px;
  background:repeating-linear-gradient(90deg, var(--amber) 0 10px, transparent 10px 18px);
}

.content{ padding:1.25rem; }

.h1{
  font-family:var(--display);
  font-weight:700;
  font-size:1.5rem;
  margin:0.2rem 0 0.3rem;
}
.sub{ color:var(--graphite); font-size:0.9rem; margin:0 0 1.25rem; }

.card{
  background:#fff;
  border:1px solid var(--line);
  border-radius:16px;
  padding:1.1rem;
  margin-bottom:1rem;
  box-shadow:0 2px 10px rgba(22,33,62,0.04);
}

.field{ margin-bottom:0.9rem; }
.field label{
  display:block;
  font-size:0.78rem;
  font-weight:600;
  color:var(--graphite);
  margin-bottom:0.35rem;
  text-transform:uppercase;
  letter-spacing:0.04em;
}
.field input, .field select{
  width:100%;
  padding:0.7rem 0.8rem;
  border:1.5px solid var(--line);
  border-radius:10px;
  background:var(--paper-2);
  color:var(--ink);
}
.field input:focus, .field select:focus{
  outline:2px solid var(--amber);
  outline-offset:1px;
  border-color:var(--amber);
}

.btn{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:0.4rem;
  width:100%;
  padding:0.8rem 1rem;
  border-radius:999px;
  border:none;
  font-weight:600;
  font-size:0.95rem;
  cursor:pointer;
  transition:transform .05s ease, box-shadow .15s ease;
}
.btn:hover{ box-shadow:0 4px 12px rgba(22,33,62,0.08); }
.btn:active{ transform:scale(0.98); }
.btn-primary{ background:var(--ink); color:var(--paper); }
.btn-primary:hover{ background:var(--ink-2); }
.btn-amber{ background:var(--amber); color:var(--ink); }
.btn-amber:hover{ background:var(--amber-2); }
.btn-outline{ background:transparent; border:1.5px solid var(--ink); color:var(--ink); }
.btn-danger{ background:var(--rust); color:#fff; }
.btn-ghost{ background:var(--paper); color:var(--graphite); border:1px solid var(--line); }
.btn:disabled{ opacity:0.45; cursor:not-allowed; }

.btn-row{ display:flex; gap:0.6rem; }
.btn-row .btn{ width:auto; flex:1; }

.tabs{ display:flex; gap:0.4rem; margin-bottom:1.1rem; }
.tabs button{
  flex:1; padding:0.55rem; border-radius:99px; border:1.5px solid var(--line);
  background:#fff; color:var(--graphite); font-weight:600; font-size:0.85rem; cursor:pointer;
}
.tabs button.active{ background:var(--ink); border-color:var(--ink); color:var(--paper); }

.error{
  background:#FBE7DE; color:var(--rust); border:1px solid #F0C3AE;
  padding:0.6rem 0.8rem; border-radius:10px; font-size:0.85rem; margin-bottom:1rem;
}
.success{
  background:#E4F2EE; color:var(--teal); border:1px solid #B9DFD4;
  padding:0.6rem 0.8rem; border-radius:10px; font-size:0.85rem; margin-bottom:1rem;
}

/* ---------- day picker ---------- */
.day-scroll{
  display:flex; gap:0.6rem; overflow-x:auto; padding-bottom:0.4rem; margin-bottom:1.1rem;
}
.day-pill{
  flex:0 0 auto;
  font-family:var(--mono);
  font-size:0.78rem;
  padding:0.55rem 0.9rem;
  border-radius:10px;
  border:1.5px solid var(--line);
  background:#fff;
  cursor:pointer;
  white-space:nowrap;
}
.day-pill.active{ background:var(--ink); color:var(--paper); border-color:var(--ink); }

/* ---------- bus card ---------- */
.bus-card{
  background:#fff;
  border:1.5px solid var(--line);
  border-radius:16px;
  padding:1rem 1.1rem;
  margin-bottom:0.9rem;
  cursor:pointer;
  box-shadow:0 2px 10px rgba(22,33,62,0.03);
}
.bus-card:hover{ border-color:var(--amber); }
.bus-card .row1{ display:flex; justify-content:space-between; align-items:baseline; }
.bus-card .plate{ font-family:var(--mono); font-weight:600; font-size:1rem; letter-spacing:0.03em; }
.bus-card .price{ font-family:var(--display); font-weight:700; color:var(--ink); }
.bus-card .meta{ font-size:0.8rem; color:var(--graphite); margin-top:0.3rem; }
.seat-bar{
  height:6px; border-radius:99px; background:var(--line); margin-top:0.7rem; overflow:hidden;
}
.seat-bar > div{ height:100%; background:var(--teal); }
.seat-bar.full > div{ background:var(--rust); }
.status-chip{
  font-size:0.7rem; font-weight:600; padding:0.2rem 0.55rem; border-radius:99px;
  text-transform:uppercase; letter-spacing:0.03em;
}
.status-chip.open{ background:#E4F2EE; color:var(--teal); }
.status-chip.full{ background:#FBE7DE; color:var(--rust); }

/* ---------- seat map ---------- */
.seat-grid{
  display:grid;
  grid-template-columns:repeat(4, 1fr);
  gap:0.55rem;
  margin:1rem 0;
}
.seat{
  aspect-ratio:1;
  border-radius:8px;
  display:flex;
  align-items:center;
  justify-content:center;
  font-family:var(--mono);
  font-size:0.75rem;
  font-weight:600;
  cursor:pointer;
  border:1.5px solid transparent;
  background:var(--line);
  color:var(--graphite);
}
.seat.available{ background:#E7E4D9; color:var(--ink); }
.seat.available:hover{ background:var(--amber); color:var(--ink); }
.seat.taken{ background:var(--rust); color:#fff; cursor:not-allowed; opacity:0.85; }
.seat.mine{ background:var(--teal); color:#fff; }
.seat.selected{ background:var(--ink); color:var(--paper); border-color:var(--amber); }
.seat-legend{ display:flex; gap:1rem; font-size:0.75rem; color:var(--graphite); flex-wrap:wrap; }
.seat-legend span{ display:inline-flex; align-items:center; gap:0.35rem; }
.legend-swatch{ width:12px; height:12px; border-radius:3px; display:inline-block; }

/* ---------- ticket stub (signature element) ---------- */
.ticket{
  background:var(--ink);
  color:var(--paper);
  border-radius:16px;
  padding:1.3rem 1.3rem 1rem;
  position:relative;
  overflow:hidden;
  margin-bottom:1.2rem;
}
.ticket::before{
  content:"";
  position:absolute; left:0; right:0; top:calc(100% - 34px);
  height:0;
}
.ticket .route-line{
  display:flex; align-items:center; gap:0.4rem; margin-bottom:0.9rem;
}
.ticket .route-line .stop{ width:8px; height:8px; border-radius:50%; background:var(--amber); }
.ticket .route-line .track{
  flex:1; height:2px;
  background:repeating-linear-gradient(90deg, var(--amber) 0 6px, transparent 6px 12px);
}
.ticket .brand-row{ display:flex; justify-content:space-between; align-items:center; margin-bottom:0.2rem;}
.ticket .brand-row .name{ font-family:var(--display); font-weight:700; font-size:1.05rem; }
.ticket .brand-row .badge{
  font-family:var(--mono); font-size:0.65rem; background:var(--teal); color:#fff;
  padding:0.2rem 0.5rem; border-radius:99px; letter-spacing:0.03em;
}
.ticket .badge.pending{ background:var(--amber); color:var(--ink); }
.ticket-grid{
  display:grid; grid-template-columns:1fr 1fr; gap:0.8rem 1rem; margin:0.9rem 0;
}
.ticket-grid .k{ font-size:0.65rem; text-transform:uppercase; letter-spacing:0.05em; color:#9AA3C0; margin-bottom:0.15rem; }
.ticket-grid .v{ font-family:var(--mono); font-weight:600; font-size:0.95rem; }
.perf{
  border-top:2px dashed rgba(247,243,233,0.35);
  margin-top:0.4rem; padding-top:0.7rem;
  display:flex; justify-content:space-between; align-items:center;
  font-family:var(--mono); font-size:0.7rem; color:#9AA3C0;
}
.notch{
  position:absolute; width:20px; height:20px; background:var(--paper-2); border-radius:50%;
}
.notch.left{ left:-10px; top:calc(100% - 46px); }
.notch.right{ right:-10px; top:calc(100% - 46px); }

/* ---------- bus detail modal ---------- */
.modal-backdrop{
  position:fixed; inset:0; background:rgba(22,33,62,0.55);
  display:flex; align-items:flex-end; justify-content:center;
  z-index:100; backdrop-filter:blur(1px);
}
.modal{
  background:#fff; width:100%; max-width:480px;
  border-radius:18px 18px 0 0;
  padding:1.3rem 1.3rem 1.5rem;
  max-height:82vh; overflow-y:auto;
  animation:modal-up .18s ease;
}
@keyframes modal-up{
  from{ transform:translateY(24px); opacity:0; }
  to{ transform:translateY(0); opacity:1; }
}
.modal-header{
  display:flex; justify-content:space-between; align-items:flex-start; margin-bottom:0.9rem;
}
.modal-close{
  background:var(--paper); border:1px solid var(--line); border-radius:8px;
  width:30px; height:30px; display:flex; align-items:center; justify-content:center;
  cursor:pointer; font-size:1rem; color:var(--graphite); flex:0 0 auto;
}

/* ---------- bus card (clickable to open modal) ---------- */
.bus-admin-card{
  cursor:pointer;
  transition:border-color .1s ease;
}
.bus-admin-card:hover{ border-color:var(--amber); }

/* ---------- list rows (admin) ---------- */
.list-row{
  display:flex; justify-content:space-between; align-items:center;
  padding:0.7rem 0; border-bottom:1px solid var(--line);
  gap:0.6rem;
}
.list-row:last-child{ border-bottom:none; }
.list-row .name{ font-weight:600; font-size:0.92rem; }
.list-row .meta{ font-size:0.75rem; color:var(--graphite); font-family:var(--mono); }
.pill-toggle{
  font-family:var(--mono); font-size:0.7rem; font-weight:600;
  padding:0.3rem 0.65rem; border-radius:99px; cursor:pointer; border:1.5px solid transparent;
}
.pill-toggle.paid{ background:#E4F2EE; color:var(--teal); border-color:#B9DFD4; }
.pill-toggle.pending{ background:#FBE7DE; color:var(--rust); border-color:#F0C3AE; }

.stat-grid{ display:grid; grid-template-columns:1fr 1fr; gap:0.8rem; margin-bottom:1.2rem; }
.stat{
  background:var(--ink); color:var(--paper); border-radius:14px; padding:1rem;
}
.stat .num{ font-family:var(--display); font-weight:700; font-size:1.4rem; }
.stat .lbl{ font-size:0.72rem; color:#9AA3C0; text-transform:uppercase; letter-spacing:0.04em; margin-top:0.2rem; }

.empty{
  text-align:center; padding:2.2rem 1rem; color:var(--graphite);
}
.empty .big{ font-size:2rem; margin-bottom:0.4rem; }

.icon-btn{
  background:none; border:none; cursor:pointer; color:var(--rust); font-size:0.78rem;
  text-decoration:underline; padding:0.2rem;
}

.section-label{
  font-family:var(--mono); font-size:0.72rem; text-transform:uppercase; letter-spacing:0.06em;
  color:var(--graphite); margin:1.5rem 0 0.6rem;
}

footer.disclaimer{
  text-align:center; font-size:0.72rem; color:#9AA3C0; padding:1.2rem 1.25rem 0;
}

/* ---------- auth card (index login/signup) ---------- */
.auth-card{
  background:#fff;
  border:1.5px solid var(--line);
  border-radius:18px;
  padding:1.4rem 1.3rem 1.2rem;
  margin-bottom:1rem;
  box-shadow:0 4px 18px rgba(22,33,62,0.06);
}

/* ---------- search experience ---------- */
.search-card{
  padding:1rem;
  margin-bottom:0.8rem;
}
.search-grid{
  display:grid;
  gap:0.7rem;
}
.suggestion-card{ border-color:var(--amber); }

/* ---------- improved bus card hover ---------- */
.bus-card:hover{
  border-color:var(--amber);
  box-shadow:0 3px 14px rgba(232,169,58,0.12);
  transform:translateY(-1px);
  transition:border-color .1s,box-shadow .1s,transform .1s;
}

/* ---------- hero header (dashboard) ---------- */
.hero{
  background:linear-gradient(135deg, var(--ink) 0%, var(--ink-2) 100%);
  color:var(--paper);
  border-radius:18px;
  padding:1.3rem 1.3rem 1.6rem;
  margin-bottom:1.2rem;
  position:relative;
  overflow:hidden;
}
.hero::after{
  content:"🚌";
  position:absolute;
  right:-8px;
  bottom:-10px;
  font-size:4.2rem;
  opacity:0.15;
  transform:rotate(-8deg);
}
.hero .hi{ font-family:var(--display); font-weight:700; font-size:1.3rem; margin-bottom:0.2rem; }
.hero .sub{ color:rgba(247,243,233,0.7); font-size:0.82rem; margin:0; }
.hero .stat-row{ display:flex; gap:1.2rem; margin-top:0.9rem; }
.hero .stat-item{ display:flex; flex-direction:column; }
.hero .stat-item .num{ font-family:var(--display); font-weight:700; font-size:1.2rem; color:var(--amber); }
.hero .stat-item .lbl{ font-size:0.65rem; color:rgba(247,243,233,0.55); text-transform:uppercase; letter-spacing:0.04em; }

/* ---------- floating action button ---------- */
.fab{
  position:fixed;
  bottom:1.5rem;
  right:1.5rem;
  width:52px;
  height:52px;
  border-radius:50%;
  background:var(--amber);
  color:var(--ink);
  border:none;
  font-size:1.3rem;
  cursor:pointer;
  box-shadow:0 4px 14px rgba(232,169,58,0.4);
  display:flex;
  align-items:center;
  justify-content:center;
  z-index:50;
  transition:transform .1s ease;
}
.fab:active{ transform:scale(0.92); }
.fab.secondary{
  bottom:calc(1.5rem + 64px);
  background:var(--ink);
  color:var(--paper);
  box-shadow:0 4px 14px rgba(22,33,62,0.3);
}

/* ---------- payment method ---------- */
.pay-methods{ display:flex; flex-direction:column; gap:0.7rem; margin:1rem 0; }
.pay-method{
  display:flex; align-items:center; gap:0.8rem;
  padding:1rem 1.1rem;
  border:1.5px solid var(--line);
  border-radius:14px;
  background:#fff;
  cursor:pointer;
}
.pay-method:hover{ border-color:var(--amber); }
.pay-method.selected{ border-color:var(--ink); background:#F4F1E9; }
.pay-method .icon{ font-size:1.5rem; }
.pay-method .info{ flex:1; }
.pay-method .info .name{ font-weight:600; font-size:0.95rem; }
.pay-method .info .desc{ font-size:0.78rem; color:var(--graphite); }
.pay-method .radio{
  width:20px; height:20px; border-radius:50%;
  border:2px solid var(--line); display:flex; align-items:center; justify-content:center;
}
.pay-method.selected .radio{ border-color:var(--ink); }
.pay-method.selected .radio::after{
  content:""; width:10px; height:10px; border-radius:50%; background:var(--ink);
}

/* ---------- bank details card ---------- */
.bank-details{
  background:#E4F2EE;
  border:1px solid #B9DFD4;
  border-radius:12px;
  padding:1rem;
  margin:0.8rem 0;
}
.bank-details .row{ display:flex; justify-content:space-between; padding:0.3rem 0; font-size:0.85rem; }
.bank-details .row .l{ color:var(--graphite); }
.bank-details .row .v{ font-family:var(--mono); font-weight:600; }

/* ---------- ticket mini card (for modal list) ---------- */
.ticket-mini{
  display:flex;
  align-items:center;
  gap:0.8rem;
  padding:0.8rem 0;
  border-bottom:1px solid var(--line);
  cursor:pointer;
}
.ticket-mini:last-child{ border-bottom:none; }
.ticket-mini:active{ opacity:0.7; }
.ticket-mini .icon{ font-size:1.4rem; }
.ticket-mini .info{ flex:1; }
.ticket-mini .info .top{ display:flex; justify-content:space-between; align-items:baseline; }
.ticket-mini .info .top .plate{ font-family:var(--mono); font-weight:600; font-size:0.85rem; }
.ticket-mini .info .top .status{ font-size:0.65rem; }
.ticket-mini .info .bottom{ font-size:0.75rem; color:var(--graphite); margin-top:0.15rem; }
