diff --git a/src/static/css/style.css b/src/static/css/style.css index d944697..52978bb 100644 --- a/src/static/css/style.css +++ b/src/static/css/style.css @@ -2450,213 +2450,113 @@ a.dev-source-pill:hover { padding: 12px 20px 8px; } -/* Achsen-Container */ -.ht-axis { - position: relative; - height: 110px; +/* === Timeline: Heatmap-Strip oben + vertikaler Newsfeed-Stream darunter === */ +.ht-tl { + display: flex; + flex-direction: column; + gap: var(--sp-md); } -/* Stündliches Layout: höher wegen Datums-Markern oben */ -.ht-axis--hourly { - height: 130px; +/* Heatmap-Strip */ +.ht-strip { + display: flex; + flex-direction: column; + gap: 4px; + padding: 4px 0 6px; } - -/* Punkte-Bereich (über der Linie) */ -.ht-points { - position: absolute; - left: 4%; - right: 4%; - top: 0; - height: 56px; +.ht-strip-cells { + display: grid; + grid-auto-flow: column; + grid-auto-columns: minmax(8px, 1fr); + gap: 2px; + height: 14px; } - -.ht-axis--hourly .ht-points { - top: 20px; -} - -/* Achsenlinie */ -.ht-axis-line { - position: absolute; - left: 2%; - right: 2%; - top: 60px; - height: 2px; - background: var(--border); -} - -.ht-axis--hourly .ht-axis-line { - top: 80px; -} - -/* Datums-Marker (vertikale Linie + Datum oben, nur bei Stunden-Granularität) */ -.ht-day-markers { - position: absolute; - left: 4%; - right: 4%; - top: 0; - bottom: 0; - pointer-events: none; -} - -.ht-day-marker { - position: absolute; - top: 0; -} - -.ht-day-marker-label { - position: absolute; - top: 0; - left: 0; - transform: translateX(-50%); - font-size: 10px; - font-family: var(--font-mono); - font-weight: 600; - color: var(--accent); - white-space: nowrap; -} - -.ht-day-marker-line { - position: absolute; - top: 14px; - height: 66px; - width: 1px; - left: 0; - background: var(--accent); - opacity: 0.2; -} - -/* Punkt (Basis) */ -.ht-point { - position: absolute; - bottom: 0; - transform: translateX(-50%); - border-radius: 50%; - background: var(--text-disabled); - border: 2px solid var(--bg-card); - cursor: pointer; - transition: all 0.2s ease; - z-index: 2; -} - -.ht-point:hover { - box-shadow: var(--glow-accent); - z-index: 4; -} - -.ht-point.active { - box-shadow: var(--glow-accent-strong); - z-index: 4; -} - -/* Dimmen: nicht-aktive Punkte verblassen wenn ein Punkt aktiv ist */ -.ht-points:has(.ht-point.active) .ht-point:not(.active) { - opacity: 0.3; - transition: opacity 0.3s ease; -} - -/* Pfeil über dem aktiven Punkt */ -.ht-point.active::after { - content: '▼'; - position: absolute; - bottom: calc(100% + 2px); - left: 50%; - transform: translateX(-50%); - font-size: 10px; - color: var(--accent); - pointer-events: none; - line-height: 1; -} - -/* Snapshot-Punkt (Raute) */ -.ht-point.ht-snapshot-point { +.ht-strip-cell { + background: color-mix(in srgb, var(--accent) calc(var(--intensity) * 70%), var(--border)); border-radius: 2px; - transform: translateX(-50%) rotate(45deg); - background: var(--accent); + cursor: pointer; + transition: transform 0.15s ease, box-shadow 0.15s ease; + min-height: 12px; +} +.ht-strip-cell.empty { + background: var(--border); + opacity: 0.4; + cursor: default; +} +.ht-strip-cell:hover:not(.empty) { + transform: scaleY(1.6); box-shadow: var(--glow-accent); } - -.ht-point.ht-snapshot-point .ht-tooltip, -.ht-point.ht-snapshot-point .ht-point-count { - transform: rotate(-45deg); +.ht-strip-cell.has-snapshot { + box-shadow: inset 0 -3px 0 var(--accent); } - -.ht-point.ht-snapshot-point .ht-tooltip { - transform: rotate(-45deg) translateX(-50%); - transform-origin: bottom left; -} - -/* Gemischter Punkt (Gold-Kreis) */ -.ht-point.ht-mixed-point { +.ht-strip-cell.active { background: var(--accent); - border: 2px solid var(--bg-card); + transform: scaleY(1.6); + box-shadow: var(--glow-accent-strong), inset 0 -3px 0 var(--accent); + z-index: 2; + position: relative; +} +.ht-strip:has(.ht-strip-cell.active) .ht-strip-cell:not(.active):not(.empty) { + opacity: 0.4; } -/* Tooltip (über dem Punkt) */ -.ht-tooltip { - position: absolute; - bottom: calc(100% + 6px); - left: 50%; - transform: translateX(-50%); - background: var(--bg-secondary); - color: var(--text-primary); - font-size: 11px; - padding: 3px 8px; +/* Banner: aktiver Strip-Filter */ +.ht-strip-banner { + display: flex; + align-items: center; + gap: var(--sp-md); + padding: 6px 12px; + background: var(--tint-accent); + border: 1px solid var(--accent); border-radius: var(--radius); - white-space: nowrap; - pointer-events: none; - opacity: 0; - visibility: hidden; - transition: opacity 0.15s ease, visibility 0.15s ease; - border: 1px solid var(--border); - z-index: 10; + font-size: 12px; + color: var(--text-primary); + margin-top: 4px; } - -.ht-point:hover .ht-tooltip { - opacity: 1; - visibility: visible; -} - -/* Zahl unter dem Punkt */ -.ht-point-count { - position: absolute; - top: calc(100% + 6px); - left: 50%; - transform: translateX(-50%); - font-size: 10px; - font-family: var(--font-mono); - color: var(--text-disabled); - white-space: nowrap; - pointer-events: none; -} - -.ht-point.active .ht-point-count, -.ht-point:hover .ht-point-count { +.ht-strip-banner-icon { color: var(--accent); -} - -/* Achsen-Labels (unter der Linie) */ -.ht-axis-labels { - position: absolute; - left: 4%; - right: 4%; - top: 72px; - height: 20px; -} - -.ht-axis--hourly .ht-axis-labels { - top: 90px; -} - -.ht-axis-label { - position: absolute; - transform: translateX(-50%); font-size: 10px; +} +.ht-strip-banner-text { + flex: 1; + color: var(--text-secondary); +} +.ht-strip-banner-text strong { + color: var(--accent); + font-family: var(--font-mono); +} +.ht-strip-banner-close { + border: 1px solid var(--accent); + background: transparent; + color: var(--accent); + font-size: 11px; + font-weight: 600; + padding: 2px 10px; + border-radius: var(--radius); + cursor: pointer; + transition: background 0.15s ease; +} +.ht-strip-banner-close:hover { + background: var(--accent); + color: var(--bg-card); +} +.ht-strip-labels { + display: grid; + gap: 2px; + font-size: 9px; font-family: var(--font-mono); color: var(--text-tertiary); +} +.ht-strip-label { + text-align: left; white-space: nowrap; } -/* Leerer Zustand */ +/* Stream-Container */ +.ht-stream { + margin-top: var(--sp-md); +} .ht-empty { padding: 20px; text-align: center; @@ -2664,60 +2564,19 @@ a.dev-source-pill:hover { color: var(--text-tertiary); } -/* Detail-Panel */ -.ht-detail-panel { - margin-top: 8px; - border: 1px solid var(--border); - border-radius: var(--radius); - background: var(--bg-secondary); - animation: ht-slide-down 0.2s ease; +/* Time-Group Flash beim Scrollen vom Strip */ +.vt-time-group--flash { + animation: vt-group-flash 1.2s ease-out; +} +@keyframes vt-group-flash { + 0% { background: var(--tint-accent-strong); } + 100% { background: transparent; } } -@keyframes ht-slide-down { - from { opacity: 0; transform: translateY(-8px); } - to { opacity: 1; transform: translateY(0); } +@media (prefers-reduced-motion: reduce) { + .vt-time-group--flash { animation: none; } } -.ht-detail-header { - display: flex; - justify-content: space-between; - align-items: center; - padding: 8px 12px; - border-bottom: 1px solid var(--border); -} - -.ht-detail-title { - font-size: 12px; - font-weight: 600; - color: var(--accent); - font-family: var(--font-mono); -} - -.ht-detail-close { - background: none; - border: none; - color: var(--text-disabled); - font-size: 18px; - cursor: pointer; - padding: 0 4px; - line-height: 1; -} - -.ht-detail-close:hover { - color: var(--text-primary); -} - -.ht-detail-content { - max-height: 350px; - overflow-y: auto; - padding: 4px 12px; -} - -.ht-detail-content::-webkit-scrollbar { width: 6px; } -.ht-detail-content::-webkit-scrollbar-track { background: var(--bg-primary); border-radius: 3px; } -.ht-detail-content::-webkit-scrollbar-thumb { background: var(--text-disabled); border-radius: 3px; } -.ht-detail-content::-webkit-scrollbar-thumb:hover { background: var(--text-secondary); } - /* === Briefing Listen === */ .briefing-content ul { margin: 8px 0; diff --git a/src/static/dashboard.html b/src/static/dashboard.html index 0c9e2e5..5c0f673 100644 --- a/src/static/dashboard.html +++ b/src/static/dashboard.html @@ -13,7 +13,7 @@ - +