feat(tema): D kısayolu, logodan yayılan tema geçişi, /surum-notlari beta sayfası (→ 1.1.0)
- lib/tema-gecisi.ts: View Transitions + CSS maskesi (kolay-tercih-mark.svg), merkez header'daki işaret; reduced-motion ve desteksiz tarayıcıda düz geçiş - tema-kisayolu.tsx: D tuşu açık ↔ koyu (yazı alanı/değiştirici tuşta pasif) - tema-secici.tsx: seçim de maskeyle oynar, altında Kbd ile D ipucu - /surum-notlari: beta açıklaması, geri bildirim (destek@kolaytercih.com), sürüm günlüğü; Beta rozeti ve footer buraya bağlanır, sitemap'e eklendi - DESIGN.md §2.3 notu Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -476,3 +476,72 @@
|
||||
.toaster [data-sonner-toast][data-styled="true"] [data-button]:hover {
|
||||
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ü, header'daki KolayTercih işaretinin biçiminde logodan büyüyerek
|
||||
açılır. Eski görüntü yerinde durur; yeni görüntünün maskesi iki katman:
|
||||
(1) işaretin SVG'si, merkezi --kt-tema-x/y'de, kenarı 0 → --kt-tema-son;
|
||||
(2) aynı merkezden biraz geç kalkan bir daire — işaretin kareleri arasındaki
|
||||
boşlukları kapatır ki geçiş sonunda eski temadan iz kalmasın. 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-yaricap {
|
||||
syntax: "<length>";
|
||||
inherits: true;
|
||||
initial-value: 0px;
|
||||
}
|
||||
|
||||
.kt-tema-gecis {
|
||||
view-transition-name: root;
|
||||
}
|
||||
.kt-tema-gecis::view-transition-old(root),
|
||||
.kt-tema-gecis::view-transition-new(root) {
|
||||
animation: none;
|
||||
mix-blend-mode: normal;
|
||||
}
|
||||
.kt-tema-gecis::view-transition-old(root) {
|
||||
z-index: 1;
|
||||
}
|
||||
.kt-tema-gecis::view-transition-new(root) {
|
||||
z-index: 2;
|
||||
mask-image:
|
||||
url("/kolay-tercih-mark.svg"),
|
||||
radial-gradient(
|
||||
circle at var(--kt-tema-x) var(--kt-tema-y),
|
||||
#000 calc(var(--kt-tema-yaricap) - 1px),
|
||||
transparent var(--kt-tema-yaricap)
|
||||
);
|
||||
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;
|
||||
animation:
|
||||
kt-tema-isaret 0.9s cubic-bezier(0.65, 0, 0.35, 1) both,
|
||||
kt-tema-daire 0.9s cubic-bezier(0.65, 0, 0.35, 1) both;
|
||||
}
|
||||
@keyframes kt-tema-isaret {
|
||||
from {
|
||||
--kt-tema-kenar: 0px;
|
||||
}
|
||||
to {
|
||||
--kt-tema-kenar: var(--kt-tema-son);
|
||||
}
|
||||
}
|
||||
/* Daire işaretin ardından gelir: ilk %35'te sıfırda bekler. */
|
||||
@keyframes kt-tema-daire {
|
||||
0%,
|
||||
35% {
|
||||
--kt-tema-yaricap: 0px;
|
||||
}
|
||||
100% {
|
||||
--kt-tema-yaricap: var(--kt-tema-son);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user