Files
client/plans/button-standardization.md
2026-04-17 16:52:51 -04:00

11 KiB
Raw Permalink Blame History

Button Behavior Standardization Plan

Desired Standard Behavior

Default:    border: primary-color, background: secondary-color, text: primary-color
Hover:      border: accent-color, background: secondary-color, text: primary-color
Click:      border: primary-color, background: accent-color, text: secondary-color

In summary:

  • Hover → border turns accent-color (everything else stays)
  • Click/Active → fill turns accent-color, border returns to primary-color, text inverts to secondary-color

Current client.css Button Variables (lines 122129)

--button-color: var(--primary-color);
--button-background-color: var(--secondary-color);
--button-hover-color: var(--accent-color);
--button-click-color: var(--muted-color);        /* WRONG — should be accent-color */
--button-border-color: var(--primary-color);
--button-border-radius: var(--border-radius);
--button-border-width: var(--border-width);

Problems in client.css

  1. --button-click-color is var(--muted-color) — should be var(--accent-color) for the fill on click
  2. No global button rule — there is no button { ... } or .btn { ... } base class in client.css that applies the standard hover/active behavior. Each page defines its own button styles independently.
  3. No :active pseudo-class defined globally — the click state is never standardized.
  4. Hover behavior varies — some pages change background-color on hover (wrong), some change border-color (correct), some change color (text color — inconsistent).

What client.css SHOULD add

A base button class (e.g., .btn) with:

.btn {
  font-family: var(--font-family);
  color: var(--button-color);
  background-color: var(--button-background-color);
  border: var(--button-border-width) solid var(--button-border-color);
  border-radius: var(--button-border-radius);
  cursor: pointer;
  transition: border-color 0.2s, background-color 0.2s, color 0.2s;
  padding: 8px 16px;
}

.btn:hover {
  border-color: var(--accent-color);
}

.btn:active {
  background-color: var(--accent-color);
  color: var(--secondary-color);
  border-color: var(--primary-color);
}

.btn:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

Per-Page Audit

index.html

Class/ID Hover Active/Click Issue
.divAppButtons background-color: var(--button-hover-color) none Hover fills background instead of changing border
.inpKeyButton background-color: var(--button-hover-color) background-color: var(--button-click-color) Hover fills bg; click uses muted-color
.inpCheckBox background-color: var(--button-hover-color) none Hover fills bg
.svgBtn cursor only none No visual feedback

Fix needed: .divAppButtons hover should change border only. .inpKeyButton active should use accent fill.

ai.html

Class/ID Hover Active/Click Issue
#btnAiNewChat background: var(--accent-color); color: var(--secondary-color) none Hover does fill+text change — should be border only
#btnAiSend background: var(--accent-color); color: var(--secondary-color) none Same — hover does fill
.aiButton background: var(--accent-color); color: var(--secondary-color) none Same
.aiDeleteConvBtn color: var(--accent-color); border-color: var(--accent-color) none Hover changes border+icon color — close to correct but no active state
.aiConversationItem border-color: var(--accent-color) none Correct hover behavior

Fix needed: #btnAiNewChat, #btnAiSend, .aiButton hover should only change border. Add :active with accent fill.

cashu.html

Class/ID Hover Active/Click Issue
.cashuBtn background: var(--accent-color); color: var(--secondary-color) none Hover fills — should be border only
.cashuBtn.active background: var(--primary-color); color: var(--secondary-color) Toggle state, not click — acceptable for tab buttons
.mintDiscoveryAdd:hover background: var(--accent-color) none Hover fills

Fix needed: .cashuBtn hover should change border only. Add :active with accent fill. The .active toggle class for tabs is a separate concern and can stay.

tools.html

Class/ID Hover Active/Click Issue
.divButton background-color: var(--accent-color) background-color: var(--muted-color) Hover fills bg; active uses muted
.clsClipboard opacity: 0.8 background-color: var(--muted-color) Hover dims; active uses muted

Fix needed: .divButton hover should change border. Active should use accent fill. .clsClipboard active should use accent.

event.html

Class/ID Hover Active/Click Issue
.btnKind background-color: var(--accent-color) none Hover fills
.btnKindActive background-color: var(--primary-color); color: var(--secondary-color) Toggle state — acceptable
.btnAction background-color: var(--accent-color) none Hover fills

Fix needed: .btnKind and .btnAction hover should change border only. Add :active.

blobs.html

Class/ID Hover Active/Click Issue
.btnServer background-color: var(--button-hover-color) none Hover fills bg
.btnAction background-color: var(--accent-color) none Hover fills
.btnDelete background-color: var(--accent-color) none Hover fills
.btnDeleteBlob border-color: var(--accent-color) none Correct hover

Fix needed: .btnServer, .btnAction, .btnDelete hover should change border only.

post.html

Class/ID Hover Active/Click Issue
#btnSeeMore color: var(--button-hover-color) none Changes text color on hover — should change border
#btnMarkRead color: var(--button-hover-color) none Same
.viewed-sidenav-control color: var(--button-hover-color) none Same

Fix needed: All should change border-color on hover, not text color.

msg.html

Class/ID Hover Active/Click Issue
#btnSendMessage color: var(--button-hover-color) none Changes text color
.msgConversationItem border-color: var(--accent-color) none Correct

Fix needed: #btnSendMessage hover should change border.

note.html

Class/ID Hover Active/Click Issue
.divNoteTitle background-color: var(--button-hover-color) none Hover fills bg
.divNewNote background-color: var(--button-hover-color) none Same
#tblNotes tr background: var(--button-hover-color) none Table row — acceptable
#btnSaveNote inline style background-color: var(--button-hover-color) none Inline style — needs refactor

Fix needed: Button hovers should change border. Table row hover is acceptable.

todo.html

Class/ID Hover Active/Click Issue
.divTodo border-color: var(--accent-color) none Correct
.btnReorder border-color: var(--accent-color) on hover background-color: var(--muted-color) on active Hover correct; active uses muted instead of accent

Fix needed: .btnReorder:active should use accent fill.

db.html

Class/ID Hover Active/Click Issue
.btnRefresh background: var(--accent-color) none Hover fills
#tblDB th background: var(--accent-color) none Table header — acceptable

Fix needed: .btnRefresh hover should change border only.

didactyl.html

Class/ID Hover Active/Click Issue
.btn background-color: var(--accent-color); color: var(--secondary-color) none Hover fills

Fix needed: Hover should change border only. Add :active.

profile.html

Class/ID Hover Active/Click Issue
.divButton cursor: pointer only none No visual hover feedback at all

Fix needed: Add border-color change on hover and accent fill on active.

relays.html

Class/ID Hover Active/Click Issue
.divSvg stroke: var(--button-hover-color) none SVG icon — acceptable
.tblRelayRow cursor: pointer none Table row — minimal

Fix needed: Minor — relay rows could use border highlight.

cal.html

Class/ID Hover Active/Click Issue
.divQuickButton background-color: red none Hardcoded red — should use var
.divFood background-color: var(--button-hover-color) none Hover fills
.divServingButton background-color: red none Hardcoded red
.divButton background-color: var(--button-hover-color) none Hover fills
.AddFood, .EditFood background-color: green none Hardcoded green
.DelFood background-color: red none Hardcoded red

Fix needed: Replace hardcoded colors with CSS variables. Change hover to border-only.

links.html

Class/ID Hover Active/Click Issue
#btnAddLink inline style, no hover none No visual feedback
#btnDownloadBookmarks inline style, no hover none No visual feedback

Fix needed: Add proper button classes.

npub.html

Class/ID Hover Active/Click Issue
#divQRContainer none background-color: var(--button-hover-color) Active uses hover color for bg

Fix needed: Active should use accent-color.

test42.html

Class/ID Hover Active/Click Issue
.button background: #ff6b6b none Hardcoded colors — test page, low priority

tab.html

Class/ID Hover Active/Click Issue
button background: #5568d3 none Hardcoded colors — test page, low priority

Implementation Plan

Step 1: Fix client.css button variables

  • Change --button-click-color from var(--muted-color) to var(--accent-color)
  • Add --button-click-text-color: var(--secondary-color) variable

Step 2: Add global .btn base class to client.css

  • Standard default/hover/active/disabled states
  • All pages can opt in by adding class="btn" to their buttons

Step 3: Fix pages in priority order

High priority — main user-facing pages:

  1. ai.html#btnAiNewChat, #btnAiSend, .aiButton
  2. cashu.html.cashuBtn
  3. index.html.divAppButtons
  4. post.html#btnSeeMore, #btnMarkRead
  5. msg.html#btnSendMessage

Medium priority: 6. tools.html.divButton, .clsClipboard 7. event.html.btnKind, .btnAction 8. blobs.html.btnServer, .btnAction, .btnDelete 9. todo.html.btnReorder active state 10. db.html.btnRefresh 11. didactyl.html.btn 12. note.html.divNoteTitle, .divNewNote, #btnSaveNote

Low priority: 13. cal.html — replace hardcoded colors 14. links.html — add button classes 15. profile.html — add hover/active 16. relays.html — minor row highlights 17. npub.html — fix active color 18. test42.html, tab.html — test pages, optional

Step 4: Verify dark mode

  • Ensure all changes work in both light and dark mode since CSS variables auto-adapt.