/* Reveal utility — initial state (motion-safe only; content always readable without JS/animation) */
@media (prefers-reduced-motion: no-preference) {
  .reveal,
  .reveal-stagger > * {
    opacity: 0;
    transform: translateY(24px);
    transition: opacity var(--dur-slow) var(--ease-out), transform var(--dur-slow) var(--ease-out);
    will-change: opacity, transform;
  }

  .reveal-left  { transform: translateX(-32px); }
  .reveal-right { transform: translateX(32px); }

  .reveal-scale { transform: scale(0.94); }
}

.reveal.is-visible,
.reveal-stagger.is-visible > * {
  opacity: 1;
  transform: none;
}
.reveal-stagger.is-visible > *:nth-child(1) { transition-delay: 0ms; }
.reveal-stagger.is-visible > *:nth-child(2) { transition-delay: 80ms; }
.reveal-stagger.is-visible > *:nth-child(3) { transition-delay: 160ms; }
.reveal-stagger.is-visible > *:nth-child(4) { transition-delay: 240ms; }
.reveal-stagger.is-visible > *:nth-child(5) { transition-delay: 320ms; }
.reveal-stagger.is-visible > *:nth-child(6) { transition-delay: 400ms; }

/* Word-by-word reveal for quotes/paragraphs */
.reveal-words .reveal-word {
  display: inline-block;
  opacity: 0;
  transform: translateY(20px);
  filter: blur(4px);
  transition: opacity 600ms var(--ease-out), transform 600ms var(--ease-out), filter 600ms var(--ease-out);
}
.reveal-words.is-visible .reveal-word {
  opacity: 1;
  transform: translateY(0);
  filter: blur(0);
}
/* Typewriter text span */
.tw-text {
  display: inline;
}
/* Gold→Schwarz: frisch getipptes Zeichen golden, fadet dann zu schwarz */
.tw-text span { transition: color 600ms var(--ease-out); }
.tw-text span.tw-hot { color: var(--accent); }
[data-tw-hot] { cursor: default; }
.tw-caret {
  display: inline-block;
  width: 0.08em;
  height: 0.9em;
  background: var(--accent-cyan);
  margin-left: 0.06em;
  vertical-align: -0.06em;
  border-radius: 1px;
  animation: tw-blink 1s steps(2) infinite;
}
.tw-caret-fade {
  opacity: 0;
  transition: opacity 400ms var(--ease-out);
  animation: none;
}
@keyframes tw-blink {
  to { opacity: 0; }
}

/* Line-by-line reveal */
.reveal-lines .reveal-line {
  display: block;
  overflow: hidden;
}
.reveal-lines .reveal-line > span {
  display: inline-block;
  transform: translateY(110%);
  transition: transform 700ms var(--ease-out);
}
.reveal-lines.is-visible .reveal-line > span { transform: translateY(0); }
.reveal-lines.is-visible .reveal-line:nth-child(2) > span { transition-delay: 100ms; }
.reveal-lines.is-visible .reveal-line:nth-child(3) > span { transition-delay: 200ms; }
.reveal-lines.is-visible .reveal-line:nth-child(4) > span { transition-delay: 300ms; }

@keyframes float-y {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-10px); }
}
.float-y { animation: float-y 6s var(--ease-in-out) infinite; }

@keyframes shimmer {
  0%   { background-position: -200% 0; }
  100% { background-position: 200% 0; }
}
.shimmer {
  background: linear-gradient(90deg, transparent, rgba(11,16,32,0.06), transparent);
  background-size: 200% 100%;
  animation: shimmer 2.4s linear infinite;
}

/* Scramble char util */
.scramble-char { display: inline-block; }

/* Scroll progress bar */
.scroll-progress {
  position: fixed;
  top: 0; left: 0;
  height: 2px;
  width: 0%;
  background: var(--grad-primary);
  z-index: calc(var(--z-nav) + 1);
  transition: width 80ms linear;
}

.magnetic { display: inline-flex; will-change: transform; }

@media (prefers-reduced-motion: reduce) {
  .reveal, .reveal-stagger > * { opacity: 1; transform: none; transition: none; }
  .reveal-words .reveal-word { opacity: 1; transform: none; filter: none; }
  .reveal-lines .reveal-line > span { transform: none; }
  .float-y, .shimmer { animation: none; }
}
