/* * WorthDoing.ai * Author: Simon-Pierre Boucher * Contact: contact@spboucher.ai * File: src/app/globals.css * Description: Design token system — light-first palette, type scale, motion; shadcn variables mapped to WorthDoing tokens. */ @import "tailwindcss"; @import "tw-animate-css"; @import "shadcn/tailwind.css"; @custom-variant dark (&:is(.dark *)); @theme inline { --color-background: var(--background); --color-foreground: var(--foreground); --font-sans: var(--font-body); --font-mono: var(--font-tele); --font-heading: var(--font-display); /* WorthDoing named tokens — every component derives from these. */ --color-paper: var(--wd-paper); --color-ink: var(--wd-ink); --color-ink-soft: var(--wd-ink-soft); --color-line: var(--wd-line); --color-verdict: var(--wd-verdict); --color-signal: var(--wd-signal); --color-rust: var(--wd-rust); --color-tele: var(--wd-tele); --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); --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 { /* WorthDoing palette — light-first, validated for contrast on paper. */ --wd-paper: #faf7f1; --wd-ink: #191510; --wd-ink-soft: #6b6355; --wd-line: #e6dfd2; --wd-verdict: #166b49; /* evidence support, validated, primary accent */ --wd-signal: #b57a1e; /* uncertainty, skeptic phase, medium confidence */ --wd-rust: #a63d2a; /* contradiction, rejected, risk */ --wd-tele: #3d5a80; /* telemetry, searching, links to sources */ --background: var(--wd-paper); --foreground: var(--wd-ink); --card: #ffffff; --card-foreground: var(--wd-ink); --popover: #ffffff; --popover-foreground: var(--wd-ink); --primary: var(--wd-ink); --primary-foreground: var(--wd-paper); --secondary: #f1ece1; --secondary-foreground: var(--wd-ink); --muted: #f1ece1; --muted-foreground: var(--wd-ink-soft); --accent: #eef3ef; --accent-foreground: var(--wd-verdict); --destructive: var(--wd-rust); --border: var(--wd-line); --input: var(--wd-line); --ring: var(--wd-verdict); --chart-1: var(--wd-verdict); --chart-2: var(--wd-tele); --chart-3: var(--wd-signal); --chart-4: var(--wd-rust); --chart-5: var(--wd-ink-soft); --radius: 0.5rem; --sidebar: #ffffff; --sidebar-foreground: var(--wd-ink); --sidebar-primary: var(--wd-ink); --sidebar-primary-foreground: var(--wd-paper); --sidebar-accent: #f1ece1; --sidebar-accent-foreground: var(--wd-ink); --sidebar-border: var(--wd-line); --sidebar-ring: var(--wd-verdict); } @layer base { * { @apply border-border outline-ring/50; } body { @apply bg-background text-foreground; font-feature-settings: "ss01", "cv05"; } html { @apply font-sans; } ::selection { background: color-mix(in oklab, var(--wd-verdict) 22%, transparent); } } /* ---- Motion, tied to real agent events; respects reduced motion ---- */ @keyframes wd-enter { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: translateY(0); } } @keyframes wd-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.35; } } .wd-enter { animation: wd-enter 0.35s cubic-bezier(0.2, 0.8, 0.2, 1) both; } .wd-live-dot { animation: wd-pulse 1.6s ease-in-out infinite; } .wd-bar { transition: width 0.6s cubic-bezier(0.2, 0.8, 0.2, 1), background-color 0.4s ease; } @media (prefers-reduced-motion: reduce) { .wd-enter { animation: none; } .wd-live-dot { animation: none; } .wd-bar { transition: none; } }