/* Fehlerhinweis steht über der Tab-Leiste, nie über der Navigation (28.09.2026). */
.storage-error{position:fixed;inset:auto var(--space-3) calc(var(--tab-bar-clearance,0px) + var(--space-2));z-index:100000;background:var(--error-bg);border:1px solid var(--error-color);color:var(--error-color);padding:var(--space-3) var(--space-4);border-radius:var(--radius-card);box-shadow:none;max-height:35vh;overflow:auto}
.storage-error[hidden]{display:none}
#nutritionCompletion{margin-block:var(--space-3)}
#nutritionCompletion p{margin:var(--space-2) 0 0;font-size:var(--font-size-list)}
.actual-label label{display:block;font-size:var(--font-size-label);white-space:nowrap}
.machine-brand-wrap input{min-width:0;max-width:100%;width:100%}
button:focus-visible,a:focus-visible,select:focus-visible,input:focus-visible{outline:1px solid var(--accent);outline-offset:var(--space-1)}
/* Ausgeblendete Formularfelder (z. B. Einheitensystem) bleiben auch in Rastern unsichtbar. */
.profile-grid label[hidden]{display:none}
/* Ruhiger Hinweis über der Tab-Leiste, wenn nicht auf dem Gerät gespeichert werden kann (Baustein «Fehler und Bestätigung», kein Alarm). */
.storage-notice{position:fixed;left:var(--space-4);right:var(--space-4);bottom:calc(var(--tab-bar-clearance,0px) + var(--space-2));z-index:99990;display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-1) var(--space-3);padding:var(--space-3);background:var(--card);border:1px solid var(--border);border-radius:var(--radius-card)}
.storage-notice[hidden]{display:none}
.storage-notice__text{flex:1 1 220px;margin:0;color:var(--danger-text);font:var(--font-weight-regular) var(--font-size-error)/1.5 var(--font-system)}
.storage-notice__link{min-height:var(--control-height);padding:0 var(--space-2);color:var(--text);font:var(--font-weight-medium) var(--font-size-list)/1 var(--font-system);text-decoration:underline;background:transparent;border:0;cursor:pointer}
/* Hinweis «neuere Fassung nötig» (js/10-auth.js, S0a): derselbe Baustein; steht der Speicherhinweis, hat dieser Vorrang. */
body:has(#bodyosStorageNotice:not([hidden])) .storage-notice--update{display:none}
/* Frühwarnung «Speicher zu 80 % belegt» (js/09-backup.js): ruhig, schliessbar; der Hinweis «nicht gespeichert» hat Vorrang. */
body:has(#bodyosStorageNotice:not([hidden])) .storage-notice--warning{display:none}
.storage-notice__text--calm{color:var(--text)}
.storage-notice__close{display:inline-flex;align-items:center;justify-content:center;min-width:var(--control-height);min-height:var(--control-height);padding:0;color:var(--text-2);background:transparent;border:0;border-radius:var(--radius-button);cursor:pointer}
.storage-notice__close svg{width:18px;height:18px}
/* Konfliktdialog: passt die Kopie nicht auf das Gerät, wird sie als Datei angeboten. */
.dialog-actions[hidden],.sync-conflict-unsaved[hidden]{display:none}
.sync-conflict-unsaved{margin-top:var(--space-3)}
/* Daten und Backup: frühere Stände als Verlaufsliste, Konfliktkopie */
.backup-history{margin-top:var(--space-3);overflow:hidden;border:1px solid var(--border);border-radius:var(--radius-card)}
.backup-history:empty{display:none}
.backup-history__row{display:grid;grid-template-columns:minmax(0,1fr) auto var(--icon-size);gap:var(--space-3);align-items:center;width:100%;min-height:var(--control-height);padding:var(--space-2) var(--space-3);color:var(--text);font:var(--font-weight-regular) var(--font-size-list)/1.4 var(--font-system);text-align:left;background:var(--card);border:0;border-radius:0;cursor:pointer}
.backup-history__row+.backup-history__row{border-top:1px solid var(--border)}
.backup-history__row span{display:grid;gap:2px;min-width:0}
.backup-history__row strong{font-weight:var(--font-weight-regular)}
.backup-history__row small{color:var(--text-3);font-size:var(--font-size-label)}
.backup-history__row b{font-weight:var(--font-weight-medium);font-variant-numeric:tabular-nums;white-space:nowrap}
.backup-history__row svg{width:var(--icon-size);height:var(--icon-size);color:var(--text-3)}
.backup-history__row:disabled{cursor:default}
.backup-history__placeholder{--skeleton-height:var(--control-height);margin:var(--space-2) var(--space-3)}
#backupSnapshotStatus,#backupConflictContent{margin:var(--space-3) 0 0}
#backupSnapshotStatus:empty{display:none}
/* Zustand der Sicherung in klaren Worten oben in «Daten und Backup» (28.09.2026): Listentext, neutral (kein Erfolgsgrün). */
.backup-sync-status{margin:0 0 var(--space-3);color:var(--text-2);font:var(--font-weight-regular) var(--font-size-list)/1.4 var(--font-system)}
.backup-sync-status[hidden],.backup-sync-status:empty{display:none}
/* Nutzung auf diesem Gerät (28.09.2026): Liste je Monat, Zahl rechts mit gleich breiten Ziffern; Name bricht um. */
.usage-list{margin-top:var(--space-3)}
.usage-list:focus:not(:focus-visible){outline:none}
.usage-list__month{margin:var(--space-3) 0 var(--space-1);color:var(--text-3);font:var(--font-weight-regular) var(--font-size-list)/1.3 var(--font-system)}
.usage-list__month:first-child{margin-top:0}
.usage-list__rows{margin:0;padding:0;list-style:none;border:1px solid var(--border);border-radius:var(--radius-card)}
.usage-list__rows li{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--space-3);align-items:center;min-height:var(--control-height);padding:var(--space-1) var(--space-3);color:var(--text);font:var(--font-weight-regular) var(--font-size-list)/1.35 var(--font-system)}
.usage-list__rows li+li{border-top:1px solid var(--border)}
.usage-list__rows span{min-width:0;overflow-wrap:break-word}
.usage-list__rows b{font-weight:var(--font-weight-medium);font-variant-numeric:tabular-nums}
.usage-list__empty{margin:0}
#usageCounterReset[hidden],#usageCounterCopy[hidden],#usageCounterError[hidden]{display:none}
/* Konfliktdialog: beide Zeiten (anderes Gerät, dieses Gerät) als ruhige Zeile. */
.sync-conflict-times{color:var(--text-2);font-variant-numeric:tabular-nums}
