From ef418a8c92ad7a449960376ac3e4a0e5636444bd Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Mon, 31 Aug 2026 08:08:01 -0400 Subject: [PATCH] buttons: one definition of the shape, worn by a and by an MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The download links added in fd1e4ae carried their own copy of BaseButton's class list, because BaseButton is a and cannot hold an href — and a download must be an anchor, so the browser's own download manager gets the 3-95 MB transfer instead of a blob this app would have to hold in memory. A copy is not a solution to that; it is two primary buttons that look alike until someone changes one. So the shape moves to `.btn` + `.btn-primary` / `.btn-ghost` in the components layer, where both elements can wear it, and neither owns it. The `disabled:` variants stay on BaseButton. An anchor has no :disabled, so they were never shared and pretending otherwise would put a rule in the shared definition that only one of its two users can ever match. Verified there is exactly one shape to unify and no third copy: `px-4 py-2.5` appears in three other files and all three are something else (a toast, a dashed quick-add affordance, a retention notice). The smaller brand buttons in AppShell and NoteEditor are a different size, which is a size-variant question and not this one. And exactly one call site passes a class to BaseButton — `shrink-0` — which cannot conflict with anything the shape declares. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01K3MMqUtzX1TJgA1oypvm1c --- frontend/src/components/BaseButton.vue | 16 ++++++------ frontend/src/components/ClientDownloads.vue | 19 ++++++++------ frontend/src/style.css | 28 +++++++++++++-------- 3 files changed, 36 insertions(+), 27 deletions(-) diff --git a/frontend/src/components/BaseButton.vue b/frontend/src/components/BaseButton.vue index 24adbcc..f463b43 100644 --- a/frontend/src/components/BaseButton.vue +++ b/frontend/src/components/BaseButton.vue @@ -11,18 +11,16 @@ withDefaults( +