/* ============================================================
   TAO MÉXICO — PORTADA
   Solo lo que existe en index.html: hero con shader, manifiesto,
   marquesina de destinos, carrusel cilíndrico, camino y destinos.
   El sistema compartido está en main.css.
   ============================================================ */

/* ============================================================
   HERO
   ============================================================ */
.hero{position:relative;height:100svh;min-height:600px;overflow:hidden;background:var(--ink)}
#heroGL{position:absolute;inset:0;width:100%;height:100%;display:block}
.hero-fallback{position:absolute;inset:0;background-size:cover;background-position:center;opacity:0}
/* respaldo sin WebGL: el mismo cambio de encuadre que hace el shader */
@media(max-aspect-ratio:9/10){
  .hero-fallback{background-image:url(../../assets/img/hero/hero-portrait.webp)!important}
}
.hero::after{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:
    linear-gradient(180deg,rgba(27,25,22,.70) 0%,rgba(27,25,22,.14) 28%,rgba(27,25,22,.52) 60%,rgba(27,25,22,.97) 100%),
    radial-gradient(95% 75% at 12% 78%,rgba(27,25,22,.80),transparent 66%);
}
/* En pantallas estrechas la foto se recorta muchísimo y el edificio ocupa
   todo el encuadre: el texto necesita un suelo mucho más firme. */
@media(max-width:1000px){
  .hero::after{
    background:linear-gradient(180deg,
      rgba(27,25,22,.84) 0%,
      rgba(27,25,22,.20) 18%,
      rgba(27,25,22,.46) 40%,
      rgba(27,25,22,.90) 62%,
      rgba(27,25,22,.99) 100%);
  }
  /* red de seguridad: separa el texto de los tonos claros del edificio
     sin tener que oscurecer más la foto */
  .hero-in{text-shadow:0 1px 26px rgba(27,25,22,.65)}
}
.hero-in{
  position:absolute;inset:0;z-index:3;display:flex;flex-direction:column;justify-content:flex-end;
  padding:0 var(--pad) clamp(40px,7vh,84px) calc(var(--rail) + var(--pad));
  will-change:transform,opacity;
}
.hero-eyebrow{margin-bottom:22px;opacity:0;transform:translateY(12px);
  transition:opacity .9s var(--e-out) .15s,transform .9s var(--e-out) .15s}
body.ready .hero-eyebrow{opacity:1;transform:none}
.hero-h{max-width:16ch}
.hero-h .line:nth-child(1)>i{transition-delay:.3s}
.hero-h .line:nth-child(2)>i{transition-delay:.42s}
.hero-sub,.search{opacity:0;transform:translateY(16px);
  transition:opacity 1s var(--e-out),transform 1s var(--e-out)}
.hero-sub{transition-delay:.68s}
.search{transition-delay:.8s}
body.ready .hero-sub,body.ready .search{opacity:1;transform:none}
.hero-sub{margin:26px 0 0;color:var(--shell);opacity:.86;max-width:46ch}
@media(max-width:680px){
  .hero-eyebrow{margin-bottom:16px;font-size:10px;letter-spacing:.18em}
  .hero-sub{margin-top:18px;font-size:15.5px;line-height:1.55;max-width:38ch}
  .search{margin-top:22px}
}
body.ready .hero-sub{opacity:.86}

/* palabra rotatoria */
.rot{display:inline-grid;vertical-align:baseline;transition:width .7s var(--e-out)}
.rot span{
  grid-area:1/1;justify-self:start;white-space:nowrap;
  color:var(--gold);opacity:0;transform:translateY(.42em) rotateX(-55deg);
  transform-origin:50% 0;transition:opacity .6s var(--e-out),transform .7s var(--e-out)
}
.rot span.on{opacity:1;transform:none}
.rot span.out{opacity:0;transform:translateY(-.42em) rotateX(55deg)}

/* buscador */
.search{
  margin-top:clamp(28px,4vh,44px);display:flex;flex-wrap:wrap;gap:1px;
  background:var(--line-ink);border:1px solid var(--line-ink);
  backdrop-filter:blur(14px);max-width:880px;
}
.search .f{flex:1 1 180px;background:rgba(27,25,22,.6);padding:14px 18px;display:grid;gap:3px;transition:background .35s}
.search .f:focus-within{background:rgba(27,25,22,.9)}
.search label{font-size:9.5px;letter-spacing:.22em;text-transform:uppercase;color:var(--gold);font-weight:600}
.search select{
  background:none;border:0;padding:0;font-size:14px;font-weight:300;color:var(--paper);
  width:100%;cursor:pointer;appearance:none;
}
.search select option{background:var(--ink-2);color:var(--paper)}
.search .go{
  flex:0 0 auto;background:var(--gold);color:var(--ink);border:0;cursor:pointer;
  padding:0 32px;font-size:11px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;
  transition:background .35s
}
.search .go:hover{background:var(--paper)}
@media(max-width:680px){
  /* Apilado en cuatro filas ocupaba un tercio de la pantalla.
     En rejilla: destino completo, tipo y presupuesto a la par, botón completo. */
  .search{display:grid;grid-template-columns:1fr 1fr;max-width:none}
  .search .f{padding:11px 14px}
  .search .f:first-child{grid-column:1 / -1}
  .search label{font-size:9px;letter-spacing:.18em}
  .search select{font-size:13.5px}
  .search .go{grid-column:1 / -1;padding:16px}
}
.scrollcue{
  position:absolute;right:var(--pad);bottom:clamp(40px,7vh,84px);z-index:3;
  display:flex;align-items:center;gap:12px;font-size:10px;letter-spacing:.24em;
  text-transform:uppercase;color:var(--text-on-ink-dim);
  opacity:0;transition:opacity 1s var(--e-out) 1.1s
}
body.ready .scrollcue{opacity:1}
.scrollcue i{display:block;width:52px;height:1px;background:var(--line-ink);position:relative;overflow:hidden}
.scrollcue i::after{content:"";position:absolute;inset:0;background:var(--gold);animation:cue 2.4s var(--e-io) infinite}
@keyframes cue{0%{transform:translateX(-100%)}55%,100%{transform:translateX(100%)}}
@media(max-width:1000px){.scrollcue{display:none}}

/* ============================================================
   MANIFIESTO
   ============================================================ */
.manifesto{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.15fr);gap:clamp(32px,6vw,90px);align-items:start}
.manifesto .stat-inline{display:grid;gap:26px;border-left:1px solid var(--line-paper);padding-left:clamp(20px,3vw,36px)}
.manifesto .stat-inline div{display:grid;gap:2px}
.manifesto .stat-inline b{font-family:var(--f-display);font-size:clamp(38px,4.6vw,60px);line-height:1;color:var(--text-on-paper);font-weight:400}
.manifesto .stat-inline small{font-size:12.5px;line-height:1.5;color:var(--text-on-paper-dim);max-width:28ch}
@media(max-width:860px){.manifesto{grid-template-columns:1fr}}

/* ============================================================
   MARQUESINA — los tres destinos, en contorno
   ============================================================ */
.marq{
  background:var(--ink);border-top:1px solid var(--line-ink);border-bottom:1px solid var(--line-ink);
  overflow:hidden;padding:clamp(18px,2.4vw,30px) 0;position:relative;
}
.marq::before,.marq::after{
  content:"";position:absolute;top:0;bottom:0;width:14vw;z-index:2;pointer-events:none
}
.marq::before{left:0;background:linear-gradient(90deg,var(--ink),transparent)}
.marq::after{right:0;background:linear-gradient(270deg,var(--ink),transparent)}
.marq-in{
  display:flex;align-items:center;gap:clamp(28px,4vw,64px);width:max-content;
  animation:marq 46s linear infinite;
}
.marq-in>span{
  font-family:var(--f-display);font-size:clamp(38px,6.6vw,92px);line-height:1;white-space:nowrap;
  color:transparent;-webkit-text-stroke:1px var(--gold);letter-spacing:.01em;
}
.marq-in>span.fill{color:var(--gold);-webkit-text-stroke:0}
.marq-in>b{color:var(--gold);font-size:clamp(10px,1.2vw,16px);opacity:.7}
@keyframes marq{to{transform:translateX(-50%)}}
@media(prefers-reduced-motion:reduce){.marq-in{animation:none}}

/* ============================================================
   PROPIEDADES — carrusel cilíndrico 3D
   ============================================================ */
.props{background:var(--ink);position:relative;overflow:hidden}
.props::before{
  content:"";position:absolute;left:50%;top:38%;width:min(1100px,120vw);aspect-ratio:1;
  transform:translate(-50%,-50%);pointer-events:none;
  background:radial-gradient(circle,rgba(188,171,124,.10),transparent 62%);
}
.stage{
  position:relative;height:clamp(460px,72vh,800px);
  perspective:1750px;perspective-origin:50% 48%;
  touch-action:pan-y;cursor:grab;margin:0 calc(var(--pad)*-1) 0 calc((var(--rail) + var(--pad))*-1);
}
.stage.grabbing{cursor:grabbing}
/* halo de suelo bajo la tarjeta frontal */
.stage-floor{
  position:absolute;left:50%;bottom:5%;width:min(720px,86vw);height:110px;
  transform:translateX(-50%);pointer-events:none;
  background:radial-gradient(ellipse at center,rgba(188,171,124,.22),transparent 68%);
  filter:blur(12px);
}
.ring{position:absolute;inset:0;transform-style:preserve-3d;will-change:transform}
.card{
  position:absolute;left:50%;top:50%;width:clamp(260px,32vw,470px);aspect-ratio:4/5;
  margin:0;transform-style:preserve-3d;backface-visibility:hidden;
  background:var(--ink-2);border:0;padding:0;cursor:pointer;overflow:hidden;text-align:left;
  transition:opacity .5s var(--e-out),filter .5s var(--e-out);
}
.card img{width:100%;height:100%;object-fit:cover;transition:transform 1.1s var(--e-out),filter .6s}
.card .veil{
  position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(27,25,22,.1) 0%,rgba(27,25,22,0) 34%,rgba(27,25,22,.86) 100%)
}
.card .cap{position:absolute;left:0;right:0;bottom:0;padding:20px;display:grid;gap:5px}
.card .cap .loc{font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--gold)}
.card .cap .nm{font-family:var(--f-display);font-size:19px;line-height:1.15;color:var(--paper)}
.card .cap .pr{font-size:12px;color:var(--shell);opacity:.72}
.card .flag{
  position:absolute;top:14px;left:14px;font-size:9px;letter-spacing:.18em;text-transform:uppercase;
  padding:5px 9px;background:rgba(27,25,22,.72);border:1px solid var(--line-ink);color:var(--shell);
  backdrop-filter:blur(6px)
}
/* Profundidad de campo. Con el billboarding las tarjetas de atrás quedan
   de cara a la cámara y se veían como rectángulos sueltos: se apagan del
   todo y solo quedan en escena la frontal y sus dos vecinas. */
.card.far{opacity:0;filter:saturate(.5) blur(3px);pointer-events:none}
.card.near:hover img{transform:scale(1.06)}
.card::after{content:"";position:absolute;inset:0;border:1px solid transparent;transition:border-color .5s}
.card.near::after{border-color:rgba(188,171,124,.34)}

.props-info{
  display:grid;grid-template-columns:minmax(0,1fr) auto;gap:24px 40px;align-items:end;
  margin-top:clamp(28px,4vw,48px);padding-top:26px;border-top:1px solid var(--line-ink);
}
.props-info .txt{display:grid;gap:8px;transition:opacity .4s}
.props-info.swap .txt{opacity:0}
.props-info .meta{display:flex;gap:18px;flex-wrap:wrap;font-size:12px;color:var(--text-on-ink-dim)}
.props-info .meta b{color:var(--gold);font-weight:600}
.dots{display:flex;gap:8px;align-items:center;margin-top:26px;flex-wrap:wrap}
.dots button{
  width:26px;height:2px;background:var(--line-ink);border:0;padding:0;cursor:pointer;
  transition:background .4s,width .4s var(--e-out)
}
.dots button[aria-selected="true"]{background:var(--gold);width:46px}
.stage-hint{font-size:10px;letter-spacing:.22em;text-transform:uppercase;color:var(--text-on-ink-dim);margin-top:14px}
@media(max-width:1100px){.stage{perspective:1400px;height:clamp(430px,62vh,640px)}}
@media(max-width:700px){.stage{perspective:1100px;height:clamp(380px,56vh,520px)}}
@media(max-width:760px){.props-info{grid-template-columns:1fr}}

/* ============================================================
   CAMINO
   ============================================================ */
.pathway{position:relative;overflow:hidden;background:var(--ink-2)}
.pathway-bg{
  position:absolute;inset:0;background-size:cover;background-position:center;
  opacity:.2;filter:grayscale(.4) contrast(1.05);will-change:transform
}
.pathway::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,var(--ink-2) 8%,rgba(36,33,25,.55) 60%,rgba(36,33,25,.2))}
.pathway .inner{position:relative;z-index:2;max-width:780px}
.path-steps{display:grid;gap:0;margin:clamp(30px,4vw,48px) 0 0;border-top:1px solid var(--line-ink);padding:0}
.path-steps li{
  list-style:none;display:grid;grid-template-columns:auto 1fr;gap:20px;align-items:baseline;
  padding:18px 0;border-bottom:1px solid var(--line-ink)
}
.path-steps .k{font-size:10px;letter-spacing:.2em;color:var(--gold);font-variant-numeric:tabular-nums}
.path-steps .v{font-size:15px;font-weight:300;color:var(--text-on-ink)}
.path-steps .v small{display:block;color:var(--text-on-ink-dim);font-size:13px;margin-top:2px}

/* ============================================================
   DESTINOS
   ============================================================ */
.dests{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line-paper);border:1px solid var(--line-paper)}
.dest{background:var(--paper);padding:clamp(24px,3vw,40px);display:grid;gap:10px;align-content:start;transition:background .5s;position:relative;overflow:hidden}
.dest::before{
  content:"";position:absolute;left:0;right:0;bottom:0;height:2px;background:var(--sage);
  transform:scaleX(0);transform-origin:left;transition:transform .7s var(--e-out)
}
.dest:hover{background:var(--paper-2)}
.dest:hover::before{transform:scaleX(1)}
.dest .n{font-family:var(--f-display);font-size:clamp(22px,2.4vw,30px)}
.dest .c{font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--sage)}
.dest p{font-size:14px;font-weight:300;color:var(--text-on-paper-dim);margin:4px 0 0;line-height:1.6}
@media(max-width:780px){.dests{grid-template-columns:1fr}}
