- apps/desktop: electron-vite + React + Tailwind mapped onto design tokens (preflight off; tokens/base.css owns the reset); boots to a Reginald placeholder proving fonts/tokens/core wiring - packages/core: pure TS; gitea label schema (est/*, p/*, deadline/hard) with pessimistic conflict resolution + 15 unit tests - docs/design: full design handoff (tokens, 16 component contracts, interactive 14-screen prototype, Reginald voice rules) - docs/PLAN.md: product plan (purity rule, pm-state repo, deterministic scheduler + Monte Carlo, directive log) - Deliberate deviation from novelpad stack: no ElectricSQL/PGlite — local store is a rebuildable cache over gitea REST/webhooks (better-sqlite3 in main process, arriving in P1) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
68 lines
2.0 KiB
JavaScript
68 lines
2.0 KiB
JavaScript
/**
|
|
* Tailwind maps onto the design-token custom properties (src/renderer/src/design/tokens/)
|
|
* and never redefines their values. Preflight is off — tokens/base.css owns the reset.
|
|
* @type {import('tailwindcss').Config}
|
|
*/
|
|
export default {
|
|
content: ['./src/renderer/index.html', './src/renderer/src/**/*.{ts,tsx}'],
|
|
corePlugins: { preflight: false },
|
|
theme: {
|
|
extend: {
|
|
colors: {
|
|
paper: {
|
|
0: 'var(--paper-0)',
|
|
1: 'var(--paper-1)',
|
|
2: 'var(--paper-2)',
|
|
3: 'var(--paper-3)',
|
|
},
|
|
ink: {
|
|
1: 'var(--ink-1)',
|
|
2: 'var(--ink-2)',
|
|
3: 'var(--ink-3)',
|
|
inverse: 'var(--ink-inverse)',
|
|
},
|
|
line: {
|
|
1: 'var(--line-1)',
|
|
2: 'var(--line-2)',
|
|
},
|
|
accent: {
|
|
DEFAULT: 'var(--accent)',
|
|
hover: 'var(--accent-hover)',
|
|
pressed: 'var(--accent-pressed)',
|
|
tint: 'var(--accent-tint)',
|
|
text: 'var(--accent-text)',
|
|
},
|
|
jade: {
|
|
DEFAULT: 'var(--jade)',
|
|
tint: 'var(--jade-tint)',
|
|
},
|
|
ok: { DEFAULT: 'var(--ok)', tint: 'var(--ok-tint)' },
|
|
warn: { DEFAULT: 'var(--warn)', tint: 'var(--warn-tint)' },
|
|
danger: { DEFAULT: 'var(--danger)', tint: 'var(--danger-tint)' },
|
|
info: { DEFAULT: 'var(--info)', tint: 'var(--info-tint)' },
|
|
},
|
|
fontFamily: {
|
|
display: ['Libre Caslon Display', 'serif'],
|
|
agent: ['Libre Caslon Text', 'serif'],
|
|
sans: ['Instrument Sans', 'system-ui', 'sans-serif'],
|
|
mono: ['IBM Plex Mono', 'ui-monospace', 'monospace'],
|
|
},
|
|
borderRadius: {
|
|
1: 'var(--radius-1)',
|
|
2: 'var(--radius-2)',
|
|
3: 'var(--radius-3)',
|
|
},
|
|
boxShadow: {
|
|
1: 'var(--shadow-1)',
|
|
2: 'var(--shadow-2)',
|
|
3: 'var(--shadow-3)',
|
|
'jade-line': 'var(--shadow-jade-line)',
|
|
},
|
|
transitionTimingFunction: {
|
|
out: 'var(--ease-out)',
|
|
},
|
|
},
|
|
},
|
|
plugins: [],
|
|
}
|