- Node/Express/TypeScript API under /api/v1 with JWT auth (login, refresh, logout, /me) - Prisma schema: vendors, users, roles, products, categories, taxes, transactions - SQLite for local dev; Postgres via docker-compose for production - Full CRUD routes for vendors, users, categories, taxes, products with Zod validation and RBAC - Paginated list endpoints scoped per vendor; refresh token rotation - React/TypeScript admin SPA (Vite): login, protected routing, sidebar layout - Pages: Dashboard, Catalog (tabbed Products/Categories/Taxes), Users, Vendor Settings - Shared UI: Table, Modal, FormField, Btn, PageHeader components - Multi-stage Dockerfile; docker-compose with Postgres healthcheck - Seed script with demo vendor and owner account - INSTRUCTIONS.md, ROADMAP.md, .claude/launch.json for dev server config Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
45 lines
831 B
CSS
45 lines
831 B
CSS
*, *::before, *::after {
|
|
box-sizing: border-box;
|
|
margin: 0;
|
|
padding: 0;
|
|
}
|
|
|
|
:root {
|
|
--color-primary: #2563eb;
|
|
--color-primary-hover: #1d4ed8;
|
|
--color-danger: #dc2626;
|
|
--color-success: #16a34a;
|
|
--color-warning: #d97706;
|
|
--color-bg: #f8fafc;
|
|
--color-surface: #ffffff;
|
|
--color-border: #e2e8f0;
|
|
--color-text: #0f172a;
|
|
--color-text-muted: #64748b;
|
|
--radius: 6px;
|
|
--shadow: 0 1px 3px rgba(0,0,0,0.1);
|
|
}
|
|
|
|
body {
|
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
|
|
font-size: 14px;
|
|
color: var(--color-text);
|
|
background: var(--color-bg);
|
|
line-height: 1.5;
|
|
}
|
|
|
|
a {
|
|
color: var(--color-primary);
|
|
text-decoration: none;
|
|
}
|
|
|
|
button {
|
|
cursor: pointer;
|
|
font-family: inherit;
|
|
font-size: inherit;
|
|
}
|
|
|
|
input, select, textarea {
|
|
font-family: inherit;
|
|
font-size: inherit;
|
|
}
|