fix(tasarim): piksel zemin yalnız CTA yüzeylerinde, kabın ölçüsüne göre, küçük kare yok

Bilal (24 Eyl 2026): ana sayfa CTA'sında doku hiç görünmüyordu, bazı
kartlarda çok azdı; sonra "çok fazla piksel, küçük olanlar hiç olmasın"
ve "/sonuc'taki kartın arkasına da piksel koymuşsun; pikseller CTA'larda
olacak sadece".

- Kök neden: PixelMasonry sabit 420×120 çizimi kaplayacak şekilde
  ölçekleniyordu; yüksek kartlarda görünen kısım boş banda düşüyordu.
  Artık kabın gerçek ölçüsüne göre üretiliyor (ResizeObserver), yalnız
  kenar çerçevesinde, orta boş; `haric` verilen öğenin (24'lük piksel
  tablosu) çevresi her genişlikte boş. Sunucuda boş, ölçülünce belirir.
- Küçük (tek hücre) kare yok: 4×4 makro hücrede 2–4 hücrelik kareler,
  iri olan seyrek ve silik. Ölçüm: kapanış kartı 1280 px'te 58 kare
  (tabloya binen 0), 375 px'te 27 kare.
- Beyaz içerik kartlarından zemin geri alındı (tadımlık, /listem üretim
  ve kilit kartları, boş durum, sıralama-yok, meraklısına, paket kartları,
  kaydet bandı, katalog üstü kompakt satır, /sonuc "listen hazır").
  Kalanlar: CtaBandi, PikselCtaYuzeyi, arama penceresi kartı.
  PikselZemin'in açık tonu kaldırıldı. DESIGN.md §10.8 güncellendi.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
bilalgursen
2026-09-24 12:38:47 +03:00
parent c90c186b86
commit 613d9e012a
17 changed files with 173 additions and 144 deletions

View File

@@ -1,31 +1,36 @@
"use client";
import type { RefObject } from "react";
import { PixelMasonry } from "@/components/pixel-decor";
import { cn } from "@/lib/utils";
/**
* CTA yüzeylerinin piksel zemini (DESIGN.md §10.8) — tek kaynak. Bilal'in
* kararı (24 Eyl 2026): "piksel arka planları her CTA benzeri kısmın
* arkasında olmalı, masonry gibi büyüklü küçüklü." Kap `relative isolate
* overflow-hidden` olmalı; zemin ilk çocuk olarak konur.
* kararı (24 Eyl 2026): pikseller **yalnız CTA yüzeylerinde** (mavi bant,
* kapanış kartı, arama penceresi kartı); beyaz içerik kartlarında değil
* ("/sonuc'taki kartın arkasına da piksel koymuşsun; pikseller CTA'larda
* olacak sadece"). Beyaz kareler; kap `relative isolate overflow-hidden`
* olmalı, zemin ilk çocuk olarak konur.
*
* - `acik`: beyaz/açık kart — silik mavi kareler.
* - `koyu`: mavi bant ya da koyu kart — beyaz kareler.
* Doku kabın gerçek ölçüsüne göre üretilir; kenar çerçevesi yoğun, orta
* seyrek. Üstünde kreatif ya da iri sayı varsa `haric` ile o öğe verilir,
* çevresi boş kalır.
*/
export function PikselZemin({
seed = 7,
ton = "acik",
bosBant,
yogunluk,
kenar,
haric,
className,
}: {
/** Aynı ekrandaki iki yüzey farklı desen alsın */
seed?: number;
ton?: "acik" | "koyu";
/** Boş bırakılacak yatay bant (varsayılan orta %22–78); bkz. PixelMasonry */
bosBant?: [number, number];
/** Doluluk çarpanı */
/** Doluluk çarpanı (1 varsayılan) */
yogunluk?: number;
/** Kenar çerçevesinin genişliği, kısa kenarın oranı (0.3 varsayılan) */
kenar?: number;
/** Çevresi boş bırakılacak öğe */
haric?: RefObject<HTMLElement | null>;
/** Dikey taşma payı vb. (varsayılan `-inset-y-6`) */
className?: string;
}) {
@@ -33,12 +38,16 @@ export function PikselZemin({
<div
aria-hidden
className={cn(
"pointer-events-none absolute inset-x-0 -inset-y-6 -z-10",
ton === "acik" ? "text-primary/70" : "text-white",
"pointer-events-none absolute inset-x-0 -inset-y-6 -z-10 text-white",
className,
)}
>
<PixelMasonry seed={seed} bosBant={bosBant} yogunluk={yogunluk} />
<PixelMasonry
seed={seed}
yogunluk={yogunluk}
kenar={kenar}
haric={haric}
/>
</div>
);
}