feat(tasarim): form alanları hap, CTA bandı tek kaynak, masonry piksel zemin, çekmeceler §4.10

- Input/Select/Textarea: shadcn'in ince varsayılanı yerine üst çubuk
  haplarıyla aynı kalıp (h-12, rounded-full, slate-200, 16 px; md:text-sm
  yok); kullanım yerleri yalnız yerleşim sınıfı taşır. DESIGN.md §4.6
  tam sınıf dizisi; denetime ince-form-alani (hata) ve ham-input (uyarı)
- CtaBandi (mavi zemin + piksel doku) tek kaynak: /sonuc iki panel, katalog
  altı kart, "Kendi Listem" çekmecesi altı. Ana sayfa kapanışı koyu
  PikselCtaYuzeyi + 24'lük piksel liste kreatifiyle kalır (Bilal: "orası
  bayağı iyiydi"); yazılıp silinen satır kaldırıldı
- PixelMasonry: CTA arka planları büyüklü küçüklü, hafif kaymış kareler;
  eşit ızgaralı PixelField kaldırıldı
- Çekmece başlığındaki 12×2 piksel liste kaldırıldı (çok dolu); sayı +
  ilerleme çubuğu + risk dağılımı geri geldi
- "Saniyede gör" çekmecesi §4.10 düzeninde: ortalı DrawerTitle + bağlam,
  rozet ve çizgili "neler alacaksın" listesi yok; kapı modalındaki iki
  rozet kalktı; denetime modal-rozet (hata)
- Kapı panelinde 3 px odak halkası kırpılmıyor (px-px → p-1)
- Liste satırı: üniversite adı + tür/il/süre adın altında tek akan satır,
  telefonda text-xs (SATIR_ALT_GRUP); katalog listelerinde ad kendi
  satırında (SATIR_GRUP space-y-2). Ölçüm 375 px canlı bölüm sayfası:
  satır yüksekliğini metin değil alt alta iki 44 px düğme belirliyor

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
bilalgursen
2026-09-24 12:08:24 +03:00
parent b8b7925ba9
commit 2099f20ed1
19 changed files with 516 additions and 295 deletions

View File

@@ -0,0 +1,59 @@
"use client";
import type { ComponentProps, Ref } from "react";
import { PixelMasonry } from "@/components/pixel-decor";
import { cn } from "@/lib/utils";
/**
* CTA bandı — DESIGN.md §10.8 kanonik yüzey: sitenin mavisi (`bg-primary`),
* arka planda büyüklü küçüklü, masonry gibi kaymış ve imleç yaklaşınca
* turuncuya ısınan piksel dokusu (`PixelMasonry`), beyaz yazı, tek turuncu buton.
*
* - `buyuk` (varsayılan): sayfa kapanışı / panel — ortalı, iri boşluk.
* - `kompakt`: çekmece altı gibi dar yerler — sola yaslı, alçak.
*
* İçerik (başlık, paragraf, buton) çağıranındır; yalnız kabuk burada durur.
* Bilal'in kararı (24 Eyl 2026): koyu slate-950 yüzey yerine bu band.
*/
export function CtaBandi({
children,
className,
seed = 8,
boyut = "buyuk",
etiket = "section",
ref,
...props
}: Omit<ComponentProps<"div">, "ref"> & {
/** Piksel dokusunun deseni; aynı sayfadaki iki band farklı olsun */
seed?: number;
boyut?: "buyuk" | "kompakt";
/** Çekmece altı gibi başlıksız yerlerde `div` */
etiket?: "section" | "div";
ref?: Ref<HTMLElement>;
}) {
const buyuk = boyut === "buyuk";
// İki etiket de HTMLElement'tir; JSX tipi için div'e daraltılır.
const Etiket = etiket as "div";
return (
<Etiket
ref={ref as Ref<HTMLDivElement>}
className={cn(
"relative isolate overflow-hidden rounded-2xl bg-primary text-white",
buyuk ? "px-5 py-8 text-center sm:p-12" : "px-5 py-4 text-left sm:py-5",
className,
)}
{...props}
>
<div
aria-hidden
className={cn(
"pointer-events-none absolute inset-x-0 -z-10 text-white",
buyuk ? "-inset-y-10" : "-inset-y-6",
)}
>
<PixelMasonry seed={seed} />
</div>
{children}
</Etiket>
);
}