/* Keyframes */
@keyframes fadeUp {
  to { opacity: 1; transform: translateY(0); }
}
@keyframes fadeIn {
  to { opacity: 1; }
}
@keyframes scrollPulse {
  0%, 100% { opacity: 0.3; transform: scaleY(0.6); transform-origin: top; }
  50% { opacity: 1; transform: scaleY(1); }
}

/* Scroll Reveal */
.reveal {
  opacity: 0;
  transform: translateY(30px);
  transition: opacity 0.7s ease, transform 0.7s ease;
}

.reveal.visible {
  opacity: 1;
  transform: translateY(0);
}

/* Background Motifs */
.bg-disk {
  position: absolute;
  pointer-events: none;
  z-index: 0;
  opacity: 0.15;
  transition: opacity 0.4s ease;
  color: var(--accent);
}

html.light .bg-disk {
  opacity: 0.20;
  color: var(--accent-dim);
}

.bg-disk svg {
  width: 100%;
  height: 100%;
}

.bg-disk {
  will-change: transform;
}

section > .container,
section > .container--narrow {
  position: relative;
  z-index: 1;
}

/* Ambient Grid */
.ambient-line {
  position: absolute;
  background: var(--border);
  opacity: 0.3;
}

.ambient-line.v {
  width: 1px;
  height: 100%;
  top: 0;
}

.ambient-line.h {
  height: 1px;
  width: 100%;
  left: 0;
}
