diff --git a/tailwind.config.ts b/tailwind.config.ts new file mode 100644 index 0000000..3d8a843 --- /dev/null +++ b/tailwind.config.ts @@ -0,0 +1,88 @@ +import type { Config } from "tailwindcss"; + +const config: Config = { + darkMode: ["class"], + content: ["./src/**/*.{ts,tsx}", "./messages/**/*.json"], + theme: { + extend: { + colors: { + border: "hsl(var(--border))", + input: "hsl(var(--input))", + ring: "hsl(var(--ring))", + background: "hsl(var(--background))", + foreground: "hsl(var(--foreground))", + primary: { + DEFAULT: "hsl(var(--primary))", + foreground: "hsl(var(--primary-foreground))", + }, + secondary: { + DEFAULT: "hsl(var(--secondary))", + foreground: "hsl(var(--secondary-foreground))", + }, + muted: { + DEFAULT: "hsl(var(--muted))", + foreground: "hsl(var(--muted-foreground))", + }, + accent: { + DEFAULT: "hsl(var(--accent))", + foreground: "hsl(var(--accent-foreground))", + }, + destructive: { + DEFAULT: "hsl(var(--destructive))", + foreground: "hsl(var(--destructive-foreground))", + }, + card: { + DEFAULT: "hsl(var(--card))", + foreground: "hsl(var(--card-foreground))", + }, + success: "hsl(var(--success))", + warning: "hsl(var(--warning))", + }, + borderRadius: { + xl: "calc(var(--radius) + 6px)", + lg: "var(--radius)", + md: "calc(var(--radius) - 4px)", + sm: "calc(var(--radius) - 6px)", + }, + boxShadow: { + panel: "0 1px 2px rgba(16, 24, 40, 0.06)", + raised: "0 8px 24px rgba(15, 23, 42, 0.10)", + "glow-sm": + "0 0 0 1px hsl(var(--primary) / 0.25), 0 2px 12px -2px hsl(var(--primary) / 0.45)", + glow: "0 0 0 1px hsl(var(--primary) / 0.3), 0 4px 24px -4px hsl(var(--primary) / 0.55)", + }, + fontFamily: { + sans: ["var(--font-sans)", "system-ui", "Segoe UI", "sans-serif"], + display: ["var(--font-display)", "var(--font-sans)", "system-ui", "sans-serif"], + mono: ["var(--font-mono)", "ui-monospace", "SFMono-Regular", "monospace"], + }, + keyframes: { + "fade-in": { + from: { opacity: "0" }, + to: { opacity: "1" }, + }, + "scale-in": { + from: { opacity: "0", transform: "scale(0.96) translateY(8px)" }, + to: { opacity: "1", transform: "scale(1) translateY(0)" }, + }, + "slide-in-left": { + from: { transform: "translateX(-100%)" }, + to: { transform: "translateX(0)" }, + }, + "pulse-soft": { + "0%, 100%": { opacity: "1" }, + "50%": { opacity: "0.55" }, + }, + }, + animation: { + "fade-in": "fade-in 0.25s ease-out both", + "scale-in": "scale-in 0.25s cubic-bezier(0.22, 0.61, 0.36, 1) both", + "slide-in-left": "slide-in-left 0.3s cubic-bezier(0.22, 0.61, 0.36, 1) both", + "pulse-soft": "pulse-soft 2.4s ease-in-out infinite", + }, + }, + }, + plugins: [], +}; + +export default config;