diff --git a/AGENTS.md b/AGENTS.md
index 26f5106..c203da0 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -13,7 +13,7 @@ Push emri geldiğinde önce lokalde `pnpm build` başarıyla geçmeli; geçmeden
# Badge/eyebrow rozetleri: tek kaynak SectionEyebrow
-Site genelindeki tüm badge/rozet/eyebrow elemanları ana sayfadaki section başlıklarının üstünde duran rozetle birebir aynı olmalı. Kanonik bileşen `src/components/pixel-decor.tsx` içindeki `SectionEyebrow`dur (piksel imzalı `PixelMark` ikonu + `rounded-full border border-slate-200 bg-white px-3.5 py-1.5 text-xs font-semibold uppercase tracking-[0.12em] text-primary`). Yeni bir badge/eyebrow gerektiğinde `SectionEyebrow` kullan (`className` prop'u kenar boşluğu için var); `@/components/ui/badge`'deki `Badge` ile ya da elle yazılmış pill span'lerle yeni badge tasarlama. İnteraktif chip/buton pill'leri (filtre çipleri, nav butonları) bu kuralın dışındadır.
+Site genelindeki tüm badge/rozet/eyebrow elemanları ana sayfadaki section başlıklarının üstünde duran rozetle birebir aynı olmalı. Kanonik bileşen `src/components/pixel-decor.tsx` içindeki `SectionEyebrow`dur (piksel imzalı `PixelMark` ikonu + `rounded-full border border-slate-200 bg-white px-3.5 py-1.5 font-bricolage text-xs font-semibold text-primary`; metin büyük-küçük harfli yazılır — uppercase yok). Yeni bir badge/eyebrow gerektiğinde `SectionEyebrow` kullan (`className` prop'u kenar boşluğu için var); `@/components/ui/badge`'deki `Badge` ile ya da elle yazılmış pill span'lerle yeni badge tasarlama. İnteraktif chip/buton pill'leri (filtre çipleri, nav butonları) bu kuralın dışındadır.
# UI tutarlılığı: ortak elemanlar tek kaynaktan
diff --git a/src/app/globals.css b/src/app/globals.css
index 7589757..bb2bdd1 100644
--- a/src/app/globals.css
+++ b/src/app/globals.css
@@ -129,6 +129,37 @@
}
}
+/* Rozet (PixelMark) pikselleri: sırayla turuncuya ısınır, iz gibi yavaşça söner.
+ Zamanlama ısı fırçasıyla aynı dili konuşur: ani ısınma (%8), uzun soğuma (%66). */
+@theme {
+ --animate-pixel-isi: pixel-isi 2.4s ease-in-out infinite;
+ --animate-pixel-isi-accent: pixel-isi-accent 2.4s ease-in-out infinite;
+
+ @keyframes pixel-isi {
+ 0%,
+ 66%,
+ 100% {
+ fill: currentColor;
+ fill-opacity: var(--px-op, 0.3);
+ }
+ 8% {
+ fill: var(--color-orange-500);
+ fill-opacity: 0.85;
+ }
+ }
+
+ @keyframes pixel-isi-accent {
+ 0%,
+ 66%,
+ 100% {
+ fill-opacity: 0.55;
+ }
+ 8% {
+ fill-opacity: 1;
+ }
+ }
+}
+
/* Ödeme dönüşünde kilidi açılan listenin blur çözülme animasyonu */
@keyframes kt-unblur {
from {
diff --git a/src/app/page.tsx b/src/app/page.tsx
index 9728f11..0a06a1e 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -314,7 +314,7 @@ export default function Home() {
{/* Kuralların şeffaf anlatımına köprü: /meraklisina */}
Meraklısına
(null);
- usePixelHeat(svgRef, { radius: 24 });
+/** PixelMark pikseli: kendi kendine, sırası geldiğinde ısınıp sönen rect. */
+function markPixel(x: number, y: number, opacity: number, delay: number) {
+ return (
+
+ );
+}
+/**
+ * Eyebrow rozetlerinde kullanılan 2×2'lik minik piksel imzası.
+ * Pikseller imleç fırçasına katılmak yerine saat yönünde sırayla
+ * ısınıp söner; ikisi aynı fill/fillOpacity'yi sürdüğü için çakışır.
+ */
+export function PixelMark({ className }: { className?: string }) {
return (
);
}
@@ -281,7 +309,7 @@ export function SectionEyebrow({
return (