Tasks 5-7: eval harness, FastAPI backend, Paper & Ink UI- src/eval/ β precision/recall/F1 harness with type-aware comparators,micro/macro F1, CSV + markdown reports, --model benchmark flag- src/api/ β FastAPI backend with /extract, /schemas, /health,request-ID middleware, typed error envelope, injectable extractor- ui/ β Vite + React + TS + Tailwind + Motion + React Three FiberPaper & Ink editorial UI with 3D paper hero, dark/light mode,confidence inkwell, wax-stamp metrics, kinetic typography- 95 passing tests (up from 54); UI is a separate npm workspace
557ab38 | import type { Config } from "tailwindcss"; | |
| /** | |
| * Tailwind is used strictly for utility layout + spacing. | |
| * All colors, typography, and design tokens live in CSS variables (theme.css) | |
| * so dark/light mode is one attribute flip on <html data-theme="...">. | |
| * We reference variables via arbitrary values: text-[var(--ink)] etc. | |
| */ | |
| export default { | |
| content: ["./index.html", "./src/**/*.{ts,tsx}"], | |
| darkMode: ["class", '[data-theme="dark"]'], | |
| theme: { | |
| extend: { | |
| fontFamily: { | |
| serif: ['"Instrument Serif"', "serif"], | |
| sans: ['"Geist"', "system-ui", "sans-serif"], | |
| mono: ['"JetBrains Mono"', "ui-monospace", "monospace"], | |
| }, | |
| transitionTimingFunction: { | |
| // The house easing β expo out. Everything eases like this. | |
| editorial: "cubic-bezier(0.16, 1, 0.3, 1)", | |
| }, | |
| }, | |
| }, | |
| plugins: [], | |
| } satisfies Config; | |