diff --git a/docs/tasarim/DESIGN.md b/docs/tasarim/DESIGN.md
index e9b4e27..0eb0784 100644
--- a/docs/tasarim/DESIGN.md
+++ b/docs/tasarim/DESIGN.md
@@ -138,7 +138,9 @@ tema header'daki logodan **yumuşak bir halka** gibi açılır: kenarı keskin d
tüylü (ışık yayılır gibi), 1100 ms, yumuşak kalkıp yumuşak durur. Aynı anda logonun kareleri
yeni temanın biçimine dönüşür: koyuya geçişte şeftali kare hilale, mavi ve turuncu kareler iki
yıldıza; açığa geçişte turuncu kare güneşe, şeftali kare halesine. Kısa bir an durur, yeniden
-logoya toplanır (`animasyonlu-mark.tsx` `temaSekli`, 1,7 sn; yalnız header'daki logo). View Transitions + radyal degrade
+logoya toplanır (`animasyonlu-mark.tsx` `temaSekli`, 1,7 sn; yalnız header'daki logo). Tema
+seçicinin ikonları aynı biçimlerin durağan hâlidir (`tema-ikonu.tsx`: güneş, ay, Sistem için
+logonun üç karesi); burada lucide ikonu kullanılmaz. View Transitions + radyal degrade
maskesi: `src/lib/tema-gecisi.ts`, `globals.css` `.kt-tema-gecis`; hareket azaltılmışsa düz
değişir. Denenip bırakılanlar: logo biçimli maske ("logo içinde logo"), düz crossfade, piksel
ızgarası (sert bulundu). Kural: bu geçişte sert kenar ve ikinci bir şekil yok.
diff --git a/src/components/tema-ikonu.tsx b/src/components/tema-ikonu.tsx
new file mode 100644
index 0000000..8af093b
--- /dev/null
+++ b/src/components/tema-ikonu.tsx
@@ -0,0 +1,53 @@
+import { useId } from "react";
+
+// Tema seçicinin ikonları (DESIGN.md §2.3): tema geçişinde header'daki logonun
+// dönüştüğü biçimlerin durağan hâli (animasyonlu-mark.tsx `temaSekli`).
+// - "light": güneş — turuncu daire, arkasında şeftali hale.
+// - "dark": ay — şeftali hilal, yanında mavi ve turuncu iki yıldız.
+// - "system": logonun üç karesi — ikisine de dönüşebilen hâl.
+// Renkler logonun renkleridir ve iki temada aynıdır (§2.3); 180'lik kutu
+// public/kolay-tercih-mark.svg ile aynı. Dekoratiftir: anlamı yanındaki
+// etiket taşır.
+
+const MAVI = "#3b82f6";
+const SEFTALI = "#fdc7a7";
+const TURUNCU = "#ff5a00";
+
+export type TemaIkonuTuru = "light" | "dark" | "system";
+
+export function TemaIkonu({
+ tur,
+ className,
+}: {
+ tur: TemaIkonuTuru;
+ className?: string;
+}) {
+ const maskeId = useId();
+ return (
+
+ );
+}
diff --git a/src/components/tema-secici.tsx b/src/components/tema-secici.tsx
index bc98272..7d7980a 100644
--- a/src/components/tema-secici.tsx
+++ b/src/components/tema-secici.tsx
@@ -2,15 +2,15 @@
import { useSyncExternalStore } from "react";
import { useTheme } from "next-themes";
-import { Monitor, Moon, Sun } from "lucide-react";
+import { TemaIkonu } from "@/components/tema-ikonu";
import { Kbd } from "@/components/ui/kbd";
import { temayiGecisle } from "@/lib/tema-gecisi";
import { cn } from "@/lib/utils";
const SECENEKLER = [
- { deger: "light", etiket: "Açık", ikon: Sun },
- { deger: "dark", etiket: "Koyu", ikon: Moon },
- { deger: "system", etiket: "Sistem", ikon: Monitor },
+ { deger: "light", etiket: "Açık" },
+ { deger: "dark", etiket: "Koyu" },
+ { deger: "system", etiket: "Sistem" },
] as const;
const aboneOlma = () => () => {};
@@ -18,7 +18,8 @@ const aboneOlma = () => () => {};
/**
* Tema seçici: açık / koyu / sistem (DESIGN.md §2.3). Seçili tema yalnızca
* tarayıcıda bilinir; sunucu HTML'inde hiçbir seçenek işaretli gelmez,
- * hydration sonrası işaretlenir (yerleşim oynamaz). Seçim logodan yumuşak bir halka
+ * hydration sonrası işaretlenir (yerleşim oynamaz). İkonlar geçişte logonun
+ * dönüştüğü biçimlerdir: güneş, ay ve logonun kendisi (tema-ikonu.tsx). Seçim logodan yumuşak bir halka
* gibi yayılarak uygulanır (lib/tema-gecisi.ts); altında `D` kısayolu ipucu durur.
*/
export function TemaSecici({ className }: { className?: string }) {
@@ -36,7 +37,7 @@ export function TemaSecici({ className }: { className?: string }) {
aria-label="Tema"
className="inline-flex items-center gap-1 rounded-full border border-slate-200 bg-card p-1"
>
- {SECENEKLER.map(({ deger, etiket, ikon: Ikon }) => {
+ {SECENEKLER.map(({ deger, etiket }) => {
const secili = tarayicida && theme === deger;
return (
);