style(settings): uniform vertical spacing across all sections

Pre-fix the per-card vertical rhythm was either `space-y-3` (AI
provider config forms), `space-y-5` (dashboard layout card) or
`space-y-4` (Account → Profile form). Three competing strides for
forms that visually live in the same shell, so the eye picks up the
discontinuity even though the section-level `space-y-6` outer rhythm
was already consistent.

Standardize on `space-y-4` between fields inside any single Settings
card:

- Dashboard "Customize layout" card: `space-y-5` -> `space-y-4`
- AI Codex / OpenAI / Anthropic / Local provider forms: `space-y-3` ->
  `space-y-4`

Account, Notifications and Export already used `space-y-4`. Section
roots and the AI parent card keep their `space-y-6` so distinct cards
still read as distinct surfaces.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Marc-André BombeckandClaude Opus 4.7 committed 2026-05-10 13:09:00 +02:00
1 parent 0cf23f34ca
commit 737b533089
3 files changed
+29 -5

No files matched your search

+24
View File
@@ -198,6 +198,30 @@ medications.csv,mood.csv}/`) left in place — same call as v1.4.16 /
shared-cwd race documented across earlier marathons; A3's edits
are correct on `origin/main`.
- 2026-05-10T13:05+02:00 — Wave A / A5 complete. Settings →
Integrations status UI consolidated. New
`<IntegrationStatusPill>` (`src/components/settings/integration-status-pill.tsx`)
is the single canonical surface — Dracula-tokenized chip top-right
of every integration card, "Connected · 12 min ago" pattern with
locale-aware relative-time bucketing (`just now` / `min` / `h` /
`d`), three states (`connected` / `error` / `disconnected`),
mobile-safe `whitespace-nowrap`. Withings + Mood Log cards
refactored: redundant v1.4.15 status banner ("connected / last
successful / last attempt" trio) is gone, Mood Log's bottom-of-
card "letzter Sync" line is gone, both cards now show a `<hr>`
visual divider between header and body for consistency (Marc
flagged the asymmetry). Actionable error text preserved as a
compact inline alert above the action row when a sync attempt
failed. New i18n keys under `settings.integrationPill.*` (EN +
DE). Three commits: `ba0d6b8` (pill component + i18n + 6 vitest
tests), `0dcc91a` (refactor + 5 section vitest tests), `47a8fc7`
(Pixel-5 e2e spec). Tests: 1646/1646 vitest pass; e2e spec added
but not run in this session. Reusable for v1.4.20 Apple Health
card on iOS. Detailed report: `.planning/phase-A5-report.md`.
Cross-agent race: commit `ba0d6b8` accidentally bundled A4's
`.planning/STATE.md` and `phase-A4-report.md` edits — same shared-
cwd race across earlier marathons, no information lost.
---
## Previous milestone — v1.4.18 (completed 2026-05-10T11:45+02:00)
+4 -4
View File
@@ -579,7 +579,7 @@ function CodexProviderForm({
const isConnected = status === "connected";
return (
<div data-testid="ai-provider-config-codex" className="space-y-3">
<div data-testid="ai-provider-config-codex" className="space-y-4">
<div className="flex flex-wrap items-center gap-2 text-sm">
<span className="font-medium">
{t("settings.ai.codex.modelSlugLabel")}
@@ -794,7 +794,7 @@ function OpenAIProviderForm({
});
return (
<div data-testid="ai-provider-config-openai" className="space-y-3">
<div data-testid="ai-provider-config-openai" className="space-y-4">
<div>
<Label htmlFor="ai-openai-key">
{t("settings.ai.openai.apiKey")}
@@ -980,7 +980,7 @@ function AnthropicProviderForm({
});
return (
<div data-testid="ai-provider-config-anthropic" className="space-y-3">
<div data-testid="ai-provider-config-anthropic" className="space-y-4">
<div>
<Label htmlFor="ai-anthropic-key">
{t("settings.ai.anthropicKeyLabel")}
@@ -1136,7 +1136,7 @@ function LocalProviderForm({
});
return (
<div data-testid="ai-provider-config-local" className="space-y-3">
<div data-testid="ai-provider-config-local" className="space-y-4">
<div>
<Label htmlFor="ai-local-base-url">
{t("settings.ai.baseUrlLabel")}
@@ -157,7 +157,7 @@ export function DashboardLayoutSection({ 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 A6 — title / action row uses the same stack-on-mobile,
right-align-on-desktop contract as Account → Password +