/* =========================================================================
   Ruch: preloader, stany zapasowe bez JS, keyframes
   Animacje działają zawsze — bez wyjątków dla prefers-reduced-motion (decyzja Wilka).
   ========================================================================= */

/* --- Preloader (05, punkt 5.3) --- */
/* plansza jest przezroczysta, a biel daje osobna warstwa .preloader__veil: przy zejściu planszy
   rozpływa się tylko ona, a logo w tym czasie leci na swoje miejsce w pasku nawigacji */
.preloader {
  position: fixed;
  inset: 0;
  z-index: 1000;
  display: grid;
  place-items: center;
}
/* w trakcie rozpływania się planszy strona pod nią przyjmuje już kliknięcia */
.preloader.is-docking { pointer-events: none; }
.preloader__veil { position: absolute; inset: 0; background: var(--c-white); will-change: opacity; }
.preloader__inner { position: relative; display: grid; place-items: center; width: 100%; padding: 24px; }
.preloader__logo { width: min(560px, 80vw); height: auto; overflow: visible; }
.preloader.is-docking .preloader__logo { will-change: transform; }
.pl-outline { fill: none; stroke: var(--c-orange); stroke-width: 3.2; stroke-linejoin: round; }
.pl-fill { fill: var(--c-orange); }
.pl-letter, .pl-sub { fill: var(--c-black); }
/* Stan początkowy (zanim GSAP przejmie sterowanie): maski piór puste, litery i podpis ukryte */
html.js .pl-letter, html.js .pl-sub, html.js .pl-pen { opacity: 0; }
/* Cienka pomarańczowa linia u dołu planszy: postęp ładowania; gaśnie, gdy logo rusza do paska nawigacji */
.preloader__bar {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 3px;
  background: var(--c-orange);
  transform-origin: left center;
}

html.is-loading, html.is-loading body { overflow: hidden; }
.no-js .preloader,
.motion-failed .preloader { display: none; }
.motion-failed .pl-letter, .motion-failed .pl-sub { opacity: 1; }

/* Bez JS: widget i elementy zależne od skryptu pokazują się w stanie końcowym */
.no-js .bz__launcher, .motion-failed .bz__launcher { transform: none; }

/* --- Keyframes zapasowe (gdy GSAP nie działa) --- */
@keyframes spin { to { transform: rotate(360deg); } }
@keyframes marquee { to { transform: translateX(-50%); } }
@keyframes typing {
  0%, 60%, 100% { transform: translateY(0); opacity: 0.45; }
  30% { transform: translateY(-4px); opacity: 1; }
}

/* --- Wejście nagłówków liniami (motion/lines.js): kopie nagłówka w okienkach jednej linii.
   Oryginał ma w tym czasie visibility: hidden, nakładka przywraca widoczność kopiom. --- */
.line-reveal { position: absolute; visibility: visible; pointer-events: none; user-select: none; }
.line-reveal__win { position: absolute; overflow: hidden; }
.line-reveal__mover { position: absolute; inset: 0; overflow: hidden; }
.line-reveal__copy { position: absolute; }

