From 387445e089ad36d92a6e061bb80100911e536a44 Mon Sep 17 00:00:00 2001 From: nitrix Date: Thu, 5 Mar 2026 10:55:53 +0100 Subject: [PATCH] Remove Vue scaffolding and add design system foundation Strip default Vue components (HelloWorld, TheWelcome, icons, AboutView), base.css, and placeholder assets. Add Sora font (self-hosted WOFF2), Electric Dusk color palette, and design system spec. Co-Authored-By: Claude Opus 4.6 --- frontend/.gitignore | 1 + frontend/index.html | 5 +- frontend/public/favicon.ico | Bin 4286 -> 0 bytes frontend/src/App.vue | 88 +------- frontend/src/assets/base.css | 86 -------- frontend/src/assets/fonts/Sora-Variable.woff2 | Bin 0 -> 59912 bytes frontend/src/assets/logo.svg | 1 - frontend/src/assets/main.css | 196 +++++++++++++++--- frontend/src/components/HelloWorld.vue | 41 ---- frontend/src/components/TheWelcome.vue | 95 --------- frontend/src/components/WelcomeItem.vue | 87 -------- .../components/__tests__/HelloWorld.spec.ts | 11 - .../src/components/icons/IconCommunity.vue | 7 - .../components/icons/IconDocumentation.vue | 7 - .../src/components/icons/IconEcosystem.vue | 7 - frontend/src/components/icons/IconSupport.vue | 7 - frontend/src/components/icons/IconTooling.vue | 19 -- frontend/src/views/AboutView.vue | 15 -- spec/design-system.md | 85 ++++++++ 19 files changed, 265 insertions(+), 493 deletions(-) delete mode 100644 frontend/public/favicon.ico delete mode 100644 frontend/src/assets/base.css create mode 100644 frontend/src/assets/fonts/Sora-Variable.woff2 delete mode 100644 frontend/src/assets/logo.svg delete mode 100644 frontend/src/components/HelloWorld.vue delete mode 100644 frontend/src/components/TheWelcome.vue delete mode 100644 frontend/src/components/WelcomeItem.vue delete mode 100644 frontend/src/components/__tests__/HelloWorld.spec.ts delete mode 100644 frontend/src/components/icons/IconCommunity.vue delete mode 100644 frontend/src/components/icons/IconDocumentation.vue delete mode 100644 frontend/src/components/icons/IconEcosystem.vue delete mode 100644 frontend/src/components/icons/IconSupport.vue delete mode 100644 frontend/src/components/icons/IconTooling.vue delete mode 100644 frontend/src/views/AboutView.vue create mode 100644 spec/design-system.md diff --git a/frontend/.gitignore b/frontend/.gitignore index cd68f14..2fbe504 100644 --- a/frontend/.gitignore +++ b/frontend/.gitignore @@ -37,3 +37,4 @@ __screenshots__/ # Vite *.timestamp-*-*.mjs +.rodney/ diff --git a/frontend/index.html b/frontend/index.html index 9e5fc8f..09d1b1b 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -1,10 +1,9 @@ - + - - Vite App + fete
diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico deleted file mode 100644 index df36fcfb72584e00488330b560ebcf34a41c64c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 7905b05..c80ecb7 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -1,85 +1,9 @@ - - - + diff --git a/frontend/src/assets/base.css b/frontend/src/assets/base.css deleted file mode 100644 index 8816868..0000000 --- a/frontend/src/assets/base.css +++ /dev/null @@ -1,86 +0,0 @@ -/* color palette from */ -:root { - --vt-c-white: #ffffff; - --vt-c-white-soft: #f8f8f8; - --vt-c-white-mute: #f2f2f2; - - --vt-c-black: #181818; - --vt-c-black-soft: #222222; - --vt-c-black-mute: #282828; - - --vt-c-indigo: #2c3e50; - - --vt-c-divider-light-1: rgba(60, 60, 60, 0.29); - --vt-c-divider-light-2: rgba(60, 60, 60, 0.12); - --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65); - --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48); - - --vt-c-text-light-1: var(--vt-c-indigo); - --vt-c-text-light-2: rgba(60, 60, 60, 0.66); - --vt-c-text-dark-1: var(--vt-c-white); - --vt-c-text-dark-2: rgba(235, 235, 235, 0.64); -} - -/* semantic color variables for this project */ -:root { - --color-background: var(--vt-c-white); - --color-background-soft: var(--vt-c-white-soft); - --color-background-mute: var(--vt-c-white-mute); - - --color-border: var(--vt-c-divider-light-2); - --color-border-hover: var(--vt-c-divider-light-1); - - --color-heading: var(--vt-c-text-light-1); - --color-text: var(--vt-c-text-light-1); - - --section-gap: 160px; -} - -@media (prefers-color-scheme: dark) { - :root { - --color-background: var(--vt-c-black); - --color-background-soft: var(--vt-c-black-soft); - --color-background-mute: var(--vt-c-black-mute); - - --color-border: var(--vt-c-divider-dark-2); - --color-border-hover: var(--vt-c-divider-dark-1); - - --color-heading: var(--vt-c-text-dark-1); - --color-text: var(--vt-c-text-dark-2); - } -} - -*, -*::before, -*::after { - box-sizing: border-box; - margin: 0; - font-weight: normal; -} - -body { - min-height: 100vh; - color: var(--color-text); - background: var(--color-background); - transition: - color 0.5s, - background-color 0.5s; - line-height: 1.6; - font-family: - Inter, - -apple-system, - BlinkMacSystemFont, - 'Segoe UI', - Roboto, - Oxygen, - Ubuntu, - Cantarell, - 'Fira Sans', - 'Droid Sans', - 'Helvetica Neue', - sans-serif; - font-size: 15px; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} diff --git a/frontend/src/assets/fonts/Sora-Variable.woff2 b/frontend/src/assets/fonts/Sora-Variable.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ec8eccada34c718ebc372d6169f45f33ac72d1fd GIT binary patch literal 59912 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 literal 0 HcmV?d00001 diff --git a/frontend/src/assets/logo.svg b/frontend/src/assets/logo.svg deleted file mode 100644 index 7565660..0000000 --- a/frontend/src/assets/logo.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/frontend/src/assets/main.css b/frontend/src/assets/main.css index 36fb845..62440ad 100644 --- a/frontend/src/assets/main.css +++ b/frontend/src/assets/main.css @@ -1,35 +1,181 @@ -@import './base.css'; +@font-face { + font-family: 'Sora'; + src: url('@/assets/fonts/Sora-Variable.woff2') format('woff2'); + font-weight: 100 800; + font-display: swap; + font-style: normal; +} + +:root { + /* Colors: Electric Dusk */ + --color-gradient-start: #f06292; + --color-gradient-mid: #ab47bc; + --color-gradient-end: #5c6bc0; + --color-accent: #ff7043; + --color-text: #1c1c1e; + --color-text-on-gradient: #ffffff; + --color-surface: #fff5f8; + --color-card: #ffffff; + + /* Gradient */ + --gradient-primary: linear-gradient(135deg, #f06292 0%, #ab47bc 50%, #5c6bc0 100%); + + /* Spacing */ + --spacing-xs: 0.5rem; + --spacing-sm: 0.75rem; + --spacing-md: 1rem; + --spacing-lg: 1.2rem; + --spacing-xl: 1.5rem; + --spacing-2xl: 2rem; + + /* Borders */ + --radius-card: 14px; + --radius-button: 14px; + + /* Shadows */ + --shadow-card: 0 2px 8px rgba(0, 0, 0, 0.1); + --shadow-button: 0 2px 8px rgba(0, 0, 0, 0.15); + + /* Layout */ + --content-max-width: 480px; + --content-padding: 1.2rem; +} + +*, +*::before, +*::after { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +html { + font-family: 'Sora', system-ui, -apple-system, sans-serif; + font-size: 16px; + line-height: 1.5; + color: var(--color-text); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +body { + min-height: 100vh; + background: var(--gradient-primary); +} #app { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - font-weight: normal; + min-height: 100vh; + display: flex; + flex-direction: column; + align-items: center; } -a, -.green { +.app-container { + width: 100%; + max-width: var(--content-max-width); + min-height: 100vh; + padding: var(--content-padding); + display: flex; + flex-direction: column; +} + +/* Card-style form fields */ +.form-field { + background: var(--color-card); + border: none; + border-radius: var(--radius-card); + padding: var(--spacing-md) var(--spacing-md); + box-shadow: var(--shadow-card); + width: 100%; + font-family: inherit; + font-size: 0.95rem; + font-weight: 400; + color: var(--color-text); + outline: none; + transition: box-shadow 0.2s ease; +} + +.form-field:focus { + box-shadow: 0 2px 12px rgba(0, 0, 0, 0.18); +} + +.form-field::placeholder { + color: #999; + font-weight: 400; +} + +textarea.form-field { + resize: vertical; + min-height: 5rem; +} + +/* Form group (label + input) */ +.form-group { + display: flex; + flex-direction: column; + gap: 0.35rem; +} + +.form-label { + font-size: 0.85rem; + font-weight: 700; + color: var(--color-text-on-gradient); + padding-left: 0.25rem; +} + +/* Primary action button */ +.btn-primary { + display: block; + width: 100%; + padding: var(--spacing-md) var(--spacing-lg); + background: var(--color-accent); + color: var(--color-text); + border: none; + border-radius: var(--radius-button); + font-family: inherit; + font-size: 1rem; + font-weight: 700; + cursor: pointer; + box-shadow: var(--shadow-button); + transition: opacity 0.2s ease, transform 0.1s ease; + text-align: center; text-decoration: none; - color: hsla(160, 100%, 37%, 1); - transition: 0.4s; - padding: 3px; } -@media (hover: hover) { - a:hover { - background-color: hsla(160, 100%, 37%, 0.2); - } +.btn-primary:hover { + opacity: 0.92; } -@media (min-width: 1024px) { - body { - display: flex; - place-items: center; - } - - #app { - display: grid; - grid-template-columns: 1fr 1fr; - padding: 0 2rem; - } +.btn-primary:active { + transform: scale(0.98); +} + +.btn-primary:disabled { + opacity: 0.6; + cursor: not-allowed; +} + +/* Error message */ +.field-error { + color: #fff; + font-size: 0.875rem; + font-weight: 600; + padding-left: 0.25rem; +} + +/* Utility */ +.text-center { + text-align: center; +} + +.visually-hidden { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; } diff --git a/frontend/src/components/HelloWorld.vue b/frontend/src/components/HelloWorld.vue deleted file mode 100644 index d174cf8..0000000 --- a/frontend/src/components/HelloWorld.vue +++ /dev/null @@ -1,41 +0,0 @@ - - - - - diff --git a/frontend/src/components/TheWelcome.vue b/frontend/src/components/TheWelcome.vue deleted file mode 100644 index 8b731d9..0000000 --- a/frontend/src/components/TheWelcome.vue +++ /dev/null @@ -1,95 +0,0 @@ - - - diff --git a/frontend/src/components/WelcomeItem.vue b/frontend/src/components/WelcomeItem.vue deleted file mode 100644 index 6d7086a..0000000 --- a/frontend/src/components/WelcomeItem.vue +++ /dev/null @@ -1,87 +0,0 @@ - - - diff --git a/frontend/src/components/__tests__/HelloWorld.spec.ts b/frontend/src/components/__tests__/HelloWorld.spec.ts deleted file mode 100644 index 2533202..0000000 --- a/frontend/src/components/__tests__/HelloWorld.spec.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { describe, it, expect } from 'vitest' - -import { mount } from '@vue/test-utils' -import HelloWorld from '../HelloWorld.vue' - -describe('HelloWorld', () => { - it('renders properly', () => { - const wrapper = mount(HelloWorld, { props: { msg: 'Hello Vitest' } }) - expect(wrapper.text()).toContain('Hello Vitest') - }) -}) diff --git a/frontend/src/components/icons/IconCommunity.vue b/frontend/src/components/icons/IconCommunity.vue deleted file mode 100644 index 2dc8b05..0000000 --- a/frontend/src/components/icons/IconCommunity.vue +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/frontend/src/components/icons/IconDocumentation.vue b/frontend/src/components/icons/IconDocumentation.vue deleted file mode 100644 index 6d4791c..0000000 --- a/frontend/src/components/icons/IconDocumentation.vue +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/frontend/src/components/icons/IconEcosystem.vue b/frontend/src/components/icons/IconEcosystem.vue deleted file mode 100644 index c3a4f07..0000000 --- a/frontend/src/components/icons/IconEcosystem.vue +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/frontend/src/components/icons/IconSupport.vue b/frontend/src/components/icons/IconSupport.vue deleted file mode 100644 index 7452834..0000000 --- a/frontend/src/components/icons/IconSupport.vue +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/frontend/src/components/icons/IconTooling.vue b/frontend/src/components/icons/IconTooling.vue deleted file mode 100644 index 660598d..0000000 --- a/frontend/src/components/icons/IconTooling.vue +++ /dev/null @@ -1,19 +0,0 @@ - - diff --git a/frontend/src/views/AboutView.vue b/frontend/src/views/AboutView.vue deleted file mode 100644 index 756ad2a..0000000 --- a/frontend/src/views/AboutView.vue +++ /dev/null @@ -1,15 +0,0 @@ - - - diff --git a/spec/design-system.md b/spec/design-system.md new file mode 100644 index 0000000..0ccdcda --- /dev/null +++ b/spec/design-system.md @@ -0,0 +1,85 @@ +# Design System + +This document defines the visual design language for fete. All frontend implementation must follow these specifications. + +## Principles + +- **Mobile-first / App-native feel** — not a classic website. Think installed app, not browser page. +- **Desktop:** centered narrow column (max ~480px), gradient background fills the rest. +- **Generous whitespace** — elements breathe, nothing cramped. +- **WCAG AA contrast** as baseline for all color choices. +- **Accessibility is a baseline requirement** — not an afterthought (per project statutes). + +## Color Palette: Electric Dusk + +Chosen for best balance of style, broad appeal, and accessibility. + +| Role | Hex | Description | +|--------------------|-----------|--------------------| +| Gradient Start | `#F06292` | Pink | +| Gradient Mid | `#AB47BC` | Purple | +| Gradient End | `#5C6BC0` | Indigo blue | +| Accent (CTAs) | `#FF7043` | Deep orange | +| Text (light mode) | `#1C1C1E` | Near black | +| Text (dark mode) | `#FFFFFF` | White | +| Surface (light) | `#FFF5F8` | Pinkish white | +| Surface (dark) | `#1B1730` | Deep indigo-black | +| Card (light) | `#FFFFFF` | White | +| Card (dark) | `#2A2545` | Muted indigo | + +### Primary Gradient + +```css +background: linear-gradient(135deg, #F06292 0%, #AB47BC 50%, #5C6BC0 100%); +``` + +### Usage Rules + +- Gradient for hero/splash areas and page backgrounds — not as direct text background for body copy. +- Cards and content areas use solid surface colors with high-contrast text. +- Accent color (`#FF7043`) for primary action buttons with dark text (`#1C1C1E`). +- White text on gradient mid/end passes WCAG AA (4.82:1 and 4.86:1). +- White text on gradient start passes AA-large (3.06:1) — use for headings 18px+ only. + +## Typography: Sora + +Contemporary geometric sans-serif with slightly rounded terminals. Modern and friendly without being childish. + +- **Font:** Sora +- **License:** SIL Open Font License 1.1 (OFL) +- **Source:** https://github.com/sora-xor/sora-font +- **Format:** Self-hosted WOFF2. No external CDN. No Google Fonts. +- **Weights:** 400 (Regular), 500 (Medium), 600 (SemiBold), 700 (Bold), 800 (ExtraBold) + +### Weight Usage + +| Context | Weight | Size guideline | +|------------------|--------|-----------------| +| Body text | 400 | 0.85–1rem | +| Labels | 600–700| 0.8–0.9rem | +| Headlines | 700–800| 1.2–1.6rem | +| Buttons | 700–800| 1rem | +| Small/meta text | 400–500| 0.75–0.85rem | + +## Component Patterns + +### Card-Style Form Fields + +- Rounded corners (`border-radius: 14px`) +- Generous padding (`0.9rem 1rem`) +- White/card-colored background on gradient pages +- Subtle shadow (`box-shadow: 0 2px 8px rgba(0,0,0,0.1)`) +- Bold label (font-weight 700), regular-weight input text + +### Buttons + +- Rounded corners matching card fields (`border-radius: 14px`) +- Accent color background with dark text +- Bold/ExtraBold weight (700–800) +- Subtle shadow for depth + +### Layout + +- Mobile: full-width content with horizontal padding (~1.2rem) +- Desktop: centered column, max-width ~480px, gradient background fills viewport +- Vertical spacing between elements: ~0.75rem (compact), ~1.2rem (sections)