@import 'tailwindcss'; @import 'tw-animate-css'; @import 'shadcn/tailwind.css'; @import '@fontsource-variable/inter'; @custom-variant dark (&:is(.dark *)); @theme inline { --font-heading: var(--font-sans); --font-sans: 'Inter Variable', system-ui, sans-serif; /* Kakeibo: 4 ana grup + durum renkleri (aşağıdaki :root / .dark değişkenlerinden) */ --color-needs: var(--needs); --color-needs-fg: var(--needs-fg); --color-needs-soft: var(--needs-soft); --color-wants: var(--wants); --color-wants-fg: var(--wants-fg); --color-wants-soft: var(--wants-soft); --color-culture: var(--culture); --color-culture-fg: var(--culture-fg); --color-culture-soft: var(--culture-soft); --color-unexpected: var(--unexpected); --color-unexpected-fg: var(--unexpected-fg); --color-unexpected-soft: var(--unexpected-soft); --color-income: var(--income); --color-expense: var(--expense); --color-warning: var(--warning); --color-sidebar-ring: var(--sidebar-ring); --color-sidebar-border: var(--sidebar-border); --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); --color-sidebar-accent: var(--sidebar-accent); --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); --color-sidebar-primary: var(--sidebar-primary); --color-sidebar-foreground: var(--sidebar-foreground); --color-sidebar: var(--sidebar); --color-chart-5: var(--chart-5); --color-chart-4: var(--chart-4); --color-chart-3: var(--chart-3); --color-chart-2: var(--chart-2); --color-chart-1: var(--chart-1); --color-ring: var(--ring); --color-input: var(--input); --color-border: var(--border); --color-destructive: var(--destructive); --color-accent-foreground: var(--accent-foreground); --color-accent: var(--accent); --color-muted-foreground: var(--muted-foreground); --color-muted: var(--muted); --color-secondary-foreground: var(--secondary-foreground); --color-secondary: var(--secondary); --color-primary-foreground: var(--primary-foreground); --color-primary: var(--primary); --color-popover-foreground: var(--popover-foreground); --color-popover: var(--popover); --color-card-foreground: var(--card-foreground); --color-card: var(--card); --color-foreground: var(--foreground); --color-background: var(--background); --radius-sm: calc(var(--radius) * 0.6); --radius-md: calc(var(--radius) * 0.8); --radius-lg: var(--radius); --radius-xl: calc(var(--radius) * 1.4); --radius-2xl: calc(var(--radius) * 1.8); --radius-3xl: calc(var(--radius) * 2.2); --radius-4xl: calc(var(--radius) * 2.6); } :root { --background: oklch(1 0 0); --foreground: oklch(0.145 0 0); --card: oklch(1 0 0); --card-foreground: oklch(0.145 0 0); --popover: oklch(1 0 0); --popover-foreground: oklch(0.145 0 0); --primary: oklch(0.42 0.13 268); /* ai-iro: Japon indigosu */ --primary-foreground: oklch(0.985 0 0); --secondary: oklch(0.97 0 0); --secondary-foreground: oklch(0.205 0 0); --muted: oklch(0.97 0 0); --muted-foreground: oklch(0.556 0 0); --accent: oklch(0.97 0 0); --accent-foreground: oklch(0.205 0 0); --destructive: oklch(0.577 0.245 27.325); --border: oklch(0.922 0 0); --input: oklch(0.922 0 0); --ring: oklch(0.55 0.13 268); --chart-1: oklch(0.87 0 0); --chart-2: oklch(0.556 0 0); --chart-3: oklch(0.439 0 0); --chart-4: oklch(0.371 0 0); --chart-5: oklch(0.269 0 0); --radius: 0.625rem; --sidebar: oklch(0.985 0 0); --sidebar-foreground: oklch(0.145 0 0); --sidebar-primary: oklch(0.205 0 0); --sidebar-primary-foreground: oklch(0.985 0 0); --sidebar-accent: oklch(0.97 0 0); --sidebar-accent-foreground: oklch(0.205 0 0); --sidebar-border: oklch(0.922 0 0); --sidebar-ring: oklch(0.708 0 0); /* 4 ana grup — Okabe-Ito (renk körlüğüne uygun) paletinden. *: çubuk/dolgu · *-fg: yazı (WCAG AA ≥ 4.5:1) · *-soft: zemin */ --needs: #0072b2; --needs-fg: #005a8c; --needs-soft: #e6f1f8; --wants: #cc79a7; --wants-fg: #9c3f72; --wants-soft: #f9eef4; --culture: #009e73; --culture-fg: #00714f; --culture-soft: #e5f5f0; --unexpected: #d55e00; --unexpected-fg: #a84a00; --unexpected-soft: #fbefe5; /* Durum: gelir/olumlu · gider/aşım · uyarı (yazı olarak AA uyumlu) */ --income: #15803d; --expense: #c62828; --warning: #b45309; } .dark { --background: oklch(0.145 0 0); --foreground: oklch(0.985 0 0); --card: oklch(0.205 0 0); --card-foreground: oklch(0.985 0 0); --popover: oklch(0.205 0 0); --popover-foreground: oklch(0.985 0 0); --primary: oklch(0.72 0.12 268); --primary-foreground: oklch(0.18 0.03 268); --secondary: oklch(0.269 0 0); --secondary-foreground: oklch(0.985 0 0); --muted: oklch(0.269 0 0); --muted-foreground: oklch(0.708 0 0); --accent: oklch(0.269 0 0); --accent-foreground: oklch(0.985 0 0); --destructive: oklch(0.704 0.191 22.216); --border: oklch(1 0 0 / 10%); --input: oklch(1 0 0 / 15%); --ring: oklch(0.62 0.12 268); --chart-1: oklch(0.87 0 0); --chart-2: oklch(0.556 0 0); --chart-3: oklch(0.439 0 0); --chart-4: oklch(0.371 0 0); --chart-5: oklch(0.269 0 0); --sidebar: oklch(0.205 0 0); --sidebar-foreground: oklch(0.985 0 0); --sidebar-primary: oklch(0.488 0.243 264.376); --sidebar-primary-foreground: oklch(0.985 0 0); --sidebar-accent: oklch(0.269 0 0); --sidebar-accent-foreground: oklch(0.985 0 0); --sidebar-border: oklch(1 0 0 / 10%); --sidebar-ring: oklch(0.556 0 0); /* Koyu zeminde daha açık tonlar (kontrast için) */ --needs: #3a9fdb; --needs-fg: #7cc3f0; --needs-soft: #10283a; --wants: #d98fb8; --wants-fg: #ecb6d4; --wants-soft: #35202c; --culture: #1fbf8f; --culture-fg: #6fdcb9; --culture-soft: #0c2e25; --unexpected: #f07a24; --unexpected-fg: #f8a96b; --unexpected-soft: #3a2010; --income: #4ade80; --expense: #f87171; --warning: #fbbf24; } @layer base { * { @apply border-border outline-ring/50; } body { @apply bg-background text-foreground; } html { @apply font-sans; font-size: 16px; -webkit-tap-highlight-color: transparent; } /* Görünür odak halkası (klavye ile gezinme) */ :focus-visible { @apply outline-2 outline-offset-2 outline-ring; } } /* Tutarlar: rakamlar alt alta hizalı */ @utility money { font-variant-numeric: tabular-nums; white-space: nowrap; } /* Hareket azaltma tercihine saygı */ @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; scroll-behavior: auto !important; } } /* Not metni (components/markdown.tsx) — typography eklentisi yerine küçük, elle stil */ @layer components { .markdown { @apply space-y-3 text-sm leading-relaxed break-words; } .markdown h1 { @apply text-lg font-semibold; } .markdown h2 { @apply text-base font-semibold; } .markdown h3, .markdown h4 { @apply font-semibold; } .markdown ul { @apply list-disc space-y-1 pl-5; } .markdown ol { @apply list-decimal space-y-1 pl-5; } /* - [ ] yapılacaklar: madde işareti yerine kutucuk */ .markdown ul:has(> li > input[type='checkbox']) { @apply list-none pl-1; } .markdown li > input[type='checkbox'] { @apply mr-2 size-4 translate-y-0.5 accent-primary; } .markdown a { @apply font-medium text-primary underline underline-offset-4; } .markdown blockquote { @apply border-l-4 pl-3 text-muted-foreground; } .markdown code { @apply rounded bg-muted px-1 py-0.5 font-mono text-[0.85em]; } .markdown pre { @apply overflow-x-auto rounded-lg bg-muted p-3; } .markdown pre code { @apply bg-transparent p-0; } .markdown table { @apply block w-full overflow-x-auto border-collapse; } .markdown th, .markdown td { @apply border px-2 py-1 text-left; } .markdown th { @apply bg-muted font-medium; } .markdown hr { @apply border-border; } }