:root{
  --bg:#050505;--surface:#0e0e0e;--surface2:#141414;--border:#1c1c1c;--border2:#262626;
  --text:#f0f0f0;--muted:#555;--muted2:#888;
  --orange:#EC671B;--teal:#1BAF9D;--purple:#a78bfa;--red:#ef4444;--gold:#FDCC68;--green:#34d399;
  /* TEMA-T2 · tokens de TEXTO tematizables: no-op en oscuro (resuelven al acento);
     en claro flipean a las tintas AA (--teal-ink/--gold-ink) — ver bloque al final. */
  --teal-text:var(--teal);--gold-text:var(--gold);--orange-text:var(--orange);
}
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:'Montserrat','Inter',sans-serif;background:var(--bg);color:var(--text);min-height:100vh;min-height:100dvh;overflow-x:hidden}
.ico{width:18px;height:18px;display:inline-block;vertical-align:middle;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}

/* Loader splash mientras se verifica sesión */
#auth-gate{position:fixed;inset:0;background:var(--bg);z-index:500;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:1rem;font-size:.85rem;color:var(--muted)}
#auth-gate.hide{display:none}
.spin-lg{width:38px;height:38px;border:3px solid var(--border2);border-top-color:var(--orange);border-radius:50%;animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

#pause-banner{display:none;background:linear-gradient(90deg,rgba(239,68,68,.15),rgba(239,68,68,.06));border-bottom:1px solid rgba(239,68,68,.3);padding:.7rem 2rem;text-align:center;font-size:.78rem;font-weight:500;color:#fca5a5}
#pause-banner b{color:var(--red)}

/* PERF móvil: el blur en sticky provoca jank en iOS → base sólida; el blur vuelve solo en desktop (media query al final). */
header{display:flex;align-items:center;justify-content:space-between;padding:.85rem 1.5rem;border-bottom:1px solid var(--border);background:rgba(5,5,5,.96);position:sticky;top:0;z-index:100;gap:.6rem;flex-wrap:wrap}
.logo-wrap{display:flex;align-items:center;gap:.4rem}
.logo{font-size:1.15rem;font-weight:800;letter-spacing:.09em}.logo span{color:var(--orange)}
.badge{font-size:.55rem;font-weight:700;letter-spacing:.07em;text-transform:uppercase;background:var(--orange);color:#000;padding:.16rem .42rem;border-radius:4px}
nav{display:flex;gap:.25rem;flex-wrap:wrap}
nav a{font-size:.72rem;color:var(--muted);text-decoration:none;padding:.3rem .65rem;border-radius:20px;border:1px solid transparent;transition:all .18s;white-space:nowrap}
nav a:hover{color:var(--text);border-color:var(--border)}
nav a.active{color:var(--teal);border-color:rgba(27,175,157,.3);background:rgba(27,175,157,.08)}

.user-mini{display:flex;align-items:center;gap:.4rem;font-size:.7rem;color:var(--muted)}
.user-mini .avatar{width:22px;height:22px;border-radius:50%;background:linear-gradient(135deg,var(--orange),var(--teal));display:flex;align-items:center;justify-content:center;font-size:.65rem;font-weight:700;color:#000;text-transform:uppercase}

.cart-btn{background:none;border:1px solid var(--border);border-radius:10px;padding:.42rem .75rem;font-size:.78rem;color:var(--text);cursor:pointer;display:flex;align-items:center;gap:.45rem;transition:all .2s;font-family:inherit}
.cart-btn:hover{border-color:rgba(236,103,27,.35);background:rgba(236,103,27,.06);color:var(--orange)}
.cart-count{background:var(--orange);color:#000;font-size:.62rem;font-weight:700;min-width:18px;height:18px;border-radius:9px;padding:0 4px;display:flex;align-items:center;justify-content:center;transition:transform .25s cubic-bezier(.34,1.6,.64,1)}
.cart-btn.bounce{animation:cartBounce .42s ease}
@keyframes cartBounce{0%,100%{transform:scale(1)}30%{transform:scale(1.18)}60%{transform:scale(.95)}}

#trip-bar{display:none;background:linear-gradient(90deg,rgba(236,103,27,.08),rgba(27,175,157,.05));border-bottom:1px solid var(--border);padding:.8rem 1.5rem;align-items:center;gap:1.3rem;flex-wrap:wrap}
#trip-bar.show{display:flex}
.tb-label{font-size:.66rem;font-weight:600;letter-spacing:.13em;text-transform:uppercase;color:var(--muted)}
.tb-detail{display:flex;align-items:center;gap:.4rem;font-size:.8rem;color:var(--text)}
.tb-detail b{font-weight:600}
.tb-detail .ico{color:var(--orange)}
.tb-detail.dest .ico{color:var(--teal)}.tb-detail.bud .ico{color:var(--gold)}
.tb-edit{margin-left:auto;background:none;border:1px solid var(--border2);color:var(--muted2);font-size:.72rem;padding:.32rem .8rem;border-radius:20px;cursor:pointer;font-family:inherit;text-decoration:none;display:inline-flex;align-items:center;gap:.3rem}
.tb-edit:hover{color:var(--text);border-color:rgba(255,255,255,.18)}

.filters{padding:1.2rem 1.5rem .7rem;display:flex;gap:.42rem;flex-wrap:wrap;border-bottom:1px solid var(--border)}

/* ═══ Dock de pilares del viajero — MotionBar, TODAS las anchuras ═══
   Pivote 13-jul: reemplaza el sidebar vertical/scroller-horizontal por una pill fija al
   piso, siempre visible (decisión explícita del dueño: "todas las pantallas", no solo
   móvil). Único punto de verdad de qué pilar está activo: setActivePillar(). */
:root{--vdock-h:4.5rem;--pnav-h:3.6rem;
  /* ZOCALO SEGURO · el borde inferior que nada flotante puede invadir. Lo consumen el
     FAB de soporte y la pila de toasts, que viven en config.js y no saben nada de esta
     pagina: sin esto se apoyaban sobre el dock del viajero y tapaban la busqueda. */
  --saga-zocalo:calc(var(--vdock-h) + env(safe-area-inset-bottom,0px))}   /* --pnav-h: hueco real que reserva #progress-nav (se ajusta por JS si crece a varias líneas) */
.viajero-sidebar{
  position:fixed;left:0;right:0;bottom:0;top:auto;width:auto;
  padding:.4rem .7rem calc(.4rem + env(safe-area-inset-bottom,0px));
  background:rgba(8,8,8,.97);border-right:none;border-top:1px solid var(--border);
  z-index:90;display:flex;align-items:center;justify-content:center;overflow:visible;
}
.vs-title{display:none}
.vs-dock{position:relative;display:flex;align-items:center;width:100%;max-width:38rem;gap:.05rem;
  background:var(--surface2);border:1px solid var(--border2);border-radius:16px;padding:.3rem .45rem}
.vs-cap{position:absolute;z-index:1;top:.28rem;left:0;height:calc(100% - .56rem);width:60px;
  border-radius:11px;background:rgba(27,175,157,.14);border:1px solid rgba(27,175,157,.3);
  transition:left .42s cubic-bezier(.34,1.56,.64,1),width .42s cubic-bezier(.34,1.56,.64,1)}
.vs-cap.vs-nofx{transition:none}
.vs-item{position:relative;z-index:2;flex:1 1 0;min-width:0;min-height:44px;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.16rem;
  padding:.36rem .2rem;border-radius:11px;font-size:.58rem;font-weight:600;color:var(--muted2);
  background:none;border:none;cursor:pointer;font-family:inherit;text-align:center;line-height:1.15;
  transition:color .18s;-webkit-tap-highlight-color:transparent}
.vs-item:hover{color:var(--text)}
.vs-item.active{color:var(--teal)}
.vs-item .ico{width:18px;height:18px;flex-shrink:0;color:currentColor}
.vs-item .vs-lbl{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.vs-item:focus-visible{outline:2px solid var(--teal);outline-offset:2px}
.catalog-main{margin-left:0}
@media(prefers-reduced-motion:reduce){.vs-cap{transition:none}}
.chip{background:none;border:1px solid var(--border);border-radius:20px;padding:.4rem .85rem;font-size:.74rem;font-weight:500;color:var(--muted);cursor:pointer;transition:all .18s;font-family:inherit;display:inline-flex;align-items:center;gap:.4rem}
.chip:hover{border-color:rgba(255,255,255,.12);color:var(--text);background:rgba(255,255,255,.02)}
.chip.active{border-color:rgba(27,175,157,.35);background:rgba(27,175,157,.08);color:var(--teal)}
.chip .ico{width:14px;height:14px}

.page-head{padding:1.3rem 1.5rem .5rem;display:flex;justify-content:space-between;align-items:baseline;flex-wrap:wrap;gap:.5rem}
.page-title{font-size:1.05rem;font-weight:700;letter-spacing:-.01em}
.page-title span{color:var(--orange)}
.result-count{font-size:.74rem;color:var(--muted)}.result-count b{color:var(--text)}
.src-pill{display:inline-flex;align-items:center;gap:.3rem;font-size:.66rem;color:var(--muted);padding:.18rem .55rem;border:1px solid var(--border);border-radius:20px;margin-left:.5rem}
.src-pill .ico{width:9px;height:9px}
.src-pill.live{color:var(--green);border-color:rgba(52,211,153,.3)}
.src-pill.cache{color:var(--orange-text);border-color:rgba(236,103,27,.3)}

.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(255px,1fr));gap:1.05rem;padding:.9rem 1.5rem calc(var(--vdock-h) + var(--pnav-h))}
.empty-state{grid-column:1/-1;text-align:center;padding:4rem 1rem;color:var(--muted)}
.empty-state .ico{color:var(--muted);width:48px;height:48px;margin:0 auto 1rem;display:block}
.empty-state h3{color:var(--text);font-size:1rem;font-weight:600;margin-bottom:.4rem}
.empty-state p{font-size:.82rem;line-height:1.6;max-width:380px;margin:0 auto}
.empty-state a{color:var(--orange);text-decoration:none}

/* content-visibility: el navegador salta el layout/paint de tarjetas fuera de pantalla (grids largos). */
.card{background:var(--surface);border:1px solid var(--border);border-radius:14px;overflow:hidden;transition:transform .22s,border-color .22s,box-shadow .22s;display:flex;flex-direction:column;content-visibility:auto;contain-intrinsic-size:auto 330px}
.card:hover{border-color:rgba(255,255,255,.09);transform:translateY(-2px);box-shadow:0 6px 18px rgba(0,0,0,.4)}
.card-canvas{width:100%;height:135px;display:block;background:var(--surface2)}
.card-cat-badge{position:absolute;top:.7rem;left:.7rem;background:rgba(5,5,5,.85);border:1px solid rgba(255,255,255,.08);border-radius:20px;padding:.25rem .6rem;font-size:.62rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;display:flex;align-items:center;gap:.32rem}
.card-cat-badge .ico{width:12px;height:12px}
.cat-simple .card-cat-badge{color:var(--orange)}
.cat-tour .card-cat-badge{color:var(--teal)}
.cat-transport .card-cat-badge{color:var(--gold)}
.cat-accommodation .card-cat-badge{color:#e8924a}
.cat-event .card-cat-badge{color:var(--purple)}
.badge-unverified{left:auto;right:.7rem;background:var(--gold);border-color:var(--gold);color:#000}

.card-body{padding:.95rem 1rem 1rem;flex:1;display:flex;flex-direction:column}
.card-state{font-size:.66rem;color:var(--muted2);letter-spacing:.05em;text-transform:uppercase;font-weight:500;margin-bottom:.25rem;display:flex;align-items:center;gap:.3rem}
.card-state .ico{width:11px;height:11px;color:var(--muted)}
.card-name{font-size:.95rem;font-weight:600;margin-bottom:.25rem;line-height:1.3;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.card-provider{font-size:.66rem;color:var(--muted2);margin-bottom:.4rem;display:flex;align-items:center;gap:.32rem;letter-spacing:.01em}
.card-provider b{color:var(--orange);font-weight:700;letter-spacing:.04em}
.card-provider .ico{width:11px;height:11px;color:var(--teal)}
.card-desc{font-size:.72rem;color:var(--muted);line-height:1.45;margin:0 0 .55rem;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-height:calc(1.45em * 2)}
.card.has-rating .card-desc{-webkit-line-clamp:1;min-height:calc(1.45em * 1)}
.card-rate{display:flex;align-items:center;gap:.35rem;font-size:.7rem;color:var(--muted2);margin-bottom:.55rem}
.card-rate .ico{width:12px;height:12px;color:var(--gold);fill:var(--gold)}
.card-footer{display:flex;align-items:flex-end;justify-content:space-between;gap:.5rem;margin-top:auto}
.price{font-size:1.1rem;font-weight:700;color:var(--orange);line-height:1;font-variant-numeric:tabular-nums}
.price span{font-size:.64rem;font-weight:400;color:var(--muted);margin-left:.15rem}
.price-free{font-size:.9rem;font-weight:700;color:var(--teal);line-height:1;font-variant-numeric:tabular-nums}
.avail{font-size:.66rem;color:var(--muted);margin-top:.18rem}
.add-btn{background:var(--orange);color:#000;border:none;border-radius:8px;padding:.4rem .55rem;font-size:.74rem;font-weight:600;cursor:pointer;font-family:inherit;transition:background .18s,transform .18s;display:inline-flex;align-items:center;gap:.3rem;flex-shrink:0}
.add-btn .ico{width:13px;height:13px;stroke-width:2.4}
.add-btn:hover{background:#D05B18;transform:scale(1.04)}
.add-btn:active{transform:scale(.96)}
.add-btn.added{background:#1f7a6f;color:#fff}
.add-btn:disabled{background:var(--border2);color:var(--muted);cursor:not-allowed;transform:none}

/* "Ver más" del catálogo: acción secundaria a propósito (el CTA primario de la
   vista es "Agregar" en la tarjeta), ocupa toda la fila del grid. */
.load-more-wrap{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;gap:.35rem;padding:.7rem 0 .2rem}
.load-more-btn{background:transparent;color:var(--text);border:1px solid var(--border2);border-radius:var(--radius-sm);padding:.62rem 1.2rem;font-size:.8rem;font-weight:700;cursor:pointer;font-family:inherit;transition:background .18s,border-color .18s}
.load-more-btn:hover{background:var(--surface);border-color:var(--orange)}
.load-more-count{font-size:.66rem;color:var(--muted)}

.flyer{position:fixed;z-index:300;pointer-events:none;width:38px;height:38px;border-radius:50%;background:var(--orange);color:#000;display:flex;align-items:center;justify-content:center;box-shadow:0 6px 20px rgba(236,103,27,.5)}
.flyer .ico{width:18px;height:18px;stroke-width:2.5}

#drawer-overlay{position:fixed;inset:0;background:rgba(0,0,0,.72);z-index:200;opacity:0;pointer-events:none;transition:opacity .25s}
#drawer-overlay.open{opacity:1;pointer-events:all}
#drawer{position:fixed;right:0;top:0;bottom:0;width:380px;max-width:100vw;background:var(--surface);border-left:1px solid var(--border);z-index:201;display:flex;flex-direction:column;transform:translateX(100%);transition:transform .3s cubic-bezier(.4,0,.2,1);-webkit-overflow-scrolling:touch}
#drawer.open{transform:translateX(0)}
.drawer-head{display:flex;align-items:center;justify-content:space-between;padding:1.15rem 1.4rem;border-bottom:1px solid var(--border)}
.drawer-title{font-size:.95rem;font-weight:600;display:flex;align-items:center;gap:.45rem}
.drawer-title .ico{width:18px;height:18px;color:var(--orange)}
.close-btn{background:none;border:none;color:var(--muted);cursor:pointer;padding:.25rem;transition:color .15s;display:flex;align-items:center}
.close-btn:hover{color:var(--text)}
.drawer-items{flex:1;overflow-y:auto;padding:.6rem 1.4rem}
.di{display:flex;align-items:center;justify-content:space-between;padding:.65rem 0;border-bottom:1px solid var(--border)}
.di:last-child{border-bottom:none}
.di-left{display:flex;align-items:center;gap:.7rem;flex:1;min-width:0}
.di-ico{width:34px;height:34px;background:var(--surface2);border-radius:8px;display:flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--orange)}
.di-ico .ico{width:16px;height:16px}
.di-meta{min-width:0;flex:1}
.di-name{font-size:.78rem;font-weight:500;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.di-state{font-size:.66rem;color:var(--muted);margin-top:.12rem}
.di-price{font-size:.82rem;color:var(--orange);font-weight:600;margin-right:.2rem}
.di-rm{background:none;border:none;color:var(--muted);cursor:pointer;padding:.25rem;transition:color .15s;display:flex;align-items:center}
.di-rm:hover{color:var(--red)}.di-rm .ico{width:13px;height:13px}
.empty-cart{text-align:center;padding:3rem 1rem;color:var(--muted);font-size:.82rem}
.empty-cart .ico{width:38px;height:38px;color:var(--border2);margin:0 auto .8rem;display:block}

.drawer-foot{padding:1rem 1.4rem 1.2rem;border-top:1px solid var(--border)}
.totals{margin-bottom:.85rem}
.t-row{display:flex;justify-content:space-between;font-size:.82rem;margin-bottom:.4rem;color:var(--muted2)}
.t-row.main{font-size:1.05rem;font-weight:700;color:var(--text);padding-bottom:.7rem;margin-bottom:.7rem;border-bottom:1px solid var(--border)}
.t-row.anticipo{color:var(--orange-text);font-weight:600}
.t-row.restante{color:var(--muted2);font-size:.78rem;margin-top:.1rem}
.payment-note{font-size:.72rem;color:var(--muted2);line-height:1.55;background:rgba(236,103,27,.06);border:1px solid rgba(236,103,27,.18);border-radius:8px;padding:.6rem .75rem;margin:.8rem 0 1rem}
.payment-note b{color:var(--orange-text)}
.reserve-btn{width:100%;background:var(--orange);color:#000;border:none;border-radius:10px;padding:.85rem;font-size:.88rem;font-weight:700;cursor:pointer;font-family:inherit;transition:all .18s;display:flex;align-items:center;justify-content:center;gap:.45rem}
.reserve-btn .ico{width:16px;height:16px;stroke-width:2.2}
.reserve-btn:hover{background:#D05B18}
.reserve-btn:disabled{background:var(--border);color:var(--muted);cursor:not-allowed}

/* Cede el piso al dock de pilares (siempre presente ahora): se apila encima, oculto por
   defecto, y solo aparece con carrito activo — evita 2 barras fijas compitiendo. */
#progress-nav{position:fixed;bottom:var(--vdock-h);left:0;right:0;z-index:80;background:rgba(5,5,5,.96);border-top:1px solid var(--border);padding:.65rem 1.5rem;display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap;transform:translateY(130%);transition:transform .32s cubic-bezier(.4,0,.2,1)}
body.cart-active #progress-nav{transform:translateY(0)}
@media(prefers-reduced-motion:reduce){#progress-nav{transition:none}}
.pn-steps{display:flex;align-items:center;gap:.4rem}
.pn-step{display:flex;align-items:center;gap:.32rem;font-size:.7rem;color:var(--muted)}
.pn-step.current{color:var(--orange)}
.pn-dot{width:7px;height:7px;border-radius:50%;background:currentColor;flex-shrink:0}
.pn-sep{color:#2a2a2a;font-size:.72rem}
.pn-hint{font-size:.7rem;color:var(--muted)}
.pn-action{background:none;border:1px solid rgba(236,103,27,.3);border-radius:8px;padding:.35rem .8rem;font-size:.74rem;color:var(--orange);cursor:pointer;font-family:inherit;transition:all .18s;display:none;align-items:center;gap:.3rem;text-decoration:none}
.pn-action.show{display:inline-flex}
.pn-action:hover{background:rgba(236,103,27,.07)}
/* El FAB de soporte (config.js, bottom:1.4rem) se eleva por encima de la barra de progreso para no taparla. */
#saga-support-fab{bottom:calc(var(--vdock-h) + 3.4rem)!important}

.loader{grid-column:1/-1;text-align:center;padding:3rem 1rem;color:var(--muted);font-size:.85rem}
.spin-sm{width:22px;height:22px;border:2px solid var(--border2);border-top-color:var(--orange);border-radius:50%;animation:spin .8s linear infinite;display:inline-block;vertical-align:middle;margin-right:.6rem}

@media(max-width:520px){
  header{padding:.7rem .9rem;gap:.5rem}
  header nav{order:3;width:100%;justify-content:center}
  /* El cluster carrito+campana+switch de rol baja a su propia fila (no se amontona con el logo). */
  #header-tools{order:2;width:100%;justify-content:flex-end;flex-wrap:wrap;gap:.45rem}
  #drawer{width:100vw}
}
/* PERF móvil: blur de cristal SOLO en desktop (en iOS/Android provoca jank de scroll). */
@media(min-width:881px){
  header{background:rgba(5,5,5,.92);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}
  #drawer-overlay{background:rgba(0,0,0,.65);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}
  #progress-nav{backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px)}
  .scan-overlay{background:rgba(5,5,5,.96);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}
  #picker-overlay{background:rgba(0,0,0,.72)!important;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
}
/* PERF móvil: inputs a 16px (evita el auto-zoom de iOS al enfocar). */
#cultura-search{font-size:.85rem}
@media(max-width:880px){
  #cultura-search,.fp-input,.fp-select{font-size:16px}
}
@media(max-width:768px){
  /* Chips de filtro: carrusel horizontal, sin que se aplasten en varias líneas */
  .filters{flex-wrap:nowrap;overflow-x:auto;white-space:nowrap;-webkit-overflow-scrolling:touch}
  .chip{flex-shrink:0}
  /* Ocultar la scrollbar nativa (chips + sidebar) */
  .filters{scrollbar-width:none;-ms-overflow-style:none}
  .filters::-webkit-scrollbar{display:none}
  /* Tarjetas a ancho completo del viewport, sin desbordes laterales */
  .grid{grid-template-columns:1fr;padding:.9rem 1rem calc(var(--vdock-h) + var(--pnav-h))}
  /* Hitbox táctil ≥44px del botón quitar del carrito (el icono visual no cambia) */
  .di-rm{position:relative}
  .di-rm::after{content:'';position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:44px;height:44px}
}

/* ═════════════ FULL PLAN · Conserje inline (Glassmorphism + Neon) ═════════════ */
.fullplan-view{display:none;max-width:640px;margin:0 auto;padding:1.6rem 1.5rem .4rem;animation:fpIn .3s ease}
@keyframes fpIn{from{opacity:0}to{opacity:1}}
.fp-card{position:relative;background:linear-gradient(180deg,rgba(20,20,20,.7) 0%,rgba(10,10,10,.85) 100%);border:1px solid rgba(255,255,255,.08);border-radius:20px;padding:2rem 1.9rem 1.8rem;box-shadow:0 24px 70px rgba(0,0,0,.45),inset 0 1px 0 rgba(255,255,255,.05);animation:fpPop .45s cubic-bezier(.22,.68,0,1.15)}
.fp-card::before{content:'';position:absolute;inset:-2px;border-radius:20px;padding:2px;background:linear-gradient(135deg,#EC671B,rgba(236,103,27,.1) 25%,rgba(27,175,157,.1) 75%,#1BAF9D);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;pointer-events:none;opacity:.5;animation:neonGlow 4s ease-in-out infinite}
.fp-close{position:absolute;top:.95rem;right:.95rem;z-index:3;width:34px;height:34px;display:flex;align-items:center;justify-content:center;border-radius:9px;background:rgba(255,255,255,.05);border:1px solid var(--border2);color:var(--muted2);cursor:pointer;transition:all .18s}
.fp-close:hover{background:rgba(255,255,255,.1);color:var(--text);transform:rotate(90deg)}
.fp-close svg{width:17px;height:17px}
@keyframes neonGlow{0%,100%{opacity:.45;filter:blur(0px)}50%{opacity:.7;filter:blur(.5px)}}
@keyframes fpPop{from{opacity:0;transform:translateY(18px) scale(.95)}to{opacity:1;transform:none}}
.fp-head{text-align:center;margin-bottom:1.5rem;position:relative}
.fp-eyebrow{display:inline-flex;align-items:center;gap:.4rem;font-size:.62rem;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--orange);border:1px solid rgba(236,103,27,.32);padding:.26rem .72rem;border-radius:20px;margin-bottom:.9rem;background:rgba(236,103,27,.04)}
.fp-eyebrow svg{width:11px;height:11px}
.fp-title{font-size:1.55rem;font-weight:800;letter-spacing:-.02em;margin-bottom:.5rem;line-height:1.1}
.fp-title em{font-style:normal;background:linear-gradient(135deg,var(--orange),var(--teal));-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
.fp-sub{font-size:.83rem;color:var(--muted2);line-height:1.55;max-width:380px;margin:0 auto}
.fp-field{margin-bottom:1.05rem;position:relative}
.fp-lbl{font-size:.7rem;font-weight:500;color:var(--text);margin-bottom:.4rem;display:flex;align-items:center;gap:.38rem;letter-spacing:.02em}
/* Fase 3 · marcadores de categoría. Encendido = TEAL, no naranja: el naranja está
   blindado para el único CTA primario de la vista (#fp-cta). Estado por defecto =
   los 4 encendidos, así que .on es lo normal y apagado es la excepción visual. */
.fp-mks{display:flex;flex-wrap:wrap;gap:.4rem}
.fp-mk{background:none;border:1px solid var(--border);border-radius:20px;padding:.4rem .8rem;font-size:.72rem;font-weight:500;color:var(--muted);cursor:pointer;transition:all .18s;font-family:inherit;display:inline-flex;align-items:center;gap:.38rem}
.fp-mk .ico{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.fp-mk.on{border-color:rgba(27,175,157,.42);background:rgba(27,175,157,.10);color:var(--teal)}
.fp-mk:hover:not([aria-disabled="true"]){border-color:rgba(255,255,255,.16)}
.fp-mk[aria-disabled="true"]{opacity:.5;cursor:not-allowed}
.fp-mk-hint{font-size:.66rem;color:var(--muted);margin-top:.4rem;line-height:1.45}
.fp-mk-hint a{color:var(--teal);text-decoration:underline;cursor:pointer}
/* Aviso de parrilla obsoleta tras togglear con bundles ya calculados. */
.fp-stale{display:flex;align-items:center;gap:.5rem;font-size:.72rem;color:var(--gold);background:rgba(253,204,104,.08);border:1px solid rgba(253,204,104,.28);border-radius:var(--radius);padding:.55rem .75rem;margin:.6rem 0 0}
.fp-lbl svg{width:13px;height:13px;color:var(--orange)}
.fp-lbl.dest svg{color:var(--teal)}
.fp-lbl.bud svg{color:var(--gold)}
.fp-input,.fp-select{width:100%;background:rgba(20,20,20,.78);border:1px solid var(--border2);border-radius:11px;padding:.78rem .9rem;font-size:.92rem;color:var(--text);font-family:inherit;outline:none;transition:border-color .18s,background .18s,box-shadow .18s;color-scheme:dark}
.fp-input:focus,.fp-select:focus{border-color:rgba(236,103,27,.5);background:rgba(20,20,20,.85);box-shadow:0 0 0 3px rgba(236,103,27,.08)}
.fp-input::placeholder{color:var(--muted)}
.fp-select{appearance:none;cursor:pointer;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none'><path d='M1 1.5L6 6.5L11 1.5' stroke='%23888' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/></svg>");background-repeat:no-repeat;background-position:right 1rem center;padding-right:2.5rem}
.fp-date-row{display:grid;grid-template-columns:1fr 1fr;gap:.7rem}
.fp-budget-display{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:.5rem}
.fp-budget-val{font-size:1.5rem;font-weight:800;color:var(--gold);letter-spacing:-.02em}
.fp-budget-hint{font-size:.7rem;color:var(--muted)}
.fp-slider{-webkit-appearance:none;appearance:none;width:100%;height:6px;background:linear-gradient(90deg,rgba(27,175,157,.3),rgba(248,197,68,.4),rgba(236,103,27,.5));border-radius:8px;outline:none;cursor:pointer}
.fp-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:22px;height:22px;background:var(--gold);border-radius:50%;cursor:pointer;border:3px solid var(--surface);box-shadow:0 0 0 1px var(--gold),0 0 12px rgba(248,197,68,.5);transition:transform .15s}
.fp-slider::-webkit-slider-thumb:hover{transform:scale(1.15)}
.fp-slider::-moz-range-thumb{width:22px;height:22px;background:var(--gold);border-radius:50%;cursor:pointer;border:3px solid var(--surface);box-shadow:0 0 0 1px var(--gold),0 0 12px rgba(248,197,68,.5)}
.fp-range-mm{display:flex;justify-content:space-between;font-size:.68rem;color:var(--muted);margin-top:.45rem}
.fp-warn{font-size:.7rem;color:var(--muted2);background:rgba(236,103,27,.05);border:1px solid rgba(236,103,27,.18);border-radius:9px;padding:.55rem .75rem;margin:.5rem 0 1.3rem;display:flex;align-items:flex-start;gap:.45rem;line-height:1.5}
.fp-warn svg{width:13px;height:13px;color:var(--orange);flex-shrink:0;margin-top:.1rem}
.fp-warn b{color:var(--orange);font-weight:600}
.fp-cta{width:100%;background:linear-gradient(135deg,var(--orange) 0%,var(--teal) 100%);color:#000;border:none;border-radius:13px;padding:.95rem;font-size:.92rem;font-weight:800;cursor:pointer;font-family:inherit;transition:all .22s;display:flex;align-items:center;justify-content:center;gap:.55rem;margin-top:.6rem;letter-spacing:.01em;position:relative;overflow:hidden}
.fp-cta::before{content:'';position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.25),transparent);transition:left .6s}
.fp-cta:hover::before{left:100%}
.fp-cta:hover{transform:translateY(-1px);box-shadow:0 14px 32px rgba(236,103,27,.25)}
.fp-cta svg{width:17px;height:17px;stroke-width:2.4}
.fp-error{font-size:.74rem;color:#fca5a5;padding:.55rem .75rem;background:rgba(239,68,68,.08);border:1px solid rgba(239,68,68,.22);border-radius:9px;margin-top:.7rem;display:none}
.fp-error.show{display:block}

/* ═════════════ SCANNING ANIMATION ═════════════ */
.scan-overlay{display:none;position:fixed;inset:0;background:rgba(5,5,5,.97);z-index:450;flex-direction:column;align-items:center;justify-content:center;gap:1.6rem;font-family:inherit}
.scan-overlay.show{display:flex}
.scan-frame{position:relative;width:320px;max-width:80vw;height:200px;border-radius:14px;background:linear-gradient(135deg,#0e0e0e,#141414);border:1px solid var(--border2);overflow:hidden;box-shadow:0 24px 60px rgba(0,0,0,.5)}
.scan-lines{position:absolute;inset:0;padding:1.4rem 1.2rem;display:flex;flex-direction:column;gap:.7rem;justify-content:flex-start}
.scan-line{height:9px;border-radius:5px;background:linear-gradient(90deg,var(--border2) 0%,var(--border2) 50%,var(--surface2) 100%);background-size:200% 100%;animation:scanShimmer 1.4s linear infinite}
.scan-line:nth-child(1){width:65%;animation-delay:0s}
.scan-line:nth-child(2){width:80%;animation-delay:.15s}
.scan-line:nth-child(3){width:45%;animation-delay:.3s}
.scan-line:nth-child(4){width:90%;animation-delay:.45s}
.scan-line:nth-child(5){width:60%;animation-delay:.6s}
.scan-line:nth-child(6){width:75%;animation-delay:.75s}
@keyframes scanShimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}
.scan-laser{position:absolute;left:0;right:0;height:3px;background:linear-gradient(90deg,transparent 0%,var(--orange) 30%,var(--teal) 70%,transparent 100%);box-shadow:0 0 12px var(--orange),0 0 28px rgba(236,103,27,.5);animation:scanLaser 1.8s cubic-bezier(.5,0,.5,1) infinite;border-radius:2px}
@keyframes scanLaser{0%{top:0;opacity:.95}48%{top:calc(100% - 3px);opacity:1}50%{opacity:0}52%{top:0;opacity:0}55%{opacity:.95}100%{top:calc(100% - 3px);opacity:1}}
.scan-status{font-size:.92rem;font-weight:600;color:var(--text);text-align:center;letter-spacing:.02em}
.scan-sub{font-size:.74rem;color:var(--muted2);text-align:center;min-height:1.2em}
.scan-dots::after{content:'';animation:scanDots 1.4s steps(4,end) infinite}
@keyframes scanDots{0%{content:''}25%{content:'.'}50%{content:'..'}75%{content:'...'}100%{content:''}}

/* ═════════════ CARDS (Marshalliano + Fallback) ═════════════ */
.bundle-card{background:var(--surface);border:1px solid var(--border);border-radius:16px;overflow:hidden;transition:transform .35s cubic-bezier(.34,1.3,.64,1),box-shadow .35s,border-color .35s;position:relative;cursor:pointer}
.bundle-card.kind-marsh-turquoise{border-color:rgba(27,175,157,.35);box-shadow:0 8px 24px rgba(27,175,157,.08)}
.bundle-card.kind-marsh-orange{border-color:rgba(236,103,27,.35);box-shadow:0 8px 24px rgba(236,103,27,.08)}
.bundle-card.kind-fallback{border-color:rgba(64,108,180,.35);box-shadow:0 8px 24px rgba(64,108,180,.08)}
.bundle-card.kind-marsh-turquoise::before{content:'';position:absolute;top:0;left:0;right:0;height:3px;background:linear-gradient(90deg,var(--teal),rgba(27,175,157,.4))}
.bundle-card.kind-marsh-orange::before{content:'';position:absolute;top:0;left:0;right:0;height:3px;background:linear-gradient(90deg,var(--orange),rgba(236,103,27,.4))}
.bundle-card.kind-fallback::before{content:'';position:absolute;top:0;left:0;right:0;height:3px;background:linear-gradient(90deg,#406cb4,rgba(64,108,180,.4))}
.bundle-card:hover{transform:translateY(-3px) scale(1.005);box-shadow:0 10px 24px rgba(0,0,0,.35)}
.bundle-card.expanded{transform:scale(1.025);box-shadow:0 14px 32px rgba(0,0,0,.45);z-index:5}

.bc-head{padding:1.1rem 1.2rem .8rem;display:flex;align-items:flex-start;justify-content:space-between;gap:.6rem}
.bc-kind-tag{display:inline-flex;align-items:center;gap:.32rem;font-size:.6rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;padding:.2rem .55rem;border-radius:20px;margin-bottom:.45rem}
.kind-marsh-turquoise .bc-kind-tag{background:rgba(27,175,157,.13);color:var(--teal)}
.kind-marsh-orange .bc-kind-tag{background:rgba(236,103,27,.13);color:var(--orange)}
.kind-fallback .bc-kind-tag{background:rgba(64,108,180,.13);color:#7494d6}
.bc-kind-tag svg{width:9px;height:9px}
.bc-title{font-size:1.02rem;font-weight:700;line-height:1.25;margin-bottom:.18rem}
.bc-provider{font-size:.64rem;color:var(--muted2);margin-bottom:.3rem;display:flex;align-items:center;gap:.3rem;letter-spacing:.01em}
.bc-provider b{color:var(--orange);font-weight:700;letter-spacing:.04em}
.bc-provider svg{width:11px;height:11px;color:var(--teal)}
.bc-meta{font-size:.72rem;color:var(--muted2);display:flex;align-items:center;gap:.55rem;flex-wrap:wrap}
.bc-meta svg{width:11px;height:11px;color:var(--muted)}
.bc-meta b{color:var(--text);font-weight:600}
.bc-price{text-align:right;flex-shrink:0}
.bc-price-n{font-size:1.35rem;font-weight:800;letter-spacing:-.02em}
.kind-marsh-turquoise .bc-price-n{color:var(--teal)}
.kind-marsh-orange .bc-price-n{color:var(--orange)}
.kind-fallback .bc-price-n{color:#7494d6}
.bc-price-l{font-size:.62rem;color:var(--muted);letter-spacing:.05em}

.bc-items-mini{padding:0 1.2rem .9rem;display:flex;flex-wrap:wrap;gap:.35rem}
.bc-item-chip{font-size:.66rem;background:var(--surface2);border:1px solid var(--border2);border-radius:20px;padding:.2rem .6rem;color:var(--muted2);display:inline-flex;align-items:center;gap:.28rem}
.bc-item-chip svg{width:10px;height:10px}

.bc-expand{max-height:0;overflow:hidden;transition:max-height .45s cubic-bezier(.22,.68,0,1)}
.bundle-card.expanded .bc-expand{max-height:920px}
.bc-images{display:grid;grid-template-columns:repeat(3,1fr);gap:.5rem;padding:0 1.2rem .9rem}
.bc-img{aspect-ratio:1;border-radius:9px;overflow:hidden;position:relative;background:var(--surface2)}
.bc-img canvas{width:100%;height:100%;display:block}
.bc-img.ph{display:flex;align-items:center;justify-content:center}
.bc-img.ph svg{width:28px;height:28px;opacity:.5}
.bc-detail{padding:0 1.2rem 1rem;border-top:1px solid var(--border)}
.bc-detail-title{font-size:.68rem;font-weight:700;letter-spacing:.13em;text-transform:uppercase;color:var(--muted);margin:.9rem 0 .55rem}
.bc-detail-list{display:flex;flex-direction:column;gap:.55rem}
.bc-detail-item{display:flex;align-items:flex-start;gap:.55rem;font-size:.78rem;color:var(--muted2);line-height:1.5}
.bc-detail-item svg{width:14px;height:14px;flex-shrink:0;margin-top:.12rem}
.kind-marsh-turquoise .bc-detail-item svg{color:var(--teal)}
.kind-marsh-orange .bc-detail-item svg{color:var(--orange)}
.kind-fallback .bc-detail-item svg{color:#7494d6}
.bc-detail-item b{color:var(--text);font-weight:600}
.bc-actions{padding:0 1.2rem 1.2rem;display:flex;align-items:center;justify-content:space-between;gap:.6rem}
.bc-add{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:.45rem;background:var(--orange);color:#000;border:none;border-radius:11px;padding:.8rem;font-size:.85rem;font-weight:700;cursor:pointer;font-family:inherit;transition:all .2s}
.kind-marsh-turquoise .bc-add{background:var(--teal);color:#fff}
.kind-fallback .bc-add{background:#406cb4;color:#fff}
.bc-add:hover{transform:scale(1.02);filter:brightness(1.05)}
.bc-add.added{background:#1f7a6f;color:#fff}
.kind-marsh-orange .bc-add.added{background:#a86b30}
.kind-fallback .bc-add.added{background:#2d4f8c}
.bc-add svg{width:14px;height:14px;stroke-width:2.4}
/* F9 · Fix bug video: el CTA de agregar vivía SOLO dentro de .bc-expand (colapsado por defecto,
   max-height:0). En bundles con varias categorías (Lara: hasta 5 items) el contenido expandido
   supera 2000px en móvil y el botón queda muy por debajo del viewport sin ningún scroll-into-view
   — el usuario nunca lo ve. Este mini-CTA en el header queda SIEMPRE visible sin expandir. */
.bc-add-mini{flex:none;display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;margin-top:.5rem;background:var(--orange);color:#000;border:none;border-radius:11px;cursor:pointer;transition:all .2s}
.kind-marsh-turquoise .bc-add-mini{background:var(--teal);color:#fff}
.kind-fallback .bc-add-mini{background:#406cb4;color:#fff}
.bc-add-mini:hover{transform:scale(1.05);filter:brightness(1.05)}
.bc-add-mini.added{background:#1f7a6f;color:#fff}
.kind-marsh-orange .bc-add-mini.added{background:#a86b30}
.kind-fallback .bc-add-mini.added{background:#2d4f8c}
.bc-add-mini svg{width:17px;height:17px;stroke-width:2.4}
.bc-toggle{background:none;border:1px solid var(--border2);color:var(--muted2);border-radius:10px;padding:.55rem .75rem;font-size:.72rem;cursor:pointer;font-family:inherit;display:inline-flex;align-items:center;gap:.32rem;transition:all .18s}
.bc-toggle:hover{color:var(--text);border-color:rgba(255,255,255,.18)}
.bc-toggle svg{width:11px;height:11px;transition:transform .35s}
.bundle-card.expanded .bc-toggle svg{transform:rotate(180deg)}

.bundles-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:1.1rem;padding:.9rem 1.5rem 6.5rem}
.bundles-section-label{padding:0 1.5rem;font-size:.7rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin:1rem 0 .25rem;display:flex;align-items:center;gap:.5rem}
.bundles-section-label svg{width:13px;height:13px}
.bundles-section-label.marsh{color:var(--orange)}
.bundles-section-label.fallback{color:#7494d6}

/* ═════════════ BIMONEDA EN CART DRAWER ═════════════ */
.bm-total{display:flex;align-items:stretch;background:linear-gradient(135deg,rgba(236,103,27,.08),rgba(27,175,157,.06));border:1px solid var(--border2);border-radius:11px;padding:.7rem .85rem;margin:.5rem 0 .75rem}
.bm-side{flex:1;display:flex;flex-direction:column;gap:.15rem}
.bm-side.usd{align-items:flex-start}
.bm-side.ves{align-items:flex-end;text-align:right}
.bm-divider{width:1px;background:var(--border2);margin:0 .85rem}
.bm-label{font-size:.6rem;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.bm-amount{font-size:1.05rem;font-weight:800;letter-spacing:-.01em;font-family:'JetBrains Mono','Courier New',monospace}
.bm-side.usd .bm-amount{color:var(--orange)}
.bm-side.ves .bm-amount{color:var(--gold)}
.bm-rate{font-size:.62rem;color:var(--muted);margin-top:.55rem;text-align:center;display:flex;align-items:center;justify-content:center;gap:.32rem}
.bm-rate svg{width:9px;height:9px;color:var(--teal)}
/* ── G3 · Onboarding de gustos del viajero ── */
#to-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,.88);z-index:420;align-items:center;justify-content:center;padding:1.5rem 1rem;overflow-y:auto}
#to-overlay.show{display:flex}
@media(min-width:881px){#to-overlay{backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}}
.to-card{background:linear-gradient(180deg,rgba(20,20,20,.98),rgba(10,10,10,.99));border:1px solid rgba(255,255,255,.1);border-radius:20px;width:500px;max-width:100%;padding:2rem;animation:pickIn .22s ease}
.to-prog{display:flex;gap:.4rem;margin-bottom:1.8rem}
.to-prog-dot{flex:1;height:3px;border-radius:2px;background:var(--border2);transition:background .3s}
.to-prog-dot.done{background:var(--teal)}
.to-prog-dot.active{background:var(--orange)}
.to-q{font-size:1.05rem;font-weight:800;margin-bottom:.4rem}
.to-hint{font-size:.74rem;color:var(--muted2);margin-bottom:1.2rem}
.to-opts{display:grid;grid-template-columns:1fr 1fr;gap:.65rem;margin-bottom:1.5rem}
.to-opt{background:var(--surface);border:2px solid var(--border2);border-radius:14px;padding:.95rem .8rem;cursor:pointer;text-align:center;transition:all .18s;font-family:inherit;color:var(--text)}
.to-opt:hover{border-color:rgba(255,255,255,.18);background:var(--surface2)}
.to-opt[data-sel="1"]{border-color:var(--to-color,var(--orange));background:color-mix(in srgb,var(--to-color,var(--orange)) 15%,transparent);box-shadow:0 0 0 1px var(--to-color,var(--orange))}
.to-opt-icon{font-size:1.7rem;margin-bottom:.45rem}
.to-opt-lbl{font-size:.82rem;font-weight:700}
.to-opt-sub{font-size:.67rem;color:var(--muted2);margin-top:.18rem}
.to-foot{display:flex;justify-content:space-between;align-items:center;gap:.7rem;margin-top:.5rem}
.to-later{background:none;border:none;color:var(--muted);font-family:inherit;font-size:.78rem;cursor:pointer;text-decoration:underline;text-underline-offset:3px;padding:.3rem}
.to-later:hover{color:var(--text)}
.to-next{background:var(--orange);color:#000;border:none;border-radius:11px;padding:.65rem 1.5rem;font-family:inherit;font-weight:700;font-size:.85rem;cursor:pointer;transition:opacity .15s}
.to-next:disabled{opacity:.4;cursor:not-allowed}
/* Tus gustos en Mi Pasaporte */
/* ── Mercado Dinámico · badge de precio ── */
.mkt-badge{display:inline-flex;align-items:center;gap:.25rem;font-size:.65rem;font-weight:700;letter-spacing:.04em;padding:.18rem .45rem;border-radius:5px;margin-left:.4rem;vertical-align:middle;line-height:1}
.mkt-badge.up{background:rgba(236,103,27,.15);color:var(--orange)}
.mkt-badge.dn{background:rgba(236,103,27,.15);color:var(--orange-text)}
.mkt-badge svg{width:9px;height:9px;flex-shrink:0}
.mkt-price{font-size:1.1rem;font-weight:700;color:var(--orange);line-height:1}
.mkt-old{font-size:.78rem;font-weight:600;color:var(--muted);text-decoration:line-through;margin-right:.15rem}
/* ── Mercado Dinámico · banner de ventana activa ── */
.mkt-banner{display:none;align-items:center;gap:.65rem;background:rgba(236,103,27,.08);border:1px solid rgba(236,103,27,.3);border-radius:10px;padding:.6rem 1rem;margin-bottom:1rem;font-size:.78rem;color:var(--teal)}
.mkt-banner.open{display:flex}
.mkt-banner svg{width:14px;height:14px;flex-shrink:0}
.mkt-banner b{color:var(--text)}
.pp-tastes{background:linear-gradient(135deg,rgba(27,175,157,.08),rgba(167,139,250,.06));border:1px solid rgba(27,175,157,.25);border-radius:14px;padding:1rem 1.2rem;margin-bottom:1.2rem}
.pp-tastes-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:.7rem}
.pp-tastes-title{font-size:.72rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--orange-text)}
.pp-edit-btn{background:none;border:1px solid rgba(236,103,27,.35);border-radius:8px;padding:.28rem .65rem;color:var(--orange-text);font-family:inherit;font-size:.7rem;font-weight:600;cursor:pointer;transition:all .15s}
.pp-edit-btn:hover{background:rgba(236,103,27,.1)}
.pp-taste-chips{display:flex;flex-wrap:wrap;gap:.4rem}
.pp-taste-chip{display:inline-flex;align-items:center;gap:.32rem;padding:.28rem .72rem;border-radius:20px;font-size:.74rem;font-weight:700;border:1px solid transparent;color:#000}
.pp-taste-chip svg{width:15px;height:15px}
/* MAX U v2 · 4º plan · Brújula de descubrimiento (censurado/borroso con revelado) */
.bc-discovery{position:relative}
.bc-discovery.bc-blur > *:not(.bc-disc-overlay){filter:blur(8px);opacity:.65;pointer-events:none;user-select:none;-webkit-user-select:none}
.bc-disc-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;text-align:center;padding:1.1rem;z-index:3;border-radius:inherit;background:radial-gradient(circle at 50% 38%,rgba(167,139,250,.22),rgba(5,5,5,.86))}
.bc-disc-inner{max-width:250px;display:flex;flex-direction:column;align-items:center;gap:.5rem}
.bc-disc-inner > svg{width:32px;height:32px;color:var(--purple)}
.bc-disc-title{font-size:1.02rem;font-weight:800;color:#fff;letter-spacing:-.01em}
.bc-disc-sub{font-size:.74rem;color:var(--muted2);line-height:1.5}
.bc-disc-btn{margin-top:.45rem;background:linear-gradient(135deg,var(--purple),var(--teal));color:#fff;border:none;border-radius:11px;padding:.62rem 1.35rem;font-family:inherit;font-weight:700;font-size:.84rem;cursor:pointer;transition:filter .15s}
.bc-disc-btn:hover{filter:brightness(1.1)}
/* Precio por grupo · opciones de tier en el picker */
.pk-tier-opt{display:flex;align-items:center;gap:.6rem;width:100%;text-align:left;background:var(--surface2);border:1px solid var(--border2);border-radius:11px;padding:.65rem .8rem;color:var(--muted2);font-family:inherit;font-size:.84rem;cursor:pointer;transition:all .15s}
.pk-tier-opt:hover{border-color:rgba(255,255,255,.18);color:var(--text)}
.pk-tier-opt .pk-tier-r{width:14px;height:14px;border-radius:50%;border:2px solid var(--border2);flex-shrink:0;transition:all .15s}
.pk-tier-opt.sel{border-color:var(--orange);background:color-mix(in srgb,var(--orange) 12%,transparent);color:var(--text)}
.pk-tier-opt.sel .pk-tier-r{border-color:var(--orange);background:var(--orange);box-shadow:inset 0 0 0 2px var(--surface2)}
.pk-tier-opt .pk-tier-name{flex:1;min-width:0}
.pk-tier-opt .pk-tier-name b{color:var(--text);font-weight:700}
.pk-tier-opt .pk-tier-price{font-family:'JetBrains Mono','SFMono-Regular',monospace;color:var(--orange);font-weight:700;white-space:nowrap}
/* ═══ Mapa Cultural Interactivo (Fase 3) ═══ */
.mapa-view{display:none;max-width:1100px;margin:0 auto;padding:1.2rem 1.2rem 2rem}
.mapa-head{margin-bottom:.4rem}
.mapa-eyebrow{color:var(--teal);font-size:.68rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;margin:0 0 .45rem}
.mapa-title{font-family:'Montserrat',sans-serif;font-size:1.5rem;font-weight:800;line-height:1.15;margin:0 0 .3rem}
.mapa-title .accent{color:var(--orange)}
.mapa-sub{font-size:.82rem;color:var(--muted2);max-width:64ch;line-height:1.5}
.mapa-entry-actions{display:flex;align-items:center;gap:.55rem;flex-wrap:wrap;margin:1rem 0 .25rem}
.mapa-entry-primary,.mapa-entry-secondary{min-height:44px;border-radius:10px;padding:.6rem .9rem;font:700 .78rem 'Montserrat',sans-serif;cursor:pointer}
.mapa-entry-primary{border:1px solid var(--orange);background:var(--orange);color:#090909}
.mapa-entry-secondary{border:1px solid var(--border2);background:transparent;color:var(--muted2)}
.mapa-entry-secondary:hover{border-color:var(--teal);color:var(--text)}
.mapa-view.mapa-entry .mapa-searchwrap,.mapa-view.mapa-entry #mapa-legend,.mapa-view.mapa-entry .mapa-canvas{display:none}
.galipan-guide{margin:1rem 0;border:1px solid var(--border2);border-radius:16px;background:var(--surface);padding:1rem}
.galipan-guide h2{font-size:1.05rem;margin:.1rem 0 .4rem}.galipan-guide-head>p:last-child{font-size:.78rem;color:var(--muted2);line-height:1.5;max-width:65ch}
.galipan-guide-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.55rem;margin-top:.9rem}.galipan-guide-card{min-height:72px;text-align:left;padding:.7rem;border:1px solid var(--border2);border-radius:10px;background:var(--surface2);color:var(--text);font:inherit;cursor:pointer}.galipan-guide-card b,.galipan-guide-card span{display:block}.galipan-guide-card b{font-size:.75rem}.galipan-guide-card span,.galipan-guide-meta{font-size:.66rem;color:var(--muted2);margin-top:.3rem}.galipan-guide-card:hover{border-color:var(--teal)}.galipan-guide-meta{display:flex;gap:.7rem;flex-wrap:wrap;margin-top:.85rem}@media(max-width:560px){.galipan-guide-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
.galipan-recommendations{margin-top:.9rem;border-top:1px solid var(--border);padding-top:.8rem;font-size:.78rem}.galipan-recommendations article{margin-top:.55rem;padding:.65rem;border-radius:9px;background:var(--surface2)}.galipan-recommendations span{color:var(--teal);font-size:.68rem;font-weight:700}.galipan-recommendations p{margin-top:.25rem;color:var(--muted2);line-height:1.4}
.mapa-searchwrap{position:relative;margin:1rem 0 .8rem;max-width:430px}
.mapa-search{width:100%;background:var(--surface);border:1px solid var(--border2);border-radius:11px;padding:.7rem .95rem .7rem 2.3rem;color:var(--text);font-family:inherit;font-size:.9rem;outline:none}
.mapa-search:focus{border-color:rgba(27,175,157,.5)}
.mapa-searchwrap>svg{position:absolute;left:.8rem;top:50%;transform:translateY(-50%);width:15px;height:15px;color:var(--muted);pointer-events:none}
.mapa-results{position:absolute;z-index:30;left:0;right:0;top:calc(100% + 4px);background:var(--surface2,#161616);border:1px solid var(--border2);border-radius:11px;display:none;max-height:300px;overflow-y:auto;box-shadow:0 12px 30px rgba(0,0,0,.5)}
.mapa-res{display:flex;flex-direction:column;gap:.05rem;padding:.55rem .85rem;cursor:pointer;border-bottom:1px solid var(--border)}
.mapa-res:last-child{border-bottom:none}
.mapa-res:hover{background:rgba(236,103,27,.08)}
.mapa-res:focus-visible{background:rgba(236,103,27,.08);outline:2px solid var(--teal);outline-offset:-2px}
.mapa-res b{font-size:.83rem;font-weight:600}
.mapa-res span{font-size:.71rem;color:var(--muted2)}
.mapa-res-empty{padding:.8rem;font-size:.8rem;color:var(--muted2);text-align:center}
.mapa-legend{display:flex;flex-wrap:wrap;gap:.45rem .9rem;margin-bottom:.7rem}
.mapa-leg{display:inline-flex;align-items:center;gap:.35rem;font-size:.72rem;color:var(--muted2);background:none;border:1px solid transparent;border-radius:8px;padding:.2rem .5rem .2rem .35rem;cursor:pointer;font-family:inherit;transition:border-color .15s,background .15s,color .15s}
.mapa-leg i{width:10px;height:10px;border-radius:50%;flex-shrink:0;display:inline-block}
.mapa-leg:hover{border-color:var(--border2);color:var(--text)}
.mapa-leg[aria-pressed="true"]{border-color:currentColor;background:color-mix(in srgb, currentColor 14%, transparent)}
.mapa-leg:focus-visible{outline:2px solid var(--teal);outline-offset:2px}
/* Capa 1 (nación): heatmap SIEMPRE naranja — abundancia de la categoría buscada por estado. */
.mapa-state.mapa-heat-1{fill:rgba(236,103,27,.35)}
.mapa-state.mapa-heat-2{fill:rgba(236,103,27,.65)}
/* Capa 2/3 (estado/ciudad): resalta el pin con SU PROPIO color, nunca naranja. */
.mapa-pin.mapa-cat-match .mapa-pin-ring{opacity:.75}
.mapa-pin.mapa-cat-match .mapa-pin-dot{stroke:#fff;stroke-width:1.8}
.mapa-canvas{position:relative;background:radial-gradient(120% 120% at 50% 0,rgba(27,175,157,.06),transparent 60%),var(--surface,#0e0e0e);border:1px solid var(--border2);border-radius:16px;overflow:hidden;touch-action:none;aspect-ratio:1000/854;min-height:440px;max-height:80vh;max-width:100%;overscroll-behavior:contain}
/* max-width:100% no es decorativo: `aspect-ratio` convierte el `min-height:440px` en un
   ANCHO mínimo transferido de 440x(1000/854)=515px, así que en un teléfono de 375 el mapa
   se salía 140px por la derecha y la página arrancaba con scroll horizontal. Con el tope,
   el canvas respeta a su contenedor y la proporción cede -- que es justo lo que ahora se
   puede permitir, porque la cámara ya no depende de ella (ver _mapaCamAspect). */
/* ═══ Modo inmersivo: dentro del bloque de un municipio, el bloque manda ═══
   El título habla del mapa nacional, el buscador busca ESTADOS y la leyenda explica los
   pines del país: acá adentro ninguno de los tres aplica, y entre los tres se comían
   ~250px de alto en un teléfono. Se ocultan y el lienzo se queda con la pantalla.
   `--mapa-imm-off` (header + padding + dock, medido por _mapaSyncInmersivo) es lo único
   que hay que descontar; dvh en vez de vh para que la barra de direcciones de iOS/Android
   no recorte el bloque ni deje scroll fantasma. */
.mapa-view.mapa-inmersivo{padding:.55rem calc(.55rem + env(safe-area-inset-right,0px)) .4rem calc(.55rem + env(safe-area-inset-left,0px))}
.mapa-view.mapa-inmersivo .mapa-head,
.mapa-view.mapa-inmersivo .mapa-searchwrap,
.mapa-view.mapa-inmersivo #mapa-legend{display:none}
.mapa-view.mapa-inmersivo .mapa-canvas{aspect-ratio:auto;min-height:0;max-height:none;
  height:calc(100vh - var(--mapa-imm-off,220px));
  height:calc(100dvh - var(--mapa-imm-off,220px))}
/* Dentro del municipio la geografia deja de PINTARSE, no se confia en que la tapen.
   El lienzo del interior (_mapaRenderMuniCanvas) es deliberadamente translucido: su
   unica base es .mapa-canvas-ground con fill-opacity .07, un lavado que no oculta nada.
   Y #mapa-g-states se crea una vez y no se limpia nunca al entrar, asi que el estado
   SELECCIONADO seguia debajo con opacity:1 y su trazo teal de 1.7px -- .mapa-focus solo
   atenua los OTROS estados. Sobre casi negro pasaba desapercibido; sobre blanco no.
   No es un fallo del tema claro: se reprodujo en los dos. Por eso la regla va aca y no
   dentro de un html[data-theme="light"].
   Cubre ademas el parpadeo al entrar: _mapaSetInmersivo(true) corre ANTES del await de
   loadMuniCanvasConfig, la ventana en la que los municipios ya se limpiaron y el lienzo
   todavia no existe -- justo cuando el mapa de estados quedaba solo en pantalla.
   visibility y NO display:none, a proposito: _mapaAddPickPoint valida el toque del admin
   con stEl.isPointInFill() sobre el path del estado, y display:none lo sacaria del arbol
   de render. Con visibility:hidden isPointInFill y getBBox siguen respondiendo. */
.mapa-view.mapa-inmersivo #mapa-g-states,
.mapa-view.mapa-inmersivo #mapa-g-labels{visibility:hidden}
#mapa-svg-holder,#mapa-svg{display:block;width:100%;height:100%}
#mapa-svg{cursor:grab}
#mapa-svg.grabbing{cursor:grabbing}
.mapa-state{fill:rgba(255,255,255,.045);stroke:var(--border2,#333);stroke-width:1;transition:fill .18s;cursor:pointer;vector-effect:non-scaling-stroke}
.mapa-state:hover{fill:rgba(236,103,27,.12)}
.mapa-state.active{fill:rgba(236,103,27,.20);stroke:var(--orange);stroke-width:1.4}
.mapa-state.active:hover{fill:rgba(236,103,27,.32)}
.mapa-state.sel{fill:rgba(27,175,157,.22);stroke:var(--teal);stroke-width:1.7}
.mapa-state:focus-visible{outline:none;stroke:var(--teal);stroke-width:2.2}
.mapa-state-hit{fill:none!important;stroke:transparent!important;pointer-events:stroke}
/* La vista nacional es orientativa: solo La Guaira se puede explorar por ahora. */
.mapa-state:not(.active):not(.mapa-state-hit){cursor:not-allowed;opacity:.38}
/* font-size/halo vienen de custom properties fijadas por applyViewBox: tamaño CONSTANTE
   en pantalla ante zoom, resize y letterbox (un font-size fijo en unidades SVG rendía
   ~4px en móvil y gigante al acercar). */
.mapa-label{fill:var(--muted2,#9aa);font-family:'Montserrat',sans-serif;font-weight:700;font-size:var(--mapa-fs-lbl,11px);text-anchor:middle;dominant-baseline:middle;pointer-events:none;letter-spacing:.03em;paint-order:stroke;stroke:rgba(0,0,0,.6);stroke-width:var(--mapa-halo,2.6px)}
/* Modo foco: "espacio digital" de un estado — atenúa lo demás, resalta el estado y sus ciudades */
.mapa-focus .mapa-state:not(.sel){opacity:.07;pointer-events:none;transition:opacity .35s}
.mapa-focus .mapa-label{opacity:0;transition:opacity .3s}
.mapa-focus .mapa-pin.mapa-pin-dim{opacity:.1;pointer-events:none;transition:opacity .3s}
.mapa-city-label{fill:var(--text);font-family:'Montserrat',sans-serif;font-weight:700;font-size:var(--mapa-fs-clbl,9px);text-anchor:middle;pointer-events:none;letter-spacing:.02em;paint-order:stroke;stroke:rgba(0,0,0,.72);stroke-width:var(--mapa-halo-c,2.4px)}
/* Capa de municipios (ADM2, asset lazy por estado): límites reales al enfocar un estado. */
.mapa-muni{fill:rgba(255,255,255,.02);stroke:rgba(27,175,157,.38);stroke-width:.9;cursor:pointer;transition:fill .15s;vector-effect:non-scaling-stroke}
.mapa-muni:hover{fill:rgba(27,175,157,.10)}
.mapa-muni.sel{fill:rgba(27,175,157,.16);stroke:var(--teal)}
.mapa-muni:focus-visible{outline:none;stroke:var(--teal);stroke-width:2}
.mapa-muni-label{fill:var(--text);font-family:'Montserrat',sans-serif;font-weight:600;font-size:var(--mapa-fs-clbl,9px);text-anchor:middle;pointer-events:none;letter-spacing:.02em;paint-order:stroke;stroke:rgba(0,0,0,.72);stroke-width:var(--mapa-halo-c,2.4px);opacity:.92}
.mapa-focus-badge{position:absolute;top:.7rem;left:.7rem;z-index:6;display:none;flex-direction:column;gap:.08rem;padding:.4rem .7rem;border-radius:10px;background:rgba(18,18,20,.82);border:1px solid var(--border2);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);pointer-events:none;max-width:60%}
.mapa-focus-badge.show{display:flex;animation:mapaBadgeIn .3s ease}
.mapa-focus-badge b{font-family:'Montserrat',sans-serif;font-size:.92rem;color:var(--orange);line-height:1.15}
.mapa-focus-badge span{font-size:.64rem;color:var(--muted2)}
@keyframes mapaBadgeIn{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){.mapa-focus .mapa-state:not(.sel),.mapa-focus .mapa-label,.mapa-focus .mapa-pin.mapa-pin-dim{transition:none}.mapa-focus-badge.show{animation:none}}
/* Interior del municipio (Fase 2): el cuadrado se convierte en su propio lienzo, deliberadamente
   NO geolocalizable — fondo opcional, zonas con nombre, grilla táctil tenue y los spots. */
.mapa-canvas-bg{pointer-events:none}
/* La cuadrícula es andamio de EDICIÓN, no parte del mapa: invisible para quien viene a
   mirar (que viene a entretenerse, no a ver una hoja de cálculo). Solo aparece bajo
   .mapa-editing, cuando un admin está moviendo puntos. Se siguen emitiendo los <rect>
   igual -- son la referencia geométrica del imán al soltar. */
.mapa-canvas-cell{fill:none;stroke:none;stroke-width:.6;vector-effect:non-scaling-stroke;pointer-events:none}
/* Zona: mancha de borde curvo (ver _mapaBlobPath). El relleno es casi nada y el trazo
   punteado -- una zona ambienta, no compite con los spots, que son lo que se toca. */
.mapa-canvas-zone{fill:rgba(255,255,255,.022);fill-opacity:.05;stroke:rgba(255,255,255,.20);stroke-width:1.6;stroke-dasharray:7 6;stroke-linecap:round;vector-effect:non-scaling-stroke;pointer-events:none}
.mapa-canvas-zone-label{fill:var(--muted2);font-family:'Montserrat',sans-serif;font-weight:700;font-size:9px;text-transform:uppercase;letter-spacing:.06em;text-anchor:middle;pointer-events:none;paint-order:stroke;stroke:rgba(0,0,0,.65);stroke-width:2.4px}
.mapa-canvas-zone-n{fill:var(--muted);font-weight:600}
/* Sobre ilustración, un punto plano se pierde: el halo oscuro lo despega del fondo pase lo
   que pase detrás (regla de contraste de las guías de UI de mapas). Solo al punto relleno
   -- el anillo es puro trazo y su color lo fija el atributo inline de su categoría, que no
   hay que pisar desde acá. */
.mapa-canvas-spot .mapa-pin-dot{paint-order:stroke;stroke:rgba(0,0,0,.5);stroke-width:2px}
.mapa-canvas-spot-img{pointer-events:none}
/* Ambientación de la plantilla: puramente decorativa, nunca intercepta un toque que va
   dirigido a un spot o a una celda. */
.mapa-canvas-ground,.mapa-canvas-motivo{pointer-events:none}
/* B1: cuando hay más spots que casillas, los que no entran se anuncian acá -- nunca se
   recortan en silencio (mismo criterio que openMuniPanel ya sigue). */
.mapa-canvas-plusn{fill:var(--muted2,#888);font-family:'Montserrat',sans-serif;font-weight:600;font-size:11px;text-anchor:end;dominant-baseline:text-after-edge;pointer-events:none;paint-order:stroke;stroke:rgba(0,0,0,.65);stroke-width:2.6px}
/* El camino que encadena las paradas. Va en DOS trazos: uno grueso y oscuro debajo que lo
   despega de la ambientación, y el punteado del color de la plantilla encima. */
.mapa-canvas-ruta-halo{fill:none;stroke:rgba(0,0,0,.42);stroke-width:7;stroke-linecap:round;vector-effect:non-scaling-stroke;pointer-events:none}
.mapa-canvas-ruta{fill:none;stroke-width:3;stroke-linecap:round;stroke-dasharray:1 11;opacity:.9;vector-effect:non-scaling-stroke;pointer-events:none}
/* Número de parada: el orden del recorrido es la información, no un adorno. */
.mapa-canvas-num{font-family:'Montserrat',sans-serif;font-weight:800;font-size:15px;text-anchor:middle;fill:#0b0b0b;pointer-events:none}
.mapa-canvas-spot.inicio .mapa-pin-ring{stroke-width:3.2}
/* Cartel del recorrido: título, el porqué, y de qué zona a qué zona va. Abajo a la
   izquierda para no chocar con los controles de zoom, que viven a la derecha. */
.mapa-ruta-cartel{position:absolute;left:.7rem;bottom:.7rem;z-index:7;display:none;flex-direction:column;gap:.12rem;
  padding:.5rem .7rem;border-radius:10px;background:rgba(18,18,20,.88);border:1px solid var(--border2);
  backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);pointer-events:none;max-width:min(20rem,68%)}
.mapa-ruta-cartel.show{display:flex;animation:mapaBadgeIn .3s ease}
.mapa-ruta-t{font-family:'Montserrat',sans-serif;font-weight:800;font-size:.84rem;color:var(--text);line-height:1.2}
.mapa-ruta-por{font-size:.68rem;color:var(--muted2);line-height:1.4}
.mapa-ruta-tramo{display:flex;align-items:center;font-size:.63rem;color:var(--muted2);margin-top:.15rem;flex-wrap:wrap}
.mapa-ruta-tramo b{color:var(--gold-text,#FDCC68);font-weight:700}
.mapa-ruta-tramo span{margin-left:.45rem;padding-left:.45rem;border-left:1px solid var(--border2)}
html[data-theme="light"] .mapa-ruta-cartel{background:rgba(255,255,255,.94)}
@media(prefers-reduced-motion:reduce){.mapa-ruta-cartel.show{animation:none}}
.mapa-saved-status{display:none;margin:.15rem 0 .45rem;padding:.48rem .6rem;border:1px solid rgba(27,175,157,.35);border-radius:8px;background:rgba(27,175,157,.1);color:var(--teal-text,#1baf9d);font-size:.72rem;line-height:1.35}
.mapa-saved-status:not(:empty){display:block}.mapa-saved-status.error{border-color:rgba(239,68,68,.4);background:rgba(239,68,68,.1);color:#fca5a5}
.mapa-saved-list{list-style:none;margin:.6rem 0;padding:0;display:flex;flex-direction:column;gap:.35rem}
.mapa-saved-list li{display:flex;align-items:center;gap:.42rem;padding:.5rem;border:1px solid var(--border2);border-radius:9px;background:rgba(255,255,255,.025)}
.mapa-saved-num{width:1.35rem;height:1.35rem;display:inline-flex;align-items:center;justify-content:center;border-radius:50%;background:var(--orange);color:#111;font-size:.68rem;font-weight:800;flex:none}
.mapa-saved-name{min-width:0;flex:1;border:0;background:transparent;color:var(--text);text-align:left;font:inherit;font-size:.76rem;font-weight:700;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mapa-saved-order{display:flex;gap:.2rem}.mapa-saved-order button{width:1.45rem;height:1.45rem;padding:0;border:1px solid var(--border2);border-radius:5px;background:transparent;color:var(--text);cursor:pointer;font-weight:700}.mapa-saved-order button:disabled{opacity:.35;cursor:not-allowed}
.mapa-offline-guide{margin:1rem auto 0;max-width:680px;display:flex;align-items:center;gap:.7rem;flex-wrap:wrap;padding:.75rem .85rem;border:1px solid rgba(27,175,157,.28);border-radius:12px;background:rgba(27,175,157,.07);text-align:left}
.mapa-offline-guide>div:first-child{display:flex;flex:1;flex-direction:column;gap:.16rem}.mapa-offline-guide b{font-size:.78rem;color:var(--text)}.mapa-offline-guide span,.mapa-offline-guide small{font-size:.68rem;line-height:1.4;color:var(--muted2)}.mapa-offline-guide small{width:100%}.mapa-offline-actions{display:flex;gap:.35rem}.mapa-offline-actions .mapa-entry-secondary{padding:.38rem .58rem;font-size:.68rem}
@media(max-width:520px){.mapa-offline-guide{align-items:flex-start}.mapa-offline-actions{width:100%}.mapa-offline-actions button{flex:1}}
.mapa-muni-ribbon-remix{display:inline-flex;align-items:center;background:rgba(236,103,27,.14);border:1px solid var(--orange);border-radius:8px;padding:.3rem .6rem;color:var(--orange);font-size:.7rem;font-weight:700;cursor:pointer;flex-shrink:0}
.mapa-muni-ribbon-remix:hover{background:rgba(236,103,27,.24)}
.mapa-muni-ribbon{position:absolute;top:.7rem;left:.7rem;right:.7rem;z-index:8;display:none;align-items:center;gap:.6rem;padding:.5rem .7rem;border-radius:10px;background:rgba(18,18,20,.86);border:1px solid var(--border2);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
.mapa-muni-ribbon.show{display:flex;animation:mapaBadgeIn .3s ease}
.mapa-muni-ribbon .mapa-pop-back{margin:0;flex-shrink:0}
.mapa-muni-ribbon-title{font-family:'Montserrat',sans-serif;font-weight:700;font-size:.86rem;color:var(--text);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mapa-muni-ribbon-list{display:inline-flex;align-items:center;background:none;border:1px solid var(--border2);border-radius:8px;padding:.3rem .55rem;color:var(--muted2);font-size:.7rem;font-weight:600;cursor:pointer;flex-shrink:0}
.mapa-muni-ribbon-list:hover{color:var(--teal);border-color:var(--teal)}
.mapa-muni-ribbon-list.active{color:var(--orange);border-color:var(--orange)}
@media(prefers-reduced-motion:reduce){.mapa-muni-ribbon.show{animation:none}}
/* Modo edición (Fase 3): la grilla se marca, los spots se vuelven arrastrables. */
.mapa-editing .mapa-canvas-cell{stroke:rgba(236,103,27,.35)}
.mapa-editing .mapa-canvas-spot{cursor:grab}
.mapa-canvas-spot.dragging{cursor:grabbing}
.mapa-canvas-spot.dragging .mapa-pin-ring,.mapa-canvas-spot.dragging .mapa-pin-dot{filter:drop-shadow(0 0 3px rgba(236,103,27,.85))}
.mapa-edit-bar{position:absolute;left:.7rem;right:.7rem;bottom:.7rem;z-index:9;display:none;flex-direction:column;gap:.5rem;padding:.55rem .7rem;border-radius:10px;background:rgba(18,18,20,.92);border:1px solid var(--orange);backdrop-filter:blur(6px);max-height:60%;overflow-y:auto}
.mapa-edit-bar.show{display:flex}
.mapa-edit-row{display:flex;align-items:center;gap:.4rem;flex-wrap:wrap}
.mapa-edit-row.mapa-edit-actions{border-top:1px solid var(--border2);padding-top:.45rem}
.mapa-edit-label{font-size:.72rem;color:var(--muted2);margin-right:.15rem}
.mapa-edit-step{width:24px;height:24px;border-radius:6px;background:none;border:1px solid var(--border2);color:var(--text);font-size:.9rem;line-height:1;cursor:pointer}
.mapa-edit-step:hover{border-color:var(--orange);color:var(--orange)}
.mapa-edit-row b{font-size:.78rem;min-width:1.2em;text-align:center}
.mapa-edit-zone-chip{display:inline-flex;align-items:center;gap:.3rem;border:1px solid;border-radius:20px;padding:.2rem .55rem;font-size:.68rem;color:var(--text)}
.mapa-edit-zone-chip button{background:none;border:none;color:var(--muted2);cursor:pointer;font-size:.85rem;line-height:1;padding:0}
.mapa-edit-zone-chip button:hover{color:var(--red)}
.mapa-edit-tpl{background:none;border:1px solid var(--border2);border-radius:20px;padding:.26rem .6rem;color:var(--muted2);font-size:.68rem;font-weight:600;cursor:pointer}
.mapa-edit-tpl:hover{color:var(--tpl);border-color:var(--tpl)}
.mapa-edit-tpl.on{color:var(--tpl);border-color:var(--tpl);background:color-mix(in srgb,var(--tpl) 14%,transparent)}
.mapa-edit-bar-count{flex:1;font-size:.72rem;color:var(--muted2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mapa-edit-bar-btn{background:none;border:1px solid var(--border2);border-radius:8px;padding:.4rem .7rem;color:var(--text);font-size:.74rem;font-weight:600;cursor:pointer}
.mapa-edit-bar-btn.primary{background:var(--orange);border-color:var(--orange);color:#fff}
.mapa-edit-bar-btn:disabled{opacity:.45;cursor:default}
.mapa-canvas-zone-marquee{fill:rgba(236,103,27,.18);stroke:var(--orange);stroke-width:1.4;stroke-dasharray:2 1.5;vector-effect:non-scaling-stroke;pointer-events:none}
html[data-theme="light"] .mapa-edit-bar{background:rgba(255,255,255,.95)}
.mapa-pin{cursor:pointer}
/* Diana táctil invisible del pin: el punto visible era la única zona clicable (~5px en móvil). */
.mapa-pin-hit{pointer-events:all}
.mapa-pin-dot{stroke:#0a0a0a;stroke-width:1.4}
.mapa-pin-ring{opacity:0;transition:opacity .15s}
.mapa-pin:hover .mapa-pin-ring,.mapa-pin:focus-visible .mapa-pin-ring{opacity:.55}
.mapa-pin:focus-visible{outline:none}
.mapa-ctrls{position:absolute;top:.7rem;right:.7rem;display:flex;flex-direction:column;gap:.4rem;z-index:10}
.mapa-ctrl{width:38px;height:38px;border-radius:10px;background:rgba(18,18,18,.85);border:1px solid var(--border2);color:var(--text);cursor:pointer;display:flex;align-items:center;justify-content:center;backdrop-filter:blur(6px);transition:background .15s,border-color .15s}
.mapa-ctrl:hover{background:rgba(236,103,27,.2);border-color:var(--orange)}
.mapa-ctrl svg{width:18px;height:18px}
/* max-height relativo al CANVAS (no al viewport): con 80dvh el panel excedía el canvas
   de ~440px en móvil y el overflow:hidden recortaba justo la cabecera con la X. */
.mapa-pop{position:absolute;left:.7rem;right:.7rem;bottom:.7rem;z-index:20;background:linear-gradient(180deg,rgba(22,22,22,.97),rgba(12,12,12,.98));border:1px solid var(--border2);border-radius:14px;padding:1rem 1.1rem 0;display:none;flex-direction:column;max-height:calc(100% - 1.4rem);box-shadow:0 16px 40px rgba(0,0,0,.55)}
/* Cabecera (X/volver/badge/título/muni) fuera del scroll — siempre visible. Solo el cuerpo scrollea. */
.mapa-pop-body{overflow-y:auto;flex:1;min-height:0;padding-bottom:1rem}
@media(min-width:760px){.mapa-pop{left:auto;width:340px;top:.7rem;bottom:.7rem;max-height:calc(100% - 1.4rem)}}
.mapa-pop.show{display:flex;animation:mapaPopIn .22s ease}
@keyframes mapaPopIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.mapa-pop-x{position:absolute;top:.5rem;right:.5rem;background:rgba(255,255,255,.04);border:none;color:var(--muted);cursor:pointer;width:34px;height:34px;display:flex;align-items:center;justify-content:center;border-radius:9px;line-height:0}
.mapa-pop-x:hover{color:var(--text);background:rgba(255,255,255,.06)}
.mapa-pop-x svg{width:17px;height:17px}
.mapa-pop-cat{display:inline-flex;align-items:center;gap:.3rem;font-size:.64rem;font-weight:700;letter-spacing:.05em;text-transform:uppercase;padding:.18rem .5rem;border-radius:6px;margin-bottom:.5rem}
.mapa-pop-title{font-family:'Montserrat',sans-serif;font-size:1.1rem;font-weight:800;margin:.1rem 0 .15rem;padding-right:1.6rem;line-height:1.2}
.mapa-pop-muni{font-size:.74rem;color:var(--muted2);margin-bottom:.7rem}
.mapa-pop-img{width:100%;height:130px;border-radius:10px;object-fit:cover;margin-bottom:.6rem;background:var(--surface2)}
.mapa-pop-ph{width:100%;height:90px;border-radius:10px;margin-bottom:.6rem;display:flex;align-items:center;justify-content:center;background:repeating-linear-gradient(45deg,rgba(255,255,255,.03),rgba(255,255,255,.03) 10px,rgba(255,255,255,.05) 10px,rgba(255,255,255,.05) 20px);color:var(--muted);border:1px dashed var(--border2)}
.mapa-pop-ph svg{width:28px;height:28px;opacity:.5}
.mapa-pop-h{font-size:.68rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--teal);margin:.75rem 0 .25rem}
.mapa-pop-back{display:inline-flex;align-items:center;gap:.35rem;background:none;border:none;color:var(--muted2);cursor:pointer;font-size:.74rem;font-weight:600;padding:.1rem 0;margin-bottom:.45rem;line-height:1.1}
.mapa-pop-back:hover{color:var(--teal)}
.mapa-pop-back svg{width:14px;height:14px}
.mapa-pop-city{display:flex;align-items:baseline;justify-content:space-between;gap:.5rem;color:var(--orange)}
.mapa-city-n{font-size:.6rem;font-weight:600;letter-spacing:.02em;color:var(--muted2);text-transform:none}
.mapa-city-row .pr{display:inline-flex;align-items:center;color:var(--muted2);font-size:.74rem}
.mapa-city-row:hover{border-color:var(--orange)}
.mapa-pop-txt{font-size:.82rem;line-height:1.5;color:var(--text)}
.mapa-pop-dato{font-size:.8rem;line-height:1.45;color:var(--muted2);background:rgba(192,132,252,.08);border-left:2px solid #C084FC;padding:.5rem .65rem;border-radius:0 8px 8px 0;margin-top:.5rem}
.mapa-pop-actions{display:flex;flex-direction:column;gap:.5rem;margin-top:.9rem}
.mapa-btn{display:flex;align-items:center;justify-content:center;gap:.4rem;padding:.6rem .8rem;border-radius:10px;font-family:inherit;font-size:.8rem;font-weight:700;cursor:pointer;border:1px solid var(--border2);background:var(--surface);color:var(--text);text-decoration:none;transition:border-color .15s,color .15s}
.mapa-btn:hover{border-color:var(--teal);color:var(--teal)}
.mapa-btn.primary{background:var(--orange);border-color:var(--orange);color:#000}
.mapa-btn.primary:hover{filter:brightness(1.08);color:#000}
.mapa-btn svg{width:15px;height:15px}
.mapa-plan-row{display:flex;justify-content:space-between;align-items:center;gap:.6rem;padding:.55rem .65rem;border:1px solid var(--border);border-radius:9px;margin-top:.4rem;cursor:pointer;transition:border-color .15s,background .15s}
.mapa-plan-row:hover,.mapa-plan-row:focus-visible{border-color:var(--orange);background:rgba(236,103,27,.05);outline:none}
.mapa-plan-row b{font-size:.78rem;font-weight:600;min-width:0}
.mapa-plan-row .pr{font-size:.78rem;font-weight:700;color:var(--orange);white-space:nowrap;line-height:0;display:flex;align-items:center}
.mapa-plan-row .pr svg{width:15px;height:15px}
.mapa-loading{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:.8rem;color:var(--muted2);font-size:.85rem;text-align:center;padding:1rem}
/* Comunidad: aportar puntos + reseñas de espacios */
.mapa-add-hint{position:absolute;left:50%;transform:translateX(-50%);bottom:.8rem;z-index:15;background:rgba(18,18,20,.92);border:1px solid var(--teal,#1BAF9D);color:var(--text);font-size:.78rem;font-weight:600;padding:.5rem .9rem;border-radius:11px;display:none;backdrop-filter:blur(6px);max-width:92%;text-align:center}
.mapa-add-hint.show{display:block}
#mapa-svg.addmode{cursor:crosshair}
.mapa-form{display:flex;flex-direction:column;gap:.55rem;margin-top:.4rem}
.mapa-form label{font-size:.68rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--teal,#1BAF9D)}
.mapa-form input,.mapa-form select,.mapa-form textarea{width:100%;background:var(--surface2,#161616);border:1px solid var(--border2);border-radius:9px;padding:.55rem .7rem;color:var(--text);font-family:inherit;font-size:.85rem;outline:none}
.mapa-form input:focus,.mapa-form select:focus,.mapa-form textarea:focus{border-color:rgba(27,175,157,.55)}
.mapa-form textarea{min-height:64px;resize:vertical}
.mapa-quota{font-size:.72rem;color:var(--muted2);background:rgba(27,175,157,.07);border:1px solid rgba(27,175,157,.25);border-radius:9px;padding:.45rem .6rem;line-height:1.45}
.mapa-pop-author{font-size:.72rem;color:var(--muted2);margin:-.3rem 0 .55rem}
.mapa-pop-author b{color:var(--teal,#1BAF9D);font-weight:700}
.mapa-stars{display:inline-flex;gap:.15rem}
.mapa-stars button{background:none;border:none;cursor:pointer;padding:.1rem;line-height:0;color:var(--muted2)}
.mapa-stars button.on{color:#FDCC68}
.mapa-rev{border:1px solid var(--border);border-radius:9px;padding:.5rem .65rem;margin-top:.4rem}
.mapa-rev-head{display:flex;justify-content:space-between;gap:.5rem;font-size:.72rem;color:var(--muted2);margin-bottom:.2rem;align-items:center}
.mapa-rev-txt{font-size:.78rem;line-height:1.45}
.mapa-rev img{max-width:100%;border-radius:8px;margin-top:.4rem;max-height:140px;object-fit:cover}
.mapa-err{color:#ff8b6b;font-size:.75rem;display:none}
@media(prefers-reduced-motion:reduce){.mapa-pop.show{animation:none}.mapa-state{transition:none}}
@media(max-width:560px){.mapa-title{font-size:1.2rem}}
/* Controles de zoom del mapa: se tocan con el pulgar, no reducir bajo 44px en móvil. */
@media(max-width:560px){.mapa-ctrl{width:44px;height:44px}}

/* ── TEMA-T2 · overrides del tema claro (identidad oscura intacta) ──
   Solo activos con html[data-theme=light]. Cubre tambien las clases .rs- y .rv-
   (CSS inyectado por JS: gana esta capa por especificidad, no por orden).
   Quedan a proposito en oscuro: .card-cat-badge y .rv-photo-rm (overlays sobre
   imagen/arte), los scrims rgba(0,0,0,...) y el arte del canvas/geografia. */
html[data-theme="light"]{--green:#047857;--red:#b91c1c;--teal-text:var(--teal-ink);--gold-text:var(--gold-ink);--orange-text:var(--orange-ink)}
/* Chrome fijo: header, dock de pilares, barra de progreso */
html[data-theme="light"] header{background:rgba(244,246,248,.96)}
html[data-theme="light"] img.logo{content:url('/logos/03_horizontal/saga-logo-black.png')}
html[data-theme="light"] .viajero-sidebar{background:rgba(248,251,251,.97)}
html[data-theme="light"] nav a.active,html[data-theme="light"] .chip.active{color:var(--teal-ink)}
/* MARCA-CLARO: sobre blanco el turquesa necesita RELLENO para pesar, no un velo. */
html[data-theme="light"] .vs-cap{background:var(--teal);border-color:var(--teal)}
html[data-theme="light"] .vs-item.active{color:#04120f}
html[data-theme="light"] #progress-nav{background:rgba(244,246,248,.96)}
html[data-theme="light"] .pn-sep{color:var(--border2)}
html[data-theme="light"] #pause-banner{color:var(--red)}
/* Hovers que dependian de blanco translucido → gris token (sin tocar estados activos) */
html[data-theme="light"] .chip:not(.active):hover{border-color:var(--border2);background:rgba(13,17,21,.03)}
html[data-theme="light"] .tb-edit:hover,
html[data-theme="light"] .bc-toggle:hover,
html[data-theme="light"] .rv-later:hover{border-color:var(--border2)}
html[data-theme="light"] .to-opt:not([data-sel="1"]):hover,
html[data-theme="light"] .pk-tier-opt:not(.sel):hover{border-color:var(--border2)}
html[data-theme="light"] .card:hover{border-color:var(--border2);box-shadow:0 6px 18px rgba(13,17,21,.12)}
html[data-theme="light"] .rs-card:hover{border-color:var(--border2);box-shadow:0 10px 30px rgba(13,17,21,.14)}
html[data-theme="light"] .bundle-card:hover{box-shadow:0 10px 24px rgba(13,17,21,.12)}
html[data-theme="light"] .bundle-card.expanded{box-shadow:0 14px 32px rgba(13,17,21,.16)}
/* Teal como texto suelto → tinta AA.
   OJO: esta lista NO cerraba su bloque antes del comentario "Gold" de abajo, asi
   que los 15 selectores de arriba caian dentro de la MISMA regla y se pintaban
   de var(--gold-ink) en tema claro desde TEMA-T2 — precios, el precio "gratis"
   y las etiquetas del mapa salian dorados en vez de teal. Ahora cierra. */
html[data-theme="light"] .price-free,
html[data-theme="light"] .kind-marsh-turquoise .bc-kind-tag,
html[data-theme="light"] .kind-marsh-turquoise .bc-price-n,
html[data-theme="light"] .mapa-pop-h,
html[data-theme="light"] .mapa-pop-back:hover,
html[data-theme="light"] .mapa-pop-author b,
html[data-theme="light"] .mapa-form label,
html[data-theme="light"] .mapa-btn:not(.primary):hover{color:var(--teal-ink)}
/* .src-pill.cache, .t-row.anticipo, .payment-note b, .mkt-badge.dn, .mkt-banner,
   .pp-tastes-title y .pp-edit-btn ya no van aqui: pasaron a naranja y resuelven
   su tinta clara solos por var(--orange-text). */
/* Gold como texto suelto → tinta AA */
html[data-theme="light"] .fp-budget-val,
html[data-theme="light"] .bm-side.ves .bm-amount,
html[data-theme="light"] .rs-rate-row b,
html[data-theme="light"] .rv-mandatory{color:var(--gold-ink)}
/* Estrellas doradas: la propiedad CSS le gana al atributo de presentacion del SVG */
html[data-theme="light"] svg[fill="#FDCC68"]{fill:var(--gold-ink);stroke:var(--gold-ink)}
html[data-theme="light"] .mapa-stars button.on{color:var(--gold-ink)}
/* Azul periwinkle de bundles fallback → tinta */
html[data-theme="light"] .kind-fallback .bc-kind-tag,
html[data-theme="light"] .kind-fallback .bc-price-n,
html[data-theme="light"] .bundles-section-label.fallback{color:#33538f}
/* Errores pastel → tinta roja (los !important vencen estilos inline del picker) */
html[data-theme="light"] .fp-error,
html[data-theme="light"] .rv-error,
html[data-theme="light"] .mapa-err{color:var(--red)}
html[data-theme="light"] #pk-error{color:var(--red)!important}
html[data-theme="light"] #pk-date{color-scheme:light!important}
/* Conserje Full Plan (glass oscuro → glass claro; el aro neon se conserva) */
html[data-theme="light"] .fp-card{background:linear-gradient(180deg,rgba(255,255,255,.94),rgba(255,255,255,.99));border-color:var(--border2);box-shadow:0 24px 70px rgba(13,17,21,.14),inset 0 1px 0 rgba(255,255,255,.7)}
html[data-theme="light"] .fp-close{background:var(--surface2)}
html[data-theme="light"] .fp-close:hover{background:var(--border)}
html[data-theme="light"] .fp-input,html[data-theme="light"] .fp-select{background:var(--surface2);color-scheme:light}
html[data-theme="light"] .fp-input:focus,html[data-theme="light"] .fp-select:focus{background:#ffffff}
/* Overlays de superficie (escaneo, onboarding, picker, resena) */
html[data-theme="light"] .scan-overlay{background:rgba(244,246,248,.97)}
html[data-theme="light"] .scan-frame{background:linear-gradient(135deg,#ffffff,#eef0f4);box-shadow:0 24px 60px rgba(13,17,21,.14)}
html[data-theme="light"] .to-card{background:linear-gradient(180deg,rgba(255,255,255,.96),rgba(255,255,255,.99));border-color:var(--border2)}
html[data-theme="light"] #picker-card{background:linear-gradient(180deg,rgba(255,255,255,.96),rgba(255,255,255,.99))!important;border-color:var(--border2)!important}
html[data-theme="light"] .rv-card{background:linear-gradient(180deg,rgba(255,255,255,.97),rgba(255,255,255,.99));border-color:var(--border2)}
/* Brujula de descubrimiento: velo censor claro; el icono gana tinta */
html[data-theme="light"] .bc-disc-overlay{background:radial-gradient(circle at 50% 38%,rgba(109,40,217,.12),rgba(244,246,248,.92))}
html[data-theme="light"] .bc-disc-title{color:var(--text)}
html[data-theme="light"] .bc-disc-inner > svg{color:#6d28d9}
/* Mapa: solo su chrome (el arte/geografia queda fuera del alcance T2).
   :where() = especificidad cero: los estados .active/.sel/.mapa-heat-* y los
   :hover del arte siguen ganando como en oscuro. */
html[data-theme="light"] :where(.mapa-state){fill:rgba(13,17,21,.05)}
html[data-theme="light"] :where(.mapa-muni){fill:rgba(13,17,21,.03)}
html[data-theme="light"] .mapa-label{stroke:rgba(255,255,255,.75)}
html[data-theme="light"] .mapa-city-label,
html[data-theme="light"] .mapa-muni-label{stroke:rgba(255,255,255,.85)}
html[data-theme="light"] .mapa-focus-badge{background:rgba(255,255,255,.9)}
html[data-theme="light"] .mapa-muni-ribbon{background:rgba(255,255,255,.92)}
html[data-theme="light"] .mapa-editing .mapa-canvas-cell{stroke:rgba(236,103,27,.42)}
html[data-theme="light"] .mapa-ctrl:not(:hover){background:rgba(255,255,255,.88)}
html[data-theme="light"] .mapa-add-hint{background:rgba(255,255,255,.95)}
html[data-theme="light"] .mapa-pop{background:linear-gradient(180deg,rgba(255,255,255,.97),rgba(255,255,255,.99));box-shadow:0 16px 40px rgba(13,17,21,.16)}
html[data-theme="light"] .mapa-pop-x{background:var(--surface2)}
html[data-theme="light"] .mapa-pop-x:hover{background:var(--border)}
html[data-theme="light"] .mapa-results{box-shadow:0 12px 30px rgba(13,17,21,.16)}
/* Cristal desktop */
@media(min-width:881px){
  html[data-theme="light"] header{background:rgba(244,246,248,.92)}
  html[data-theme="light"] .scan-overlay{background:rgba(244,246,248,.96)}
}
