From 6fb0cb38a583b92d0234dfcc5c375bd841c769bd Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Sun, 23 Aug 2026 17:30:43 -0400 Subject: [PATCH 1/2] =?UTF-8?q?refactor(frontend):=20CSS=20pay-down,=20der?= =?UTF-8?q?ive=20batch=20(milestone=20302=20step=204)=20=E2=80=94=20page-h?= =?UTF-8?q?eader,=20error-msg/state-msg/empty-msg,=20empty-title/empty-sub?= =?UTF-8?q?,=20required,=20field-hint=20recipes=20into=20components.css;?= =?UTF-8?q?=20form-buttons=20into=20rules-shared.css;=20scoped=20copies=20?= =?UTF-8?q?trimmed=20to=20remainders/overrides;=20the=20three=20views'=20.?= =?UTF-8?q?input=20becomes=20fs-input=20+=20width/box-sizing=20remainder?= =?UTF-8?q?=20(canon=20#2336)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- frontend/src/assets/components.css | 21 ++++++ frontend/src/assets/rules-shared.css | 1 + frontend/src/components/InceptionCard.vue | 1 - frontend/src/components/SystemsSection.vue | 6 +- frontend/src/views/DesignSystemsView.vue | 32 +++++----- frontend/src/views/ProjectListView.vue | 19 +----- frontend/src/views/SettingsView.vue | 74 +++++++++++----------- frontend/src/views/SnippetDetailView.vue | 8 +-- frontend/src/views/SnippetEditorView.vue | 44 ++++--------- frontend/src/views/SnippetListView.vue | 18 +----- 10 files changed, 93 insertions(+), 131 deletions(-) diff --git a/frontend/src/assets/components.css b/frontend/src/assets/components.css index fa8b549..0d76513 100644 --- a/frontend/src/assets/components.css +++ b/frontend/src/assets/components.css @@ -330,3 +330,24 @@ .fs-input::placeholder { color: var(--fs-text-tertiary); } .fs-input:focus { outline: none; box-shadow: var(--fs-focus-ring); } .fs-input:disabled { opacity: var(--fs-disabled-opacity); cursor: not-allowed; } + +/* Page scaffold + feedback text recipes (milestone 302, note 2917): name + families the consumer map showed to be one recipe living in many views. + A view keeps only its deviation as a scoped remainder/override. */ +.page-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 1rem; +} +.page-header h1 { margin: 0; } + +.error-msg { color: var(--fs-error); font-size: 0.9rem; } +.state-msg { color: var(--fs-text-tertiary); font-size: 0.9rem; } +.empty-msg { color: var(--fs-text-tertiary); font-size: 0.875rem; } + +.empty-title { font-size: 1rem; font-weight: 500; color: var(--fs-text-secondary); margin: 0 0 0.35rem; } +.empty-sub { font-size: 0.85rem; color: var(--fs-text-tertiary); margin: 0 0 1rem; } + +.required { color: var(--fs-error); } +.field-hint { margin: 0.3rem 0 0; font-size: 0.8rem; color: var(--fs-text-tertiary); } diff --git a/frontend/src/assets/rules-shared.css b/frontend/src/assets/rules-shared.css index 963a32a..9efc62b 100644 --- a/frontend/src/assets/rules-shared.css +++ b/frontend/src/assets/rules-shared.css @@ -12,3 +12,4 @@ font-style: italic; margin: 0 0 0.5rem 0; } +.form-buttons { display: flex; gap: 0.5rem; } diff --git a/frontend/src/components/InceptionCard.vue b/frontend/src/components/InceptionCard.vue index b37699b..e33f842 100644 --- a/frontend/src/components/InceptionCard.vue +++ b/frontend/src/components/InceptionCard.vue @@ -185,5 +185,4 @@ onMounted(load); font-size: 0.9rem; } .inception-actions { display: flex; justify-content: flex-end; margin-top: 0.5rem; } -.error-msg { color: var(--fs-error); font-size: 0.9rem; } diff --git a/frontend/src/components/SystemsSection.vue b/frontend/src/components/SystemsSection.vue index afb4897..6bf72ae 100644 --- a/frontend/src/components/SystemsSection.vue +++ b/frontend/src/components/SystemsSection.vue @@ -484,10 +484,10 @@ async function confirmDelete() { border: 1px dashed var(--fs-border-color); border-radius: var(--fs-radius-lg); } -.empty-title { margin: 0; font-weight: 500; color: var(--fs-text-primary); } -.empty-sub { margin: 0 0 0.5rem; font-size: 0.82rem; color: var(--fs-text-tertiary); max-width: 32ch; } +/* remainders over the shared recipes (components.css, m302) */ +.empty-title { margin: 0; color: var(--fs-text-primary); } +.empty-sub { margin: 0 0 0.5rem; font-size: 0.82rem; max-width: 32ch; } -.error-msg { color: var(--fs-error); font-size: 0.9rem; } /* ── Skeleton ─────────────────────────────────────────────────── */ @keyframes skel-shine { to { background-position: 200% center; } } diff --git a/frontend/src/views/DesignSystemsView.vue b/frontend/src/views/DesignSystemsView.vue index 752f51b..d48c90a 100644 --- a/frontend/src/views/DesignSystemsView.vue +++ b/frontend/src/views/DesignSystemsView.vue @@ -557,14 +557,14 @@ function isSelfContainedColour(value: string): boolean {
@@ -612,20 +612,20 @@ function isSelfContainedColour(value: string): boolean {
- @@ -659,16 +659,16 @@ function isSelfContainedColour(value: string): boolean {
- +
- +

@@ -678,7 +678,7 @@ function isSelfContainedColour(value: string): boolean {

- @@ -887,19 +887,19 @@ function isSelfContainedColour(value: string): boolean {
- +
@@ -908,7 +908,7 @@ function isSelfContainedColour(value: string): boolean {

@@ -920,7 +920,7 @@ function isSelfContainedColour(value: string): boolean {

@@ -941,8 +941,8 @@ function isSelfContainedColour(value: string): boolean {

- - + +