diff --git a/src/App.svelte b/src/App.svelte
index ff4cfb4..7880bca 100644
--- a/src/App.svelte
+++ b/src/App.svelte
@@ -1425,7 +1425,7 @@
onblur={() => (documentName = documentName.trim())}
/>
.{documentFormat}
- {#if dirty}•{/if}
+ {#if dirty}• {t().app.unsavedChanges}{/if}
@@ -2086,6 +2086,8 @@
.doc-dirty {
flex-shrink: 0;
+ white-space: nowrap;
+ font-size: 0.72rem;
color: var(--color-text-muted);
}
diff --git a/src/lib/components/CLAUDE.md b/src/lib/components/CLAUDE.md
index cb6cc91..d620bb9 100644
--- a/src/lib/components/CLAUDE.md
+++ b/src/lib/components/CLAUDE.md
@@ -214,8 +214,10 @@ size alone makes a short word far too small and a long one overflow the page.
## The unsaved dot (`App.svelte`, both chromes)
-A `•` beside the document name while the document differs from what was last written to a
-file. It is an FNV-1a checksum (`utils/hash.ts`) over the text **and** everything
+A `• Not saved` beside the document name while the document differs from what was last
+written to a file — a label rather than a glyph, since a mark has to be known to be read.
+In the ribbon it sits **beside** the name box, whose 30% cap would otherwise squeeze the
+name itself. It is an FNV-1a checksum (`utils/hash.ts`) over the text **and** everything
`exportArgs()` hands the exporter beside it — page setup, styles, notes, the zones — plus
the name the file is saved under, so a margin preset or a rename marks the document as much
as a keystroke does, and an undo back to the saved state clears the dot again. The page count is left out: it is a layout result, and a font
diff --git a/src/lib/components/ribbon/Ribbon.svelte b/src/lib/components/ribbon/Ribbon.svelte
index 4dd0d61..4b65d11 100644
--- a/src/lib/components/ribbon/Ribbon.svelte
+++ b/src/lib/components/ribbon/Ribbon.svelte
@@ -311,8 +311,10 @@
onblur={() => (documentName = documentName.trim())}
/>
.{documentFormat}
- {#if dirty}•{/if}
+
+ {#if dirty}• {t().app.unsavedChanges}{/if}
@@ -619,7 +621,7 @@
.doc-name-input:focus { outline: none; border-color: var(--w-accent); color: var(--w-text); }
.doc-name-ext { margin-right: 6px; }
- .doc-dirty { margin: 0 6px 0 -4px; color: var(--w-text-dim); }
+ .doc-dirty { margin: 0 6px 0 -4px; white-space: nowrap; font-size: 11px; color: var(--w-text-dim); }
.ribbon-body {
display: flex;
diff --git a/src/lib/i18n/locales/de.ts b/src/lib/i18n/locales/de.ts
index 90785dc..8bd28c7 100644
--- a/src/lib/i18n/locales/de.ts
+++ b/src/lib/i18n/locales/de.ts
@@ -1040,7 +1040,7 @@ const de: Messages = {
open: 'Öffnen…',
save: '.odt speichern',
saveExport: 'Speichern / Exportieren',
- unsavedChanges: 'Nicht gespeicherte Änderungen',
+ unsavedChanges: 'Nicht gespeichert',
saveAsFormats: '.odt oder .docx',
odt: 'ODT',
openDocument: 'OpenDocument',
diff --git a/src/lib/i18n/locales/en.ts b/src/lib/i18n/locales/en.ts
index 9374bcf..cfcb41a 100644
--- a/src/lib/i18n/locales/en.ts
+++ b/src/lib/i18n/locales/en.ts
@@ -1046,7 +1046,7 @@ const en = {
open: 'Open…',
save: 'Save .odt',
saveExport: 'Save / Export',
- unsavedChanges: 'Unsaved changes',
+ unsavedChanges: 'Not saved',
saveAsFormats: '.odt or .docx',
odt: 'ODT',
openDocument: 'OpenDocument',