diff --git a/VERSION b/VERSION
index 5568a07..63539d7 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1118
\ No newline at end of file
+1119
\ No newline at end of file
diff --git a/backend/static/index.html b/backend/static/index.html
index b1e995d..753b442 100644
--- a/backend/static/index.html
+++ b/backend/static/index.html
@@ -86,14 +86,14 @@
Ban Yaro
-
+
-
-
-
-
-
+
+
+
+
+
@@ -617,11 +617,11 @@
-
-
-
-
-
+
+
+
+
+
@@ -631,7 +631,7 @@
-
+
diff --git a/backend/static/js/app.js b/backend/static/js/app.js
index 5a51556..d24a3b8 100644
--- a/backend/static/js/app.js
+++ b/backend/static/js/app.js
@@ -3,7 +3,7 @@
Router, State-Management, Navigation, Initialisierung.
============================================================ */
-const APP_VER = '1118'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen
+const APP_VER = '1119'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen
const APP_VERSION = '1.6.0'; // ← semantische Version, wird bei make release gesetzt
window.APP_VER = APP_VER; // global verfügbar für andere Module (z.B. offline-indicator)
window.APP_VERSION = APP_VERSION;
diff --git a/backend/static/js/pages/notes.js b/backend/static/js/pages/notes.js
index f983cc2..6fceffe 100644
--- a/backend/static/js/pages/notes.js
+++ b/backend/static/js/pages/notes.js
@@ -68,7 +68,10 @@ window.Page_notes = (() => {
} catch (_) { return 'Älteres'; }
}
- function _truncate(str, max = 150) {
+ function _truncate(str, max = 600) {
+ // Karten zeigen max 5 Zeilen via CSS-Clamp — Text muss lang genug
+ // sein dass die Clamp greift. Bei sehr langen Notes: vor Clamp abschneiden
+ // damit der String nicht riesig in der DOM-Page steht.
if (!str) return '';
return str.length > max ? str.slice(0, max) + '…' : str;
}
@@ -248,8 +251,12 @@ window.Page_notes = (() => {
/* .notes-card-meta { display: flex; align-items: center; gap: var(--space-2); font-size: var(--text-xs); color: var(--c-text-muted); } */
/* Notes-Override: Actions in Top-Zeile rechts ausrichten (statt align-self:center bei list-item-actions) */
.notes-card-actions { margin-left: auto; align-self: flex-start; }
- /* Notes-Override: Text ohne -webkit-line-clamp (komplett anzeigen) + pre-wrap */
- .notes-card-text { line-height: 1.55; white-space: pre-wrap; margin: 0; display: block; -webkit-line-clamp: unset; overflow: visible; color: var(--c-text); }
+ /* Notes-Override: Newlines (pre-wrap) + max 5 Zeilen mit "…", Rest in Detail-Modal */
+ .notes-card-text { line-height: 1.55; white-space: pre-wrap; margin: 0; color: var(--c-text);
+ display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 5; overflow: hidden; }
+ /* Detail-Modal: voller Notiz-Text scrollbar */
+ .notes-detail-text { white-space: pre-wrap; line-height: 1.6; font-size: var(--text-base);
+ color: var(--c-text); margin: 0; max-height: 60vh; overflow-y: auto; }
/* TODO nach Migration entfernen: ersetzt durch .list-item-micro-badges / .list-item-micro-badge */
/* .notes-micro-badges { display: flex; flex-wrap: wrap; gap: var(--space-1); } */
/* .notes-micro-badge { font-size: var(--text-xs); padding: 2px 6px; border-radius: var(--radius-sm); background: var(--c-surface-2); color: var(--c-text-secondary); } */
@@ -458,6 +465,64 @@ window.Page_notes = (() => {
}
});
});
+
+ // Karte selbst klickbar → Detail-Modal mit vollem Text
+ _container.querySelectorAll('.notes-card').forEach(card => {
+ card.addEventListener('click', e => {
+ // Klicks auf Action-Buttons nicht doppelt verarbeiten
+ if (e.target.closest('.list-item-action-btn')) return;
+ const note = _notes.find(n => n.id === parseInt(card.dataset.id, 10));
+ if (note) _openDetailModal(note);
+ });
+ });
+ }
+
+ // ----------------------------------------------------------
+ // Detail-Modal: voller Notiz-Text + Meta + Bearbeiten/Löschen
+ // ----------------------------------------------------------
+ function _openDetailModal(note) {
+ const rb = RUBRIKEN.find(r => r.id === note.rubrik) || RUBRIKEN[0];
+ const meta = (() => { try { return JSON.parse(note.meta || '{}'); } catch { return {}; } })();
+ const microBadges = [];
+ if (meta.erfolg) microBadges.push(`🐾 ${meta.erfolg}/5`);
+ if (meta.umgebung) microBadges.push({ zuhause: '🏠 Zuhause', natur: '🌿 Natur', stadt: '🌆 Stadt' }[meta.umgebung] || meta.umgebung);
+ if (meta.hund_stimmung) microBadges.push({ super: '😊 Super', ok: '😐 Ok', mude: '😔 Müde' }[meta.hund_stimmung] || meta.hund_stimmung);
+
+ UI.modal.open({
+ title: `${UI.icon(rb.icon)} ${UI.escape(rb.label)}`,
+ body: `
+