feat(tema): açık / koyu / sistem teması
All checks were successful
Deploy / deploy (push) Successful in 6m23s

- TemaSaglayici (next-themes) + alt bilgide TemaSecici
- globals.css: .dark bloğunda palet token'ları çevrilir; bileşenlere
  dark: sınıfı yazılmaz
- yüzeyler bg-white → bg-card, koyu haplar text-slate-50, SVG'lerde
  sabit renk yerine değişken
- DESIGN.md §2.3 + tasarim-denetim kuralları (yuzey-beyaz,
  koyu-hap-beyaz-yazi, dark-sinif), AGENTS.md karanlık mod bölümü
- docs: koyu tema denetimi raporu

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
bilalgursen
2026-10-05 10:20:02 +03:00
parent 9e4c5608eb
commit 78ad84922a
70 changed files with 637 additions and 243 deletions

View File

@@ -264,7 +264,7 @@ export function ListeUretici({
// Paketli kullanıcıya paket satma: onun ürünü top-up. Liste ve sohbet
// geçmişi kalıcı; kredi yükleyince kaldığı yerden devam eder.
return (
<section className="mx-auto w-full max-w-2xl rounded-2xl border border-slate-200 bg-white p-8 text-center sm:p-12">
<section className="mx-auto w-full max-w-2xl rounded-2xl border border-slate-200 bg-card p-8 text-center sm:p-12">
<Lock className="mx-auto size-8 text-slate-400" aria-hidden />
<h1 className="mt-4 font-heading text-xl font-bold">
Kredin bu liste için yetmiyor
@@ -294,7 +294,7 @@ export function ListeUretici({
if (durum.ad === "hata") {
return (
<section className="mx-auto w-full max-w-2xl rounded-2xl border border-slate-200 bg-white p-8 text-center sm:p-12">
<section className="mx-auto w-full max-w-2xl rounded-2xl border border-slate-200 bg-card p-8 text-center sm:p-12">
<h1 className="font-heading text-xl font-bold">Liste kurulamadı</h1>
<p className="mx-auto mt-2 max-w-md text-sm text-slate-600">
{durum.mesaj}
@@ -344,7 +344,7 @@ function SunucuYokEkrani() {
}
return (
<section className="mx-auto w-full max-w-2xl rounded-2xl border border-slate-200 bg-white p-8 text-center sm:p-12">
<section className="mx-auto w-full max-w-2xl rounded-2xl border border-slate-200 bg-card p-8 text-center sm:p-12">
<h1 className="font-heading text-xl font-bold">
Listen hazır, sunucuya şu an ulaşamıyoruz
</h1>
@@ -375,7 +375,7 @@ function SunucuYokEkrani() {
* "Tekrar dene" yok: tekrar taze requestId üretip ikinci üretimi başlatırdı. */
function SuruyorEkrani() {
return (
<section className="mx-auto w-full max-w-2xl rounded-2xl border border-slate-200 bg-white p-8 text-center sm:p-12">
<section className="mx-auto w-full max-w-2xl rounded-2xl border border-slate-200 bg-card p-8 text-center sm:p-12">
<h1 className="font-heading text-xl font-bold">Listen zaten hazırlanıyor</h1>
<p className="mx-auto mt-2 max-w-md text-sm text-slate-600">
Bunu başka bir sekmede başlatmışsın. İki kez kurmayalım — kredin bu
@@ -436,7 +436,7 @@ function UretimGovdesi({ uzunSurdu }: { uzunSurdu: boolean }) {
danışman sağda — üretim biter bitmez ekran aynı yerlere oturur. */}
<div className="mt-8 grid grid-cols-[minmax(0,1fr)] items-start gap-6 lg:grid-cols-[minmax(0,1fr)_380px] xl:grid-cols-[minmax(0,1fr)_440px]">
{/* Gelmekte olan tercih listesinin iskeleti */}
<div className="flex min-w-0 flex-col gap-2 rounded-2xl border border-slate-200 bg-white p-6 sm:p-8">
<div className="flex min-w-0 flex-col gap-2 rounded-2xl border border-slate-200 bg-card p-6 sm:p-8">
<div className="flex items-center justify-between pb-2">
<Skeleton className="h-6 w-44" />
<Skeleton className="h-6 w-24 rounded-full" />
@@ -453,7 +453,7 @@ function UretimGovdesi({ uzunSurdu }: { uzunSurdu: boolean }) {
gördüğü ilk şey danışmanın çalıştığı olsun. */}
<aside
aria-label="Danışman paneli — listen hazırlanıyor"
className="flex flex-col overflow-hidden rounded-2xl border border-slate-200 bg-white max-lg:order-first lg:sticky lg:top-28"
className="flex flex-col overflow-hidden rounded-2xl border border-slate-200 bg-card max-lg:order-first lg:sticky lg:top-28"
>
{/* SohbetClient başlığıyla aynı ibare/stil: üretim bitince panel
yerini sohbete bırakırken başlık değişmez. */}

View File

@@ -349,7 +349,7 @@ export function ListemGovde({
<section
ref={kilitKartRef}
className="overflow-hidden rounded-2xl border border-slate-200 bg-white shadow-sm"
className="overflow-hidden rounded-2xl border border-slate-200 bg-card shadow-sm"
>
<div className="border-b border-slate-100 p-6">
<h3 className="font-heading text-xl font-bold tracking-tight">

View File

@@ -104,13 +104,13 @@ export function RaporSatirDetayi({
) : null}
</div>
<dl className="grid gap-3 text-base leading-relaxed sm:grid-cols-2">
<div className="rounded-xl border border-slate-200 bg-white p-4">
<div className="rounded-xl border border-slate-200 bg-card p-4">
<dt className="text-sm font-semibold text-slate-900">
Neden listede?
</dt>
<dd className="mt-1 text-slate-600">{gerekce}</dd>
</div>
<div className="rounded-xl border border-slate-200 bg-white p-4">
<div className="rounded-xl border border-slate-200 bg-card p-4">
<dt className="text-sm font-semibold text-slate-900">
Risk ve Yapay Zeka yorumu
</dt>
@@ -310,7 +310,7 @@ export function RaporListesi({
e.stopPropagation();
tiklandi(t.sira);
}}
className={`inline-flex ${SATIR_DUGME_BOYU} cursor-pointer items-center justify-center rounded-full border border-slate-200 bg-white text-slate-500 transition-[background-color,border-color,color,transform] duration-150 hover:border-orange-500 hover:bg-orange-50/60 hover:text-orange-500 active:scale-[0.92] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`}
className={`inline-flex ${SATIR_DUGME_BOYU} cursor-pointer items-center justify-center rounded-full border border-slate-200 bg-card text-slate-500 transition-[background-color,border-color,color,transform] duration-150 hover:border-orange-500 hover:bg-orange-50/60 hover:text-orange-500 active:scale-[0.92] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`}
>
<ChevronDown
className={`size-4 transition-transform duration-200 ${acikMi ? "rotate-180" : ""}`}
@@ -337,7 +337,7 @@ export function RaporListesi({
Kişisel analiz pakette
</span>
</div>
<div className="rounded-xl border border-dashed border-slate-300 bg-white p-4">
<div className="rounded-xl border border-dashed border-slate-300 bg-card p-4">
<p className="flex items-center gap-1.5 text-sm font-semibold text-slate-900">
<Lock className="size-4" aria-hidden />
Yapay Zeka karar desteği
@@ -400,7 +400,7 @@ export function RaporListesi({
</p>
) : null}
<div className="mt-4 overflow-hidden rounded-2xl border border-slate-200 bg-white">
<div className="mt-4 overflow-hidden rounded-2xl border border-slate-200 bg-card">
<Table>
<TableHeader>
<TableRow className="hover:bg-transparent">

View File

@@ -54,7 +54,7 @@ export async function RaporYazdir() {
});
return (
<div className="mx-auto max-w-3xl bg-white p-8 text-slate-900 print:p-[10mm]">
<div className="mx-auto max-w-3xl bg-card p-8 text-slate-900 print:p-[10mm]">
<YazdirButonu />
<header className="border-b-2 border-slate-900 pb-4">
@@ -159,7 +159,7 @@ export async function RaporYazdir() {
// Rapor sorgusu beklenirken belge düzeninde iskelet.
export function RaporYazdirSkeleton() {
return (
<div aria-live="polite" className="mx-auto w-full max-w-3xl bg-white p-8">
<div aria-live="polite" className="mx-auto w-full max-w-3xl bg-card p-8">
<div className="border-b-2 border-slate-200 pb-4">
<Skeleton className="h-8 w-64" />
<Skeleton className="mt-2 h-4 w-40" />

View File

@@ -25,7 +25,7 @@ export function RevizyonKutusu({ kalanHak }: { kalanHak: number }) {
return (
<section
id="revizyon"
className="scroll-mt-24 rounded-2xl border border-slate-200 bg-white p-5"
className="scroll-mt-24 rounded-2xl border border-slate-200 bg-card p-5"
>
<p className="text-sm text-slate-500">
Revizyon hakların doldu. Danışman sohbetinden listen hakkında soru
@@ -62,7 +62,7 @@ export function RevizyonKutusu({ kalanHak }: { kalanHak: number }) {
return (
<section
id="revizyon"
className="scroll-mt-24 rounded-2xl border border-slate-200 bg-white p-5"
className="scroll-mt-24 rounded-2xl border border-slate-200 bg-card p-5"
>
<h2 className="font-heading text-base font-bold">
Listede değişiklik mi istiyorsun?
@@ -78,7 +78,7 @@ export function RevizyonKutusu({ kalanHak }: { kalanHak: number }) {
maxLength={1000}
placeholder="ör. İlk 5 tercihte daha fazla İstanbul olsun, güvenli dilimi genişlet…"
disabled={pending}
className="w-full rounded-lg border border-slate-200 bg-white px-3 py-2 text-sm shadow-xs outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50"
className="w-full rounded-lg border border-slate-200 bg-card px-3 py-2 text-sm shadow-xs outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50"
/>
<div className="mt-3 flex items-center gap-3">
<Button

View File

@@ -151,7 +151,7 @@ export function TadimlikSatiri({
</p>
</div>
<div className="mt-6 rounded-2xl border border-slate-200 bg-white p-4 shadow-sm sm:p-6">
<div className="mt-6 rounded-2xl border border-slate-200 bg-card p-4 shadow-sm sm:p-6">
{/* Rapor listesinin satırıyla aynı düzen (§4.15): ad sarar,
üniversite adı altında, taban sıra sağda iri. */}
<div className="flex items-start gap-3">