openreader/tailwind.config.ts
Richard R 432ace778c refactor(ui): improve segmented control accessibility and update danger color tokens
Update SegmentedControl to support full keyboard navigation and focus management,
enhancing accessibility. Replace string indicator in Select with icon, and update
button danger variant to use new --danger-strong variable for hover states. Add
danger-strong token to Tailwind config and globals. Refine dropzone disabled
behavior, adjust focus ring for better contrast, and apply minor UI consistency
tweaks across components.
2026-06-01 15:20:28 -06:00

108 lines
3.4 KiB
TypeScript

import type { Config } from "tailwindcss";
import typography from "@tailwindcss/typography";
export default {
content: [
"./src/pages/**/*.{js,ts,jsx,tsx,mdx}",
"./src/components/**/*.{js,ts,jsx,tsx,mdx}",
"./src/app/**/*.{js,ts,jsx,tsx,mdx}",
],
darkMode: 'class',
theme: {
extend: {
colors: {
background: "var(--background)",
foreground: "var(--foreground)",
base: "var(--base)",
offbase: "var(--offbase)",
accent: "var(--accent)",
"secondary-accent": "var(--secondary-accent)",
muted: "var(--muted)",
surface: "var(--surface)",
"surface-solid": "var(--surface-solid)",
"surface-sunken": "var(--surface-sunken)",
line: "var(--line)",
"line-soft": "var(--line-soft)",
"line-strong": "var(--line-strong)",
soft: "var(--soft)",
faint: "var(--faint)",
"accent-wash": "var(--accent-wash)",
"accent-line": "var(--accent-line)",
"accent-strong": "var(--accent-strong)",
danger: "var(--danger)",
"danger-strong": "var(--danger-strong)",
"danger-wash": "var(--danger-wash)",
},
boxShadow: {
"elev-1": "var(--elev-1)",
"elev-2": "var(--elev-2)",
"elev-3": "var(--elev-3)",
},
borderRadius: {
sm: "6px",
md: "10px",
lg: "14px",
pill: "999px",
},
transitionDuration: {
fast: "var(--dur-fast)",
base: "var(--dur-base)",
slow: "var(--dur-slow)",
},
transitionTimingFunction: {
standard: "var(--ease)",
},
animation: {
'spin-slow': 'spin 2s linear infinite',
'fade-in': 'fadeIn 200ms ease-in',
'fade-out': 'fadeOut 200ms ease-out',
'scale-in': 'scaleIn 200ms ease-in',
'scale-out': 'scaleOut 200ms ease-out',
},
keyframes: {
fadeIn: {
'0%': { opacity: '0' },
'100%': { opacity: '1' },
},
fadeOut: {
'0%': { opacity: '1' },
'100%': { opacity: '0' },
},
scaleIn: {
'0%': { transform: 'scale(0.95)', opacity: '0' },
'100%': { transform: 'scale(1)', opacity: '1' },
},
scaleOut: {
'0%': { transform: 'scale(1)', opacity: '1' },
'100%': { transform: 'scale(0.95)', opacity: '0' },
},
},
typography: {
DEFAULT: {
css: {
'--tw-prose-body': 'var(--foreground)',
'--tw-prose-headings': 'var(--foreground)',
'--tw-prose-lead': 'var(--muted)',
'--tw-prose-links': 'var(--accent)',
'--tw-prose-bold': 'var(--foreground)',
'--tw-prose-counters': 'var(--muted)',
'--tw-prose-bullets': 'var(--muted)',
'--tw-prose-hr': 'var(--offbase)',
'--tw-prose-quotes': 'var(--foreground)',
'--tw-prose-quote-borders': 'var(--offbase)',
'--tw-prose-captions': 'var(--muted)',
'--tw-prose-code': 'var(--foreground)',
'--tw-prose-pre-code': 'var(--foreground)',
'--tw-prose-pre-bg': 'var(--base)',
'--tw-prose-th-borders': 'var(--offbase)',
'--tw-prose-td-borders': 'var(--offbase)',
},
},
},
screens: {
xs: '410px', // custom xs breakpoint
},
},
},
plugins: [typography],
} satisfies Config;