02914d6145
- Override Tailwind ease-out/ease-in-out with stronger curves, add ease-drawer - hoverOnlyWhenSupported so hover styles never stick on touch devices - Replace transition-all with explicit properties across the public UI - Press feedback via active:scale-[0.97] instead of hover:scale-105 - Global prefers-reduced-motion handling (CSS + MotionConfig reducedMotion="user") - Mobile menu is a real drawer: stays mounted, inert when closed, Escape closes - Progress and music bars animate scaleX/scaleY instead of width/height - Fix undefined animate-spin-slow, contain hero CTA shine with overflow-hidden Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
133 lines
3.9 KiB
TypeScript
133 lines
3.9 KiB
TypeScript
// tailwind.config.ts
|
|
import type { Config } from "tailwindcss";
|
|
|
|
// tailwind.config.js
|
|
export default {
|
|
darkMode: "class", // Enables class-based dark mode
|
|
// Touch devices fire :hover on tap and keep it stuck; only apply hover styles
|
|
// where a real pointer exists.
|
|
future: {
|
|
hoverOnlyWhenSupported: true,
|
|
},
|
|
content: [
|
|
"./app/**/*.{js,ts,jsx,tsx}",
|
|
"./app/components/**/*.{js,ts,jsx,tsx}",
|
|
// Add other paths if necessary
|
|
],
|
|
theme: {
|
|
extend: {
|
|
// Stronger curves than the CSS defaults. Overriding `out` and `in-out`
|
|
// upgrades every existing `ease-out` / `ease-in-out` utility at once.
|
|
transitionTimingFunction: {
|
|
out: "cubic-bezier(0.23, 1, 0.32, 1)",
|
|
"in-out": "cubic-bezier(0.77, 0, 0.175, 1)",
|
|
drawer: "cubic-bezier(0.32, 0.72, 0, 1)",
|
|
},
|
|
keyframes: {
|
|
fadeIn: {
|
|
"0%": { opacity: "0", transform: "translateY(8px)" },
|
|
"100%": { opacity: "1", transform: "translateY(0)" },
|
|
},
|
|
slideDown: {
|
|
"0%": { opacity: "0", transform: "translateY(-12px)" },
|
|
"100%": { opacity: "1", transform: "translateY(0)" },
|
|
},
|
|
scrollHint: {
|
|
"0%": { opacity: "0", transform: "scaleY(0.4)" },
|
|
"40%": { opacity: "1", transform: "scaleY(1)" },
|
|
"100%": { opacity: "0", transform: "scaleY(1)" },
|
|
},
|
|
},
|
|
animation: {
|
|
"fade-in": "fadeIn 600ms cubic-bezier(0.23, 1, 0.32, 1) both",
|
|
"slide-down": "slideDown 500ms cubic-bezier(0.23, 1, 0.32, 1) both",
|
|
"scroll-hint": "scrollHint 2.4s cubic-bezier(0.77, 0, 0.175, 1) infinite",
|
|
"spin-slow": "spin 4s linear infinite",
|
|
},
|
|
colors: {
|
|
background: "var(--background)",
|
|
foreground: "var(--foreground)",
|
|
card: {
|
|
DEFAULT: "var(--card)",
|
|
foreground: "var(--card-foreground)",
|
|
},
|
|
popover: {
|
|
DEFAULT: "var(--popover)",
|
|
foreground: "var(--popover-foreground)",
|
|
},
|
|
primary: {
|
|
DEFAULT: "var(--primary)",
|
|
foreground: "var(--primary-foreground)",
|
|
},
|
|
secondary: {
|
|
DEFAULT: "var(--secondary)",
|
|
foreground: "var(--secondary-foreground)",
|
|
},
|
|
muted: {
|
|
DEFAULT: "var(--muted)",
|
|
foreground: "var(--muted-foreground)",
|
|
},
|
|
accent: {
|
|
DEFAULT: "var(--accent)",
|
|
foreground: "var(--accent-foreground)",
|
|
},
|
|
destructive: {
|
|
DEFAULT: "var(--destructive)",
|
|
foreground: "var(--destructive-foreground)",
|
|
},
|
|
border: "var(--border)",
|
|
input: "var(--input)",
|
|
ring: "var(--ring)",
|
|
// Warm brown palette
|
|
cream: "#FAF8F3",
|
|
sand: "#EFEBE9",
|
|
brown: {
|
|
50: "#EFEBE9",
|
|
100: "#D7CCC8",
|
|
200: "#BCAAA4",
|
|
300: "#A1887F",
|
|
400: "#8D6E63",
|
|
500: "#795548",
|
|
600: "#6D4C41",
|
|
700: "#5D4037",
|
|
800: "#4E342E",
|
|
900: "#3E2723",
|
|
},
|
|
stone: {
|
|
50: "#FAFAF9",
|
|
100: "#F5F5F4",
|
|
200: "#E7E5E4",
|
|
300: "#D6D3D1",
|
|
400: "#A8A29E",
|
|
500: "#78716C",
|
|
600: "#57534E",
|
|
700: "#44403C",
|
|
800: "#292524",
|
|
900: "#1C1917",
|
|
},
|
|
liquid: {
|
|
mint: "#A7F3D0",
|
|
lavender: "#DDD6FE",
|
|
blue: "#BFDBFE",
|
|
rose: "#FECACA",
|
|
yellow: "#FDE68A",
|
|
peach: "#FED7AA",
|
|
pink: "#FBCFE8",
|
|
sky: "#BAE6FD",
|
|
lime: "#D9F99D",
|
|
coral: "#FCA5A5",
|
|
purple: "#E9D5FF",
|
|
teal: "#99F6E4",
|
|
amber: "#FDE047",
|
|
},
|
|
},
|
|
fontFamily: {
|
|
sans: ["var(--font-inter)", "sans-serif"],
|
|
serif: ["var(--font-playfair)", "Georgia", "serif"],
|
|
mono: ["var(--font-roboto-mono)", "Monaco", "Courier New", "monospace"],
|
|
},
|
|
},
|
|
},
|
|
plugins: [],
|
|
} satisfies Config;
|