fix(tema): geçişte tek silüet — dolu çizim katmanı kaldırıldı, boşluklar tam ekran solmayla kapanır

"Logo içinde logo" görünmesin (Bilal, 8 Eki 2026): maske artık yalnız
işaretin çizimi + alfası motion ile sürülen tam ekran dolgu. Büyümenin
ikinci yarısında kareler arasında kalan eski görüntü yeni temaya solar.
kolay-tercih-mark-dolu.svg ve --kt-tema-kapanis kaldırıldı; DESIGN §2.3 notu.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
bilalgursen
2026-10-08 23:50:43 +03:00
parent 9f401602a8
commit 4c84a1a974
4 changed files with 32 additions and 103 deletions

View File

@@ -478,22 +478,22 @@
}
/* Tema geçişi (DESIGN.md §2.3, lib/tema-gecisi.ts): tema değişirken yeni
görüntü, KolayTercih işaretinin biçiminde önce ekranın ALTINDAN ortaya
görüntü, KolayTercih işaretinin biçiminde önce ekranın altından ortaya
süzülür, sonra merkezden büyüyerek ekranı kaplar. Eski görüntü yerinde
durur; yeni görüntünün maskesi üç katman (hepsi `add` ile toplanır,
mask-composite varsayılanı add — bu yüzden sıralama yalnızca okunurluk
içindir):
(1) işaretin NORMAL çizimi (kolay-tercih-mark.svg'nin gömülü kopyası — kareler arası boşluk
görünür, logo logonun kendisi gibi durur), merkezi --kt-tema-x/y'de,
boyu --kt-tema-kenar: uçuş ve büyüme boyunca bu görünür;
(2) aynı geometride BOŞLUKLARI DOLU çizim (kolay-tercih-mark-dolu.svg),
boyu --kt-tema-kenar × --kt-tema-kapanis (0 → 1): logo en büyük haline
ulaşmaya yakın dolu çizim merkezden dışa doğru büyür, kareler arası
boşlukları yumuşak biçimde kapatır;
(3) tam ekran dolgu: --kt-tema-dolgu (0 → 1) ile işaret ekranı tam
kapsadıktan sonra dış çentiklerde kalan eski zeminin son anda dolması.
Yuvarlak büyüme yok — logo ekranı kaplayınca geçiş tamamlanır.
Konum, boy ve dolgular motion ile sürülür (lib/tema-gecisi.ts); buradaki
durur; yeni görüntünün maskesi iki katman (mask-composite varsayılanı
add, toplanır):
(1) işaretin çizimi (kolay-tercih-mark.svg'nin gömülü kopyası — üç kare,
aralarındaki boşlukla, logo logonun kendisi gibi durur), merkezi
--kt-tema-x/y'de, boyu --kt-tema-kenar;
(2) tam ekran dolgu, alfası --kt-tema-dolgu (0 → 1): büyümenin ikinci
yarısında kareler arasında ve ekran kenarlarında kalan eski görüntü
yumuşakça yeni temaya solar. İkinci bir şekil yok — "logo içinde logo"
görünmesin (8 Eki 2026, Bilal).
SVG data URI olarak gömülü, dosyadan url() ile DEĞİL: Chrome, view
transition pseudo elemanında dosyadan yüklenen birden çok maske
katmanını tümden şeffaf çiziyordu. Çizim public/kolay-tercih-mark.svg
ile aynı geometridir; o değişirse burası da güncellenir.
Konum, boy ve dolgu motion ile sürülür (lib/tema-gecisi.ts); buradaki
kt-tema-omur yalnızca geçişin pseudo elemanı motion bitene kadar yaşasın
diye durur (süre --kt-tema-sure, JS'den gelir). Hareket azaltılmışsa JS
geçişi hiç başlatmaz, tema düz değişir. */
@@ -502,11 +502,6 @@
inherits: true;
initial-value: 0px;
}
@property --kt-tema-kapanis {
syntax: "<number>";
inherits: true;
initial-value: 0;
}
@property --kt-tema-dolgu {
syntax: "<number>";
inherits: true;
@@ -526,15 +521,7 @@
}
.kt-tema-gecis::view-transition-new(root) {
z-index: 2;
/* İki SVG de data URI olarak gömülü, dosyadan url() ile DEĞİL: Chrome'da
view-transition pseudo elemanı dosyadan yüklenen ikinci bir maske
katmanını (boyu 0'dan büyük olduğu an) tümden şeffaf çiziyor — logo
hiç görünmüyordu (8 Eki 2026 tanısı). Gömülü hâlde iki katman da
doğru birleşiyor. Çizimler public/kolay-tercih-mark.svg ve
public/kolay-tercih-mark-dolu.svg ile aynı geometridir; oradaki dosya
değişirse burası da güncellenir. */
mask-image:
url("data:image/svg+xml,<svg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%20180%20180%22><rect%20x=%2227%22%20y=%2256%22%20width=%2277%22%20height=%2257%22%20rx=%2213%22/><rect%20x=%2291%22%20y=%2229%22%20width=%2256%22%20height=%22122%22%20rx=%2213%22/></svg>"),
url("data:image/svg+xml,<svg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%20180%20180%22><rect%20x=%2227%22%20y=%2256%22%20width=%2257%22%20height=%2257%22%20rx=%2213%22/><rect%20x=%2291%22%20y=%2229%22%20width=%2256%22%20height=%2256%22%20rx=%2213%22/><rect%20x=%2291%22%20y=%2295%22%20width=%2256%22%20height=%2256%22%20rx=%2213%22/></svg>"),
linear-gradient(
rgb(0 0 0 / var(--kt-tema-dolgu)),
@@ -542,13 +529,9 @@
);
mask-repeat: no-repeat;
mask-size:
calc(var(--kt-tema-kenar) * var(--kt-tema-kapanis))
calc(var(--kt-tema-kenar) * var(--kt-tema-kapanis)),
var(--kt-tema-kenar) var(--kt-tema-kenar),
100% 100%;
mask-position:
calc(var(--kt-tema-x) - var(--kt-tema-kenar) * var(--kt-tema-kapanis) / 2)
calc(var(--kt-tema-y) - var(--kt-tema-kenar) * var(--kt-tema-kapanis) / 2),
calc(var(--kt-tema-x) - var(--kt-tema-kenar) / 2)
calc(var(--kt-tema-y) - var(--kt-tema-kenar) / 2),
0 0;