/* VueloHack — estilos compartidos (portada + panel). Móvil primero. */
:root{
  --bg:#f7f5ef; --card:#ffffff; --ink:#13233a; --ink-2:#3d4a5c; --muted:#5f6779; --line:#e7e3d9;
  --sun:#ffd23f; --sun-2:#fff1b8; --sky:#d6ecff; --sky-2:#a9d6ff; --mint:#d4f5df; --mint-ink:#11643a;
  --coral:#ff6b4a; --coral-2:#ffe3dc; --focus:#2b6cff;
  --display:"Bricolage Grotesque", "Segoe UI", system-ui, sans-serif;
  --body:"Inter", system-ui, -apple-system, "Segoe UI", sans-serif;
  --r-sm:10px; --r:18px; --r-lg:28px;
  --shadow:0 1px 2px rgba(19,35,58,.06), 0 8px 24px rgba(19,35,58,.08);
  --gutter:clamp(16px, 4.5vw, 48px);
  --fast:140ms; --base:260ms; --out:cubic-bezier(.2,.7,.2,1); --spring:cubic-bezier(.34,1.56,.64,1);
}
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0; background:var(--bg); color:var(--ink); font:400 16px/1.55 var(--body); overflow-x:hidden}
img{display:block; max-width:100%}
a{color:inherit}
button,input,select{font:inherit; color:inherit}
:focus-visible{outline:3px solid var(--focus); outline-offset:2px; border-radius:6px}
.sr{position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap}
.wrap{max-width:1180px; margin-inline:auto; padding-inline:var(--gutter)}
h1,h2,h3{font-family:var(--display); letter-spacing:-.02em; margin:0}
h2{font-size:clamp(2rem, 7vw, 3.4rem); line-height:1.02; font-weight:800}
p{margin:0}

/* ── logo + barra en píldora ── */
.logo{display:inline-flex; align-items:center; gap:9px; text-decoration:none; font:800 20px/1 var(--display); letter-spacing:-.02em}
.logo i{width:26px; height:26px; border-radius:8px; background:var(--sun); position:relative; flex:none}
.logo i::before{content:"€"; position:absolute; inset:0; display:grid; place-items:center; font:800 15px/1 var(--display); color:var(--ink)}
.logo img{display:block; height:30px; width:auto}
.logo i::after{content:""; position:absolute; left:3px; right:3px; top:50%; height:1.5px; background:var(--ink); opacity:.55}
.pillbar{position:sticky; top:10px; z-index:40; margin:10px auto 0; width:min(640px, calc(100% - 2 * var(--gutter)));
  display:flex; justify-content:space-between; align-items:center; gap:10px; padding:8px 8px 8px 18px;
  background:var(--ink); color:#fff; border-radius:999px; box-shadow:0 8px 30px rgba(19,35,58,.25)}
.pillbar nav{display:flex; gap:4px; align-items:center}
.pillbar nav a.link{color:#c9d3e3; text-decoration:none; font-size:14px; padding:8px 10px; border-radius:999px}
.pillbar nav a.link:hover{color:#fff; background:rgba(255,255,255,.08)}
@media (max-width:560px){ .pillbar nav a.link{display:none} }

/* ── botones ── */
.btn{display:inline-flex; align-items:center; justify-content:center; gap:8px; min-height:48px; padding:0 22px; border-radius:999px;
  border:0; cursor:pointer; text-decoration:none; font-weight:700; font-size:16px; line-height:1; white-space:nowrap;
  transition:transform var(--fast) var(--out), background var(--fast), box-shadow var(--fast)}
.btn:active{transform:scale(.97)}
.btn-sun{background:var(--sun); color:var(--ink); box-shadow:inset 0 -3px 0 rgba(0,0,0,.12)}
.btn-sun:hover{background:#ffdb63}
.btn-ink{background:var(--ink); color:#fff}
.btn-ink:hover{background:#1f3557}
.btn-line{background:transparent; color:var(--ink); border:1.5px solid var(--line)}
.btn-line:hover{border-color:var(--ink)}
.btn-sm{min-height:40px; padding:0 16px; font-size:14px}
.btn[disabled],.btn[aria-disabled=true]{opacity:.5; cursor:not-allowed}
.btn.loading{pointer-events:none; opacity:.75}
.btn .arr{transition:transform var(--base) var(--spring)}
.btn:hover .arr{transform:translateX(3px)}

/* ── campos ── */
.fld{display:grid; gap:4px; position:relative; min-width:0}
.fld > span{font-size:12px; font-weight:600; color:var(--muted); letter-spacing:.02em}
.inp{width:100%; min-width:0; min-height:52px; padding:12px 14px; border:1.5px solid var(--line); border-radius:var(--r-sm); background:#fff; font-size:16px; font-weight:600; appearance:none; -webkit-appearance:none}
select.inp{background-image:linear-gradient(45deg,transparent 50%,var(--muted) 50%),linear-gradient(135deg,var(--muted) 50%,transparent 50%);
  background-position:calc(100% - 20px) 54%, calc(100% - 15px) 54%; background-size:5px 5px; background-repeat:no-repeat; padding-right:38px}
.inp:hover{border-color:#cfc9bb}
.inp:focus{border-color:var(--focus); outline:none; box-shadow:0 0 0 3px rgba(43,108,255,.18)}
.fld.bad .inp{border-color:var(--coral)}
.err{color:#c63b1c; font-size:13.5px; font-weight:500}
.err:empty{display:none}
.check{display:grid; grid-template-columns:22px 1fr; gap:10px; align-items:start; font-size:14px; color:var(--ink-2)}
.check input{width:20px; height:20px; margin:1px 0 0; accent-color:var(--ink)}

/* ── selector ida y vuelta / solo ida ── */
.seg{display:inline-flex; background:var(--bg); border-radius:999px; padding:4px; gap:2px; justify-self:start}
.seg button{border:0; background:transparent; min-height:38px; padding:0 16px; border-radius:999px; font-weight:700; font-size:14px; cursor:pointer; color:var(--ink-2)}
.seg button[aria-pressed=true]{background:#fff; color:var(--ink); box-shadow:0 1px 4px rgba(19,35,58,.15)}

/* ── tarjeta de oferta (portada, buscador y panel) ── */
.offer{background:var(--card); border-radius:var(--r); overflow:hidden; box-shadow:var(--shadow); display:grid; grid-template-columns:104px minmax(0,1fr); min-height:120px; position:relative}
@media (max-width:359px){ .offer{grid-template-columns:84px minmax(0,1fr)} .offer .act .btn{padding:0 12px} }
.offer .ph{background:var(--sky) center/cover no-repeat; position:relative}
.offer .ph .noimg{position:absolute; inset:0; display:grid; place-items:center; font-size:34px}
.offer .bd{padding:12px 14px; display:grid; gap:4px; align-content:center; min-width:0}
.offer .route{font:700 17px/1.2 var(--display); white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.offer .meta{font-size:13px; color:var(--muted)}
.offer .row{display:flex; align-items:baseline; gap:8px; flex-wrap:wrap}
.offer .price{font:800 24px/1 var(--display)}
.offer .was{font-size:13.5px; color:var(--muted); text-decoration:line-through; text-decoration-color:var(--coral); text-decoration-thickness:2px}
.badge{display:inline-flex; align-items:center; gap:4px; padding:3px 8px; border-radius:999px; font-size:12px; font-weight:700; background:var(--mint); color:var(--mint-ink)}
.badge.rota{background:var(--coral-2); color:#a8321a}
.badge.kind{background:var(--sun-2); color:#6d5300}
.offer .act{display:flex; flex-wrap:wrap; gap:8px; margin-top:6px}
.offer.locked .bd .secret{filter:blur(7px); user-select:none}
.offer.locked .ph{filter:blur(6px) saturate(.6)}
.offer .lock{position:absolute; inset:0; display:none; place-items:center; background:linear-gradient(90deg, rgba(247,245,239,0) 0%, rgba(247,245,239,.55) 40%)}
.offer.locked .lock{display:grid}
.offer .lock span{display:inline-flex; gap:6px; align-items:center; background:var(--ink); color:#fff; font-size:13px; font-weight:700; padding:8px 12px; border-radius:999px}
@media (min-width:720px){ .offer{grid-template-columns:150px minmax(0,1fr)} }

/* esqueleto de carga */
.skel{border-radius:var(--r); height:120px; background:linear-gradient(90deg,#ece8de 0%,#f6f3ec 40%,#ece8de 80%); background-size:300% 100%; animation:skel 1.1s linear infinite}
@keyframes skel{to{background-position:-150% 0}}

/* ── modal ── */
dialog.modal{border:0; padding:0; border-radius:var(--r-lg); width:min(440px, calc(100% - 24px)); background:var(--card); color:var(--ink); box-shadow:0 30px 80px rgba(19,35,58,.35)}
dialog.modal::backdrop{background:rgba(19,35,58,.45); backdrop-filter:blur(3px)}
.modal .in{padding:28px 22px 24px; display:grid; gap:16px}
.modal h3{font-size:26px; line-height:1.1}
.modal .x{position:absolute; top:12px; right:12px; width:40px; height:40px; border-radius:50%; border:0; background:var(--bg); cursor:pointer; font-size:20px}
.modal .switch{font-size:14px; color:var(--muted); text-align:center}
.modal .switch button{background:none; border:0; color:var(--ink); font-weight:700; text-decoration:underline; cursor:pointer; padding:4px}
.modal .note{font-size:12.5px; color:var(--muted)}

/* ── aviso flotante ── */
.toast{position:fixed; left:50%; bottom:calc(20px + env(safe-area-inset-bottom)); transform:translate(-50%, 20px); opacity:0; z-index:90;
  background:var(--ink); color:#fff; padding:12px 18px; border-radius:999px; font-size:14px; font-weight:600; transition:all var(--base) var(--out); pointer-events:none; max-width:calc(100% - 32px); text-align:center}
.toast.on{opacity:1; transform:translate(-50%, 0)}

.tag-ex{display:inline-block; font-size:12px; color:var(--muted); background:#efebe1; padding:3px 9px; border-radius:999px}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none!important; transition:none!important; scroll-behavior:auto!important}
}
