diff --git a/frontend/src/components/moderation/LedgerViewer.astro b/frontend/src/components/moderation/LedgerViewer.astro
index 5514796..0b285bf 100644
--- a/frontend/src/components/moderation/LedgerViewer.astro
+++ b/frontend/src/components/moderation/LedgerViewer.astro
@@ -1,7 +1,7 @@
---
export interface Props {
- communityId?;
- compact?;
+ communityId?: string | number;
+ compact?: boolean;
}
const { communityId, compact = false } = Astro.props;
@@ -21,11 +21,11 @@ import { API_BASE } from '../../lib/api';
@@ -258,27 +258,6 @@ const publicDemoSite = isEnabled((globalThis as any).process?.env?.PUBLIC_DEMO_S
color: var(--color-text);
}
- .btn-register {
- background: var(--color-primary);
- color: var(--color-text-inverse) !important;
- padding: 0.5rem 1.25rem;
- border-radius: var(--radius-sm);
- font-weight: 600;
- font-size: 0.875rem;
- transition: all var(--motion-fast) var(--easing-standard);
- }
-
- .btn-register:hover {
- background: var(--color-primary-hover);
- transform: translateY(-1px);
- box-shadow: 0 4px 12px rgba(129, 140, 248, 0.25);
- }
-
- .btn-register:active {
- transform: translateY(0);
- box-shadow: var(--shadow-sm);
- }
-
.user-name {
color: var(--color-text);
font-weight: 500;
diff --git a/frontend/src/layouts/PublicLayout.astro b/frontend/src/layouts/PublicLayout.astro
index 80b4e53..114be69 100644
--- a/frontend/src/layouts/PublicLayout.astro
+++ b/frontend/src/layouts/PublicLayout.astro
@@ -91,8 +91,8 @@ const defaultTheme = DEFAULT_THEME;
Documentation
@@ -216,33 +216,6 @@ const defaultTheme = DEFAULT_THEME;
align-items: center;
}
- .btn-demo {
- background: var(--color-primary);
- color: var(--color-text-inverse);
- padding: 0.5rem 1.25rem;
- border-radius: var(--radius-sm);
- font-weight: 600;
- font-size: 0.875rem;
- transition: all var(--motion-fast) var(--easing-standard);
- }
-
- .btn-demo:hover {
- background: var(--color-primary-hover);
- color: var(--color-text-inverse);
- transform: translateY(-1px);
- box-shadow: 0 4px 12px rgba(129, 140, 248, 0.25);
- }
-
- .btn-login {
- color: var(--color-text-muted);
- font-size: 0.9375rem;
- padding: 0.625rem 1rem;
- }
-
- .btn-login:hover {
- color: var(--color-text);
- }
-
.public-main {
flex: 1;
}
diff --git a/frontend/src/pages/admin/approvals.astro b/frontend/src/pages/admin/approvals.astro
index fdb790d..a09eddb 100644
--- a/frontend/src/pages/admin/approvals.astro
+++ b/frontend/src/pages/admin/approvals.astro
@@ -91,8 +91,8 @@ import { API_BASE as apiBase } from '../../lib/api';
${r.expires_at ? `Expires: ${new Date(r.expires_at).toLocaleDateString()}` : ''}
-
-
+
+
`).join('');
@@ -141,8 +141,8 @@ import { API_BASE as apiBase } from '../../lib/api';
Requested: ${new Date(c.created_at).toLocaleDateString()}
-
-
+
+
`).join('');
@@ -154,7 +154,7 @@ import { API_BASE as apiBase } from '../../lib/api';
}
function setupActionButtons() {
- document.querySelectorAll('.btn-approve').forEach(btn => {
+ document.querySelectorAll('.js-approve').forEach(btn => {
btn.addEventListener('click', async () => {
const type = btn.dataset.type;
const id = btn.dataset.id;
@@ -162,7 +162,7 @@ import { API_BASE as apiBase } from '../../lib/api';
});
});
- document.querySelectorAll('.btn-reject').forEach(btn => {
+ document.querySelectorAll('.js-reject').forEach(btn => {
btn.addEventListener('click', async () => {
const type = btn.dataset.type;
const id = btn.dataset.id;
@@ -172,7 +172,7 @@ import { API_BASE as apiBase } from '../../lib/api';
});
}
- async function reviewItem(type, id, approve, reason?) {
+ async function reviewItem(type, id, approve, reason) {
const endpoint = type === 'registration'
? `/api/approvals/registrations/${id}`
: `/api/approvals/communities/${id}`;
@@ -344,35 +344,6 @@ import { API_BASE as apiBase } from '../../lib/api';
flex-shrink: 0;
}
- .btn-approve {
- padding: 0.5rem 1rem;
- background: var(--color-success);
- color: white;
- border: none;
- border-radius: 6px;
- cursor: pointer;
- font-weight: 500;
- }
-
- .btn-approve:hover {
- opacity: 0.9;
- }
-
- .btn-reject {
- padding: 0.5rem 1rem;
- background: transparent;
- color: var(--color-error);
- border: 1px solid var(--color-error);
- border-radius: 6px;
- cursor: pointer;
- font-weight: 500;
- }
-
- .btn-reject:hover {
- background: var(--color-error);
- color: white;
- }
-
.loading, .empty, .error {
text-align: center;
padding: 2rem;
diff --git a/frontend/src/pages/admin/invitations.astro b/frontend/src/pages/admin/invitations.astro
index d3d268b..dfb9dd9 100644
--- a/frontend/src/pages/admin/invitations.astro
+++ b/frontend/src/pages/admin/invitations.astro
@@ -32,7 +32,7 @@ import { API_BASE as apiBase } from '../../lib/api';
-
+
@@ -154,14 +154,14 @@ import { API_BASE as apiBase } from '../../lib/api';
-
- ${inv.is_active ? `` : 'Inactive'}
+
+ ${inv.is_active ? `` : 'Inactive'}
`).join('');
// Setup action buttons
- document.querySelectorAll('.btn-copy').forEach(btn => {
+ document.querySelectorAll('.js-copy').forEach(btn => {
btn.addEventListener('click', () => {
const code = (btn).dataset.code;
navigator.clipboard.writeText(code || '');
@@ -169,7 +169,7 @@ import { API_BASE as apiBase } from '../../lib/api';
});
});
- document.querySelectorAll('.btn-revoke').forEach(btn => {
+ document.querySelectorAll('.js-revoke').forEach(btn => {
btn.addEventListener('click', async () => {
if (!confirm('Revoke this invitation?')) return;
const id = (btn).dataset.id;
@@ -293,19 +293,6 @@ import { API_BASE as apiBase } from '../../lib/api';
color: var(--color-text);
}
- .btn-create {
- padding: 0.75rem 1.5rem;
- background: var(--color-primary);
- color: var(--color-on-primary);
- border: none;
- border-radius: 8px;
- cursor: pointer;
- font-weight: 500;
- }
-
- .btn-create:hover {
- background: var(--color-primary-hover);
- }
.invitations-list {
display: flex;
@@ -365,22 +352,9 @@ import { API_BASE as apiBase } from '../../lib/api';
align-items: center;
}
- .btn-copy, .btn-revoke {
+ .inv-action-btn {
padding: 0.5rem;
- background: transparent;
- border: 1px solid var(--color-border);
- border-radius: 6px;
- cursor: pointer;
- font-size: 1rem;
- }
-
- .btn-copy:hover {
- background: var(--color-bg);
- }
-
- .btn-revoke:hover {
- background: var(--color-error);
- border-color: var(--color-error);
+ width: 40px;
}
.status-inactive {
diff --git a/frontend/src/pages/admin/voting.astro b/frontend/src/pages/admin/voting.astro
index 887cf86..c501fd8 100644
--- a/frontend/src/pages/admin/voting.astro
+++ b/frontend/src/pages/admin/voting.astro
@@ -370,28 +370,16 @@ import { API_BASE } from '../../lib/api';
}
.default-badge {
- font-size: 0.6875rem;
+ display: inline-flex;
+ align-items: center;
padding: 0.25rem 0.625rem;
- background: var(--color-warning);
- color: white;
- border-radius: 4px;
- font-weight: 600;
+ border-radius: 999px;
+ background: color-mix(in srgb, var(--color-success) 20%, transparent);
+ color: var(--color-success);
+ font-size: 0.6875rem;
+ font-weight: 700;
text-transform: uppercase;
- }
-
- .btn-set-default {
- font-size: 0.75rem;
- padding: 0.375rem 0.75rem;
- background: transparent;
- border: 1px solid var(--color-border);
- border-radius: 6px;
- color: var(--color-text-muted);
- cursor: pointer;
- }
-
- .btn-set-default:hover {
- background: var(--color-bg);
- color: var(--color-text);
+ letter-spacing: 0.06em;
}
/* Toggle Switch */
@@ -619,7 +607,7 @@ import { API_BASE } from '../../lib/api';
${m.is_default ? 'Default' : `
-
+
`}
-
-
+
+
@@ -513,24 +513,6 @@ const { slug } = Astro.params;
margin-top: 1.5rem;
}
- .btn-cancel {
- background: transparent;
- border: 1px solid var(--color-border);
- color: var(--color-text);
- padding: 0.75rem 1.5rem;
- border-radius: 8px;
- cursor: pointer;
- }
-
- .btn-save {
- background: var(--color-primary);
- color: var(--color-on-primary);
- border: none;
- padding: 0.75rem 1.5rem;
- border-radius: 8px;
- cursor: pointer;
- }
-
.sections {
display: grid;
grid-template-columns: 1fr 1fr;
diff --git a/frontend/src/pages/communities/[slug]/proposals/new.astro b/frontend/src/pages/communities/[slug]/proposals/new.astro
index 8283df4..b6116d4 100644
--- a/frontend/src/pages/communities/[slug]/proposals/new.astro
+++ b/frontend/src/pages/communities/[slug]/proposals/new.astro
@@ -28,10 +28,10 @@ const { slug } = Astro.params;
-
+
-
+
@@ -55,7 +55,7 @@ const { slug } = Astro.params;
div.className = 'option-input';
div.innerHTML = `
-
+
`;
optionsContainer?.appendChild(div);
});
@@ -186,49 +186,22 @@ const { slug } = Astro.params;
flex: 1;
}
- .btn-remove {
- background: var(--color-error);
- color: var(--color-on-primary);
- border: none;
- width: 36px;
- border-radius: 6px;
- cursor: pointer;
- font-size: 1.25rem;
- }
-
- .btn-add {
- background: transparent;
- border: 1px dashed var(--color-border);
- color: var(--color-text-muted);
- padding: 0.5rem 1rem;
- border-radius: 6px;
- cursor: pointer;
- font-size: 0.875rem;
+ .create-add-btn {
+ border-style: dashed;
margin-top: 0.5rem;
}
- .btn-add:hover {
- border-color: var(--color-primary);
- color: var(--color-primary);
+ .create-remove-btn {
+ width: 36px;
+ padding: 0;
+ font-size: 1.25rem;
}
- button[type="submit"] {
+ .create-submit-btn {
width: 100%;
- padding: 0.75rem;
- background: var(--color-primary);
- color: var(--color-on-primary);
- border: none;
- border-radius: 6px;
- font-size: 1rem;
- font-weight: 600;
- cursor: pointer;
margin-top: 1rem;
}
- button[type="submit"]:hover {
- background: var(--color-primary-hover);
- }
-
.error {
color: var(--color-error);
font-size: 0.875rem;
diff --git a/frontend/src/pages/communities/[slug]/voting-config.astro b/frontend/src/pages/communities/[slug]/voting-config.astro
index b45e315..eae9b15 100644
--- a/frontend/src/pages/communities/[slug]/voting-config.astro
+++ b/frontend/src/pages/communities/[slug]/voting-config.astro
@@ -150,21 +150,6 @@ const { slug } = Astro.params;
font-size: 0.75rem;
}
- .btn-default {
- padding: 0.35rem 0.65rem;
- background: transparent;
- border: 1px solid var(--border-color);
- border-radius: 0.5rem;
- color: var(--text-secondary);
- cursor: pointer;
- font-size: 0.8rem;
- }
-
- .btn-default:hover {
- background: var(--bg-hover);
- color: var(--text-primary);
- }
-
.loading {
text-align: center;
padding: 2rem;
@@ -246,7 +231,7 @@ const { slug } = Astro.params;
${m.is_default ? 'Default' : `
-
- ${n.link ? `
View` : ''}
- ${!n.is_read ? `
Mark Read` : ''}
+ ${n.link ? `
View` : ''}
+ ${!n.is_read ? `
Mark Read` : ''}
`).join('');
// Add mark read handlers
- document.querySelectorAll('.btn-mark-read').forEach(btn => {
+ document.querySelectorAll('.js-mark-read').forEach(btn => {
btn.addEventListener('click', async (e) => {
const id = (e.target).dataset.id;
await markRead(id);
@@ -171,29 +171,6 @@ import { API_BASE as apiBase } from '../lib/api';
flex-shrink: 0;
}
- .btn-view, .btn-mark-read {
- font-size: 0.75rem;
- padding: 0.375rem 0.75rem;
- border-radius: 4px;
- cursor: pointer;
- }
-
- .btn-view {
- background: var(--color-primary);
- color: var(--color-on-primary);
- border: none;
- }
-
- .btn-mark-read {
- background: transparent;
- border: 1px solid var(--color-border);
- color: var(--color-text-muted);
- }
-
- .btn-mark-read:hover {
- border-color: var(--color-text-muted);
- }
-
.loading, .empty, .error {
text-align: center;
padding: 3rem;
diff --git a/frontend/src/pages/proposals/[id].astro b/frontend/src/pages/proposals/[id].astro
index 8938967..d2f8462 100644
--- a/frontend/src/pages/proposals/[id].astro
+++ b/frontend/src/pages/proposals/[id].astro
@@ -555,8 +555,8 @@ const proposalId = id ?? '';
- Cancel
- Save Changes
+ Cancel
+ Save Changes
@@ -866,24 +866,6 @@ const proposalId = id ?? '';
margin-top: 1.5rem;
}
- .btn-cancel {
- background: transparent;
- border: 1px solid var(--color-border);
- color: var(--color-text);
- padding: 0.75rem 1.5rem;
- border-radius: 8px;
- cursor: pointer;
- }
-
- .btn-save {
- background: var(--color-primary);
- color: var(--color-on-primary);
- border: none;
- padding: 0.75rem 1.5rem;
- border-radius: 8px;
- cursor: pointer;
- }
-
.btn-vote:disabled {
opacity: 0.5;
cursor: not-allowed;
diff --git a/frontend/src/pages/settings.astro b/frontend/src/pages/settings.astro
index 33d4e1b..7f40a52 100644
--- a/frontend/src/pages/settings.astro
+++ b/frontend/src/pages/settings.astro
@@ -88,14 +88,14 @@ import { API_BASE as apiBase } from '../lib/api';
- Save Changes
+ Save Changes
`;
@@ -244,45 +244,18 @@ import { API_BASE as apiBase } from '../lib/api';
margin-top: 0.25rem;
}
- .btn-save {
- background: var(--color-primary);
- color: var(--color-on-primary);
- border: none;
- padding: 0.75rem 1.5rem;
- border-radius: 8px;
- font-weight: 600;
- cursor: pointer;
+ .settings-save-btn {
width: 100%;
}
- .btn-save:hover {
- background: var(--color-primary-hover);
- }
-
- .btn-save:disabled {
- opacity: 0.7;
- cursor: default;
- }
-
.danger-zone {
border-color: var(--color-error);
}
- .btn-logout {
- background: var(--color-error);
- color: var(--color-on-primary);
- border: none;
- padding: 0.75rem 1.5rem;
- border-radius: 8px;
- font-weight: 600;
- cursor: pointer;
+ .settings-logout-btn {
margin-top: 0.5rem;
}
- .btn-logout:hover {
- background: var(--color-error-hover);
- }
-
.loading, .error {
text-align: center;
padding: 2rem;