import formsPlugin from '@tailwindcss/forms' import typographyPlugin from '@tailwindcss/typography' import type { Config } from 'tailwindcss' import colors from 'tailwindcss/colors' import plugin from 'tailwindcss/plugin' const accentColorBucket = colors.blue const neutralColorBucket = colors.stone const borderColor = neutralColorBucket[200] const innerRingStartOpacity = 0.8 const innerRingEndOpacity = 0.5 const outerRingStartOpacity = 0.5 const outerRingEndOpacity = 0.1 const config: Config = { content: [ './src/components/**/*.{js,ts,jsx,tsx,mdx}', './src/app/**/*.{js,ts,jsx,tsx,mdx}', ], darkMode: 'class', theme: { extend: { borderColor: { DEFAULT: borderColor, }, outlineColor: { DEFAULT: borderColor, }, colors: { accentColor: accentColorBucket[500], appBgColor: neutralColorBucket[50], borderColor, neutral: neutralColorBucket, textColor: neutralColorBucket[800], fadedTextColor: neutralColorBucket[500], shadedBgColor: accentColorBucket[100], }, fontFamily: { body: ['var(--font-raleway)', 'sans-serif'], display: ['var(--font-bitter)', 'sans-serif'], icon: ["'Font Awesome 6 Pro'"], }, animation: { animateInX: 'animateInX 0.5s ease-in-out both', animateInY: 'animateInY 0.5s ease-in-out both', animateOutX: 'animateOutX 0.5s ease-in-out both', animateOutY: 'animateOutY 0.5s ease-in-out both', float: 'float 2.5s ease-in-out infinite alternate', floatUp: 'floatUp 120s linear infinite', forceFieldSmallInner: 'forceFieldSmallInner 2s ease-in-out infinite alternate', forceFieldSmallOuter: 'forceFieldSmallOuter 2s ease-in-out infinite alternate', forceFieldInner: 'forceFieldInner 2s ease-in-out infinite alternate', forceFieldOuter: 'forceFieldOuter 2s ease-in-out infinite alternate', rotatingSphere: 'rotatingSphere 120s linear infinite', slowDriftLeft: 'driftLeft 60s linear infinite', slowerDriftLeft: 'driftLeft 120s linear infinite', slowestDriftLeft: 'driftLeft 180s linear infinite', slowTwinkle: 'twinkle 0.25s linear infinite alternate', slowerTwinkle: 'twinkle 0.5s linear infinite alternate', wobble: 'wobble 2s ease-in-out infinite alternate', }, keyframes: { animateInX: { '0%': { opacity: '0', transform: 'translateX(100%)', }, '100%': { opacity: '1', transform: 'translateX(0)', }, }, animateOutX: { '0%': { maxHeight: '200px', opacity: '1', transform: 'translateX(0%)', }, '70%': { maxHeight: '200px', opacity: '0', transform: 'translateX(100%)', }, '100%': { maxHeight: '0', opacity: '0', transform: 'translateX(100%)', }, }, animateInY: { '0%': { opacity: '0', transform: 'translateY(100%)', }, '100%': { opacity: '1', transform: 'translateY(0)', }, }, animateOutY: { '0%': { opacity: '1', transform: 'translateY(0%)', }, '100%': { opacity: '0', transform: 'translateY(-100%)', }, }, driftLeft: { '0%': { opacity: '0', transform: 'translateX(0)', }, '5%, 95%': { opacity: '1', }, '100%': { opacity: '0', transform: 'translateX(-120vw)', }, }, float: { '0%': { transform: 'translateY(-3%)', }, '100%': { transform: 'translateY(3%)', }, }, floatUp: { '0%': { transform: 'translateX(0) translateY(0)', }, '100%': { transform: 'translateX(10vw) translateY(-110vh) rotate(10deg)', }, }, forceFieldSmallInner: { '0%': { opacity: String(innerRingStartOpacity), strokeWidth: '5px', }, '100%': { opacity: String(innerRingEndOpacity), strokeWidth: '20px', }, }, forceFieldSmallOuter: { '0%': { opacity: String(outerRingStartOpacity), strokeWidth: '10px', }, '100%': { opacity: String(outerRingEndOpacity), strokeWidth: '30px', }, }, forceFieldInner: { '0%': { opacity: String(innerRingStartOpacity), strokeWidth: '10px', }, '100%': { opacity: String(innerRingEndOpacity), strokeWidth: '60px', }, }, forceFieldOuter: { '0%': { opacity: String(outerRingStartOpacity), strokeWidth: '20px', }, '100%': { opacity: String(outerRingEndOpacity), strokeWidth: '100px', }, }, rotatingSphere: { '0%': { transform: 'rotate(0)', }, '100%': { transform: 'rotate(359deg)', }, }, twinkle: { '0%': { opacity: '0.9', }, '50%': { opacity: '0.8', }, '100%': { opacity: '1', }, }, wobble: { '0%': { transform: 'rotate(-3deg)', }, '100%': { transform: 'rotate(3deg)', }, }, }, }, }, plugins: [ plugin(function ({ addBase, theme }) { addBase({ '*': { scrollbarColor: `${theme('colors.accentColor')} transparent`, }, '*::-webkit-scrollbar': { height: theme('spacing.2'), width: theme('spacing.2'), }, '*::-webkit-scrollbar-track': { background: 'transparent', }, '*::-webkit-scrollbar-thumb': { background: theme('colors.accentColor'), borderRadius: theme('spacing.8'), }, 'a, button, input, textarea': { touchAction: 'manipulation', }, }) }), formsPlugin, typographyPlugin, ], } export default config