chore(ui): unify heading weight, card cadence, and label-input gap across settings and admin

Sub-headings in the settings + admin section trees were mixing
font-medium and font-semibold; the password-change dialog used a
1.5-unit label-input gap while every other Settings form runs at 2.
Standardise on font-semibold for every h2 and h3, the card-internal
cadence to space-y-4 on the AI provider and thresholds-editor cards,
and lift the password-dialog field gaps to space-y-2.
This commit is contained in:
Marc-André Bombeck committed 2026-05-15 17:07:50 +02:00
1 parent cef9bc14fe
commit 39fef7d316
5 files changed
+10 -10

No files matched your search

@@ -417,7 +417,7 @@ export function UserManagementSection() {
{/* Edit Dialog */}
{editingUser && (
<div className="bg-muted/80 mt-4 rounded-lg p-4">
<h3 className="mb-3 text-sm font-medium">
<h3 className="mb-3 text-sm font-semibold">
{t("admin.editUserTitle", { name: editingUser.username })}
</h3>
<div className="space-y-3">
@@ -484,7 +484,7 @@ export function UserManagementSection() {
{/* Password Reset Dialog */}
{resetUser && (
<div className="bg-muted/80 mt-4 rounded-lg p-4">
<h3 className="mb-3 text-sm font-medium">
<h3 className="mb-3 text-sm font-semibold">
{t("admin.resetPasswordTitle", { name: resetUser.username })}
</h3>
<div className="space-y-3">
+5 -5
View File
@@ -609,7 +609,7 @@ export function AccountSection() {
<form onSubmit={handleChangePassword} className="space-y-3">
<div className="grid gap-3 sm:grid-cols-3">
<div className="space-y-1.5">
<div className="space-y-2">
<Label htmlFor="current-password">
{t("settings.currentPassword")}
</Label>
@@ -619,7 +619,7 @@ export function AccountSection() {
onChange={(e) => setCurrentPassword(e.target.value)}
/>
</div>
<div className="space-y-1.5">
<div className="space-y-2">
<Label htmlFor="new-password">
{t("settings.newPassword")}
</Label>
@@ -629,7 +629,7 @@ export function AccountSection() {
onChange={(e) => setNewPassword(e.target.value)}
/>
</div>
<div className="space-y-1.5">
<div className="space-y-2">
<Label htmlFor="confirm-password">
{t("settings.confirmNewPassword")}
</Label>
@@ -707,7 +707,7 @@ function PasskeyListSection({ isAuthenticated }: { isAuthenticated: boolean }) {
if (!passkeys || passkeys.length === 0) {
return (
<div>
<h3 className="text-sm font-medium">{t("settings.passkeys")}</h3>
<h3 className="text-sm font-semibold">{t("settings.passkeys")}</h3>
<p className="text-muted-foreground mt-1 text-xs">
{t("settings.noPasskeys")}
</p>
@@ -717,7 +717,7 @@ function PasskeyListSection({ isAuthenticated }: { isAuthenticated: boolean }) {
return (
<div>
<h3 className="text-sm font-medium">
<h3 className="text-sm font-semibold">
{t("settings.registeredPasskeys")}
</h3>
<p className="text-muted-foreground mt-1 text-xs">
+1 -1
View File
@@ -249,7 +249,7 @@ function AiInsightsCard({ isAuthenticated }: { isAuthenticated: boolean }) {
}
return (
<div className="bg-card border-border space-y-6 rounded-xl border p-6">
<div className="bg-card border-border space-y-4 rounded-xl border p-6">
<div className="flex flex-wrap items-start justify-between gap-2">
<div className="flex items-center gap-2">
<Sparkles className="text-primary h-5 w-5" />
@@ -385,7 +385,7 @@ function WithingsCard({
</a>
)}
<div className="space-y-3">
<h3 className="text-sm font-medium">
<h3 className="text-sm font-semibold">
{t("settings.withingsCredentials")}
</h3>
<form onSubmit={handleSaveCredentials} className="space-y-3">
@@ -117,7 +117,7 @@ export function ThresholdsEditorSection({ id }: { id: string }) {
return (
<div
id={id}
className="bg-card border-border scroll-mt-28 space-y-5 rounded-xl border p-6"
className="bg-card border-border scroll-mt-28 space-y-4 rounded-xl border p-6"
>
{/* v1.4.19 A8 / F-07: page header `settings.sections.thresholds.*`
already provides the title + description for this route, so the