/*
 * site_nav_tree.css — mapa horizontal v2 (solo index).
 * Dirección visual: atlas orgánico de seda (tierra → oro capilar).
 * Layout: panel dentro de .container; overflow-x: clip en scroll.
 */

.home-trust {
  overflow-anchor: none;
}

/* ——— Sección ——————————————————————————————————————————————————————————— */

.home-site-nav-tree {
  margin-top: 2rem;
  margin-bottom: 2.5rem;
  overflow-anchor: none;
  position: relative;
  z-index: 1;
}

/* ——— Panel (cartografía sobre lino cálido) ——————————————————————————— */

.home-site-nav-tree__panel {
  position: relative;
  isolation: isolate;
  padding: 1.85rem 1.35rem 1.65rem;
  border-radius: calc(var(--sd-radius) + 4px);
  border: 1px solid hsl(var(--sd-accent) / 0.22);
  overflow: hidden;
  max-width: 100%;
  min-width: 0;
  background:
    radial-gradient(ellipse 90% 70% at 100% 0%, hsl(var(--sd-accent) / 0.16), transparent 58%),
    radial-gradient(ellipse 55% 80% at 0% 100%, hsl(var(--sd-primary) / 0.07), transparent 62%),
    linear-gradient(155deg, hsl(var(--sd-surface)) 0%, hsl(var(--sd-backdrop)) 48%, hsl(var(--sd-accent) / 0.08) 100%);
  box-shadow:
    inset 0 1px 0 hsl(var(--sd-surface) / 0.85),
    0 18px 42px hsl(var(--sd-primary) / 0.07),
    0 4px 14px hsl(var(--sd-primary) / 0.04);
}

.home-site-nav-tree__panel::before {
  content: "";
  position: absolute;
  inset: 0;
  opacity: 0.35;
  pointer-events: none;
  z-index: 0;
  background-image:
    repeating-linear-gradient(
      -12deg,
      transparent,
      transparent 11px,
      hsl(var(--sd-primary) / 0.018) 11px,
      hsl(var(--sd-primary) / 0.018) 12px
    );
}

.home-site-nav-tree__panel::after {
  content: "";
  position: absolute;
  top: 0;
  left: 8%;
  right: 8%;
  height: 2px;
  border-radius: 999px;
  pointer-events: none;
  z-index: 0;
  background: linear-gradient(
    90deg,
    transparent,
    hsl(var(--sd-accent) / 0.65) 22%,
    hsl(var(--sd-accent)) 50%,
    hsl(var(--sd-accent) / 0.65) 78%,
    transparent
  );
}

/* ——— Encabezado editorial —————————————————————————————————————————————— */

.home-site-nav-tree__header {
  position: relative;
  z-index: 2;
}

.home-site-nav-tree__eyebrow {
  margin: 0;
  font-family: var(--sd-font-body), sans-serif;
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: hsl(var(--sd-accent-deep));
}

.home-site-nav-tree__title {
  font-family: var(--sd-font-display), serif;
  font-size: clamp(1.55rem, 3vw, 2.15rem);
  font-weight: 600;
  letter-spacing: -0.02em;
  color: hsl(var(--sd-text-primary));
}

.home-site-nav-tree__lead {
  max-width: 34ch;
  margin-inline: auto;
  font-size: 0.92rem;
  line-height: 1.55;
}

/* ——— Stage ——————————————————————————————————————————————————————————————— */

.site-nav-tree__scroll {
  position: relative;
  z-index: 2;
  overflow-x: clip;
  overflow-y: visible;
  width: 100%;
  max-width: 100%;
  min-width: 0;
  padding-inline: 0.15rem;
}

/*
 * aspect-ratio fijo → el mapeo viewBox 100×100 → stage es constante a cualquier
 * ancho, por lo que las curvas escalan de forma uniforme (sin deformarse al
 * redimensionar). El breakpoint desktop usa una relación más ancha.
 */
.site-nav-tree__stage--horizontal {
  position: relative;
  width: 100%;
  min-width: 0;
  max-width: 56rem;
  aspect-ratio: 16 / 9;
  min-height: 12.5rem;
  margin: 0 auto;
  overflow: hidden;
  border-radius: calc(var(--sd-radius) - 2px);
  border: 1px solid hsl(var(--sd-primary) / 0.09);
  background:
    radial-gradient(ellipse 68% 95% at 14% 52%, hsl(var(--sd-primary) / 0.09), transparent 72%),
    radial-gradient(ellipse 42% 60% at 88% 28%, hsl(var(--sd-accent) / 0.12), transparent 70%),
    linear-gradient(180deg, hsl(var(--sd-surface) / 0.92), hsl(var(--sd-backdrop) / 0.75));
  box-shadow:
    inset 0 1px 0 hsl(var(--sd-surface)),
    inset 0 -16px 28px hsl(var(--sd-primary) / 0.04);
}

.site-nav-tree__stage--horizontal::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 0;
  background:
    radial-gradient(circle at 50% 120%, hsl(var(--sd-primary) / 0.06), transparent 55%),
    linear-gradient(90deg, hsl(var(--sd-primary) / 0.03) 1px, transparent 1px),
    linear-gradient(hsl(var(--sd-primary) / 0.025) 1px, transparent 1px);
  background-size: auto, 2.75rem 2.75rem, 2.75rem 2.75rem;
  mask-image: radial-gradient(ellipse 88% 88% at 50% 50%, #000 35%, transparent 100%);
}

/* ——— SVG ——————————————————————————————————————————————————————————————— */

.site-nav-tree__svg {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
  z-index: 1;
}

/* ——— Strokes ——————————————————————————————————————————————————————————— */

.site-nav-tree__stroke {
  fill: none;
  stroke-width: 2;
  stroke-linecap: round;
  stroke-linejoin: round;
  vector-effect: non-scaling-stroke;
  opacity: 1;
}

.site-nav-tree__stroke--trunk {
  stroke: url(#snt-trunk-grad) hsl(var(--sd-primary));
  stroke-width: 3.2;
  opacity: 1;
}

.site-nav-tree__stroke--branch {
  stroke: url(#snt-branch-grad) hsl(var(--sd-accent));
  stroke-width: 1.75;
  opacity: 1;
}
/* Glow solo cuando la rama termino de dibujarse (evita jank durante el dash). */
.site-nav-tree__stroke--branch.site-nav-tree__stroke--settled,
.site-nav-tree--played .site-nav-tree__stroke--branch {
  filter: url(#snt-branch-glow);
}

.site-nav-tree--ready:not(.site-nav-tree--played) .site-nav-tree__stroke {
  opacity: 1;
}
.site-nav-tree--ready:not(.site-nav-tree--played) .site-nav-tree__svg {
  shape-rendering: geometricPrecision;
}

.site-nav-tree--ready:not(.site-nav-tree--played) .site-nav-tree__node-dot,
.site-nav-tree--ready:not(.site-nav-tree--played) .site-nav-tree__node-label,
.site-nav-tree--ready:not(.site-nav-tree--played) .site-nav-tree__root-label {
  will-change: transform, opacity;
}

.site-nav-tree--played .site-nav-tree__stroke {
  stroke-dasharray: none;
  stroke-dashoffset: 0;
}

/* ——— Raíz — badge de seda ——————————————————————————————————————————————— */

.site-nav-tree__root-label {
  position: absolute;
  left: 5.5%;
  top: 50%;
  z-index: 4;
  display: inline-flex;
  align-items: center;
  gap: 0.42rem;
  margin: 0;
  padding: 0.42rem 0.62rem 0.42rem 0.48rem;
  transform: translate(-12%, -50%);
  border-radius: 999px;
  border: 1px solid hsl(var(--sd-primary) / 0.2);
  background:
    linear-gradient(145deg, hsl(var(--sd-surface)), hsl(var(--sd-backdrop)));
  box-shadow:
    0 1px 0 hsl(var(--sd-surface) / 0.9) inset,
    0 8px 22px hsl(var(--sd-primary) / 0.12);
  pointer-events: none;
}

.site-nav-tree__root-glyph {
  width: 0.55rem;
  height: 0.55rem;
  border-radius: 50%;
  flex-shrink: 0;
  background: radial-gradient(circle at 32% 28%, hsl(var(--sd-accent)), hsl(var(--sd-accent-deep)));
  box-shadow: 0 0 0 2px hsl(var(--sd-surface)), 0 0 10px hsl(var(--sd-accent) / 0.45);
}

.site-nav-tree__root-text {
  font-family: var(--sd-font-display), serif;
  font-weight: 700;
  font-size: clamp(0.78rem, 2vw, 0.95rem);
  line-height: 1.1;
  letter-spacing: 0.01em;
  color: hsl(var(--sd-primary));
  white-space: nowrap;
}

/* ——— Estado inicial (GSAP) ——————————————————————————————————————————————— */

.site-nav-tree--ready:not(.site-nav-tree--played) .site-nav-tree__node-dot {
  opacity: 0;
  transform: scale(0);
}

.site-nav-tree--ready:not(.site-nav-tree--played) .site-nav-tree__node-label {
  opacity: 0;
}

.site-nav-tree--ready:not(.site-nav-tree--played) .site-nav-tree__root-label {
  opacity: 0;
}

/* ——— Nav / nodos ——————————————————————————————————————————————————————— */

.site-nav-tree__nav {
  position: absolute;
  inset: 0;
  z-index: 5;
  display: block;
  margin: 0;
  padding: 0;
}

.site-nav-tree__node {
  position: absolute;
  margin: 0;
  --site-nav-tree-dot-radius: 0.5rem;
  transform: translate(-50%, calc(-1 * var(--site-nav-tree-dot-radius)));
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  gap: 0.38rem;
  text-decoration: none;
  color: hsl(var(--sd-text-primary));
  max-width: 7.25rem;
  text-align: center;
  pointer-events: auto;
}

/*
 * Nodos al borde: el dot sigue centrado sobre la punta de la rama
 * (translate -50%); solo el label se corre hacia adentro (via `left`, sin
 * tocar transform → no choca con GSAP) para no cortarse en pantallas chicas.
 */
.site-nav-tree__node[data-anchor-align="end"] {
  --snt-label-shift: -1.4rem;
}

.site-nav-tree__node[data-anchor-align="start"] {
  --snt-label-shift: 1.4rem;
}

/* ——— Dot perla ————————————————————————————————————————————————————————— */

/* Latido idle GPU-friendly: anillo en ::before, anima transform/opacity. */
@keyframes snt-ring-pulse {
  0% {
    opacity: 0.5;
    transform: translate(-50%, -50%) scale(0.75);
  }
  70%,
  100% {
    opacity: 0;
    transform: translate(-50%, -50%) scale(1.8);
  }
}

/* Ping de entrada: anillo de un solo disparo cuando el nodo rebota. */
@keyframes snt-ring-ping {
  0% {
    opacity: 0.72;
    transform: translate(-50%, -50%) scale(0.65);
  }
  100% {
    opacity: 0;
    transform: translate(-50%, -50%) scale(2.1);
  }
}

/* Disparo unico al rebote de entrada (GSAP agrega .is-popping) */
.site-nav-tree__node-dot.is-popping::before {
  animation: snt-ring-ping 0.55s cubic-bezier(0.16, 1, 0.3, 1) forwards;
  opacity: 1;
}
.site-nav-tree__node-dot {
  position: relative;
  width: 1.05rem;
  height: 1.05rem;
  border-radius: 50%;
  background: radial-gradient(circle at 32% 30%, hsl(var(--sd-accent)), hsl(var(--sd-accent-deep)));
  border: 2px solid hsl(var(--sd-surface));
  box-shadow:
    0 0 0 1px hsl(var(--sd-primary) / 0.18),
    0 3px 10px hsl(var(--sd-primary) / 0.14);
  transition:
    transform 0.25s cubic-bezier(0.34, 1.56, 0.64, 1),
    box-shadow 0.25s ease;
}

/* Halo del latido / hover (detrás del dot, se expande hacia afuera) */
.site-nav-tree__node-dot::before {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  width: 100%;
  height: 100%;
  z-index: -1;
  border-radius: 50%;
  opacity: 0;
  transform: translate(-50%, -50%) scale(0.75);
  background: radial-gradient(circle, hsl(var(--sd-accent) / 0.6), transparent 68%);
  pointer-events: none;
}

/* Brillo "perla" retirado: el dot editorial es plano (sin skeuomorfismo). */
.site-nav-tree__node-dot::after {
  content: none;
}

.site-nav-tree--played .site-nav-tree__node-dot::before {
  animation: snt-ring-pulse 3.6s ease-out infinite;
  animation-delay: var(--snt-pulse-delay, 0s);
}

.site-nav-tree__node:hover .site-nav-tree__node-dot,
.site-nav-tree__node:focus-visible .site-nav-tree__node-dot {
  transform: scale(1.2);
  box-shadow:
    0 0 0 2px hsl(var(--sd-surface)),
    0 0 0 5px hsl(var(--sd-accent) / 0.48),
    0 6px 18px hsl(var(--sd-accent) / 0.38),
    0 0 24px hsl(var(--sd-accent) / 0.14);
}

/* Hover: el anillo se queda fijo y visible (sin animar en loop) */
.site-nav-tree__node:hover .site-nav-tree__node-dot::before,
.site-nav-tree__node:focus-visible .site-nav-tree__node-dot::before {
  animation: none;
  opacity: 0.7;
  transform: translate(-50%, -50%) scale(1.5);
  transition: opacity 0.25s ease, transform 0.25s ease;
}

.site-nav-tree__node:focus-visible .site-nav-tree__node-dot {
  outline: 2px solid hsl(var(--sd-primary));
  outline-offset: 3px;
}

/* ——— Labels ———————————————————————————————————————————————————————————— */

.site-nav-tree__node-label {
  position: relative;
  left: var(--snt-label-shift, 0);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0.32rem 0.8rem;
  border-radius: 999px;
  background: hsl(var(--sd-surface));
  font-family: var(--sd-font-body), sans-serif;
  font-size: clamp(0.62rem, 2.4vw, 0.68rem);
  font-weight: 600;
  letter-spacing: 0.07em;
  text-transform: uppercase;
  color: hsl(var(--sd-text-primary));
  border: 1px solid hsl(var(--sd-primary) / 0.14);
  box-shadow: 0 2px 8px hsl(var(--sd-primary) / 0.06);
  transition:
    box-shadow 0.25s ease,
    border-color 0.25s ease,
    transform 0.22s cubic-bezier(0.34, 1.56, 0.64, 1),
    color 0.22s ease;
}

.site-nav-tree__node:hover .site-nav-tree__node-label,
.site-nav-tree__node:focus-visible .site-nav-tree__node-label {
  color: hsl(var(--sd-primary-hover));
  border-color: hsl(var(--sd-accent) / 0.5);
  box-shadow:
    0 1px 0 hsl(var(--sd-surface) / 0.95) inset,
    var(--sd-shadow-md);
  transform: translateY(-3px) scale(1.03);
}

/* ——— Responsive ———————————————————————————————————————————————————————— */

@media (max-width: 767px) {
  .site-nav-tree__node {
    max-width: 5.75rem;
    gap: 0.3rem;
  }

  .site-nav-tree__node-label {
    padding: 0.26rem 0.55rem;
    font-size: clamp(0.66rem, 2.7vw, 0.76rem);
  }
}

@media (min-width: 768px) {
  .home-site-nav-tree__panel {
    padding: 2.1rem 1.85rem 1.85rem;
  }

  .site-nav-tree__stage--horizontal {
    aspect-ratio: 3 / 1;
  }

  .site-nav-tree__node-label {
    font-size: 0.72rem;
  }
}

/* ——— Reduced motion ———————————————————————————————————————————————————— */

@media (prefers-reduced-motion: reduce) {
  .site-nav-tree__node-dot {
    animation: none !important;
    opacity: 1 !important;
    transform: none !important;
  }

  .site-nav-tree__node-dot::before {
    animation: none !important;
    opacity: 0 !important;
  }

  .site-nav-tree__node-label,
  .site-nav-tree__root-label {
    opacity: 1 !important;
    transform: none !important;
  }
}
