11 KiB
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 122–129)
--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
--button-click-colorisvar(--muted-color)— should bevar(--accent-color)for the fill on click- 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. - No
:activepseudo-class defined globally — the click state is never standardized. - Hover behavior varies — some pages change
background-coloron hover (wrong), some changeborder-color(correct), some changecolor(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-colorfromvar(--muted-color)tovar(--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:
ai.html—#btnAiNewChat,#btnAiSend,.aiButtoncashu.html—.cashuBtnindex.html—.divAppButtonspost.html—#btnSeeMore,#btnMarkReadmsg.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.