diff --git a/src/app/api/metrics/[siteId]/route.ts b/src/app/api/metrics/[siteId]/route.ts index 234405c..e67162e 100644 --- a/src/app/api/metrics/[siteId]/route.ts +++ b/src/app/api/metrics/[siteId]/route.ts @@ -208,7 +208,7 @@ export async function GET( { success: false, error: 'Invalid input', - details: error.errors.map(e => `${e.path.join('.')}: ${e.message}`).join(', ') + details: error.issues.map(e => `${e.path.join('.')}: ${e.message}`).join(', ') }, { status: 400 } ) diff --git a/src/app/fonts/Montserrat-latin-wght-normal.woff2 b/src/app/fonts/Montserrat-latin-wght-normal.woff2 new file mode 100644 index 0000000..3b2eaa9 Binary files /dev/null and b/src/app/fonts/Montserrat-latin-wght-normal.woff2 differ diff --git a/src/app/fonts/Roboto-latin-wght-normal.woff2 b/src/app/fonts/Roboto-latin-wght-normal.woff2 new file mode 100644 index 0000000..7c16c79 Binary files /dev/null and b/src/app/fonts/Roboto-latin-wght-normal.woff2 differ diff --git a/src/app/globals.css b/src/app/globals.css index 3370bd5..1915feb 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -4,8 +4,26 @@ --background: #ffffff; --foreground: #000000; + /* Descomplicar Design System v1.2.0 */ + /* Dourado de marca: logótipo, gráficos, destaques decorativos. Nunca como fundo com texto nem em texto/ícones sobre claro. */ + --gold: #cc8d00; + /* Acento de interface: fundos preenchidos (botões, badges) com texto --on-accent por cima; ícones de destaque sobre claro */ + --gold-fill: #b07a00; + --accent-hover: #9a6a00; + --on-accent: #ffffff; + /* Texto dourado sobre fundo claro */ + --accent-text: #7a5400; + --orange: #dd7500; + --ink: #111111; + --ink-muted: #5c5750; + --line: #e6e0d4; + --line-strong: #8f877a; + --success: #1d7a4f; + --danger: #b3261e; + --focus: #7a5400; + /* Brand Descomplicar */ - --brand-dourado: #cc8d00; + --brand-dourado: var(--gold); --brand-bege: #f2d9a2; --brand-verde: #27a50e; --brand-preto: #000000; @@ -22,8 +40,18 @@ --color-brand-verde: var(--brand-verde); --color-brand-preto: var(--brand-preto); + /* Interface accent (design system v1.2.0) */ + --color-gold-fill: var(--gold-fill); + --color-accent-hover: var(--accent-hover); + --color-on-accent: var(--on-accent); + --color-accent-text: var(--accent-text); + --color-primary: var(--gold-fill); + --color-primary-foreground: var(--on-accent); + --color-success: var(--success); + --color-danger: var(--danger); + /* Typography */ - --font-sans: 'Inter', system-ui, -apple-system, sans-serif; + --font-sans: 'Roboto', system-ui, -apple-system, 'Segoe UI', sans-serif; --font-display: 'Montserrat', system-ui, -apple-system, sans-serif; --font-mono: 'JetBrains Mono', 'Fira Code', monospace; @@ -49,3 +77,11 @@ body { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } + +h1, h2, h3, h4 { + font-family: var(--font-display); +} + +:focus-visible { + outline-color: var(--focus); +} diff --git a/src/app/layout.tsx b/src/app/layout.tsx index c23771a..7057995 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,16 +1,18 @@ import type { Metadata } from 'next' -import { Inter, Montserrat } from 'next/font/google' +import localFont from 'next/font/local' import './globals.css' import { cn } from '@/lib/utils' -const inter = Inter({ - subsets: ['latin'], +const roboto = localFont({ + src: './fonts/Roboto-latin-wght-normal.woff2', + weight: '100 900', variable: '--font-sans', display: 'swap', }) -const montserrat = Montserrat({ - subsets: ['latin'], +const montserrat = localFont({ + src: './fonts/Montserrat-latin-wght-normal.woff2', + weight: '100 900', variable: '--font-display', display: 'swap', }) @@ -31,7 +33,7 @@ export default function RootLayout({ return (
@@ -40,7 +42,7 @@ export default function RootLayout({
diff --git a/src/components/dashboard/chart-card.tsx b/src/components/dashboard/chart-card.tsx
index dcc43db..0f3271d 100644
--- a/src/components/dashboard/chart-card.tsx
+++ b/src/components/dashboard/chart-card.tsx
@@ -27,7 +27,8 @@ interface ChartCardProps {
loading?: boolean
}
-const COLORS = ['#cc8d00', '#27a50e', '#f2d9a2', '#6e6e6e', '#000000']
+// Design system: uma série em dourado de marca; restantes em ink, line-strong, laranja
+const COLORS = ['var(--gold)', 'var(--ink)', 'var(--line-strong)', 'var(--orange)', 'var(--line)']
export function ChartCard({
title,
@@ -80,16 +81,16 @@ export function ChartCard({
{change > 0 ? '+' : ''}{formatPercent(change / 100, 1)} vs. período anterior
diff --git a/src/components/ui/badge.tsx b/src/components/ui/badge.tsx
index e87d62b..1edf866 100644
--- a/src/components/ui/badge.tsx
+++ b/src/components/ui/badge.tsx
@@ -4,12 +4,12 @@ import { cva, type VariantProps } from "class-variance-authority"
import { cn } from "@/lib/utils"
const badgeVariants = cva(
- "inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
+ "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
{
variants: {
variant: {
default:
- "border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80",
+ "border-transparent bg-primary text-primary-foreground shadow hover:bg-accent-hover",
secondary:
"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
destructive:
diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx
index 65d4fcd..dea6058 100644
--- a/src/components/ui/button.tsx
+++ b/src/components/ui/button.tsx
@@ -5,12 +5,12 @@ import { cva, type VariantProps } from "class-variance-authority"
import { cn } from "@/lib/utils"
const buttonVariants = cva(
- "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-full text-sm font-display font-bold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
{
variants: {
variant: {
default:
- "bg-primary text-primary-foreground shadow hover:bg-primary/90",
+ "bg-primary text-primary-foreground shadow hover:bg-accent-hover",
destructive:
"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
outline:
@@ -22,8 +22,8 @@ const buttonVariants = cva(
},
size: {
default: "h-9 px-4 py-2",
- sm: "h-8 rounded-md px-3 text-xs",
- lg: "h-10 rounded-md px-8",
+ sm: "h-8 rounded-full px-3 text-xs",
+ lg: "h-10 rounded-full px-8",
icon: "h-9 w-9",
},
},
diff --git a/src/components/ui/card.tsx b/src/components/ui/card.tsx
index cabfbfc..7464666 100644
--- a/src/components/ui/card.tsx
+++ b/src/components/ui/card.tsx
@@ -35,7 +35,7 @@ const CardTitle = React.forwardRef<
>(({ className, ...props }, ref) => (