refactor(tema): logo maskesi kaldırıldı, tema geçişi sade crossfade (640 ms)

Bilal'in kararı (9 Eki 2026): SVG maskeli yayılma şimdilik yok; tüm sayfa
tek parça crossfade ile geçer, mursela-nextjs'teki tema geçişiyle aynı
süre ve eğri (640 ms, cubic-bezier(0.6, 0, 0.2, 1)). motion bağımlılığı
ve maske değişkenleri tema-gecisi.ts'ten çıktı; DESIGN §2.3 notu güncel.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
bilalgursen
2026-10-09 00:15:34 +03:00
parent 4c84a1a974
commit a51724fdcc
6 changed files with 44 additions and 141 deletions

View File

@@ -477,73 +477,47 @@
background: var(--color-slate-700);
}
/* 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 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 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. */
@property --kt-tema-kenar {
syntax: "<length>";
inherits: true;
initial-value: 0px;
}
@property --kt-tema-dolgu {
syntax: "<number>";
inherits: true;
initial-value: 0;
}
/* Tema geçişi (DESIGN.md §2.3, lib/tema-gecisi.ts): tema değişirken tüm
sayfa tek parça crossfade yapar — eski görüntü solar, yeni belirir.
mursela-nextjs'teki tema geçişiyle aynı: 640 ms, ease-in-out. Sınıf
(`kt-tema-gecis`) geçiş süresince <html>'de durur; stil yalnız tema
değişimine uygulanır. Hareket azaltılmışsa JS geçişi hiç başlatmaz,
tema düz değişir. */
.kt-tema-gecis {
view-transition-name: root;
--kt-tema-sure: 640ms;
--kt-tema-egri: cubic-bezier(0.6, 0, 0.2, 1);
}
.kt-tema-gecis::view-transition-old(root),
.kt-tema-gecis::view-transition-new(root) {
animation: none;
mix-blend-mode: normal;
will-change: opacity;
backface-visibility: hidden;
}
.kt-tema-gecis::view-transition-group(root) {
animation-duration: var(--kt-tema-sure);
animation-timing-function: var(--kt-tema-egri);
}
.kt-tema-gecis::view-transition-old(root) {
z-index: 1;
animation: kt-tema-cikis var(--kt-tema-sure) var(--kt-tema-egri) both;
}
.kt-tema-gecis::view-transition-new(root) {
z-index: 2;
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=%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)),
rgb(0 0 0 / var(--kt-tema-dolgu))
);
mask-repeat: no-repeat;
mask-size:
var(--kt-tema-kenar) var(--kt-tema-kenar),
100% 100%;
mask-position:
calc(var(--kt-tema-x) - var(--kt-tema-kenar) / 2)
calc(var(--kt-tema-y) - var(--kt-tema-kenar) / 2),
0 0;
/* Değeri değişmeyen ama gerçek bir animasyon: view transition, üzerindeki
tüm animasyonlar bitene kadar kalkmaz; maskeyi JS (motion) sürerken
ömrü bu tutar. */
animation: kt-tema-omur var(--kt-tema-sure, 1.05s) linear both;
z-index: 0;
animation: kt-tema-giris var(--kt-tema-sure) var(--kt-tema-egri) both;
}
@keyframes kt-tema-omur {
@keyframes kt-tema-cikis {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
@keyframes kt-tema-giris {
from {
opacity: 0;
}
to {
opacity: 1;
}