diff --git a/docs/reports/2026-09-12-ui-visual-review-delivery.md b/docs/reports/2026-09-12-ui-visual-review-delivery.md
index fbfe878e..c9f21930 100644
--- a/docs/reports/2026-09-12-ui-visual-review-delivery.md
+++ b/docs/reports/2026-09-12-ui-visual-review-delivery.md
@@ -42,6 +42,15 @@ Docker usando il medesimo tag di revisione; immagine di ripristino invariata, ne
La nuova immagine sostituisce quella identificata nella prima consegna sotto:
`sha256:f576ee4882456b4d2d338dbb2228d301f9ffd8d0c7de541842c767bbe8d02dad`.
+## Follow-up: indicatori del catalogo (2026-09-13)
+
+Spostati i pallini dopo le etichette Catalog, Operations e Metadata updated, mantenendo
+il rientro del testo e l'allineamento con i valori sottostanti. Spaziatura uniforme e
+centratura verticale secondo Impeccable. I 7 scenari Playwright passano, inclusi nuovi
+controlli geometrici per tutte e tre le etichette alle cinque larghezze responsive.
+Il successivo aggiornamento del medesimo tag frontend include questa correzione;
+il digest del follow-up precedente identifica quindi una versione superata.
+
## Verifica
| Verifica | Esito |
diff --git a/frontend/e2e/ui-visual-review.spec.ts b/frontend/e2e/ui-visual-review.spec.ts
index 28d012e2..61970e33 100644
--- a/frontend/e2e/ui-visual-review.spec.ts
+++ b/frontend/e2e/ui-visual-review.spec.ts
@@ -104,6 +104,17 @@ for (const width of [390, 649, 768, 1280, 1600]) {
await expect(heading).toHaveCSS("font-size", "24px");
expect(await inspect(page)).toEqual({ overflow: 0, serif: [], tiny: [] });
if (name === "Memory") await expect(page.getByText("No memory cards yet.", { exact: false })).toBeVisible();
+ if (name === "Database") {
+ const statuses = page.locator(".thot-fleet-ledger__header-status .thot-fleet-ledger__status-item");
+ await expect(statuses).toHaveCount(3);
+ for (const status of await statuses.all()) {
+ const label = await status.locator(".thot-fleet-ledger__status-label > span:first-child").boundingBox();
+ const mark = await status.locator(".thot-fleet-ledger__status-mark").boundingBox();
+ const value = await status.locator(".thot-fleet-ledger__status-value").boundingBox();
+ expect(mark!.x - (label!.x + label!.width)).toBeGreaterThanOrEqual(7);
+ expect(Math.abs(label!.x - value!.x)).toBeLessThan(1);
+ }
+ }
if (name === "Evidence") {
const search = await page.getByRole("textbox", { name: "Search Evidence" }).boundingBox();
expect(search!.width).toBeGreaterThan(180);
diff --git a/frontend/src/shell/database-management/FleetLedgerShell.css b/frontend/src/shell/database-management/FleetLedgerShell.css
index d0c7315b..d85f6126 100644
--- a/frontend/src/shell/database-management/FleetLedgerShell.css
+++ b/frontend/src/shell/database-management/FleetLedgerShell.css
@@ -154,6 +154,8 @@
min-width: min(100%, 10rem);
gap: 0.5rem;
align-items: flex-start;
+ /* Preserve the text inset formerly occupied by the leading marker and gap. */
+ padding-inline-start: 0.95rem;
}
.thot-fleet-ledger__status-item[data-tone="success"] {
@@ -175,7 +177,6 @@
.thot-fleet-ledger__status-mark {
width: 0.45rem;
height: 0.45rem;
- margin-top: 0.33rem;
flex: 0 0 auto;
border-radius: 999px;
background: var(--fleet-status-color);
@@ -191,6 +192,9 @@
.thot-fleet-ledger__status-label {
grid-column: 1 / -1;
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
font-size: var(--text-meta);
}
diff --git a/frontend/src/shell/database-management/FleetLedgerShell.tsx b/frontend/src/shell/database-management/FleetLedgerShell.tsx
index 5436ba05..a0a6c5d2 100644
--- a/frontend/src/shell/database-management/FleetLedgerShell.tsx
+++ b/frontend/src/shell/database-management/FleetLedgerShell.tsx
@@ -159,9 +159,11 @@ export function FleetLedgerRealStatus({
className="thot-fleet-ledger__status-item"
data-tone={item.tone ?? "neutral"}
>
-
- {item.label}
+
+ {item.label}
+
+
{item.value}
{item.detail ? (
{item.detail}