/* ==========================================================================
   TAV Chat — Vix, la mascota de The Artificial Vision
   Una esfera de plasma con dos ojos que pasea por la web, señala cosas y habla
   en cápsulas holográficas sobre un velo de cristal.
   Todo vive bajo .tav-chat para no tocar el resto de la web.
   ========================================================================== */

.tav-chat {
  --tc-ink: var(--ink, #eceff5);
  --tc-text: var(--text, #c8ccd8);
  --tc-muted: var(--muted, #878c9e);
  --tc-cyan: var(--cyan, #86d7e8);
  --tc-violet: var(--violet, #8b7bff);
  --tc-amber: var(--amber, #d7bd86);
  --tc-green: var(--green, #b7e4c6);
  --tc-pink: var(--pink, #e3a6c4);
  --tc-font: var(--font-body, "Instrument Sans", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif);

  --tc-spring: cubic-bezier(0.34, 1.2, 0.64, 1);
  --tc-spring-strong: cubic-bezier(0.34, 1.56, 0.64, 1);
  --tc-ease-out: cubic-bezier(0.22, 0.61, 0.36, 1);

  font-family: var(--tc-font);
  font-size: 15px;
  line-height: 1.58;
  color: var(--tc-text);
  -webkit-font-smoothing: antialiased;
}

.tav-chat *,
.tav-chat *::before,
.tav-chat *::after {
  box-sizing: border-box;
}

/* Blindaje: los estilos globales de la web (botones, formularios, titulares) no entran. */
.tav-chat button {
  margin: 0;
  font: inherit;
  letter-spacing: normal;
  text-transform: none;
}

.tav-chat__sr {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
}

.tav-chat :focus-visible {
  outline: 2px solid var(--tc-cyan);
  outline-offset: 3px;
}

/* ==========================================================================
   Vix — la mascota
   Una esfera de plasma de 120 px de diseño; el JS la escala, la mueve y la
   deforma como una gelatina.
   ========================================================================== */

.tav-chat__vix {
  position: fixed;
  left: 0;
  top: 0;
  z-index: 196;
  width: 120px;
  height: 120px;
  pointer-events: none;
  transform: translate3d(-400px, -400px, 0) scale(0);
  will-change: transform;
  transition: opacity 320ms ease;
}

.tav-chat.is-open .tav-chat__vix {
  z-index: 420;
}

body:has(.nav-mobile-fab.is-open) .tav-chat__vix {
  opacity: 0;
}

body:has(.nav-mobile-fab.is-open) .tav-chat__vix-btn {
  pointer-events: none;
}

.tav-chat__vix-btn {
  all: unset;
  position: absolute;
  inset: 0;
  z-index: 2;
  display: block;
  border-radius: 50%;
  cursor: pointer;
  pointer-events: auto;
  -webkit-tap-highlight-color: transparent;
  touch-action: manipulation;
}

.tav-chat__vix-btn:focus-visible {
  outline: 6px solid var(--tc-cyan);
  outline-offset: 12px;
}

/* Halo de luz que respira; al hablar late más fuerte (--tc-talk va de 0 a 1). */
.tav-chat__vix-aura {
  position: absolute;
  inset: -42%;
  border-radius: 50%;
  pointer-events: none;
  background: radial-gradient(circle, rgba(134, 215, 232, 0.36) 0%, rgba(139, 123, 255, 0.2) 36%, transparent 66%);
  scale: calc(1 + var(--tc-talk, 0) * 0.22);
  opacity: calc(0.7 + var(--tc-talk, 0) * 0.3);
  animation: tcAura 5.5s ease-in-out infinite;
}

.tav-chat__vix-sphere {
  position: absolute;
  inset: 0;
  overflow: hidden;
  border-radius: 50%;
  pointer-events: none;
  contain: layout paint;
  background: radial-gradient(circle at 36% 30%, #5b4fd6 0%, #2b2576 44%, #0b0a28 100%);
  box-shadow:
    inset -10px -13px 24px rgba(0, 0, 12, 0.66),
    inset 5px 6px 15px rgba(190, 235, 255, 0.32),
    0 0 26px rgba(139, 123, 255, 0.4),
    0 0 2px rgba(134, 215, 232, 0.7);
}

/* Pausa de los giros infinitos cuando la página está oculta o Vix está en reposo (el JS pone .is-paused) */
.tav-chat.is-paused .tav-chat__vix-aura,
.tav-chat.is-paused .tav-chat__vix-orbit {
  animation-play-state: paused;
}

/* Plasma: tres manchas de luz que orbitan dentro de la esfera (sin filtros: barato de pintar). */
.tav-chat__vix-orbit {
  position: absolute;
  inset: 0;
  animation: tcSpin var(--d, 16s) linear infinite;
}

.tav-chat__vix-orbit i {
  position: absolute;
  left: var(--ox);
  top: var(--oy);
  width: var(--sz, 68%);
  height: var(--sz, 68%);
  border-radius: 50%;
  background: radial-gradient(circle, var(--c) 0%, transparent 68%);
}

.tav-chat__vix-orbit.o1 { --d: 15s; --c: rgba(134, 215, 232, 0.9); --ox: 40%; --oy: 4%; }
.tav-chat__vix-orbit.o2 { --d: 10s; --c: rgba(139, 123, 255, 0.95); --ox: -12%; --oy: 36%; animation-direction: reverse; }
.tav-chat__vix-orbit.o3 { --d: 22s; --c: rgba(227, 166, 196, 0.5); --ox: 18%; --oy: 50%; --sz: 54%; }

.tav-chat__vix-shade {
  position: absolute;
  inset: 0;
  border-radius: 50%;
  background: radial-gradient(circle at 50% 58%, transparent 36%, rgba(4, 3, 22, 0.62) 100%);
}

.tav-chat__vix-eyes {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  overflow: visible;
  filter: drop-shadow(0 0 5px rgba(134, 215, 232, 0.8));
  transition: filter 600ms ease;
}

.tav-chat__vix-spec {
  position: absolute;
  top: 7%;
  left: 19%;
  width: 34%;
  height: 17%;
  border-radius: 50%;
  background: radial-gradient(ellipse, rgba(255, 255, 255, 0.82), rgba(255, 255, 255, 0) 70%);
  transform: rotate(-26deg);
}

.tav-chat__vix-rim {
  position: absolute;
  inset: 0;
  border-radius: 50%;
  background: radial-gradient(circle at 50% 50%, transparent 68%, rgba(134, 215, 232, 0.28) 100%);
}

/* Entrada: la web queda tapada hasta que Vix presenta el logo. Las animaciones de la web mandan
   sobre el estilo en línea, por eso el logo de su portada se aparta con !important. */
html.tav-chat-intro .hero-intro {
  opacity: 0 !important;
}

.tav-chat__boot {
  position: fixed;
  inset: 0;
  z-index: 1000;
  background:
    radial-gradient(60% 46% at 50% 46%, rgba(134, 215, 232, 0.07), transparent 70%),
    linear-gradient(128deg, #0b0f14 0%, #101720 44%, #080b10 100%);
}

.tav-chat__boot-hint {
  position: absolute;
  left: 0;
  right: 0;
  bottom: calc(26px + env(safe-area-inset-bottom, 0px));
  margin: 0;
  color: #8f98b0;
  font-size: 12px;
  letter-spacing: 0.16em;
  text-align: center;
  text-transform: uppercase;
  opacity: 0;
  animation: tcHint 700ms ease 1.6s forwards;
  transition: opacity 400ms ease;
}

.tav-chat__boot.is-late .tav-chat__boot-hint {
  animation: none;
  opacity: 0;
}

.tav-chat__trail {
  position: fixed;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  z-index: 195;
  pointer-events: none;
}

.tav-chat.is-intro .tav-chat__trail {
  z-index: 1002;
}

.tav-chat__logo {
  position: fixed;
  z-index: 1001;
  pointer-events: none;
  transform-origin: 50% 50%;
}

.tav-chat.is-intro .tav-chat__vix {
  z-index: 1003;
}

@keyframes tcHint {
  to { opacity: 0.7; }
}

/* Onda de luz cuando aterriza */
.tav-chat__ping {
  position: fixed;
  left: 0;
  top: 0;
  z-index: 195;
  width: 84px;
  height: 84px;
  margin: -42px 0 0 -42px;
  border-radius: 50%;
  border: 1px solid rgba(150, 215, 245, 0.7);
  box-shadow: 0 0 10px rgba(134, 215, 232, 0.3);
  opacity: 0;
  pointer-events: none;
}

/* segundo anillo, más tenue y algo después */
.tav-chat__ping::before {
  content: "";
  position: absolute;
  inset: -1px;
  border-radius: 50%;
  border: 1px solid rgba(160, 140, 255, 0.55);
}

/* destello del núcleo */
.tav-chat__ping::after {
  content: "";
  position: absolute;
  inset: 18%;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(200, 240, 255, 0.55), rgba(134, 215, 232, 0) 70%);
}

.tav-chat__ping.is-go {
  animation: tcPulse 820ms cubic-bezier(0.2, 0.7, 0.2, 1) both;
}

.tav-chat__ping.is-go::before {
  animation: tcPulse2 980ms cubic-bezier(0.2, 0.7, 0.2, 1) 90ms both;
}

.tav-chat__ping.is-go::after {
  animation: tcCore 420ms ease-out both;
}

.tav-chat__ping.is-in {
  animation: tcCharge 300ms ease-in both;
}

/* ==========================================================================
   Tip — cápsula de luz junto a Vix
   ========================================================================== */

.tav-chat__tip {
  position: fixed;
  left: 0;
  top: 0;
  z-index: 197;
  width: max-content;
  max-width: min(284px, calc(100vw - 24px));
  pointer-events: none;
}

.tav-chat__tip-card {
  position: relative;
  padding: 11px 32px 11px 16px;
  border-radius: 20px;
  color: var(--tc-ink);
  font-size: 13.5px;
  line-height: 1.5;
  opacity: 0;
  visibility: hidden;
  transform: scale(0.9);
  transform-origin: var(--ox, 50%) var(--oy, 50%);
  transition: opacity 240ms ease, transform 460ms var(--tc-spring), visibility 0s linear 240ms;
  border: 1px solid rgba(134, 215, 232, 0.42);
  background:
    repeating-linear-gradient(0deg, rgba(255, 255, 255, 0.035) 0 1px, transparent 1px 3px),
    linear-gradient(135deg, rgba(134, 215, 232, 0.18), rgba(139, 123, 255, 0.11) 62%, rgba(255, 255, 255, 0.03)),
    rgba(9, 12, 26, 0.5);
  -webkit-backdrop-filter: blur(16px) saturate(170%);
  backdrop-filter: blur(16px) saturate(170%);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.22),
    inset 0 0 22px rgba(134, 215, 232, 0.07),
    0 0 26px rgba(134, 215, 232, 0.18),
    0 14px 44px rgba(2, 4, 14, 0.5);
  text-shadow: 0 0 12px rgba(134, 215, 232, 0.28);
}

.tav-chat__tip.is-visible {
  pointer-events: auto;
  will-change: transform;
}

.tav-chat__tip.is-visible .tav-chat__tip-card {
  opacity: 1;
  visibility: visible;
  transform: scale(1);
  transition-delay: 0s;
}

.tav-chat__tip-meta {
  margin: 0 0 4px;
  color: var(--tc-cyan);
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 0.16em;
  line-height: 1.2;
  text-transform: uppercase;
}

.tav-chat__tip-text {
  margin: 0;
  padding-right: 14px;
}

.tav-chat__tip-actions[hidden] {
  display: none;
}

/* Flecha mínima abajo a la derecha (la cruz de arriba ya es "salir") */
.tav-chat__tip-actions {
  position: absolute;
  right: 8px;
  bottom: 8px;
  display: flex;
  gap: 4px;
}

.tav-chat__tip-card.has-go .tav-chat__tip-text {
  min-height: 1.5em;
}

.tav-chat__tbtn {
  all: unset;
  box-sizing: border-box;
  display: grid;
  place-items: center;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  border: 1px solid rgba(134, 215, 232, 0.5);
  background: linear-gradient(135deg, rgba(134, 215, 232, 0.28), rgba(139, 123, 255, 0.22));
  color: var(--tc-ink);
  cursor: pointer;
  transition: transform 200ms var(--tc-spring-strong), box-shadow 200ms ease;
}

.tav-chat__tbtn svg {
  width: 11px;
  height: 11px;
}

.tav-chat__tbtn:focus-visible {
  outline: 2px solid var(--tc-cyan);
  outline-offset: 2px;
}

@media (hover: hover) {
  .tav-chat__tbtn:hover {
    transform: translateX(2px);
    box-shadow: 0 0 14px rgba(134, 215, 232, 0.4);
  }
}

.tav-chat__tip-x {
  all: unset;
  position: absolute;
  top: 8px;
  right: 8px;
  display: grid;
  place-items: center;
  width: 22px;
  height: 22px;
  border-radius: 50%;
  color: var(--tc-muted);
  cursor: pointer;
  transition: color 160ms ease, background 160ms ease;
}

.tav-chat__tip-x:hover {
  color: var(--tc-ink);
  background: rgba(255, 255, 255, 0.1);
}

.tav-chat__tip-x:focus-visible {
  outline: 2px solid var(--tc-cyan);
  outline-offset: 1px;
}

.tav-chat__tip-x svg {
  width: 11px;
  height: 11px;
}

/* ==========================================================================
   Foco — Vix ilumina con los ojos lo que enseña: un resplandor suave, sin marcos
   ========================================================================== */

.tav-chat__spot {
  position: fixed;
  left: 0;
  top: 0;
  z-index: 188;
  width: 0;
  height: 0;
  pointer-events: none;
  opacity: 0;
  transition: opacity 700ms ease;
}

.tav-chat__spot.is-on {
  opacity: 1;
  will-change: transform;
}

.tav-chat__spot::before {
  content: "";
  position: absolute;
  inset: 0;
  opacity: var(--k, 1);
  background:
    radial-gradient(ellipse closest-side at var(--lx, 50%) var(--ly, 50%), rgba(150, 95, 255, 0.035) 0%, rgba(140, 90, 255, 0.018) 40%, transparent 100%);
}

.tav-chat__beam {
  position: fixed;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  z-index: 187;
  pointer-events: none;
  opacity: 0;
  transition: opacity 700ms ease;
}

.tav-chat__beam.is-on {
  opacity: 1;
}

/* Los ojos brillan algo más mientras iluminan */
.tav-chat__vix.is-lighting .tav-chat__vix-eyes {
  filter: drop-shadow(0 0 9px rgba(190, 245, 255, 1));
}

/* ==========================================================================
   Velo de cristal — el fondo cuando hablas con Vix
   ========================================================================== */

.tav-chat__veil {
  position: fixed;
  inset: 0;
  z-index: 400;
  opacity: 0;
  visibility: hidden;
  background:
    radial-gradient(90% 62% at 20% 100%, rgba(139, 123, 255, 0.26), transparent 64%),
    radial-gradient(70% 50% at 88% 0%, rgba(134, 215, 232, 0.13), transparent 62%),
    repeating-linear-gradient(0deg, rgba(255, 255, 255, 0.018) 0 1px, transparent 1px 4px),
    rgba(5, 7, 17, 0.5);
  -webkit-backdrop-filter: blur(24px) saturate(150%);
  backdrop-filter: blur(24px) saturate(150%);
  transition:
    opacity 380ms var(--tc-ease-out),
    visibility 0s linear 520ms;
}

.tav-chat.is-open .tav-chat__veil {
  opacity: 1;
  visibility: visible;
  transition-delay: 0s;
}

@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .tav-chat__veil {
    background:
      radial-gradient(90% 62% at 20% 100%, rgba(139, 123, 255, 0.22), transparent 64%),
      rgba(7, 9, 20, 0.92);
  }
}

@media (prefers-reduced-transparency: reduce) {
  .tav-chat.is-open .tav-chat__veil {
    background: rgba(7, 9, 20, 0.95);
    -webkit-backdrop-filter: none;
    backdrop-filter: none;
  }
}

.tav-chat__stage {
  position: fixed;
  left: 0;
  right: 0;
  top: var(--tc-vt, 0px);
  z-index: 410;
  height: var(--tc-vh, 100dvh);
  display: flex;
  justify-content: center;
  padding: 14px 16px calc(12px + env(safe-area-inset-bottom, 0px));
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: opacity 320ms var(--tc-ease-out), visibility 0s linear 320ms;
}

.tav-chat.is-open .tav-chat__stage {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transition-delay: 0s;
}

.tav-chat__col {
  position: relative;
  display: flex;
  flex-direction: column;
  width: min(720px, 100%);
  height: 100%;
  min-height: 0;
}

/* Cono de luz del proyector, de Vix hacia arriba */
.tav-chat__col::before {
  content: "";
  position: absolute;
  left: -6px;
  bottom: 70px;
  width: 150px;
  height: 62%;
  pointer-events: none;
  background: linear-gradient(to top, rgba(134, 215, 232, 0.2), rgba(139, 123, 255, 0.07) 55%, transparent);
  clip-path: polygon(34% 100%, 66% 100%, 100% 0, 0 0);
  -webkit-mask-image: linear-gradient(to right, transparent, #000 28%, #000 72%, transparent);
  mask-image: linear-gradient(to right, transparent, #000 28%, #000 72%, transparent);
  opacity: 0;
  transition: opacity 600ms ease 200ms;
}

.tav-chat.is-open .tav-chat__col::before {
  opacity: 0.8;
}

/* Barra superior */
.tav-chat__bar {
  position: relative;
  z-index: 1;
  display: flex;
  flex: 0 0 auto;
  align-items: center;
  gap: 8px;
}

.tav-chat__tag {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  padding: 7px 15px 7px 11px;
  margin: 0;
  border-radius: 999px;
  border: 1px solid rgba(134, 215, 232, 0.32);
  background: linear-gradient(135deg, rgba(134, 215, 232, 0.12), rgba(139, 123, 255, 0.08)), rgba(9, 12, 26, 0.4);
  -webkit-backdrop-filter: blur(14px) saturate(160%);
  backdrop-filter: blur(14px) saturate(160%);
  color: var(--tc-cyan);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.17em;
  line-height: 1.2;
  text-transform: uppercase;
}

.tav-chat__tag::before {
  content: "";
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--tc-green);
  box-shadow: 0 0 10px var(--tc-green);
}

.tav-chat__bar-spacer {
  flex: 1;
}

.tav-chat__icon-btn {
  all: unset;
  box-sizing: border-box;
  display: grid;
  place-items: center;
  flex-shrink: 0;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  border: 1px solid rgba(134, 215, 232, 0.26);
  background: linear-gradient(135deg, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0.03)), rgba(9, 12, 26, 0.4);
  -webkit-backdrop-filter: blur(14px) saturate(160%);
  backdrop-filter: blur(14px) saturate(160%);
  color: var(--tc-text);
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
  transition: transform 220ms var(--tc-spring-strong), color 180ms ease, border-color 200ms ease, box-shadow 240ms ease;
}

.tav-chat__icon-btn:focus-visible {
  outline: 2px solid var(--tc-cyan);
  outline-offset: 2px;
}

@media (hover: hover) {
  .tav-chat__icon-btn:hover {
    color: var(--tc-ink);
    border-color: rgba(134, 215, 232, 0.6);
    box-shadow: 0 0 18px rgba(134, 215, 232, 0.22);
  }
}

.tav-chat__icon-btn:active {
  transform: scale(0.9);
}

.tav-chat__icon-btn svg {
  width: 17px;
  height: 17px;
}

.tav-chat__icon-btn[aria-pressed="true"] {
  color: var(--tc-amber);
  border-color: rgba(215, 189, 134, 0.5);
}

/* ==========================================================================
   Conversación — cápsulas holográficas
   ========================================================================== */

.tav-chat__log {
  position: relative;
  z-index: 1;
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
  min-height: 0;
  padding: 40px 2px 10px;
  overflow-y: auto;
  overscroll-behavior: contain;
  scrollbar-width: thin;
  scrollbar-color: rgba(134, 215, 232, 0.26) transparent;
  -webkit-mask-image: linear-gradient(to bottom, transparent 0, #000 46px);
  mask-image: linear-gradient(to bottom, transparent 0, #000 46px);
}

.tav-chat__log > :first-child {
  margin-top: auto;
}

.tav-chat__log::-webkit-scrollbar {
  width: 6px;
}

.tav-chat__log::-webkit-scrollbar-thumb {
  border-radius: 6px;
  background: rgba(134, 215, 232, 0.22);
}

.tav-chat__cap {
  position: relative;
  flex: 0 0 auto;
  width: fit-content;
  max-width: min(88%, 580px);
  margin: 0 0 10px;
  padding: 11px 19px;
  border-radius: 24px;
  overflow-wrap: anywhere;
  color: #eaf7ff;
  font-size: 15px;
  line-height: 1.56;
  border: 1px solid rgba(134, 215, 232, 0.4);
  background:
    repeating-linear-gradient(0deg, rgba(255, 255, 255, 0.034) 0 1px, transparent 1px 3px),
    linear-gradient(135deg, rgba(134, 215, 232, 0.17), rgba(139, 123, 255, 0.1) 60%, rgba(255, 255, 255, 0.03)),
    rgba(9, 12, 26, 0.5);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.22),
    inset 0 0 24px rgba(134, 215, 232, 0.07),
    0 8px 24px rgba(2, 4, 14, 0.42);
  animation: tcProject 760ms var(--tc-ease-out) both;
}

/* Línea de barrido que “proyecta” la cápsula al aparecer */
.tav-chat__cap::after {
  content: "";
  position: absolute;
  left: 14px;
  right: 14px;
  top: 0;
  height: 2px;
  border-radius: 2px;
  background: linear-gradient(90deg, transparent, rgba(180, 240, 255, 0.95), transparent);
  box-shadow: 0 0 14px rgba(134, 215, 232, 0.9);
  opacity: 0;
  pointer-events: none;
  animation: tcSweep 760ms var(--tc-ease-out) both;
}

.tav-chat__cap--me {
  align-self: flex-end;
  border-color: rgba(215, 189, 134, 0.46);
  color: #fff6e2;
  white-space: pre-wrap;
  background:
    repeating-linear-gradient(0deg, rgba(255, 255, 255, 0.03) 0 1px, transparent 1px 3px),
    linear-gradient(135deg, rgba(215, 189, 134, 0.2), rgba(227, 166, 196, 0.12) 64%, rgba(255, 255, 255, 0.03)),
    rgba(18, 13, 24, 0.52);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.2),
    inset 0 0 24px rgba(215, 189, 134, 0.07),
    0 8px 24px rgba(2, 4, 14, 0.42);
}

.tav-chat__cap--vix {
  align-self: flex-start;
}

.tav-chat__cap p {
  margin: 0 0 0.55em;
  padding: 0;
  color: inherit;
  font-size: inherit;
  line-height: inherit;
}

.tav-chat__cap p:last-child,
.tav-chat__cap ul:last-child,
.tav-chat__cap ol:last-child {
  margin-bottom: 0;
}

.tav-chat__cap strong {
  color: #fff;
  font-weight: 600;
}

.tav-chat__cap em {
  color: #dbe9f6;
}

.tav-chat__cap ul,
.tav-chat__cap ol {
  margin: 0 0 0.6em;
  padding-left: 1.15em;
}

.tav-chat__cap li {
  margin: 0.2em 0;
  padding: 0;
  color: inherit;
}

.tav-chat__cap li::marker {
  color: var(--tc-cyan);
}

.tav-chat__cap code {
  padding: 1px 6px;
  border-radius: 6px;
  border: 1px solid rgba(134, 215, 232, 0.2);
  background: rgba(255, 255, 255, 0.06);
  color: var(--tc-cyan);
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: 0.88em;
}

.tav-chat__cap a {
  color: var(--tc-cyan);
  text-decoration: underline;
  text-decoration-color: rgba(134, 215, 232, 0.4);
  text-underline-offset: 3px;
  transition: text-decoration-color 160ms ease;
}

.tav-chat__cap a:hover {
  text-decoration-color: var(--tc-cyan);
}

/* Cursor mientras llega el texto */
.tav-chat__cap.is-streaming .tav-chat__cap-body > :last-child::after {
  content: "";
  display: inline-block;
  width: 7px;
  height: 7px;
  margin-left: 6px;
  border-radius: 50%;
  vertical-align: 1px;
  background: var(--tc-cyan);
  box-shadow: 0 0 12px var(--tc-cyan);
  animation: tcBlink 1s ease-in-out infinite;
}

/* Saludo grande */
.tav-chat__cap--hero {
  padding: 15px 24px 16px;
  border-radius: 30px;
  color: var(--tc-ink);
  font-size: 22px;
  font-weight: 600;
  line-height: 1.22;
  letter-spacing: -0.01em;
}

.tav-chat__cap--hero span {
  background: linear-gradient(100deg, var(--tc-cyan), var(--tc-violet) 70%, var(--tc-pink));
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  text-shadow: none;
}

/* Pensando: escáner de luz */
.tav-chat__cap--think {
  display: inline-flex;
  align-items: center;
  gap: 12px;
  padding: 10px 18px;
  color: var(--tc-muted);
  font-size: 13px;
}

.tav-chat__scan {
  position: relative;
  width: 48px;
  height: 2px;
  overflow: hidden;
  border-radius: 2px;
  background: rgba(134, 215, 232, 0.14);
}

.tav-chat__scan::after {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  width: 40%;
  height: 100%;
  border-radius: 2px;
  background: linear-gradient(90deg, transparent, var(--tc-cyan), var(--tc-violet), transparent);
  box-shadow: 0 0 10px var(--tc-cyan);
  animation: tcScan 1.3s var(--tc-ease-out) infinite;
}

/* Avisos */
.tav-chat__note {
  align-self: center;
  max-width: 92%;
  margin: 2px 0 12px;
  padding: 8px 16px;
  border-radius: 999px;
  border: 1px solid rgba(215, 189, 134, 0.34);
  background: rgba(215, 189, 134, 0.08);
  color: #ecdcb8;
  font-size: 13px;
  text-align: center;
  animation: tcProject 520ms var(--tc-ease-out) both;
}

.tav-chat__note--error {
  border-color: rgba(227, 166, 196, 0.4);
  background: rgba(227, 166, 196, 0.09);
  color: #f2d0e0;
}

/* Cápsula-botón: ir a otra página */
.tav-chat__cap--go {
  all: unset;
  box-sizing: border-box;
  position: relative;
  align-self: flex-start;
  flex: 0 0 auto;
  margin: 0 0 10px;
  padding: 10px 20px;
  border-radius: 999px;
  border: 1px solid rgba(134, 215, 232, 0.62);
  background: linear-gradient(135deg, rgba(134, 215, 232, 0.3), rgba(139, 123, 255, 0.24)), rgba(9, 12, 26, 0.5);
  color: #fff;
  font-family: var(--tc-font);
  font-size: 14px;
  font-weight: 600;
  line-height: 1.3;
  cursor: pointer;
  box-shadow: 0 0 24px rgba(134, 215, 232, 0.2), 0 10px 34px rgba(2, 4, 14, 0.4);
  animation: tcProject 760ms var(--tc-ease-out) both;
  transition: transform 220ms var(--tc-spring-strong), box-shadow 260ms ease;
}

.tav-chat__cap--go:focus-visible {
  outline: 2px solid var(--tc-cyan);
  outline-offset: 3px;
}

@media (hover: hover) {
  .tav-chat__cap--go:hover {
    transform: translateY(-2px);
    box-shadow: 0 0 34px rgba(134, 215, 232, 0.4), 0 10px 34px rgba(2, 4, 14, 0.4);
  }
}

/* Sugerencias */
.tav-chat__chips {
  display: flex;
  flex: 0 0 auto;
  flex-wrap: wrap;
  align-self: flex-start;
  gap: 8px;
  max-width: 100%;
  margin: 4px 0 12px;
  padding: 0;
  list-style: none;
}

.tav-chat__chip {
  all: unset;
  box-sizing: border-box;
  position: relative;
  overflow: hidden;
  padding: 8px 15px;
  border-radius: 999px;
  border: 1px solid rgba(134, 215, 232, 0.34);
  background: rgba(9, 12, 26, 0.5);
  color: var(--tc-ink);
  font-family: var(--tc-font);
  font-size: 13.5px;
  font-weight: 500;
  line-height: 1.25;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
  animation: tcProject 640ms var(--tc-ease-out) both;
  animation-delay: calc(var(--i, 0) * 70ms + 260ms);
  transition: transform 220ms var(--tc-spring-strong), border-color 220ms ease, background 220ms ease, box-shadow 260ms ease;
}

.tav-chat__chip--tour {
  border-color: rgba(215, 189, 134, 0.5);
  color: #fff3d6;
}

.tav-chat__chip::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(100deg, transparent 0%, rgba(255, 255, 255, 0.18) 42%, transparent 62%);
  transform: translateX(-120%);
  transition: transform 560ms var(--tc-ease-out);
  pointer-events: none;
}

.tav-chat__chip:focus-visible {
  outline: 2px solid var(--tc-cyan);
  outline-offset: 2px;
}

@media (hover: hover) {
  .tav-chat__chip:hover {
    transform: translateY(-2px);
    border-color: rgba(134, 215, 232, 0.8);
    background: rgba(134, 215, 232, 0.12);
    box-shadow: 0 0 22px rgba(134, 215, 232, 0.22);
  }

  .tav-chat__chip:hover::after {
    transform: translateX(120%);
  }
}

/* ==========================================================================
   Dock — Vix a la izquierda, el campo de texto como cápsula de cristal
   ========================================================================== */

.tav-chat__dock {
  position: relative;
  z-index: 2;
  display: flex;
  flex: 0 0 auto;
  align-items: flex-end;
  gap: 4px;
}

/* Hueco donde se posa Vix; el JS lo mide para llevarlo hasta allí. */
.tav-chat__slot {
  position: relative;
  flex: 0 0 auto;
  width: 100px;
  height: 100px;
  margin: 0 -2px -4px -6px;
  pointer-events: none;
}

.tav-chat__slot::after {
  content: "";
  position: absolute;
  left: 4%;
  right: 4%;
  bottom: -2px;
  height: 20px;
  border-radius: 50%;
  background: radial-gradient(ellipse, rgba(134, 215, 232, 0.5), rgba(139, 123, 255, 0.18) 55%, transparent 72%);
  filter: blur(3px);
  opacity: 0;
  transition: opacity 600ms ease 260ms;
}

.tav-chat.is-open .tav-chat__slot::after {
  opacity: 1;
}

.tav-chat__composer {
  display: flex;
  flex: 1 1 auto;
  min-width: 0;
  flex-direction: column;
  margin: 0;
  padding: 0;
}

.tav-chat__field {
  position: relative;
  display: flex;
  align-items: flex-end;
  gap: 8px;
  margin: 0 0 6px;
  padding: 7px 7px 7px 20px;
  border-radius: 30px;
  border: 1px solid rgba(134, 215, 232, 0.34);
  background:
    linear-gradient(135deg, rgba(134, 215, 232, 0.12), rgba(139, 123, 255, 0.08)),
    rgba(9, 12, 26, 0.5);
  -webkit-backdrop-filter: blur(18px) saturate(170%);
  backdrop-filter: blur(18px) saturate(170%);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.2),
    0 0 28px rgba(134, 215, 232, 0.12),
    0 14px 44px rgba(2, 4, 14, 0.45);
  font-size: inherit;
  font-weight: 400;
  color: inherit;
  transition: border-color 240ms ease, box-shadow 300ms ease;
}

/* Arco de luz girando por el borde al escribir, como el de los botones flotantes de TAV */
.tav-chat__field::before {
  content: "";
  position: absolute;
  inset: -1px;
  border-radius: 30px;
  padding: 1.5px;
  pointer-events: none;
  background: conic-gradient(from var(--tc-a, 0deg), transparent 0 55%, rgba(134, 215, 232, 0.6) 75%, rgba(139, 123, 255, 0.95) 90%, transparent 98%);
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor;
  mask: linear-gradient(#000 0 0) content-box exclude, linear-gradient(#000 0 0);
  opacity: 0;
  transition: opacity 320ms ease;
}

.tav-chat__field:focus-within {
  border-color: rgba(134, 215, 232, 0.7);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.24),
    0 0 34px rgba(134, 215, 232, 0.24),
    0 14px 44px rgba(2, 4, 14, 0.45);
}

.tav-chat__field:focus-within::before {
  opacity: 0.9;
  animation: tcArc 6s linear infinite;
}

@property --tc-a {
  syntax: "<angle>";
  inherits: false;
  initial-value: 0deg;
}

.tav-chat .tav-chat__input,
.tav-chat .tav-chat__input:focus {
  flex: 1;
  width: auto;
  min-width: 0;
  min-height: 26px;
  max-height: 132px;
  margin: 0;
  padding: 8px 0;
  border: 0;
  border-radius: 0;
  outline: 0;
  box-shadow: none;
  resize: none;
  background: transparent;
  color: var(--tc-ink);
  font: inherit;
  font-size: 15px;
  font-weight: 400;
  line-height: 1.45;
}

.tav-chat__input::placeholder {
  color: #9aa4bd;
}

.tav-chat__send {
  all: unset;
  box-sizing: border-box;
  display: grid;
  place-items: center;
  flex-shrink: 0;
  width: 42px;
  height: 42px;
  border-radius: 50%;
  border: 1px solid rgba(134, 215, 232, 0.5);
  color: #fff;
  cursor: pointer;
  background: linear-gradient(135deg, rgba(134, 215, 232, 0.42), rgba(139, 123, 255, 0.38));
  box-shadow: 0 0 18px rgba(134, 215, 232, 0.28);
  -webkit-tap-highlight-color: transparent;
  transition: transform 220ms var(--tc-spring-strong), box-shadow 260ms ease, opacity 200ms ease;
}

.tav-chat__send:focus-visible {
  outline: 2px solid var(--tc-cyan);
  outline-offset: 2px;
}

@media (hover: hover) {
  .tav-chat__send:hover:not(:disabled) {
    transform: translateY(-1px) scale(1.04);
    box-shadow: 0 0 28px rgba(134, 215, 232, 0.5);
  }
}

.tav-chat__send:active:not(:disabled) {
  transform: scale(0.9);
}

.tav-chat__send:disabled {
  opacity: 0.4;
  cursor: default;
  box-shadow: none;
}

.tav-chat__send svg {
  width: 17px;
  height: 17px;
}

.tav-chat__foot {
  position: relative;
  z-index: 2;
  display: flex;
  flex: 0 0 auto;
  justify-content: center;
  gap: 12px;
  margin: 0;
  padding: 4px 6px 0;
  color: #8f98b0;
  font-size: 11px;
  line-height: 1.3;
}

.tav-chat__foot a {
  color: #aeb7cf;
  text-decoration: none;
  transition: color 160ms ease;
}

.tav-chat__foot a:hover {
  color: var(--tc-cyan);
}

/* Interfaz mínima: solo la cruz arriba, tres sugerencias y el campo */
.tav-chat__tag,
.tav-chat__icon-btn[data-action="roam"],
.tav-chat__icon-btn[data-action="reset"],
.tav-chat__foot a,
.tav-chat__col::before,
.tav-chat__chips li:nth-child(n + 4) {
  display: none;
}

/* ==========================================================================
   Posición de Vix en reposo y adaptaciones
   ========================================================================== */

@media (max-width: 700px) {
  .tav-chat__stage {
    padding: 10px 12px calc(10px + env(safe-area-inset-bottom, 0px));
  }

  .tav-chat__cap {
    max-width: 94%;
    padding: 10px 17px;
    font-size: 15px;
  }

  .tav-chat__slot {
    width: 46px;
    height: 46px;
    margin: 0 0 2px -2px;
  }

  .tav-chat__field {
    padding: 6px 6px 6px 16px;
    border-radius: 26px;
  }

  .tav-chat__field::before {
    border-radius: 26px;
  }

  .tav-chat .tav-chat__input,
  .tav-chat .tav-chat__input:focus {
    font-size: 16px; /* evita el zoom automático de iOS */
  }

  .tav-chat__send {
    width: 40px;
    height: 40px;
  }

  /* sin fondo ni pantalla completa: solo las burbujas, el campo y Vix sobre la página */
  .tav-chat__veil,
  .tav-chat.is-open .tav-chat__veil {
    background: none;
    -webkit-backdrop-filter: none;
    backdrop-filter: none;
    pointer-events: none;
  }

  .tav-chat__stage {
    align-items: flex-end;
    pointer-events: none;
  }

  /* panel de cristal (como en escritorio) pegado abajo, no pantalla completa.
     Márgenes de un solo valor: 12 px al borde de la pantalla, 14 px dentro del panel, 10 px entre piezas */
  .tav-chat__col {
    height: auto;
    max-height: 74%;
    padding: 14px 14px 10px;
    border-radius: 28px;
    border: 1px solid rgba(134, 215, 232, 0.24);
    background:
      radial-gradient(90% 50% at 15% 100%, rgba(139, 123, 255, 0.16), transparent 70%),
      rgba(7, 10, 22, 0.78);
    -webkit-backdrop-filter: blur(22px) saturate(160%);
    backdrop-filter: blur(22px) saturate(160%);
    box-shadow: 0 0 40px rgba(134, 215, 232, 0.1), 0 24px 70px rgba(2, 4, 14, 0.6), inset 0 1px 0 rgba(255, 255, 255, 0.12);
    pointer-events: auto;
  }

  .tav-chat__bar {
    position: absolute;
    top: 10px;
    right: 10px;
    z-index: 3;
  }

  .tav-chat__log { padding: 36px 0 6px; }
  .tav-chat__cap { margin-bottom: 10px; }
  .tav-chat__chips { margin: 2px 0 10px; }
  .tav-chat__field { margin-bottom: 4px; }
  .tav-chat__foot { padding: 2px 6px 0; }

  .tav-chat__foot {
    font-size: 10px;
  }

  .tav-chat__cap--hero {
    font-size: 18px;
  }
}

/* Escritorio: el chat es un panel abajo a la derecha, no ocupa la pantalla */
@media (min-width: 701px) {
  .tav-chat__veil,
  .tav-chat.is-open .tav-chat__veil {
    pointer-events: none;
    background: radial-gradient(55% 70% at 100% 100%, rgba(139, 123, 255, 0.26), transparent 70%);
    -webkit-backdrop-filter: none;
    backdrop-filter: none;
  }

  .tav-chat__stage {
    left: auto;
    right: 22px;
    top: auto;
    bottom: 22px;
    width: 410px;
    height: min(600px, calc(100dvh - 110px));
    align-items: flex-end;
    padding: 0;
    pointer-events: none;
  }

  .tav-chat.is-open .tav-chat__stage {
    pointer-events: none;
  }

  .tav-chat__col {
    width: 100%;
    height: auto;
    max-height: 100%;
    padding: 14px 14px 10px;
    border-radius: 30px;
    border: 1px solid rgba(134, 215, 232, 0.24);
    background:
      radial-gradient(90% 50% at 15% 100%, rgba(139, 123, 255, 0.16), transparent 70%),
      rgba(7, 10, 22, 0.72);
    -webkit-backdrop-filter: blur(22px) saturate(160%);
    backdrop-filter: blur(22px) saturate(160%);
    box-shadow: 0 0 40px rgba(134, 215, 232, 0.1), 0 24px 70px rgba(2, 4, 14, 0.6), inset 0 1px 0 rgba(255, 255, 255, 0.12);
    pointer-events: auto;
  }

  /* la fila del botón de cerrar flota sobre el panel: no suma altura de aire arriba */
  .tav-chat__bar {
    position: absolute;
    top: 12px;
    right: 12px;
    height: auto;
    z-index: 3;
  }

  .tav-chat__log { padding: 36px 0 6px; }
  .tav-chat__cap { margin-bottom: 10px; }
  .tav-chat__chips { margin: 2px 0 10px; }
  .tav-chat__field { margin-bottom: 4px; }
  .tav-chat__foot { padding: 2px 6px 0; }

  .tav-chat__cap {
    max-width: 94%;
    font-size: 14px;
    padding: 10px 16px;
  }

  .tav-chat__cap--hero {
    font-size: 19px;
  }

  .tav-chat__slot {
    width: 52px;
    height: 52px;
    margin: 0 0 2px -2px;
  }

  .tav-chat__foot {
    font-size: 10.5px;
  }

  /* Sin backdrop-filter anidado: el panel ya desenfoca el fondo */
  .tav-chat__icon-btn,
  .tav-chat__field {
    -webkit-backdrop-filter: none;
    backdrop-filter: none;
  }
}

/* ==========================================================================
   Animaciones
   ========================================================================== */

@keyframes tcSpin {
  to { transform: rotate(1turn); }
}

@keyframes tcAura {
  0%, 100% { transform: scale(0.94); }
  50% { transform: scale(1.07); }
}

@keyframes tcArc {
  to { --tc-a: 360deg; }
}

@keyframes tcPulse {
  0% { opacity: 0.9; transform: scale(calc(0.45 * var(--ps, 1))); }
  100% { opacity: 0; transform: scale(calc(1.9 * var(--ps, 1) * var(--pp, 1))); }
}

@keyframes tcPulse2 {
  0% { opacity: 0; transform: scale(1); }
  12% { opacity: 0.8; }
  100% { opacity: 0; transform: scale(1.55); }
}

@keyframes tcCore {
  0% { opacity: 1; transform: scale(0.6); }
  100% { opacity: 0; transform: scale(1.8); }
}

@keyframes tcCharge {
  0% { opacity: 0; transform: scale(calc(1.5 * var(--ps, 1))); }
  45% { opacity: 0.55; }
  100% { opacity: 0; transform: scale(calc(0.5 * var(--ps, 1))); }
}

@keyframes tcProject {
  0% { opacity: 0; transform: translateY(12px) scale(0.97); }
  30% { opacity: 0.7; }
  42% { opacity: 0.38; }
  55% { opacity: 1; }
  100% { opacity: 1; transform: none; }
}

@keyframes tcSweep {
  0% { opacity: 0; transform: translateY(0); }
  12% { opacity: 1; }
  100% { opacity: 0; transform: translateY(var(--tc-sweep, 60px)); }
}

@keyframes tcScan {
  from { transform: translateX(-110%); }
  to { transform: translateX(260%); }
}

@keyframes tcBlink {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.25; }
}

@media (prefers-reduced-motion: reduce) {
  .tav-chat__vix-orbit,
  .tav-chat__vix-aura {
    animation: none;
  }

  .tav-chat *,
  .tav-chat *::before,
  .tav-chat *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* Aura de Vix: resplandor del fondo que lo acompaña (detrás del contenido) */
.tav-chat__aura {
  position: fixed;
  left: 0;
  top: 0;
  width: 560px;
  height: 560px;
  margin: -280px 0 0 -280px;
  z-index: -1;
  pointer-events: none;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(139, 123, 255, 0.2), rgba(134, 215, 232, 0.08) 38%, transparent 68%);
  opacity: 0;
  transition: opacity 700ms ease;
  will-change: transform, opacity;
}

@media (max-width: 700px) {
  .tav-chat__aura { width: 380px; height: 380px; margin: -190px 0 0 -190px; }
}

@media (prefers-reduced-motion: reduce) {
  .tav-chat__aura { transition: none; }
}

/* Menú de escritorio: se esconde al bajar y reaparece en cuanto se sube (más pantalla para el contenido, siempre a mano) */
@media (min-width: 981px) {
  .tav-nav { transition: transform 460ms cubic-bezier(.2, .75, .2, 1), background 360ms ease, box-shadow 360ms ease; will-change: transform; }
  .tav-nav.is-away { transform: translateY(-104%); box-shadow: none; }
  .tav-nav.is-scrolled { background: linear-gradient(180deg, rgba(255,255,255,.06), rgba(255,255,255,.015)), rgba(8, 10, 15, .82); }
}

/* «THE ARTIFICIAL VISION» bajo el logo de la entrada: mayúsculas con glitch sutil al entrar y al salir */
.tav-chat__tagline {
  position: fixed;
  z-index: 1001;
  margin: 0;
  pointer-events: none;
  text-align: center;
  white-space: nowrap;
  text-transform: uppercase;
  font-weight: 500;
  letter-spacing: 0.42em;
  text-indent: 0.42em;
  line-height: 1;
  color: rgba(236, 239, 245, 0.92);
  opacity: 0;
  will-change: opacity, transform;
}
.tav-chat__tagline.is-in { animation: tcTagIn 1000ms linear forwards; }
.tav-chat__tagline.is-in.is-out { animation: tcTagOut 900ms linear forwards; }

@keyframes tcTagIn {
  0%   { opacity: 0; transform: translate3d(-3px, 0, 0); clip-path: inset(0 0 55% 0); text-shadow: 2px 0 rgba(134,215,232,.55), -2px 0 rgba(227,166,196,.45); }
  10%  { opacity: .85; transform: translate3d(3px, 0, 0); clip-path: inset(38% 0 0 0); }
  20%  { opacity: .25; transform: translate3d(-2px, 0, 0); clip-path: inset(0); }
  30%  { opacity: 1; transform: translate3d(1px, 0, 0); text-shadow: 1.5px 0 rgba(134,215,232,.5), -1.5px 0 rgba(227,166,196,.4); }
  42%  { opacity: .7; transform: translate3d(2px, 0, 0); clip-path: inset(0 0 48% 0); }
  54%  { opacity: 1; transform: none; clip-path: inset(0); text-shadow: 1px 0 rgba(134,215,232,.35), -1px 0 rgba(227,166,196,.25); }
  100% { opacity: 1; transform: none; clip-path: inset(0); text-shadow: 0 0 14px rgba(134, 215, 232, .22); }
}
@keyframes tcTagOut {
  0%   { opacity: 1; transform: none; clip-path: inset(0); text-shadow: 0 0 14px rgba(134,215,232,.22); }
  14%  { opacity: .65; transform: translate3d(2px, 0, 0); clip-path: inset(0 0 52% 0); text-shadow: 2px 0 rgba(134,215,232,.55), -2px 0 rgba(227,166,196,.45); }
  26%  { opacity: 1; transform: translate3d(-3px, 0, 0); clip-path: inset(42% 0 0 0); }
  40%  { opacity: .55; transform: translate3d(2px, 0, 0); clip-path: inset(0); }
  100% { opacity: 0; transform: translate3d(0, -4px, 0); filter: blur(6px); clip-path: inset(0); text-shadow: none; }
}
@media (prefers-reduced-motion: reduce) {
  .tav-chat__tagline.is-in { animation: tcTagFade 500ms ease forwards; }
  .tav-chat__tagline.is-in.is-out { animation: tcTagFadeOut 600ms ease forwards; }
  @keyframes tcTagFade { to { opacity: 1; } }
  @keyframes tcTagFadeOut { from { opacity: 1; } to { opacity: 0; } }
}

/* ==========================================================================
   Luz ultravioleta de Vix: lo importante fluoresce cerca del haz
   (--uv va de 0 a 1 según lo cerca que está del centro de la luz; lo pone el JS)
   ========================================================================== */

.tav-uv--txt {
  text-shadow: 0 0 calc(var(--uv, 0) * 7px) rgba(170, 125, 255, calc(var(--uv, 0) * 0.38));
}

/* Botones: el borde y el halo los pinta su propio estilo con --uv (space-bg.css); aquí solo el texto.
   Sin filter ni outline: romperían el cristal (backdrop-filter) y dibujarían bordes raros. */
.tav-uv--cta {
  text-shadow: 0 0 calc(var(--uv, 0) * 6px) rgba(176, 130, 255, calc(var(--uv, 0) * 0.4));
}

.tav-uv--line {
  outline: 1px solid rgba(175, 135, 255, calc(var(--uv, 0) * 0.28));
  outline-offset: -1px;
}

.tav-uv--svg {
  filter: drop-shadow(0 0 calc(var(--uv, 0) * 3px) rgba(180, 135, 255, calc(var(--uv, 0) * 0.45)));
}
