+
diff --git a/src/renderer-stats.ts b/src/renderer-stats.ts
index 11755e7..e1a4f09 100644
--- a/src/renderer-stats.ts
+++ b/src/renderer-stats.ts
@@ -1,5 +1,3 @@
-let lastArchiveStatsScannedAt = '';
-
// Trivial property-access wrapper. The codebase's renderer relies on
// HTML-string rendering throughout (queue items, settings cards, etc.),
// and all dynamic inputs are passed through escapeStatsHtml below — no
@@ -20,7 +18,6 @@ async function refreshArchiveStats(): Promise
{
try {
const stats = await window.api.getArchiveStats();
renderArchiveStats(stats);
- lastArchiveStatsScannedAt = stats.scannedAt;
} catch (e) {
const summary = document.getElementById('statsSummaryGrid');
if (summary) summary.textContent = `Fehler: ${String(e)}`;
diff --git a/src/styles.css b/src/styles.css
index 519016c..fd18baa 100644
--- a/src/styles.css
+++ b/src/styles.css
@@ -324,6 +324,74 @@ body {
margin-top: 10px;
}
+/* ============================================
+ EVENTS / CHAT VIEWER MODALS — shared structure
+ ============================================
+ Both viewers used to roll their own inline-styled list container
+ + status row. Extracted into a small shared family so the look
+ stays consistent if either one is touched independently later. */
+.viewer-modal {
+ display: flex;
+ flex-direction: column;
+}
+
+.viewer-modal-events {
+ max-width: 700px;
+ max-height: 80vh;
+}
+
+.viewer-modal-chat {
+ max-width: 800px;
+ height: 80vh;
+}
+
+.viewer-modal-title {
+ margin-top: 0;
+}
+
+.viewer-modal-status {
+ color: var(--text-secondary);
+ font-size: 12px;
+ margin-bottom: 8px;
+}
+
+.viewer-modal-status-inline {
+ margin-bottom: 0;
+}
+
+.viewer-modal-list {
+ flex: 1;
+ overflow-y: auto;
+ background: var(--bg-main);
+ border: 1px solid var(--border-soft);
+ border-radius: 6px;
+ padding: 8px;
+}
+
+.viewer-modal-list-chat {
+ font-family: 'Consolas', 'Segoe UI Mono', monospace;
+ font-size: 12px;
+}
+
+.viewer-modal-filter-row {
+ display: flex;
+ margin-bottom: 8px;
+ gap: 8px;
+ flex-wrap: wrap;
+ align-items: center;
+}
+
+.viewer-modal-filter-input {
+ flex: 1;
+ min-width: 160px;
+ background: var(--bg-card);
+ border: 1px solid var(--border-soft);
+ border-radius: 6px;
+ padding: 6px 10px;
+ color: var(--text);
+ font-size: 13px;
+}
+
.streamer-item .remove {
margin-left: auto;
opacity: 0;