- Font: Geist (Vercel) sostituisce Fraunces/Inter Tight; GeistMono al posto di JetBrains Mono. `--font-display`, `--font-sans`, `--font-mono` mappati tutti su Geist via alias CSS — vocabolario tipografico unificato sans-serif moderno. - Layout: rimosso `mx-auto max-w-7xl` da 7 pagine app (root, onboarding, profile, plan, tracking, fasting, shopping, recipe detail). Sostituito con `w-full px-6 sm:px-10 lg:px-16 xl:px-24` — edge-to-edge, ma respiro su 4K. Welcome/sign-in/sign-up restano stretti (testo lungo / form login). - Tailwind: fontFamily fallback display da `Georgia, serif` a `system-ui` sans. Rimosse le OpenType features di Fraunces (`cv11`, `dlig`) — Geist usa `ss01`/`ss03`. - Cleanup: rimosso `docs/~\$D_KetoPath.docx` (Word lockfile residuo). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
116 lines
3.3 KiB
TypeScript
116 lines
3.3 KiB
TypeScript
import type { Config } from 'tailwindcss';
|
|
import animate from 'tailwindcss-animate';
|
|
|
|
const config: Config = {
|
|
darkMode: ['class'],
|
|
content: ['./src/**/*.{ts,tsx}', '../../packages/ui/src/**/*.{ts,tsx}'],
|
|
theme: {
|
|
container: {
|
|
center: true,
|
|
padding: '2rem',
|
|
screens: { '2xl': '1400px' },
|
|
},
|
|
extend: {
|
|
fontFamily: {
|
|
display: [
|
|
'var(--font-display)',
|
|
'system-ui',
|
|
'-apple-system',
|
|
'BlinkMacSystemFont',
|
|
'sans-serif',
|
|
],
|
|
sans: [
|
|
'var(--font-sans)',
|
|
'system-ui',
|
|
'-apple-system',
|
|
'BlinkMacSystemFont',
|
|
'sans-serif',
|
|
],
|
|
mono: ['var(--font-mono)', 'ui-monospace', 'SFMono-Regular', 'monospace'],
|
|
},
|
|
fontSize: {
|
|
// tighter editorial display sizes
|
|
display: ['clamp(2.75rem, 7vw, 5rem)', { lineHeight: '0.95', letterSpacing: '-0.025em' }],
|
|
'display-lg': [
|
|
'clamp(3.5rem, 10vw, 7.5rem)',
|
|
{ lineHeight: '0.92', letterSpacing: '-0.035em' },
|
|
],
|
|
},
|
|
colors: {
|
|
carta: {
|
|
DEFAULT: 'hsl(var(--carta))',
|
|
light: 'hsl(var(--carta-light))',
|
|
dim: 'hsl(var(--carta-dim))',
|
|
},
|
|
ink: {
|
|
DEFAULT: 'hsl(var(--ink))',
|
|
soft: 'hsl(var(--ink-soft))',
|
|
dim: 'hsl(var(--ink-dim))',
|
|
},
|
|
oliva: 'hsl(var(--oliva))',
|
|
pomodoro: 'hsl(var(--pomodoro))',
|
|
oro: 'hsl(var(--oro))',
|
|
rule: 'hsl(var(--rule))',
|
|
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))',
|
|
},
|
|
destructive: {
|
|
DEFAULT: 'hsl(var(--destructive))',
|
|
foreground: 'hsl(var(--destructive-foreground))',
|
|
},
|
|
muted: {
|
|
DEFAULT: 'hsl(var(--muted))',
|
|
foreground: 'hsl(var(--muted-foreground))',
|
|
},
|
|
accent: {
|
|
DEFAULT: 'hsl(var(--accent))',
|
|
foreground: 'hsl(var(--accent-foreground))',
|
|
},
|
|
popover: {
|
|
DEFAULT: 'hsl(var(--popover))',
|
|
foreground: 'hsl(var(--popover-foreground))',
|
|
},
|
|
card: {
|
|
DEFAULT: 'hsl(var(--card))',
|
|
foreground: 'hsl(var(--card-foreground))',
|
|
},
|
|
},
|
|
borderRadius: {
|
|
lg: 'var(--radius)',
|
|
md: 'calc(var(--radius) - 1px)',
|
|
sm: '1px',
|
|
},
|
|
letterSpacing: {
|
|
widest: '0.22em',
|
|
},
|
|
keyframes: {
|
|
'fade-up': {
|
|
'0%': { opacity: '0', transform: 'translateY(0.75rem)' },
|
|
'100%': { opacity: '1', transform: 'translateY(0)' },
|
|
},
|
|
'rule-in': {
|
|
'0%': { transform: 'scaleX(0)' },
|
|
'100%': { transform: 'scaleX(1)' },
|
|
},
|
|
},
|
|
animation: {
|
|
'fade-up': 'fade-up 700ms cubic-bezier(0.2, 0.7, 0.2, 1) both',
|
|
'rule-in': 'rule-in 800ms cubic-bezier(0.7, 0, 0.3, 1) both',
|
|
},
|
|
},
|
|
},
|
|
plugins: [animate],
|
|
};
|
|
|
|
export default config;
|