2026-05-21 12:30:41 -04:00
|
|
|
/** @type {import('tailwindcss').Config} */
|
|
|
|
|
module.exports = {
|
|
|
|
|
content: [
|
|
|
|
|
'./public/**/*.html',
|
|
|
|
|
'./src/**/*.{css,js}',
|
|
|
|
|
],
|
2026-05-21 12:41:55 -04:00
|
|
|
safelist: [
|
|
|
|
|
{ pattern: /^wd-/ },
|
|
|
|
|
{ pattern: /^is-/ },
|
|
|
|
|
'nav-dev-badge',
|
|
|
|
|
],
|
2026-05-21 12:30:41 -04:00
|
|
|
darkMode: 'class',
|
|
|
|
|
theme: {
|
|
|
|
|
extend: {
|
|
|
|
|
colors: {
|
|
|
|
|
// ── Surfaces (5-step depth, tinted toward brand hue 266) ──
|
|
|
|
|
'bg-deep': 'oklch(8% 0.011 266)',
|
|
|
|
|
'bg-base': 'oklch(11% 0.010 266)',
|
|
|
|
|
'bg-panel': 'oklch(15% 0.013 266)',
|
|
|
|
|
'bg-surface': 'oklch(19% 0.014 266)',
|
|
|
|
|
'bg-raised': 'oklch(24% 0.015 266)',
|
|
|
|
|
'bg-hover': 'oklch(28% 0.015 266)',
|
|
|
|
|
|
|
|
|
|
// ── Accent (brand) ──
|
|
|
|
|
accent: {
|
|
|
|
|
DEFAULT: 'oklch(45% 0.20 266)',
|
|
|
|
|
subtle: 'oklch(55% 0.20 266 / 0.12)',
|
|
|
|
|
border: 'oklch(55% 0.20 266 / 0.36)',
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// ── Text ──
|
|
|
|
|
'text-primary': 'oklch(94% 0.008 266)',
|
|
|
|
|
'text-secondary': 'oklch(72% 0.014 266)',
|
|
|
|
|
// tertiary bumped from 52% to 56% per a11y section in the spec
|
|
|
|
|
'text-tertiary': 'oklch(56% 0.012 266)',
|
|
|
|
|
'text-disabled': 'oklch(38% 0.010 266)',
|
|
|
|
|
|
|
|
|
|
// ── Borders ──
|
|
|
|
|
'border-faint': 'oklch(22% 0.013 266)',
|
|
|
|
|
'border-default': 'oklch(28% 0.015 266)',
|
|
|
|
|
'border-strong': 'oklch(38% 0.018 266)',
|
|
|
|
|
|
|
|
|
|
// ── Status / semantic signal ──
|
|
|
|
|
'signal-good': 'oklch(70% 0.18 148)',
|
|
|
|
|
'signal-bad': 'oklch(64% 0.22 25)',
|
|
|
|
|
'signal-warn': 'oklch(80% 0.16 90)',
|
|
|
|
|
'signal-idle': 'oklch(58% 0.012 266)',
|
|
|
|
|
'signal-good-bg': 'oklch(70% 0.18 148 / 0.12)',
|
|
|
|
|
'signal-bad-bg': 'oklch(64% 0.22 25 / 0.12)',
|
|
|
|
|
'signal-warn-bg': 'oklch(80% 0.16 90 / 0.12)',
|
|
|
|
|
},
|
|
|
|
|
fontFamily: {
|
|
|
|
|
sans: ['Inter', '-apple-system', 'BlinkMacSystemFont', 'Segoe UI', 'system-ui', 'sans-serif'],
|
|
|
|
|
mono: ['"JetBrains Mono"', 'ui-monospace', '"SF Mono"', 'Consolas', 'monospace'],
|
|
|
|
|
},
|
|
|
|
|
fontSize: {
|
|
|
|
|
// tighter scale per density target
|
|
|
|
|
'xs': ['11px', { lineHeight: '1.4' }],
|
|
|
|
|
'sm': ['13px', { lineHeight: '1.5' }],
|
|
|
|
|
'base': ['14px', { lineHeight: '1.5' }],
|
|
|
|
|
'md': ['16px', { lineHeight: '1.4' }],
|
|
|
|
|
'lg': ['18px', { lineHeight: '1.4' }],
|
|
|
|
|
'xl': ['22px', { lineHeight: '1.3' }],
|
|
|
|
|
'2xl': ['28px', { lineHeight: '1.2' }],
|
|
|
|
|
'3xl': ['40px', { lineHeight: '1.1' }],
|
|
|
|
|
'tc': ['64px', { lineHeight: '1' }], // tally-grade timecode
|
|
|
|
|
},
|
|
|
|
|
borderRadius: {
|
|
|
|
|
'sm': '4px',
|
|
|
|
|
'md': '6px',
|
|
|
|
|
'lg': '8px',
|
|
|
|
|
},
|
|
|
|
|
transitionTimingFunction: {
|
|
|
|
|
'out-quart': 'cubic-bezier(0.25, 1, 0.5, 1)',
|
|
|
|
|
'out-expo': 'cubic-bezier(0.16, 1, 0.3, 1)',
|
|
|
|
|
},
|
|
|
|
|
transitionDuration: {
|
|
|
|
|
'120': '120ms',
|
|
|
|
|
'180': '180ms',
|
|
|
|
|
'240': '240ms',
|
|
|
|
|
},
|
|
|
|
|
zIndex: {
|
|
|
|
|
'dropdown': '40',
|
|
|
|
|
'overlay': '80',
|
|
|
|
|
'panel': '90',
|
|
|
|
|
'toast': '200',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
plugins: [
|
|
|
|
|
require('flyonui'),
|
|
|
|
|
],
|
|
|
|
|
};
|