import type { Config } from "tailwindcss"; import tailwindcssAnimate from "tailwindcss-animate"; import typography from "@tailwindcss/typography"; export default { darkMode: ["class"], content: ["./pages/**/*.{ts,tsx}", "./components/**/*.{ts,tsx}", "./app/**/*.{ts,tsx}", "./src/**/*.{ts,tsx}"], prefix: "", theme: { container: { center: true, padding: "2rem", screens: { "2xl": "1400px", }, }, extend: { fontFamily: { sans: ['var(--font-sans)'], serif: ['var(--font-serif)'], }, // Design System 2026: Display Typography Scale fontSize: { 'display-sm': ['3rem', { lineHeight: '1.1', letterSpacing: '-0.02em' }], 'display': ['4rem', { lineHeight: '1.05', letterSpacing: '-0.02em' }], 'display-lg': ['5rem', { lineHeight: '1', letterSpacing: '-0.03em' }], 'display-xl': ['6rem', { lineHeight: '0.95', letterSpacing: '-0.03em' }], }, // Design System 2026: Premium Easing Curves transitionTimingFunction: { 'premium': 'cubic-bezier(0.16, 1, 0.3, 1)', 'bounce-soft': 'cubic-bezier(0.34, 1.56, 0.64, 1)', 'elastic': 'cubic-bezier(0.68, -0.6, 0.32, 1.6)', }, 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))", }, destructive: { DEFAULT: "hsl(var(--destructive))", foreground: "hsl(var(--destructive-foreground))", }, success: { DEFAULT: "hsl(var(--success))", foreground: "hsl(var(--success-foreground))", }, warning: { DEFAULT: "hsl(var(--warning))", foreground: "hsl(var(--warning-foreground))", }, info: { DEFAULT: "hsl(var(--info))", foreground: "hsl(var(--info-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))", }, sidebar: { DEFAULT: "hsl(var(--sidebar-background))", foreground: "hsl(var(--sidebar-foreground))", primary: "hsl(var(--sidebar-primary))", "primary-foreground": "hsl(var(--sidebar-primary-foreground))", accent: "hsl(var(--sidebar-accent))", "accent-foreground": "hsl(var(--sidebar-accent-foreground))", border: "hsl(var(--sidebar-border))", ring: "hsl(var(--sidebar-ring))", }, }, borderRadius: { lg: "var(--radius)", md: "calc(var(--radius) - 2px)", sm: "calc(var(--radius) - 4px)", }, keyframes: { "accordion-down": { from: { height: "0" }, to: { height: "var(--radix-accordion-content-height)" }, }, "accordion-up": { from: { height: "var(--radix-accordion-content-height)" }, to: { height: "0" }, }, "fade-in": { from: { opacity: "0", transform: "translateY(8px)" }, to: { opacity: "1", transform: "translateY(0)" }, }, "slide-in-right": { from: { transform: "translateX(100%)" }, to: { transform: "translateX(0)" }, }, "slide-up": { from: { opacity: "0", transform: "translateY(30px)" }, to: { opacity: "1", transform: "translateY(0)" }, }, "typewriter": { // Vertikalt andrum (-0.25em): forwards låter slutlägets clip-path // sitta kvar för alltid, och vid tajt radhöjd (1.05) sticker // serifens underhäng utanför radboxen — inset(0) kapade g:et i // "ground". Svepet är horisontellt; topp/botten ska aldrig klippa. from: { opacity: "0", clipPath: "inset(-0.25em 100% -0.25em 0)" }, to: { opacity: "1", clipPath: "inset(-0.25em 0 -0.25em 0)" }, }, "blink": { "0%, 100%": { borderColor: "transparent" }, "50%": { borderColor: "currentColor" }, }, "bounce-down": { "0%, 100%": { transform: "translateY(0)" }, "50%": { transform: "translateY(8px)" }, }, // Design System 2026: Premium Animations "zoom-in": { from: { opacity: "0", transform: "scale(0.95)" }, to: { opacity: "1", transform: "scale(1)" }, }, "blur-in": { from: { opacity: "0", filter: "blur(8px)" }, to: { opacity: "1", filter: "blur(0)" }, }, "rotate-in": { from: { opacity: "0", transform: "rotate(-3deg) scale(0.95)" }, to: { opacity: "1", transform: "rotate(0) scale(1)" }, }, "glow-pulse": { "0%, 100%": { boxShadow: "0 0 20px hsl(var(--primary) / 0.3)" }, "50%": { boxShadow: "0 0 40px hsl(var(--primary) / 0.5)" }, }, }, animation: { "accordion-down": "accordion-down 0.2s ease-out", "accordion-up": "accordion-up 0.2s ease-out", "fade-in": "fade-in 0.3s ease-out", "slide-in-right": "slide-in-right 0.3s ease-out", "slide-up": "slide-up 0.6s ease-out", "typewriter": "typewriter 3s steps(80) forwards", "blink": "blink 1s step-end infinite", "bounce-down": "bounce-down 1.5s ease-in-out infinite", // Design System 2026 "zoom-in": "zoom-in 0.5s cubic-bezier(0.16, 1, 0.3, 1)", "blur-in": "blur-in 0.6s cubic-bezier(0.16, 1, 0.3, 1)", "rotate-in": "rotate-in 0.5s cubic-bezier(0.16, 1, 0.3, 1)", "glow-pulse": "glow-pulse 2s ease-in-out infinite", }, }, }, plugins: [tailwindcssAnimate, typography], } satisfies Config;