/* ============================================================================
   T-spektral-insa · yildiz-zemin.css
   HAREKETLİ YILDIZ ALANI — tüm sayfanın ardında, siyah zeminin üstünde.

   ── PERF SÖZLEŞMESİ (bu dosyanın var oluş kuralı) ──────────────────────────
   atmosfer.css'te belgelenmiş bir olay var: tam ekran animasyonlu `blur(48px)` +
   `mix-blend-mode:screen` katmanları Safari'de compositor thread'ini doldurdu,
   input hit-testing orada yapıldığı için nav tıkları gecikip DÜŞTÜ. O iki katman
   (`.spektrum-zemin::before/::after`) bu yüzden `display:none !important`.

   Bu dosya aynı hatayı YAPMAZ. Katı kurallar:
     1) filter/blur YOK.
     2) mix-blend-mode YOK.
     3) Her karede çalışan JS YOK — sıfır main-thread maliyeti.
     4) Tek animasyonlu özellik `transform: translate3d` → compositor'da çalışır,
        layout/paint tetiklemez. GSAP reveal'lerini ve deck geçişini bu yüzden
        etkileyemez: aynı thread'de bile değil.
     5) `will-change` YOK — animasyon zaten katmanı promote ediyor; reduced-motion'da
        animasyon durunca katman da promote kalmasın (boşuna GPU belleği).
     6) Yıldızlar TEK bir SVG döşemesi (data URI). Onlarca ayrı radial-gradient
        katmanı yerine tek doku → tek seferlik raster, ucuz.

   ── KESİNTİSİZ DÖNGÜ NASIL ÇALIŞIYOR ───────────────────────────────────────
   Doku `background-repeat: repeat` ile döşenir; katman TAM BİR DÖŞEME boyu
   aşağı kaydırılır. Bir döşeme sonra görüntü baştakiyle birebir aynıdır → dikiş
   görünmez. Katman bu yüzden viewport'tan bir döşeme boyu UZUN ve bir döşeme
   YUKARIDAN başlar (`top: -tile`), yoksa kayarken üstte boşluk açılırdı.
   Döşeme boyunu değiştirirsen `top` ve `height`'ı da değiştir — üçü bağlı.

   ── KATMAN BÜTÇESİ ─────────────────────────────────────────────────────────
   İki katman: uzak (küçük/soluk/yavaş) + yakın (büyük/parlak/hızlı) = parallax.
   Aşırı çizim yalnız +1 döşeme (%25-40). Dar ekranda yakın katman KAPANIR
   (mobil GPU belleği). Üçüncü bir katman EKLEME.
   ============================================================================ */

:root {
  --yz-uzak-dosem:  260px;
  --yz-yakin-dosem: 380px;
  --yz-uzak-sure:   190s;
  --yz-yakin-sure:  105s;
}

/* Her iki katman da body'nin pseudo-element'i: 18 sayfanın HİÇBİRİNDE markup
   değişikliği gerekmiyor. z-index -2 → .spektrum-zemin'in (-3) siyah tabanının
   ÜSTÜNDE, tüm içeriğin ALTINDA. */
body::before,
body::after {
  content: "";
  position: fixed;
  left: 0;
  right: 0;
  z-index: -2;
  pointer-events: none;
  background-repeat: repeat;
}

/* ── UZAK KATMAN — küçük, soluk, yavaş ───────────────────────────────────── */
body::before {
  top: calc(-1 * var(--yz-uzak-dosem));
  height: calc(100% + var(--yz-uzak-dosem));
  background-image: url("data:image/svg+xml,<svg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22260%22%20height=%22260%22%20viewBox=%220%200%20260%20260%22><circle%20cx=%22164.5%22%20cy=%22129.6%22%20r=%220.52%22%20fill=%22%230affdc%22%20opacity=%220.3%22/><circle%20cx=%22160.8%22%20cy=%22136.1%22%20r=%220.59%22%20fill=%22%23ffffff%22%20opacity=%220.25%22/><circle%20cx=%22253.7%22%20cy=%228.2%22%20r=%220.78%22%20fill=%22%23c0f50b%22%20opacity=%220.43%22/><circle%20cx=%22102.8%22%20cy=%2239.4%22%20r=%220.72%22%20fill=%22%23ffffff%22%20opacity=%220.37%22/><circle%20cx=%22250.8%22%20cy=%22154.6%22%20r=%220.57%22%20fill=%22%23ffffff%22%20opacity=%220.47%22/><circle%20cx=%2233.8%22%20cy=%2221.8%22%20r=%220.59%22%20fill=%22%23ffffff%22%20opacity=%220.22%22/><circle%20cx=%22142.6%22%20cy=%2263.0%22%20r=%220.61%22%20fill=%22%23ffffff%22%20opacity=%220.33%22/><circle%20cx=%22134.1%22%20cy=%22182.9%22%20r=%220.89%22%20fill=%22%23ffffff%22%20opacity=%220.39%22/><circle%20cx=%22162.0%22%20cy=%22217.1%22%20r=%220.68%22%20fill=%22%23ffffff%22%20opacity=%220.33%22/><circle%20cx=%22126.4%22%20cy=%22210.2%22%20r=%220.65%22%20fill=%22%230edfff%22%20opacity=%220.25%22/><circle%20cx=%22251.4%22%20cy=%22183.0%22%20r=%220.66%22%20fill=%22%23ffffff%22%20opacity=%220.29%22/><circle%20cx=%2295.1%22%20cy=%22162.0%22%20r=%220.8%22%20fill=%22%23ffffff%22%20opacity=%220.47%22/><circle%20cx=%22106.6%22%20cy=%2243.9%22%20r=%220.64%22%20fill=%22%23ffffff%22%20opacity=%220.28%22/><circle%20cx=%2256.5%22%20cy=%224.6%22%20r=%220.67%22%20fill=%22%23ffffff%22%20opacity=%220.37%22/><circle%20cx=%2255.8%22%20cy=%2283.3%22%20r=%220.72%22%20fill=%22%23ffffff%22%20opacity=%220.5%22/><circle%20cx=%22111.8%22%20cy=%2253.9%22%20r=%220.75%22%20fill=%22%23ffffff%22%20opacity=%220.27%22/><circle%20cx=%22221.8%22%20cy=%2241.4%22%20r=%220.84%22%20fill=%22%23ffffff%22%20opacity=%220.39%22/><circle%20cx=%2214.8%22%20cy=%22149.0%22%20r=%220.79%22%20fill=%22%23ffffff%22%20opacity=%220.3%22/><circle%20cx=%2295.4%22%20cy=%229.2%22%20r=%220.72%22%20fill=%22%23ffffff%22%20opacity=%220.52%22/><circle%20cx=%22139.2%22%20cy=%22132.9%22%20r=%220.74%22%20fill=%22%23ffffff%22%20opacity=%220.54%22/><circle%20cx=%22167.9%22%20cy=%22237.9%22%20r=%220.92%22%20fill=%22%23ffffff%22%20opacity=%220.38%22/><circle%20cx=%2242.9%22%20cy=%22134.5%22%20r=%220.87%22%20fill=%22%23a36afe%22%20opacity=%220.42%22/><circle%20cx=%2244.3%22%20cy=%2247.2%22%20r=%220.49%22%20fill=%22%23ffffff%22%20opacity=%220.34%22/><circle%20cx=%2258.8%22%20cy=%2296.9%22%20r=%220.54%22%20fill=%22%23ffffff%22%20opacity=%220.44%22/><circle%20cx=%2288.2%22%20cy=%22222.2%22%20r=%220.48%22%20fill=%22%230affdc%22%20opacity=%220.5%22/><circle%20cx=%22182.3%22%20cy=%2255.3%22%20r=%220.64%22%20fill=%22%23ffffff%22%20opacity=%220.23%22/><circle%20cx=%2282.9%22%20cy=%22230.2%22%20r=%220.59%22%20fill=%22%23ffffff%22%20opacity=%220.47%22/><circle%20cx=%2264.0%22%20cy=%2213.3%22%20r=%220.75%22%20fill=%22%23ffffff%22%20opacity=%220.2%22/><circle%20cx=%22240.0%22%20cy=%2284.5%22%20r=%220.84%22%20fill=%22%23ffffff%22%20opacity=%220.27%22/><circle%20cx=%226.2%22%20cy=%2286.4%22%20r=%220.65%22%20fill=%22%230affdc%22%20opacity=%220.39%22/></svg>");
  background-size: var(--yz-uzak-dosem) var(--yz-uzak-dosem);
}

/* ── YAKIN KATMAN — büyük, parlak, hızlı (parallax hissi buradan) ─────────── */
body::after {
  top: calc(-1 * var(--yz-yakin-dosem));
  height: calc(100% + var(--yz-yakin-dosem));
  background-image: url("data:image/svg+xml,<svg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22380%22%20height=%22380%22%20viewBox=%220%200%20380%20380%22><circle%20cx=%2216.9%22%20cy=%22161.7%22%20r=%221.64%22%20fill=%22%23ffffff%22%20opacity=%220.87%22/><circle%20cx=%22164.3%22%20cy=%2269.7%22%20r=%221.15%22%20fill=%22%23ffffff%22%20opacity=%220.76%22/><circle%20cx=%2222.2%22%20cy=%22154.0%22%20r=%221.03%22%20fill=%22%23ffffff%22%20opacity=%220.76%22/><circle%20cx=%22315.4%22%20cy=%2276.6%22%20r=%221.22%22%20fill=%22%23ffffff%22%20opacity=%220.62%22/><circle%20cx=%22244.7%22%20cy=%22317.1%22%20r=%221.18%22%20fill=%22%23ffffff%22%20opacity=%220.81%22/><circle%20cx=%22261.9%22%20cy=%22188.7%22%20r=%221.47%22%20fill=%22%23ffffff%22%20opacity=%220.7%22/><circle%20cx=%22282.0%22%20cy=%22244.9%22%20r=%221.01%22%20fill=%22%23ffffff%22%20opacity=%220.66%22/><circle%20cx=%22164.9%22%20cy=%22111.7%22%20r=%221.3%22%20fill=%22%230edfff%22%20opacity=%220.73%22/><circle%20cx=%2280.0%22%20cy=%22242.7%22%20r=%221.35%22%20fill=%22%23ffffff%22%20opacity=%220.5%22/><circle%20cx=%2222.4%22%20cy=%2267.6%22%20r=%221.59%22%20fill=%22%23ffffff%22%20opacity=%220.72%22/><circle%20cx=%22351.6%22%20cy=%22204.6%22%20r=%221.17%22%20fill=%22%23ffffff%22%20opacity=%220.92%22/><circle%20cx=%22199.1%22%20cy=%22336.6%22%20r=%220.99%22%20fill=%22%23fe02c5%22%20opacity=%220.57%22/><circle%20cx=%22192.8%22%20cy=%22215.6%22%20r=%220.86%22%20fill=%22%23ffffff%22%20opacity=%220.83%22/><circle%20cx=%22223.9%22%20cy=%2261.9%22%20r=%221.2%22%20fill=%22%23ffffff%22%20opacity=%220.79%22/><circle%20cx=%22366.9%22%20cy=%22174.7%22%20r=%221.02%22%20fill=%22%23ffffff%22%20opacity=%220.49%22/><circle%20cx=%22260.3%22%20cy=%22299.5%22%20r=%221.1%22%20fill=%22%230edfff%22%20opacity=%220.46%22/></svg>");
  background-size: var(--yz-yakin-dosem) var(--yz-yakin-dosem);
}

/* ── SÜRÜKLENME — tam bir döşeme, doğrusal, kesintisiz ───────────────────── */
@media (prefers-reduced-motion: no-preference) {
  body::before { animation: yz-kay-uzak  var(--yz-uzak-sure)  linear infinite; }
  body::after  { animation: yz-kay-yakin var(--yz-yakin-sure) linear infinite; }
}
/* ⚠ BURADAKİ PİKSEL DEĞERLERİ SABİT — var() KULLANMA. Bazı motorlar keyframe
   hedefi custom property olan transform animasyonlarını compositor'a almayı
   reddediyor (değer her an değişebilir sayılıyor). Sabit değerin hiçbir maliyeti
   yok, bu riski tamamen ortadan kaldırıyor. ÖLÇÜM NOTU: bu farkı headless
   ortamda doğrulayamadım — orada GPU yok, animasyon zaten main thread'de
   koşuyor; sabit değer önlem olarak duruyor, ölçülmüş kazanç iddiası değil.
   Değerler --yz-uzak-dosem / --yz-yakin-dosem ile AYNI OLMAK ZORUNDA (döşeme
   boyu = kayma mesafesi; farklı olursa döngü dikiş verir). Birini değiştirirsen
   üçünü birden değiştir: token, top/height, buradaki keyframe. */
@keyframes yz-kay-uzak {
  from { transform: translate3d(0, 0, 0); }
  to   { transform: translate3d(0, 260px, 0); }   /* = --yz-uzak-dosem */
}
@keyframes yz-kay-yakin {
  from { transform: translate3d(0, 0, 0); }
  to   { transform: translate3d(0, 380px, 0); }   /* = --yz-yakin-dosem */
}

/* ── DAR EKRAN — tek katman ──────────────────────────────────────────────── */
/* Mobil GPU belleği kısıtlı; yakın katman kapanır, uzak katman kalır (yıldızlar
   kaybolmaz, yalnız parallax gider). */
@media (max-width: 700px) {
  body::after { display: none; }
}

/* ── KAPATMA KAPILARI ────────────────────────────────────────────────────── */
/* Veri tasarrufu modunda dekoratif katman hiç kurulmasın. */
@media (prefers-reduced-data: reduce) {
  body::before, body::after { display: none; }
}
@media (forced-colors: active) {
  body::before, body::after { display: none; }
}
@media print {
  body::before, body::after { display: none; }
}


/* ============================================================================
   KAYAN YILDIZLAR — seyrek, anlık (ana sayfa HARİÇ)
   ----------------------------------------------------------------------------
   Yukarıdaki perf sözleşmesine UYAR:
     · filter/blur YOK, mix-blend-mode YOK, JS YOK, will-change YOK.
     · Animasyonlu özellikler yalnız `transform` ve `opacity` → compositor.
     · "Üçüncü katman ekleme" kuralı TAM EKRAN döşeme katmanları içindi; buradaki
       öğeler ~150px'lik minik çizgiler, döşeme değil. Kap saydam ve boş.

   NEDEN JS YOK. Gerçek rastgelelik JS ister ama her yıldız için timer kurmak
   main-thread'e iş bindirir. Bunun yerine beş yıldıza ASAL'a yakın süreler
   verildi (67/83/97/113/131s). Ortak katları çok uzak olduğu için desen
   pratikte kendini tekrar etmiyor; göz düzen yakalayamıyor.

   SIKLIK — iki sayıyla ayarlanır, ikisi BİRBİRİNE BAĞLI:
     · keyframe'deki görünür pencere (şu an %4)
     · yıldız süreleri (31-79sn) ve sayısı (7)
   Ortalama aralık = ortalama süre / yıldız sayısı ≈ 54/7 ≈ 8 saniyede bir kayma.
   Görünür süre = pencere × süre ≈ 2,1 saniye.
   DİKKAT: süreleri kısaltırken pencereyi de büyüt. Pencere sabit kalırsa iz
   aynı yolu (54vmax) daha kısa sürede alır → hızlanıp kısalır, "kayan yıldız"
   değil "çizgi flaşı" gibi görünür. Seyrekleştirmek istersen ters yönde aynı
   oran: süreleri uzat, pencereyi küçült.

   KEYFRAME'DE var() YOK. Yukarıdaki uyarının aynısı: keyframe hedefi custom
   property olursa bazı motorlar animasyonu compositor'a almıyor. Bu yüzden
   dönüş açısı KAPTA (statik transform), hareket ise ::before'da SABİT değerle.
   Çeşitlilik konum/açı/uzunluk/süre ile geliyor, keyframe tek.
   ============================================================================ */

.kayan-yildizlar {
  position: fixed;
  inset: 0;
  z-index: -2;            /* yıldız döşemeleriyle aynı düzlem, içeriğin altında */
  pointer-events: none;
  overflow: hidden;       /* ekran dışına çıkan iz kırpılır, scrollbar açmaz */
}
/* Kap: yalnız konum + açı taşır. Statik transform — animasyon YOK. */
.kayan-yildizlar i {
  position: absolute;
  left: var(--x);
  top: var(--y);
  width: 0;
  height: 0;
  transform: rotate(var(--a));
}
/* İz: baştan sona sönen ince çizgi, ucunda parlak baş. */
.kayan-yildizlar i::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  width: var(--u);
  height: 1.6px;
  border-radius: 999px;
  background: linear-gradient(90deg,
    rgba(255,255,255,0) 0%,
    rgba(255,255,255,.12) 45%,
    rgba(255,255,255,.7) 88%,
    #fff 100%);
  opacity: 0;
}
@media (prefers-reduced-motion: no-preference) {
  .kayan-yildizlar i::before {
    animation: kyz-gec var(--sure) linear var(--gec) infinite;
  }
}
/* Süre boyunca yalnız ilk ~%3'te hareket + görünürlük; gerisi bekleme.
   Mesafe sabit (vmax) — var() kullanılmadı, compositor'da kalsın diye. */
@keyframes kyz-gec {
  0%    { transform: translate3d(0, 0, 0);        opacity: 0; }
  0.4%  { opacity: 0; }
  1.3%  { opacity: 1; }
  3.2%  { opacity: .85; }
  4.0%  { transform: translate3d(54vmax, 0, 0);   opacity: 0; }
  100%  { transform: translate3d(54vmax, 0, 0);   opacity: 0; }
}

/* Dar ekran: üstteki katman bütçesiyle tutarlı — yediden üçe in. */
@media (max-width: 700px) {
  .kayan-yildizlar i:nth-child(n+4) { display: none; }
}
/* Kapatma kapıları — yıldız döşemeleriyle aynı. */
@media (prefers-reduced-data: reduce) { .kayan-yildizlar { display: none; } }
@media (forced-colors: active)        { .kayan-yildizlar { display: none; } }
@media print                          { .kayan-yildizlar { display: none; } }
