/* ===================================================================
   ANIMATIONS — lenguaje de motion coherente
   =================================================================== */

.reveal {
  opacity: 0;
  transform: translateY(28px);
  filter: blur(6px);
  transition: opacity var(--dur-slow) var(--ease-out-expo),
              transform var(--dur-slow) var(--ease-out-expo),
              filter var(--dur-slow) var(--ease-out-expo);
}
.reveal.is-in { opacity: 1; transform: translateY(0); filter: blur(0); }

.reveal--mask {
  overflow: hidden;
}
.reveal--mask > * {
  display: block;
  transform: translateY(100%);
  transition: transform var(--dur-slow) var(--ease-out-expo);
}
.reveal--mask.is-in > * { transform: translateY(0); }

.reveal--scale {
  opacity: 0;
  transform: scale(0.92);
  filter: blur(4px);
  transition: opacity var(--dur-scene) var(--ease-out-expo), transform var(--dur-scene) var(--ease-out-expo), filter var(--dur-scene);
}
.reveal--scale.is-in { opacity: 1; transform: scale(1); filter: blur(0); }

/* stagger helpers vía nth-child dentro de un .reveal-group */
.reveal-group > * { transition-delay: calc(var(--i, 0) * 70ms); }

.badge {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  font-family: var(--font-mono);
  font-size: var(--fs-micro);
  letter-spacing: var(--tracking-wide);
  text-transform: uppercase;
  color: var(--bone);
  background: color-mix(in srgb, var(--ink) 55%, transparent);
  backdrop-filter: blur(8px);
  padding: var(--space-2) var(--space-3);
  border-radius: var(--radius-pill);
  border: 1px solid var(--line-strong);
}

.marker {
  position: relative;
  display: inline-block;
}
.marker::before {
  content: '';
  position: absolute;
  left: -1em;
  top: 50%;
  width: 6px; height: 6px;
  transform: translateY(-50%);
  border-radius: 50%;
  background: var(--accent);
}

/* Transición de tema entre secciones ink/bone: el body ya interpola color-bg
   vía tokens; aquí solo controlamos que el cambio se sienta como "escena". */
.section--theme { transition: background-color var(--dur-scene) var(--ease-smooth); }

@media (prefers-reduced-motion: reduce) {
  .reveal, .reveal--mask > *, .reveal--scale { opacity: 1 !important; transform: none !important; filter: none !important; }
}
