import animate from 'tailwindcss-animate';

/**
 * Hand-written, never CLI-generated. `shadcn add` rewrites this file and
 * strips every comment in it, so if you run the CLI, diff this file
 * afterwards and put the comments back.
 *
 * The palette is PIG's, inlined as literals rather than injected at runtime:
 * this site has no user-chosen accent, so a runtime theme layer would be a
 * moving part that buys nothing.
 */
/** @type {import('tailwindcss').Config} */
export default {
  darkMode: ['class', '[data-theme="dark"]'],
  content: ['./index.html', './src/**/*.{ts,tsx}'],
  theme: {
    extend: {
      colors: {
        bg: 'hsl(var(--bg))',
        background: 'hsl(var(--bg))',
        surface: 'hsl(var(--surface))',
        'surface-2': 'hsl(var(--surface-2))',
        border: 'hsl(var(--border))',
        input: 'hsl(var(--border))',
        ring: 'hsl(var(--accent))',
        fg: 'hsl(var(--fg))',
        foreground: 'hsl(var(--fg))',
        muted: 'hsl(var(--muted))',
        'muted-foreground': 'hsl(var(--muted))',
        // shadcn's `accent` is its SUBTLE hover surface, not the brand. Mapping
        // it to the brand paints a full-strength block on every hover state.
        accent: 'hsl(var(--accent-subtle))',
        'accent-foreground': 'hsl(var(--accent-fg))',
        brand: 'hsl(var(--accent))',
        'accent-fg': 'hsl(var(--accent-fg))',
        'accent-on': 'hsl(var(--accent-on))',
        'accent-subtle': 'hsl(var(--accent-subtle))',
        primary: { DEFAULT: 'hsl(var(--accent))', foreground: 'hsl(var(--accent-on))' },
        secondary: { DEFAULT: 'hsl(var(--surface-2))', foreground: 'hsl(var(--fg))' },
        card: { DEFAULT: 'hsl(var(--surface))', foreground: 'hsl(var(--fg))' },
        popover: { DEFAULT: 'hsl(var(--surface))', foreground: 'hsl(var(--fg))' },
        destructive: { DEFAULT: 'hsl(var(--danger))', foreground: 'hsl(0 0% 100%)' },
        positive: 'hsl(var(--positive))',
        warning: 'hsl(var(--warning))',
        danger: 'hsl(var(--danger))',
        info: 'hsl(var(--info))',
        // The board's three tile states. Named by MEANING, not by colour, so
        // the high-contrast palette can swap the values without renaming.
        tile: {
          exact: 'hsl(var(--tile-exact))',
          'exact-fg': 'hsl(var(--tile-exact-fg))',
          present: 'hsl(var(--tile-present))',
          'present-fg': 'hsl(var(--tile-present-fg))',
          absent: 'hsl(var(--tile-absent))',
          'absent-fg': 'hsl(var(--tile-absent-fg))',
        },
      },
      fontFamily: {
        sans: ['Manrope Variable', 'Avenir Next', 'ui-sans-serif', 'system-ui', 'sans-serif'],
        mono: ['ui-monospace', 'SFMono-Regular', 'Menlo', 'monospace'],
      },
      borderRadius: { md: '0.5rem', lg: '0.75rem', xl: '1rem' },
      transitionDuration: { 1: 'var(--dur-1)', 2: 'var(--dur-2)', 3: 'var(--dur-3)' },
      transitionTimingFunction: { enter: 'var(--ease-out)', exit: 'var(--ease-in)' },
      maxWidth: { canvas: '80rem' },
    },
  },
  plugins: [animate],
};
