import defaultTheme from "tailwindcss/defaultTheme"; import flattenColorPalette from "tailwindcss/lib/util/flattenColorPalette"; import svgToDataUri from "mini-svg-data-uri"; /** @type {import('tailwindcss').Config} */ export default { darkMode: ["class"], plugins: [ addVariablesForColors, function ({ matchUtilities, theme }) { matchUtilities( { "bg-grid": (value) => ({ backgroundImage: `url("${svgToDataUri( ``, )}")`, }), "bg-grid-small": (value) => ({ backgroundImage: `url("${svgToDataUri( ``, )}")`, }), "bg-dot": (value) => ({ backgroundImage: `url("${svgToDataUri( ``, )}")`, }), }, { values: flattenColorPalette(theme("backgroundColor")), type: "color", }, ); }, ], theme: { extend: { fontFamily: { sans: ["var(--font-geist-sans)"], mono: ["var(--font-geist-mono)"], display: [...defaultTheme.fontFamily.sans], }, borderRadius: { lg: "var(--radius)", md: "calc(var(--radius) - 2px)", sm: "calc(var(--radius) - 4px)", }, keyframes: { marquee: { from: { transform: "translateX(0)" }, to: { transform: "translateX(calc(-100% - var(--gap)))" }, }, "marquee-vertical": { from: { transform: "translateY(0)" }, to: { transform: "translateY(calc(-100% - var(--gap)))" }, }, "hrtl-scroll": { from: { transform: "translateX(0)" }, to: { transform: "translateX(calc(-95%))" }, }, "hrtl-scroll-reverse": { from: { transform: "translateX(calc(-95%))" }, to: { transform: "translateX(0)" }, }, ripple: { "0% , 100%": { transform: "translate(-50% , -50%) scale(1)", }, "50%": { transform: "translate(-50% , -50%) scale(0.9)", }, }, "accordion-down": { from: { height: "0", }, to: { height: "var(--radix-accordion-content-height)", }, }, "accordion-up": { from: { height: "var(--radix-accordion-content-height)", }, to: { height: "0", }, }, scroll: { to: { transform: "translate(calc(-50% - 0.5rem))", }, }, spotlight: { "0%": { opacity: 0, transform: "translate(-72%, -62%) scale(0.5)", }, "100%": { opacity: 1, transform: "translate(-50%,-40%) scale(1)", }, }, }, animation: { "accordion-down": "accordion-down 0.2s ease-out", "accordion-up": "accordion-up 0.2s ease-out", ripple: "ripple var(--duration,2s) ease calc(var(--i, 0)*.2s) infinite", scroll: "scroll var(--animation-duration, 40s) var(--animation-direction, forwards) linear infinite", "hrtl-scroll": "hrtl-scroll var(--anime-duration,10s) linear infinite", "hrtl-scroll-reverse": "hrtl-scroll-reverse var(--anime-duration,10s) linear infinite", spotlight: "spotlight 2s ease .30s 1 forwards", }, }, }, }; function addVariablesForColors({ addBase, theme }) { let allColors = flattenColorPalette(theme("colors")); let newVars = Object.fromEntries( Object.entries(allColors).map(([key, val]) => [`--${key}`, val]), ); addBase({ ":root": newVars, }); }