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',