diff --git a/.gitignore b/.gitignore index 8918d90..5861b33 100644 --- a/.gitignore +++ b/.gitignore @@ -106,6 +106,7 @@ docker-compose.override.yml .cursor/ CLAUDE.md AGENTS.md +QWEN.md claude.md agents.md diff --git a/app/globals.css b/app/globals.css index 45a4d8a..7756c75 100644 --- a/app/globals.css +++ b/app/globals.css @@ -88,35 +88,35 @@ .dark { /* Base surfaces - true dark with minimal saturation */ - --background: oklch(14% 0.004 285); - --foreground: oklch(95% 0.003 285); - --card: oklch(18% 0.005 285); - --card-foreground: oklch(95% 0.003 285); - --popover: oklch(20% 0.006 285); - --popover-foreground: oklch(95% 0.003 285); + --background: oklch(18.674% 0.00002 271.152); + --foreground: oklch(85.505% 0.02038 100.68); + --card: oklch(24.039% 0.00151 16.27); + --card-foreground: oklch(85.505% 0.02038 100.68); + --popover: oklch(24.039% 0.00151 16.27); + --popover-foreground: oklch(85.196% 0.0204 100.682); /* Primary - vibrant terracotta stands out on dark */ --primary: oklch(69.18% 0.18855 38.353); - --primary-foreground: oklch(12% 0.008 285); + --primary-foreground: oklch(20.019% 0.00002 271.152); /* Secondary - elevated surface */ --secondary: oklch(22% 0.004 285); - --secondary-foreground: oklch(93% 0.003 285); + --secondary-foreground: oklch(85.196% 0.0204 100.682); /* Muted - subtle surface variant */ - --muted: oklch(20% 0.004 285); + --muted: oklch(33.674% 0.00531 91.552); --muted-foreground: oklch(72.285% 0.00436 286.016); /* Accent - subtle highlight */ - --accent: oklch(26% 0.006 285); - --accent-foreground: oklch(95% 0.003 285); + --accent: oklch(26.893% 0.00391 84.539); + --accent-foreground: oklch(85.196% 0.0204 100.682); /* Destructive - accessible red for dark */ --destructive: oklch(62% 0.2 28); --destructive-foreground: oklch(98% 0.005 30); /* Borders and inputs - visible but subtle */ - --border: oklch(28% 0.004 285); + --border: oklch(37.332% 0.01493 101.928); --input: oklch(32% 0.005 285); --ring: oklch(69.18% 0.18855 38.353); @@ -128,12 +128,12 @@ --chart-5: oklch(74% 0.15 88); /* Sidebar - slight separation from main */ - --sidebar: oklch(16% 0.004 285); - --sidebar-foreground: oklch(95% 0.003 285); + --sidebar: oklch(24.039% 0.00151 16.27); + --sidebar-foreground: oklch(85.196% 0.0204 100.682); --sidebar-primary: oklch(69.18% 0.18855 38.353); - --sidebar-primary-foreground: oklch(12% 0.008 285); - --sidebar-accent: oklch(24% 0.005 285); - --sidebar-accent-foreground: oklch(95% 0.003 285); + --sidebar-primary-foreground: oklch(12.897% 0.00619 87.19); + --sidebar-accent: oklch(32.242% 0.00447 67.486); + --sidebar-accent-foreground: oklch(85.196% 0.0204 100.682); --sidebar-border: oklch(26% 0.004 285); --sidebar-ring: oklch(69.18% 0.18855 38.353); @@ -159,12 +159,12 @@ --spacing: 0.25rem; /* Special components */ - --month-picker: oklch(22% 0.006 285); - --month-picker-foreground: oklch(85% 0.02 315); - --dark: oklch(93% 0.003 285); - --dark-foreground: oklch(18% 0.005 285); - --welcome-banner: oklch(22% 0.006 285); - --welcome-banner-foreground: oklch(95% 0.003 285); + --month-picker: oklch(24.039% 0.00151 16.27); + --month-picker-foreground: oklch(85.196% 0.0204 100.682); + --dark: oklch(85.196% 0.0204 100.682); + --dark-foreground: oklch(18.711% 0.00427 84.566); + --welcome-banner: oklch(24.039% 0.00151 16.27); + --welcome-banner-foreground: oklch(85.196% 0.0204 100.682); } @theme inline { diff --git a/components/dashboard/dashboard-welcome.tsx b/components/dashboard/dashboard-welcome.tsx index a62d136..aa44c75 100644 --- a/components/dashboard/dashboard-welcome.tsx +++ b/components/dashboard/dashboard-welcome.tsx @@ -51,7 +51,7 @@ export function DashboardWelcome({ name }: DashboardWelcomeProps) { return (
diff --git a/components/dashboard/income-by-category-widget.tsx b/components/dashboard/income-by-category-widget.tsx index fa17f6c..f9d6b3a 100644 --- a/components/dashboard/income-by-category-widget.tsx +++ b/components/dashboard/income-by-category-widget.tsx @@ -127,9 +127,9 @@ export function IncomeByCategoryWidget({ diff --git a/components/insights/insights-page.tsx b/components/insights/insights-page.tsx index ea824f2..51b6017 100644 --- a/components/insights/insights-page.tsx +++ b/components/insights/insights-page.tsx @@ -10,8 +10,9 @@ import { DEFAULT_MODEL } from "@/app/(dashboard)/insights/data"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader } from "@/components/ui/card"; import { Skeleton } from "@/components/ui/skeleton"; +import { Alert, AlertDescription } from "@/components/ui/alert"; import type { InsightsResponse } from "@/lib/schemas/insights"; -import { RiDeleteBinLine, RiSaveLine, RiSparklingLine } from "@remixicon/react"; +import { RiDeleteBinLine, RiSaveLine, RiSparklingLine, RiAlertLine } from "@remixicon/react"; import { useEffect, useState, useTransition } from "react"; import { toast } from "sonner"; import { EmptyState } from "../empty-state"; @@ -127,6 +128,15 @@ export function InsightsPage({ period, onAnalyze }: InsightsPageProps) { return (
+ {/* Privacy Warning */} + + + + Aviso de privacidade: Ao gerar insights, seus dados financeiros serão enviados para o provedor de IA selecionado + (Anthropic, OpenAI, Google ou OpenRouter) para processamento. Certifique-se de que você confia no provedor escolhido antes de prosseguir. + + + {/* Model Selector */}