style: unify all primary buttons to use shared .btn-primary class

Replaced 37 files worth of inconsistent inline Tailwind button classes
(mixed font-medium/semibold, px-4/px-6, with/without shadow-sm, inline-flex
variants) with the shared .btn-primary CSS class. Added :disabled state to
.btn-primary in app.css so disabled buttons visually dim consistently.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Ashwin Kumar 2026-03-24 08:10:29 +01:00
parent 33619a1b27
commit 3b2c09cd4b
38 changed files with 55 additions and 54 deletions

View file

@ -173,6 +173,7 @@ body {
text-decoration: none;
}
.btn-primary:hover { background: #0f2a4e; box-shadow: 0 4px 12px rgba(10,29,55,0.25); }
.btn-primary:disabled { opacity: 0.55; cursor: not-allowed; box-shadow: none; }
/* Secondary button */
.btn-secondary {

View file

@ -150,7 +150,7 @@ export default function ApplicationsPage() {
<div class="mt-4 flex gap-2 flex-wrap">
<Show when={app.status === 'SUBMITTED' || app.status === 'SHORTLISTED'}>
<button
class="rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-medium text-white hover:bg-[#0f2a4e] transition-colors"
class="btn-primary"
disabled={busyId() === app.id}
onClick={() => updateStatus(app.id, 'ACCEPTED')}
>

View file

@ -975,7 +975,7 @@ export default function ApprovalPage() {
<div class="mb-6 flex items-start justify-between gap-4" style="margin-bottom:16px">
<div />
<button class="inline-flex items-center rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-medium text-white hover:bg-[#0f2a4e] transition-colors" onClick={() => setShowAddRule((v) => !v)}>
<button class="btn-primary" onClick={() => setShowAddRule((v) => !v)}>
{showAddRule() ? 'Cancel' : '+ Add Rule'}
</button>
</div>
@ -1010,7 +1010,7 @@ export default function ApprovalPage() {
</div>
</div>
<div class="actions" style="margin-top:14px">
<button class="inline-flex items-center rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-medium text-white hover:bg-[#0f2a4e] transition-colors" disabled={submittingRule()} onClick={handleAddRule}>
<button class="btn-primary" disabled={submittingRule()} onClick={handleAddRule}>
{submittingRule() ? 'Saving...' : 'Save Rule'}
</button>
<button class="inline-flex items-center rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 transition-colors" onClick={() => setShowAddRule(false)}>Cancel</button>

View file

@ -80,7 +80,7 @@ export default function CompanyPage() {
<h1 class="text-xl font-semibold text-gray-900">Company Management</h1>
<p class="text-sm text-gray-500 mt-0.5">Manage all company accounts on the platform.</p>
</div>
<A class="inline-flex items-center rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-semibold text-white hover:bg-[#0f2a4e] transition-colors" href="/admin/company/create">Create Company</A>
<A class="btn-primary" href="/admin/company/create">Create Company</A>
</div>
</div>

View file

@ -107,7 +107,7 @@ export default function CompanyDetailPage() {
{isVerified() ? 'Verified - Can Post Jobs' : 'Not Verified'}
</span>
<A class="rounded-lg border border-gray-200 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 transition-colors" href="/admin/company">Back to Companies</A>
<A class="rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-medium text-white hover:bg-[#0f2a4e] transition-colors" href="/admin/approval">Open Approval Management</A>
<A class="btn-primary" href="/admin/approval">Open Approval Management</A>
</div>
</div>
<div class="p-6 flex-1">

View file

@ -111,7 +111,7 @@ export default function CreateCompanyPage() {
</div>
<div class="mt-6 flex justify-end gap-3 border-t border-gray-100 pt-5">
<A class="rounded-lg border border-gray-200 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 transition-colors" href="/admin/company">Cancel</A>
<button class="rounded-lg bg-[#0a1d37] px-6 py-2 text-sm font-medium text-white hover:bg-[#0f2a4e] transition-colors disabled:opacity-60" type="submit" disabled={saving()}>
<button class="btn-primary" type="submit" disabled={saving()}>
{saving() ? 'Creating…' : 'Create Company'}
</button>
</div>

View file

@ -320,7 +320,7 @@ export default function CouponPage() {
</div>
</div>
<div class="actions">
<button class="inline-flex items-center rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-semibold text-white hover:bg-[#0f2a4e] transition-colors" type="submit" disabled={saving()}>
<button class="btn-primary" type="submit" disabled={saving()}>
{saving() ? 'Saving...' : (form().id ? 'Update Coupon' : 'Save Coupon')}
</button>
<Show when={form().id}>

View file

@ -174,7 +174,7 @@ export default function CreditPage() {
style="flex:1"
/>
<button
class="inline-flex items-center rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-semibold text-white hover:bg-[#0f2a4e] transition-colors"
class="btn-primary"
onClick={handleSearch}
disabled={searchLoading()}
>
@ -317,7 +317,7 @@ export default function CreditPage() {
/>
</div>
<div>
<button class="inline-flex items-center rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-semibold text-white hover:bg-[#0f2a4e] transition-colors" type="submit" disabled={adjLoading()}>
<button class="btn-primary" type="submit" disabled={adjLoading()}>
{adjLoading() ? 'Adjusting...' : 'Apply Adjustment'}
</button>
</div>
@ -357,7 +357,7 @@ export default function CreditPage() {
</div>
</div>
<div>
<button class="inline-flex items-center rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-semibold text-white hover:bg-[#0f2a4e] transition-colors" type="submit" disabled={reconLoading()}>
<button class="btn-primary" type="submit" disabled={reconLoading()}>
{reconLoading() ? 'Running...' : 'Run Reconciliation'}
</button>
</div>

View file

@ -220,7 +220,7 @@ export default function DepartmentPage() {
<Show when={view() === 'list'}>
<button
onClick={() => { setView('create'); setCreateError(''); setCreateName(''); setCreateDesc(''); }}
class="flex items-center gap-2 rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-[#0f2a4e] shadow-sm"
class="btn-primary"
>
<Plus size={16} />
Add Department
@ -262,7 +262,7 @@ export default function DepartmentPage() {
<button type="button" onClick={() => setView('list')} class="rounded-lg border border-gray-200 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 transition-colors">
Cancel
</button>
<button type="submit" disabled={creating()} class="rounded-lg bg-[#0a1d37] px-6 py-2 text-sm font-medium text-white hover:bg-[#0f2a4e] transition-colors disabled:opacity-60">
<button type="submit" disabled={creating()} class="btn-primary">
{creating() ? 'Saving…' : 'Save'}
</button>
</div>
@ -375,7 +375,7 @@ export default function DepartmentPage() {
<div class="mt-3 flex gap-2">
<button type="button" onClick={cancelEdit} class="rounded-lg border border-gray-200 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 transition-colors">Cancel</button>
<button type="button" disabled={saving()} onClick={() => handleUpdate(item.id)}
class="rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-medium text-white hover:bg-[#0f2a4e] transition-colors disabled:opacity-60">
class="btn-primary disabled:opacity-60">
{saving() ? 'Saving…' : 'Save'}
</button>
</div>

View file

@ -237,7 +237,7 @@ export default function DesignationPage() {
Cancel
</button>
<button type="submit" disabled={formLoading() || depts().length === 0}
class="rounded-lg bg-[#0a1d37] px-6 py-2 text-sm font-medium text-white hover:bg-[#0f2a4e] transition-colors disabled:opacity-60">
class="btn-primary">
{formLoading() ? (view() === 'create' ? 'Creating…' : 'Updating…') : (view() === 'create' ? 'Create Designation' : 'Update Designation')}
</button>
</div>

View file

@ -324,7 +324,7 @@ export default function DiscountPage() {
</div>
</div>
<div class="actions">
<button class="inline-flex items-center rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-semibold text-white hover:bg-[#0f2a4e] transition-colors" type="submit" disabled={saving()}>
<button class="btn-primary" type="submit" disabled={saving()}>
{saving() ? 'Saving...' : (form().id ? 'Update Discount' : 'Save Discount')}
</button>
<Show when={form().id}>

View file

@ -191,7 +191,7 @@ export default function EmployeesPage() {
Cancel
</button>
<button type="submit" disabled={creating()}
class="rounded-lg bg-[#0a1d37] px-6 py-2 text-sm font-medium text-white hover:bg-[#0f2a4e] transition-colors disabled:opacity-60">
class="btn-primary">
{creating() ? 'Creating…' : 'Create Internal User'}
</button>
</div>

View file

@ -135,7 +135,7 @@ export default function EditEmployeePage() {
</div>
<div class="mt-6 flex justify-end gap-3 border-t border-gray-100 pt-5">
<A class="rounded-lg border border-gray-200 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 transition-colors" href="/admin/employees">Cancel</A>
<button class="rounded-lg bg-[#0a1d37] px-6 py-2 text-sm font-medium text-white hover:bg-[#0f2a4e] transition-colors disabled:opacity-60" type="submit" disabled={saving()}>
<button class="btn-primary" type="submit" disabled={saving()}>
{saving() ? 'Saving…' : 'Save Changes'}
</button>
</div>

View file

@ -127,7 +127,7 @@ function renderModuleContent(module: Module | null) {
<textarea rows={4} placeholder="Describe the request" style="width:100%;border:1px solid #cbd5e1;border-radius:12px;padding:10px 12px;font-size:13px;outline:none" />
</div>
<div style="display:flex;justify-content:flex-end;margin-top:12px">
<button class="inline-flex items-center rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-medium text-white hover:bg-[#0f2a4e] transition-colors" type="button">Submit</button>
<button class="btn-primary" type="button">Submit</button>
</div>
</div>
);
@ -478,7 +478,7 @@ export default function ExternalDashboardManagementPage() {
<h2 class="text-lg font-semibold text-gray-900">External Dashboard List</h2>
<p class="mt-1 text-sm text-gray-500">Choose one external role dashboard to open in the builder, or create a new one.</p>
</div>
<button class="inline-flex items-center rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-medium text-white hover:bg-[#0f2a4e] transition-colors" onClick={createDashboard} disabled={creating()}>
<button class="btn-primary" onClick={createDashboard} disabled={creating()}>
{creating() ? 'Creating...' : 'Create External Dashboard'}
</button>
</div>
@ -534,7 +534,7 @@ export default function ExternalDashboardManagementPage() {
</div>
<div class="builder-header-actions">
<button class="inline-flex items-center rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 transition-colors" onClick={() => setSelectedId('')}>Back to List</button>
<button class="inline-flex items-center rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-medium text-white hover:bg-[#0f2a4e] transition-colors" onClick={saveSelected} disabled={saving()}>
<button class="btn-primary" onClick={saveSelected} disabled={saving()}>
{saving() ? 'Saving...' : 'Save Dashboard'}
</button>
</div>

View file

@ -12,7 +12,7 @@ export default function HelpSupportBridgePage() {
<div class="p-6">
<div class="table-card p-5 flex items-center gap-4">
<p class="text-sm text-slate-600 flex-1">Use the Support Management module to handle all support tickets and help requests.</p>
<A class="rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-medium text-white hover:bg-[#0f2a4e] transition-colors" href="/admin/support">Open Support Management</A>
<A class="btn-primary" href="/admin/support">Open Support Management</A>
</div>
</div>
</div>

View file

@ -436,7 +436,7 @@ export default function InternalDashboardManagementPage() {
<h2 class="text-lg font-semibold text-gray-900">Internal Dashboard List</h2>
<p class="mt-1 text-sm text-gray-500">Choose one internal dashboard to open in the builder, or create a new dashboard for an internal role.</p>
</div>
<button class="inline-flex items-center rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-medium text-white hover:bg-[#0f2a4e] transition-colors" onClick={createDashboard} disabled={creating()}>
<button class="btn-primary" onClick={createDashboard} disabled={creating()}>
{creating() ? 'Creating...' : 'Create Internal Dashboard'}
</button>
</div>
@ -492,7 +492,7 @@ export default function InternalDashboardManagementPage() {
</div>
<div class="builder-header-actions">
<button class="inline-flex items-center rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 transition-colors" onClick={() => setSelectedId('')}>Back to List</button>
<button class="inline-flex items-center rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-medium text-white hover:bg-[#0f2a4e] transition-colors" onClick={saveSelected} disabled={saving()}>
<button class="btn-primary" onClick={saveSelected} disabled={saving()}>
{saving() ? 'Saving...' : 'Save Dashboard'}
</button>
</div>

View file

@ -252,7 +252,7 @@ export default function KbPage(props: KbPageProps = {}) {
<Show when={tab() === 'categories'}>
<div class="mb-6 flex items-start justify-between gap-4" style="margin-bottom:16px">
<div />
<button class="inline-flex items-center rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-semibold text-white hover:bg-[#0f2a4e] transition-colors" onClick={() => setShowCatForm(!showCatForm())}>
<button class="btn-primary" onClick={() => setShowCatForm(!showCatForm())}>
{showCatForm() ? 'Cancel' : 'Add Category'}
</button>
</div>
@ -301,7 +301,7 @@ export default function KbPage(props: KbPageProps = {}) {
/>
</div>
<div>
<button class="inline-flex items-center rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-semibold text-white hover:bg-[#0f2a4e] transition-colors" type="submit" disabled={catSaving()}>
<button class="btn-primary" type="submit" disabled={catSaving()}>
{catSaving() ? 'Saving...' : 'Create Category'}
</button>
</div>
@ -377,7 +377,7 @@ export default function KbPage(props: KbPageProps = {}) {
/>
</div>
<div style="display:flex;gap:8px">
<button class="inline-flex items-center rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-semibold text-white hover:bg-[#0f2a4e] transition-colors" disabled={editCatSaving()} onClick={() => saveEditCat(cat.id)}>
<button class="btn-primary" disabled={editCatSaving()} onClick={() => saveEditCat(cat.id)}>
{editCatSaving() ? 'Saving...' : 'Save'}
</button>
<button class="inline-flex items-center rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 transition-colors" onClick={cancelEditCat}>Cancel</button>
@ -537,7 +537,7 @@ export default function KbPage(props: KbPageProps = {}) {
</select>
</div>
<div>
<button class="inline-flex items-center rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-semibold text-white hover:bg-[#0f2a4e] transition-colors" type="submit" disabled={artSaving()}>
<button class="btn-primary" type="submit" disabled={artSaving()}>
{artSaving() ? 'Creating...' : 'Create Article'}
</button>
</div>

View file

@ -41,7 +41,7 @@ export default function KbArticleDetailPage() {
</div>
<div class="flex items-center gap-2">
<A class="rounded-lg border border-gray-200 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 transition-colors" href="/admin/kb/articles">Back to Articles</A>
<A class="rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-medium text-white hover:bg-[#0f2a4e] transition-colors" href={`/admin/kb/articles/${params.id}/edit`}>Edit Article</A>
<A class="btn-primary" href={`/admin/kb/articles/${params.id}/edit`}>Edit Article</A>
</div>
</div>

View file

@ -131,7 +131,7 @@ export default function KbArticleEditPage() {
</Show>
<div class="mt-6 flex justify-end border-t border-gray-100 pt-5">
<button class="rounded-lg bg-[#0a1d37] px-6 py-2 text-sm font-medium text-white hover:bg-[#0f2a4e] transition-colors disabled:opacity-60" type="submit" disabled={saving()}>
<button class="btn-primary" type="submit" disabled={saving()}>
{saving() ? 'Saving…' : 'Save Article'}
</button>
</div>

View file

@ -116,7 +116,7 @@ export default function ModulesPage() {
<p class="text-sm text-gray-500 mt-0.5">Manage internal module definitions and activation state.</p>
</div>
<button
class="rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-medium text-white hover:bg-[#0f2a4e] transition-colors shadow-sm"
class="btn-primary"
onClick={() => openModal()}
>
Add Module
@ -247,7 +247,7 @@ export default function ModulesPage() {
</button>
<button
type="submit"
class="rounded-lg bg-[#0a1d37] px-6 py-2 text-sm font-medium text-white hover:bg-[#0f2a4e] transition-colors disabled:opacity-60"
class="btn-primary"
disabled={submitting()}
>
{editing() ? 'Save Changes' : 'Create'}

View file

@ -101,7 +101,7 @@ export default function OnboardingSchemasPage() {
<h1 class="text-xl font-semibold text-gray-900">Onboarding Management</h1>
<p class="text-sm text-gray-500 mt-0.5">Manage onboarding flows, role assignments, and previewable step groups for external users.</p>
</div>
<A class="rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-medium text-white hover:bg-[#0f2a4e] transition-colors shadow-sm" href="/admin/onboarding-schemas/new">Create Onboarding Flow</A>
<A class="btn-primary" href="/admin/onboarding-schemas/new">Create Onboarding Flow</A>
</div>
<OnboardingManagementTabs />

View file

@ -220,7 +220,7 @@ export default function PricingPage() {
<div class="flex items-center justify-end gap-1">
<button class="inline-flex items-center rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 transition-colors" onClick={() => startEdit(pkg)}>Edit</button>
<button
class={pkg.is_active ? 'inline-flex items-center rounded-lg border border-red-200 bg-red-50 px-4 py-2 text-sm font-medium text-red-600 hover:bg-red-100 transition-colors' : 'inline-flex items-center rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-semibold text-white hover:bg-[#0f2a4e] transition-colors'}
class={pkg.is_active ? 'inline-flex items-center rounded-lg border border-red-200 bg-red-50 px-4 py-2 text-sm font-medium text-red-600 hover:bg-red-100 transition-colors' : 'btn-primary'}
disabled={togglingId() === pkg.id}
onClick={() => toggleActive(pkg)}
>
@ -264,7 +264,7 @@ export default function PricingPage() {
/>
</div>
<div style="display:flex;gap:8px">
<button class="inline-flex items-center rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-semibold text-white hover:bg-[#0f2a4e] transition-colors" disabled={editSaving()} onClick={() => saveEdit(pkg.id)}>
<button class="btn-primary" disabled={editSaving()} onClick={() => saveEdit(pkg.id)}>
{editSaving() ? 'Saving...' : 'Save'}
</button>
<button class="inline-flex items-center rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 transition-colors" onClick={cancelEdit}>Cancel</button>
@ -349,7 +349,7 @@ export default function PricingPage() {
/>
</div>
<div>
<button class="inline-flex items-center rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-semibold text-white hover:bg-[#0f2a4e] transition-colors" type="submit" disabled={cSaving()}>
<button class="btn-primary" type="submit" disabled={cSaving()}>
{cSaving() ? 'Creating...' : 'Create Package'}
</button>
</div>

View file

@ -76,7 +76,7 @@ export default function ReportPage() {
style="padding:8px 10px;border:1px solid #e2e8f0;border-radius:6px;font-size:14px"
/>
</div>
<button class="inline-flex items-center rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-semibold text-white hover:bg-[#0f2a4e] transition-colors" type="submit" disabled={loading()}>
<button class="btn-primary" type="submit" disabled={loading()}>
{loading() ? 'Loading...' : 'Load Report'}
</button>
</form>

View file

@ -143,7 +143,7 @@ export default function ResponsesPage() {
</Show>
<Show when={row.status === 'SUBMITTED' || row.status === 'SHORTLISTED'}>
<button
class="rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-medium text-white hover:bg-[#0f2a4e] transition-colors"
class="btn-primary"
disabled={busyId() === row.id}
onClick={() => transition(row.id, 'ACCEPTED')}
>

View file

@ -219,7 +219,7 @@ export default function ReviewPage() {
</Show>
<Show when={!isPublished}>
<button
class="inline-flex items-center rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-semibold text-white hover:bg-[#0f2a4e] transition-colors"
class="btn-primary"
disabled={toggling() === item.id}
onClick={() => handleUpdateStatus(item, 'PUBLISHED')}
>
@ -310,7 +310,7 @@ export default function ReviewPage() {
/>
</div>
<div class="actions">
<button class="inline-flex items-center rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-semibold text-white hover:bg-[#0f2a4e] transition-colors" type="submit" disabled={saving()}>
<button class="btn-primary" type="submit" disabled={saving()}>
{saving() ? 'Saving...' : 'Save Review'}
</button>
</div>

View file

@ -230,7 +230,7 @@ export default function EditInternalRolePage() {
{/* Save */}
<div class="flex justify-end mt-2">
<button
class="rounded-lg bg-[#0a1d37] px-6 py-2 text-sm font-medium text-white hover:bg-[#0f2a4e] transition-colors disabled:opacity-60"
class="btn-primary"
onClick={handleSave}
disabled={saving() || !roleName().trim()}
>

View file

@ -52,7 +52,7 @@ export default function RoleDetailPage() {
<div class="flex items-center gap-2">
<A class="rounded-lg border border-gray-200 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 transition-colors" href="/admin/roles">Back to List</A>
<Show when={data()?.role}>
<A class="rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-medium text-white hover:bg-[#0f2a4e] transition-colors" href={`/admin/roles/${params.id}/edit`}>Edit Role</A>
<A class="btn-primary" href={`/admin/roles/${params.id}/edit`}>Edit Role</A>
</Show>
</div>
</div>

View file

@ -210,7 +210,7 @@ export default function CreateInternalRolePage() {
<div class="flex justify-end gap-3 mt-2">
<A class="rounded-lg border border-gray-200 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 transition-colors" href="/admin/roles">Cancel</A>
<button
class="rounded-lg bg-[#0a1d37] px-6 py-2 text-sm font-medium text-white hover:bg-[#0f2a4e] transition-colors disabled:opacity-60"
class="btn-primary"
onClick={handleSave}
disabled={saving() || !roleName().trim()}
>

View file

@ -60,7 +60,7 @@ export default function InternalRolesPage() {
</div>
<A
href="/admin/roles/create"
class="flex items-center gap-2 rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-[#0f2a4e] shadow-sm"
class="btn-primary"
>
Create Internal Role
</A>

View file

@ -43,7 +43,7 @@ export default function RoleTemplatesPage() {
<h1 class="text-xl font-semibold text-gray-900">Role Templates</h1>
<p class="text-sm text-gray-500 mt-0.5">Starter role presets for faster internal role creation and cloning.</p>
</div>
<A class="inline-flex items-center rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-semibold text-white hover:bg-[#0f2a4e] transition-colors" href="/admin/roles/create">Create Internal Role</A>
<A class="btn-primary" href="/admin/roles/create">Create Internal Role</A>
</div>
</div>

View file

@ -362,7 +362,7 @@ export default function SupportPage() {
</div>
</div>
<div>
<button class="inline-flex items-center rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-semibold text-white hover:bg-[#0f2a4e] transition-colors" type="submit" disabled={createLoading()}>
<button class="btn-primary" type="submit" disabled={createLoading()}>
{createLoading() ? 'Creating...' : 'Create Support Case'}
</button>
</div>

View file

@ -70,7 +70,7 @@ export default function TaxPage() {
<h1 class="text-xl font-semibold text-gray-900">Tax Management</h1>
<p class="text-sm text-gray-500 mt-0.5">Configure tax rates for platform transactions.</p>
</div>
<button class="inline-flex items-center rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-semibold text-white hover:bg-[#0f2a4e] transition-colors" onClick={() => setShowForm(!showForm())}>
<button class="btn-primary" onClick={() => setShowForm(!showForm())}>
{showForm() ? 'Cancel' : 'Add Tax'}
</button>
</div>
@ -116,7 +116,7 @@ export default function TaxPage() {
/>
</div>
<div>
<button class="inline-flex items-center rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-semibold text-white hover:bg-[#0f2a4e] transition-colors" type="submit" disabled={saving()}>
<button class="btn-primary" type="submit" disabled={saving()}>
{saving() ? 'Saving...' : 'Save Tax'}
</button>
</div>

View file

@ -268,7 +268,7 @@ export default function UsersPage() {
<p><strong>Created:</strong> {(selectedUser()!.created_at || selectedUser()!.createdAt) ? new Date((selectedUser()!.created_at || selectedUser()!.createdAt)!).toLocaleString() : '—'}</p>
<p><strong>Role ID:</strong> {selectedUser()!.roleId || '—'}</p>
<div class="actions">
<A class="inline-flex items-center rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-semibold text-white hover:bg-[#0f2a4e] transition-colors" href={`/admin/users/${selectedUser()!.id}/edit`}>Edit User</A>
<A class="btn-primary" href={`/admin/users/${selectedUser()!.id}/edit`}>Edit User</A>
<button class="inline-flex items-center rounded-lg border border-red-200 bg-red-50 px-4 py-2 text-sm font-medium text-red-600 hover:bg-red-100 transition-colors" type="button">Deactivate</button>
</div>
</div>

View file

@ -173,7 +173,7 @@ export default function EditUserPage() {
<div class="mt-6 flex justify-end gap-3 border-t border-gray-100 pt-5">
<button class="rounded-lg border border-gray-200 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 transition-colors" type="button" onClick={() => navigate('/admin/users')}>Cancel</button>
<button class="rounded-lg bg-[#0a1d37] px-6 py-2 text-sm font-medium text-white hover:bg-[#0f2a4e] transition-colors disabled:opacity-60" type="button" onClick={save} disabled={submitting()}>
<button class="btn-primary" type="button" onClick={save} disabled={submitting()}>
{submitting() ? 'Saving…' : 'Save Changes'}
</button>
</div>

View file

@ -169,7 +169,7 @@ export default function UserDetailPage() {
</div>
<div class="flex items-center gap-2">
<A class="rounded-lg border border-gray-200 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 transition-colors" href="/admin/users">Back to Users</A>
<A class="rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-medium text-white hover:bg-[#0f2a4e] transition-colors" href={`/admin/users/${params.id}/edit`}>Edit User</A>
<A class="btn-primary" href={`/admin/users/${params.id}/edit`}>Edit User</A>
</div>
</div>
<div class="p-6 flex-1">

View file

@ -48,7 +48,7 @@ export default function VerificationStatusDetailPage() {
</div>
<div class="flex items-center gap-2">
<A class="rounded-lg border border-gray-200 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 transition-colors" href="/admin/verification-status">Back to Status List</A>
<A class="rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-medium text-white hover:bg-[#0f2a4e] transition-colors" href={`/admin/approval/${params.id}`}>Open Approval Detail</A>
<A class="btn-primary" href={`/admin/approval/${params.id}`}>Open Approval Detail</A>
</div>
</div>
<div class="p-6 flex-1">

View file

@ -17,7 +17,7 @@ export default function VerificationManagementPage() {
Use Approval Management to review companies, customers, candidates, and professional submissions.
</p>
<div class="actions">
<A class="inline-flex items-center rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-semibold text-white hover:bg-[#0f2a4e] transition-colors" href="/admin/approval">Open Approval Management</A>
<A class="btn-primary" href="/admin/approval">Open Approval Management</A>
</div>
</div>
</div>

View file

@ -45,7 +45,7 @@ export default function VerificationDetailPage() {
</div>
<div class="flex items-center gap-2">
<A class="rounded-lg border border-gray-200 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 transition-colors" href="/admin/verification">Back to Verification</A>
<A class="rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-medium text-white hover:bg-[#0f2a4e] transition-colors" href={`/admin/approval/${params.id}`}>Open Approval Detail</A>
<A class="btn-primary" href={`/admin/approval/${params.id}`}>Open Approval Detail</A>
</div>
</div>
<div class="p-6 flex-1">
@ -72,7 +72,7 @@ export default function VerificationDetailPage() {
This route mirrors the Next.js verification detail entry point and delegates action workflow to Approval Management.
</p>
<div class="actions">
<A class="rounded-lg bg-[#0a1d37] px-4 py-2 text-sm font-medium text-white hover:bg-[#0f2a4e] transition-colors" href={`/admin/approval/${params.id}`}>Review & Take Action</A>
<A class="btn-primary" href={`/admin/approval/${params.id}`}>Review & Take Action</A>
</div>
</section>
</div>