feat(tema): tema geçişi logodan yumuşak, tüylü kenarlı halka olarak açılır; logo bir etap oynar

Piksel ızgarası sert bulundu (Bilal, 9 Eki 2026). Yeni tema radyal degrade
maskesiyle açılır: yarıçapın %55'i opak, kalanı tüy; 1100 ms yumuşak eğri.
Geçiş başlarken header'daki logonun kareleri bir etap yürüyüp yerine oturur
(kt-tema-gecis olayı). Tuval/maske karesi kodu kaldırıldı. DESIGN §2.3 güncel.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
bilalgursen
2026-10-09 00:25:38 +03:00
parent 83dca068f8
commit 6022319174
7 changed files with 76 additions and 159 deletions

View File

@@ -478,20 +478,21 @@
}
/* Tema geçişi (DESIGN.md §2.3, lib/tema-gecisi.ts): yeni tema header'daki
logodan başlar ve ekrana piksel piksel yayılır — sitenin piksel imzasının
hareketli hâli. Eski görüntü yerinde durur; yeni görüntü, JS'in kare kare
bastığı kare ızgarası maskesiyle (--kt-tema-maske, küçük bir tuvalden
üretilir; --kt-tema-en/boy ızgaranın ekrandaki ölçüsü) üstünde açılır.
`pixelated`: küçük maske büyütülürken kareler bulanmaz, keskin kalır.
Sürenin tek kaynağı --kt-tema-sure (JS buradan okur). kt-tema-omur değeri
değişmeyen ama gerçek bir animasyondur: view transition, üzerindeki
animasyon bitene kadar kalkmaz; maskeyi JS sürerken ömrü bu tutar.
logodan yumuşak bir halka gibi açılır. Eski görüntü yerinde durur; yeni
görüntü radyal degrade maskesiyle üstünde belirir. Maskenin kenarı keskin
değil: yarıçapın %55'ine kadar tam opak, oradan kenara doğru tüy gibi
söner (--kt-tema-cekirdek; JS'teki CEKIRDEK ile aynı olmalı) — ışık
yayılır gibi, sert çizgi yok. Yarıçap (--kt-tema-r) 0 → --kt-tema-son
yumuşak kalkıp yumuşak durur. Merkez ve son yarıçap JS'ten gelir.
Hareket azaltılmışsa JS geçişi hiç başlatmaz, tema düz değişir. */
:root {
--kt-tema-sure: 900ms;
@property --kt-tema-r {
syntax: "<length>";
inherits: true;
initial-value: 0px;
}
.kt-tema-gecis {
view-transition-name: root;
--kt-tema-cekirdek: 0.55;
}
.kt-tema-gecis::view-transition-old(root),
.kt-tema-gecis::view-transition-new(root) {
@@ -503,18 +504,18 @@
}
.kt-tema-gecis::view-transition-new(root) {
z-index: 2;
mask-image: var(--kt-tema-maske);
mask-repeat: no-repeat;
mask-position: 0 0;
mask-size: var(--kt-tema-en) var(--kt-tema-boy);
image-rendering: pixelated;
animation: kt-tema-omur calc(var(--kt-tema-sure) + 80ms) linear both;
mask-image: radial-gradient(
circle at var(--kt-tema-x) var(--kt-tema-y),
#000 calc(var(--kt-tema-r) * var(--kt-tema-cekirdek)),
transparent var(--kt-tema-r)
);
animation: kt-tema-halka 1100ms cubic-bezier(0.45, 0, 0.2, 1) both;
}
@keyframes kt-tema-omur {
@keyframes kt-tema-halka {
from {
opacity: 1;
--kt-tema-r: 0px;
}
to {
opacity: 1;
--kt-tema-r: var(--kt-tema-son);
}
}