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; text-decoration: none;
} }
.btn-primary:hover { background: #0f2a4e; box-shadow: 0 4px 12px rgba(10,29,55,0.25); } .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 */ /* Secondary button */
.btn-secondary { .btn-secondary {

View file

@ -150,7 +150,7 @@ export default function ApplicationsPage() {
<div class="mt-4 flex gap-2 flex-wrap"> <div class="mt-4 flex gap-2 flex-wrap">
<Show when={app.status === 'SUBMITTED' || app.status === 'SHORTLISTED'}> <Show when={app.status === 'SUBMITTED' || app.status === 'SHORTLISTED'}>
<button <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} disabled={busyId() === app.id}
onClick={() => updateStatus(app.id, 'ACCEPTED')} 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 class="mb-6 flex items-start justify-between gap-4" style="margin-bottom:16px">
<div /> <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'} {showAddRule() ? 'Cancel' : '+ Add Rule'}
</button> </button>
</div> </div>
@ -1010,7 +1010,7 @@ export default function ApprovalPage() {
</div> </div>
</div> </div>
<div class="actions" style="margin-top:14px"> <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'} {submittingRule() ? 'Saving...' : 'Save Rule'}
</button> </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> <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> <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> <p class="text-sm text-gray-500 mt-0.5">Manage all company accounts on the platform.</p>
</div> </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>
</div> </div>

View file

@ -107,7 +107,7 @@ export default function CompanyDetailPage() {
{isVerified() ? 'Verified - Can Post Jobs' : 'Not Verified'} {isVerified() ? 'Verified - Can Post Jobs' : 'Not Verified'}
</span> </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 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> </div>
<div class="p-6 flex-1"> <div class="p-6 flex-1">

View file

@ -111,7 +111,7 @@ export default function CreateCompanyPage() {
</div> </div>
<div class="mt-6 flex justify-end gap-3 border-t border-gray-100 pt-5"> <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> <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'} {saving() ? 'Creating…' : 'Create Company'}
</button> </button>
</div> </div>

View file

@ -320,7 +320,7 @@ export default function CouponPage() {
</div> </div>
</div> </div>
<div class="actions"> <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')} {saving() ? 'Saving...' : (form().id ? 'Update Coupon' : 'Save Coupon')}
</button> </button>
<Show when={form().id}> <Show when={form().id}>

View file

@ -174,7 +174,7 @@ export default function CreditPage() {
style="flex:1" style="flex:1"
/> />
<button <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} onClick={handleSearch}
disabled={searchLoading()} disabled={searchLoading()}
> >
@ -317,7 +317,7 @@ export default function CreditPage() {
/> />
</div> </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={adjLoading()}> <button class="btn-primary" type="submit" disabled={adjLoading()}>
{adjLoading() ? 'Adjusting...' : 'Apply Adjustment'} {adjLoading() ? 'Adjusting...' : 'Apply Adjustment'}
</button> </button>
</div> </div>
@ -357,7 +357,7 @@ export default function CreditPage() {
</div> </div>
</div> </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'} {reconLoading() ? 'Running...' : 'Run Reconciliation'}
</button> </button>
</div> </div>

View file

@ -220,7 +220,7 @@ export default function DepartmentPage() {
<Show when={view() === 'list'}> <Show when={view() === 'list'}>
<button <button
onClick={() => { setView('create'); setCreateError(''); setCreateName(''); setCreateDesc(''); }} 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} /> <Plus size={16} />
Add Department 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"> <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 Cancel
</button> </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'} {creating() ? 'Saving…' : 'Save'}
</button> </button>
</div> </div>
@ -375,7 +375,7 @@ export default function DepartmentPage() {
<div class="mt-3 flex gap-2"> <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" 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)} <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'} {saving() ? 'Saving…' : 'Save'}
</button> </button>
</div> </div>

View file

@ -237,7 +237,7 @@ export default function DesignationPage() {
Cancel Cancel
</button> </button>
<button type="submit" disabled={formLoading() || depts().length === 0} <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')} {formLoading() ? (view() === 'create' ? 'Creating…' : 'Updating…') : (view() === 'create' ? 'Create Designation' : 'Update Designation')}
</button> </button>
</div> </div>

View file

@ -324,7 +324,7 @@ export default function DiscountPage() {
</div> </div>
</div> </div>
<div class="actions"> <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')} {saving() ? 'Saving...' : (form().id ? 'Update Discount' : 'Save Discount')}
</button> </button>
<Show when={form().id}> <Show when={form().id}>

View file

@ -191,7 +191,7 @@ export default function EmployeesPage() {
Cancel Cancel
</button> </button>
<button type="submit" disabled={creating()} <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'} {creating() ? 'Creating…' : 'Create Internal User'}
</button> </button>
</div> </div>

View file

@ -135,7 +135,7 @@ export default function EditEmployeePage() {
</div> </div>
<div class="mt-6 flex justify-end gap-3 border-t border-gray-100 pt-5"> <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> <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'} {saving() ? 'Saving…' : 'Save Changes'}
</button> </button>
</div> </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" /> <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>
<div style="display:flex;justify-content:flex-end;margin-top:12px"> <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>
</div> </div>
); );
@ -478,7 +478,7 @@ export default function ExternalDashboardManagementPage() {
<h2 class="text-lg font-semibold text-gray-900">External Dashboard List</h2> <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> <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> </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'} {creating() ? 'Creating...' : 'Create External Dashboard'}
</button> </button>
</div> </div>
@ -534,7 +534,7 @@ export default function ExternalDashboardManagementPage() {
</div> </div>
<div class="builder-header-actions"> <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 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'} {saving() ? 'Saving...' : 'Save Dashboard'}
</button> </button>
</div> </div>

View file

@ -12,7 +12,7 @@ export default function HelpSupportBridgePage() {
<div class="p-6"> <div class="p-6">
<div class="table-card p-5 flex items-center gap-4"> <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> <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> </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> <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> <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> </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'} {creating() ? 'Creating...' : 'Create Internal Dashboard'}
</button> </button>
</div> </div>
@ -492,7 +492,7 @@ export default function InternalDashboardManagementPage() {
</div> </div>
<div class="builder-header-actions"> <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 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'} {saving() ? 'Saving...' : 'Save Dashboard'}
</button> </button>
</div> </div>

View file

@ -252,7 +252,7 @@ export default function KbPage(props: KbPageProps = {}) {
<Show when={tab() === 'categories'}> <Show when={tab() === 'categories'}>
<div class="mb-6 flex items-start justify-between gap-4" style="margin-bottom:16px"> <div class="mb-6 flex items-start justify-between gap-4" style="margin-bottom:16px">
<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" onClick={() => setShowCatForm(!showCatForm())}> <button class="btn-primary" onClick={() => setShowCatForm(!showCatForm())}>
{showCatForm() ? 'Cancel' : 'Add Category'} {showCatForm() ? 'Cancel' : 'Add Category'}
</button> </button>
</div> </div>
@ -301,7 +301,7 @@ export default function KbPage(props: KbPageProps = {}) {
/> />
</div> </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={catSaving()}> <button class="btn-primary" type="submit" disabled={catSaving()}>
{catSaving() ? 'Saving...' : 'Create Category'} {catSaving() ? 'Saving...' : 'Create Category'}
</button> </button>
</div> </div>
@ -377,7 +377,7 @@ export default function KbPage(props: KbPageProps = {}) {
/> />
</div> </div>
<div style="display:flex;gap:8px"> <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'} {editCatSaving() ? 'Saving...' : 'Save'}
</button> </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> <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> </select>
</div> </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={artSaving()}> <button class="btn-primary" type="submit" disabled={artSaving()}>
{artSaving() ? 'Creating...' : 'Create Article'} {artSaving() ? 'Creating...' : 'Create Article'}
</button> </button>
</div> </div>

View file

@ -41,7 +41,7 @@ export default function KbArticleDetailPage() {
</div> </div>
<div class="flex items-center gap-2"> <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 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>
</div> </div>

View file

@ -131,7 +131,7 @@ export default function KbArticleEditPage() {
</Show> </Show>
<div class="mt-6 flex justify-end border-t border-gray-100 pt-5"> <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'} {saving() ? 'Saving…' : 'Save Article'}
</button> </button>
</div> </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> <p class="text-sm text-gray-500 mt-0.5">Manage internal module definitions and activation state.</p>
</div> </div>
<button <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()} onClick={() => openModal()}
> >
Add Module Add Module
@ -247,7 +247,7 @@ export default function ModulesPage() {
</button> </button>
<button <button
type="submit" 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()} disabled={submitting()}
> >
{editing() ? 'Save Changes' : 'Create'} {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> <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> <p class="text-sm text-gray-500 mt-0.5">Manage onboarding flows, role assignments, and previewable step groups for external users.</p>
</div> </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> </div>
<OnboardingManagementTabs /> <OnboardingManagementTabs />

View file

@ -220,7 +220,7 @@ export default function PricingPage() {
<div class="flex items-center justify-end gap-1"> <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="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 <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} disabled={togglingId() === pkg.id}
onClick={() => toggleActive(pkg)} onClick={() => toggleActive(pkg)}
> >
@ -264,7 +264,7 @@ export default function PricingPage() {
/> />
</div> </div>
<div style="display:flex;gap:8px"> <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'} {editSaving() ? 'Saving...' : 'Save'}
</button> </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> <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>
<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'} {cSaving() ? 'Creating...' : 'Create Package'}
</button> </button>
</div> </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" style="padding:8px 10px;border:1px solid #e2e8f0;border-radius:6px;font-size:14px"
/> />
</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={loading()}> <button class="btn-primary" type="submit" disabled={loading()}>
{loading() ? 'Loading...' : 'Load Report'} {loading() ? 'Loading...' : 'Load Report'}
</button> </button>
</form> </form>

View file

@ -143,7 +143,7 @@ export default function ResponsesPage() {
</Show> </Show>
<Show when={row.status === 'SUBMITTED' || row.status === 'SHORTLISTED'}> <Show when={row.status === 'SUBMITTED' || row.status === 'SHORTLISTED'}>
<button <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} disabled={busyId() === row.id}
onClick={() => transition(row.id, 'ACCEPTED')} onClick={() => transition(row.id, 'ACCEPTED')}
> >

View file

@ -219,7 +219,7 @@ export default function ReviewPage() {
</Show> </Show>
<Show when={!isPublished}> <Show when={!isPublished}>
<button <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} disabled={toggling() === item.id}
onClick={() => handleUpdateStatus(item, 'PUBLISHED')} onClick={() => handleUpdateStatus(item, 'PUBLISHED')}
> >
@ -310,7 +310,7 @@ export default function ReviewPage() {
/> />
</div> </div>
<div class="actions"> <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'} {saving() ? 'Saving...' : 'Save Review'}
</button> </button>
</div> </div>

View file

@ -230,7 +230,7 @@ export default function EditInternalRolePage() {
{/* Save */} {/* Save */}
<div class="flex justify-end mt-2"> <div class="flex justify-end mt-2">
<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" class="btn-primary"
onClick={handleSave} onClick={handleSave}
disabled={saving() || !roleName().trim()} disabled={saving() || !roleName().trim()}
> >

View file

@ -52,7 +52,7 @@ export default function RoleDetailPage() {
<div class="flex items-center gap-2"> <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> <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}> <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> </Show>
</div> </div>
</div> </div>

View file

@ -210,7 +210,7 @@ export default function CreateInternalRolePage() {
<div class="flex justify-end gap-3 mt-2"> <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> <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 <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} onClick={handleSave}
disabled={saving() || !roleName().trim()} disabled={saving() || !roleName().trim()}
> >

View file

@ -60,7 +60,7 @@ export default function InternalRolesPage() {
</div> </div>
<A <A
href="/admin/roles/create" 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 Create Internal Role
</A> </A>

View file

@ -43,7 +43,7 @@ export default function RoleTemplatesPage() {
<h1 class="text-xl font-semibold text-gray-900">Role Templates</h1> <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> <p class="text-sm text-gray-500 mt-0.5">Starter role presets for faster internal role creation and cloning.</p>
</div> </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>
</div> </div>

View file

@ -362,7 +362,7 @@ export default function SupportPage() {
</div> </div>
</div> </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'} {createLoading() ? 'Creating...' : 'Create Support Case'}
</button> </button>
</div> </div>

View file

@ -70,7 +70,7 @@ export default function TaxPage() {
<h1 class="text-xl font-semibold text-gray-900">Tax Management</h1> <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> <p class="text-sm text-gray-500 mt-0.5">Configure tax rates for platform transactions.</p>
</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" onClick={() => setShowForm(!showForm())}> <button class="btn-primary" onClick={() => setShowForm(!showForm())}>
{showForm() ? 'Cancel' : 'Add Tax'} {showForm() ? 'Cancel' : 'Add Tax'}
</button> </button>
</div> </div>
@ -116,7 +116,7 @@ export default function TaxPage() {
/> />
</div> </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={saving()}> <button class="btn-primary" type="submit" disabled={saving()}>
{saving() ? 'Saving...' : 'Save Tax'} {saving() ? 'Saving...' : 'Save Tax'}
</button> </button>
</div> </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>Created:</strong> {(selectedUser()!.created_at || selectedUser()!.createdAt) ? new Date((selectedUser()!.created_at || selectedUser()!.createdAt)!).toLocaleString() : '—'}</p>
<p><strong>Role ID:</strong> {selectedUser()!.roleId || '—'}</p> <p><strong>Role ID:</strong> {selectedUser()!.roleId || '—'}</p>
<div class="actions"> <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> <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>
</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"> <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 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'} {submitting() ? 'Saving…' : 'Save Changes'}
</button> </button>
</div> </div>

View file

@ -169,7 +169,7 @@ export default function UserDetailPage() {
</div> </div>
<div class="flex items-center gap-2"> <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 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> </div>
<div class="p-6 flex-1"> <div class="p-6 flex-1">

View file

@ -48,7 +48,7 @@ export default function VerificationStatusDetailPage() {
</div> </div>
<div class="flex items-center gap-2"> <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 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> </div>
<div class="p-6 flex-1"> <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. Use Approval Management to review companies, customers, candidates, and professional submissions.
</p> </p>
<div class="actions"> <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> </div>
</div> </div>

View file

@ -45,7 +45,7 @@ export default function VerificationDetailPage() {
</div> </div>
<div class="flex items-center gap-2"> <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 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> </div>
<div class="p-6 flex-1"> <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. This route mirrors the Next.js verification detail entry point and delegates action workflow to Approval Management.
</p> </p>
<div class="actions"> <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> </div>
</section> </section>
</div> </div>