/* Text Reveal — hero load choreography + line masks, soft settles, drawn rules (PC & SP) */

/* ===== scroll sections: hosts stay put, only their contents move ===== */
.rv.tx,
.rv-o.tx,
.bqp-rv.tx {
  opacity: 1;
  transform: none;
  transition: none;
}

/* heading lines — each line rises softly into place (no clipping, no layout impact) */
.txl {
  opacity: 0;
  transform: translateY(.55em);
  transition: opacity 1.05s ease, transform 1.25s cubic-bezier(.22, 1, .36, 1);
}

.txl--ib { display: inline-block; }

.tx.on .txl {
  opacity: 1;
  transform: none;
}

/* concept display (PC): a touch slower — it sits right under the hero */
.tx-late .txl { transition-duration: 1.5s, 1.7s; }

/* section displays: snappier arrival — they follow already-lit copy around them */
.facility-editorial__display .txl,
.banquet-editorial__display .txl,
.rooms-editorial__title .txl {
  transform: translateY(.38em);
  transition-duration: .8s, .95s;
}

/* concept copy — characters light up as you read down (opacity driven by scroll) */
.txw { opacity: .16; }

/* char wrapper must stay neutral (e.g. inside .concept__closing's grid, next to its rule span) */
.concept__closing > .txw-line {
  display: block;
  width: auto;
  height: auto;
  margin-top: 0;
  background: none;
}

/* descent ghost words — pure fade (drift handled by scroll) */
.tx-fade {
  opacity: 0;
  transition: opacity 1.6s ease;
}

.tx-fade.on { opacity: 1; }

/* descent verticals — settle downward into place */
.tx-desc {
  opacity: 0;
  transform: translateY(-18px);
  transition: opacity 1.1s ease, transform 1.25s cubic-bezier(.22, 1, .36, 1);
}

.tx-desc.on {
  opacity: 1;
  transform: none;
}

/* textile palette — appears through a clearing blur */
.tx-blur {
  opacity: 0;
  filter: blur(18px);
  transition: opacity 1.5s ease, filter 1.5s ease;
}

.tx-blur.on {
  opacity: 1;
  filter: blur(0);
}

/* body copy — settles in with a fading blur */
.tx-soft {
  opacity: 0;
  transform: translateY(16px);
  filter: blur(6px);
  transition: opacity 1.05s ease, transform 1.05s cubic-bezier(.22, 1, .36, 1), filter .9s ease;
}

.tx-soft.on {
  opacity: 1;
  transform: none;
  filter: blur(0);
}

/* rules — drawn from the left */
.rv.tx-rule,
.rv-o.tx-rule {
  opacity: 1;
  transform: scaleX(0);
  transform-origin: 0 50%;
  transition: transform 1.3s cubic-bezier(.22, 1, .36, 1);
}

.rv.tx-rule.on,
.rv-o.tx-rule.on { transform: scaleX(1); }

/* fact rows — one line at a time */
.rv.tx-rows,
.rv-o.tx-rows {
  opacity: 1;
  transform: none;
  transition: none;
}

.tx-rows > * {
  opacity: 0;
  transform: translateY(14px);
  transition: opacity .95s ease, transform .95s cubic-bezier(.22, 1, .36, 1);
}

.tx-rows.on > * {
  opacity: 1;
  transform: none;
}

@media (prefers-reduced-motion: reduce) {
  .txl { opacity: 1; transform: none; transition: none; }

  .txw { opacity: 1; }

  .tx-blur { opacity: 1; filter: none; transition: none; }

  .tx-soft,
  .tx-fade,
  .tx-desc,
  .tx-rows > * { opacity: 1; transform: none; filter: none; transition: none; }

  .rv.tx-rule,
  .rv-o.tx-rule { transform: none; transition: none; }
}
