Phase 0: project scaffold

- Go module + chi server with embedded SPA serving and /api/health
- internal/config env loader (local-dev defaults; auth/copyleaks deferred)
- React 19 + Vite 6 + Tailwind v4 frontend with full Petal design tokens
- Frontend embedded into the binary via web/embed.go (go:embed all:dist)
- README dev workflow, .env.example, BUILD_PLAN progress tracker
- Verified end-to-end: binary serves health, embedded SPA, and SPA fallback
This commit is contained in:
prosolis
2026-06-25 20:20:04 -07:00
commit e72d48d64e
19 changed files with 4559 additions and 0 deletions

55
web/src/index.css Normal file
View File

@@ -0,0 +1,55 @@
@import "tailwindcss";
/* Petal design tokens — soft, warm, bubbly stationery aesthetic.
Defined in @theme so they generate Tailwind utilities (bg-bg, text-plum,
rounded-card, font-ui, etc.). See petal-spec.md → Design System. */
@theme {
/* Palette */
--color-bg: #FDF6F0; /* warm cream canvas */
--color-surface: #FFFFFF; /* card/panel surfaces */
--color-surface-alt: #FFF0F5; /* rose-tinted alt surface */
--color-border: #F0E0EB; /* soft pink-grey border */
--color-plum: #3D2E39; /* warm dark plum text (not harsh black) */
--color-muted: #9B8CA3; /* muted lavender-grey */
--color-accent: #E8A0BF; /* soft rose — primary interactive */
--color-accent-hover: #D98AAF;/* deeper rose on hover */
/* Suggestion type colors */
--color-mint: #A8D8C8; /* grammar */
--color-peach: #F4B8A0; /* phrasing */
--color-lavender: #C5B4E8; /* idiom */
--color-sky: #A8CCE8; /* clarity */
--color-honey: #CE9B4F; /* voice */
--color-success: #8FCFA8; /* saved / accepted */
/* Typography */
--font-ui: "Nunito", "PingFang SC", "Microsoft YaHei", "Noto Sans CJK SC", sans-serif;
--font-body: "Lora", Georgia, serif;
--font-mono: "JetBrains Mono", ui-monospace, monospace;
/* Shape language */
--radius-card: 16px;
--radius-modal: 24px;
--radius-pill: 999px;
--radius-input: 12px;
/* Soft, warm, lifted shadow */
--shadow-soft: 0 4px 20px rgba(180, 130, 160, 0.12);
}
html, body, #root {
height: 100%;
}
body {
margin: 0;
background: var(--color-bg);
color: var(--color-plum);
font-family: var(--font-ui);
-webkit-font-smoothing: antialiased;
}
/* Gentle, consistent motion across interactive elements */
button, a, input {
transition: all 200ms ease;
}