From 171878ee1d72065823e025e0e7533b688dd89489 Mon Sep 17 00:00:00 2001 From: Aissa Date: Sun, 19 Jul 2026 18:26:17 +0000 Subject: [PATCH] Polish CEO dashboard UI with fixed live dock and cleaner layout. Remove page scroll hijacking during briefing generation, replace nested scroll panels with timeline and grid layouts, and refine the command bar and hero for a more professional feel. --- cockpit/static/css/herman-dashboard.css | 208 +++++++++++++++++++++--- cockpit/templates/dashboard.html | 65 +++++--- 2 files changed, 226 insertions(+), 47 deletions(-) diff --git a/cockpit/static/css/herman-dashboard.css b/cockpit/static/css/herman-dashboard.css index 14d97bb..015efc0 100644 --- a/cockpit/static/css/herman-dashboard.css +++ b/cockpit/static/css/herman-dashboard.css @@ -1,6 +1,174 @@ /* Herman dashboard — Hermes neo style (KPI cards animate, grote panelen vast) */ -.hm-neo { --hm-cyan: #00e5ff; --hm-lime: #b8ff3c; --hm-orange: #ff9f43; --hm-purple: #a855f7; --hm-gold: #ffd700; --hm-panel: #0d1219; --hm-border: rgba(0, 229, 255, 0.12); } +.hm-neo { --hm-cyan: #00e5ff; --hm-lime: #b8ff3c; --hm-orange: #ff9f43; --hm-purple: #a855f7; --hm-gold: #ffd700; --hm-panel: #0d1219; --hm-border: rgba(0, 229, 255, 0.12); --hm-radius: 16px; --hm-shadow: 0 12px 40px rgba(0, 0, 0, 0.35); } + +.herman-shell.hm-neo { scroll-behavior: auto; } + +.hm-hero-pro { + padding: 1.35rem 1.5rem 1.1rem; + box-shadow: var(--hm-shadow); +} +.hm-hero-top { + display: flex; + justify-content: space-between; + align-items: flex-start; + gap: 1rem; + flex-wrap: wrap; + margin-bottom: 0.85rem; +} +.hm-hero-eyebrow { + margin: 0 0 0.35rem; + font-size: 0.68rem; + letter-spacing: 0.16em; + text-transform: uppercase; + color: #64748b; + font-weight: 600; +} +.hm-hero-status { + display: inline-flex; + align-items: center; + gap: 0.5rem; + padding: 0.45rem 0.85rem; + border-radius: 999px; + background: rgba(0, 0, 0, 0.35); + border: 1px solid rgba(0, 229, 255, 0.18); + font-size: 0.72rem; + color: #cbd5e1; + white-space: nowrap; +} +.hm-live-badge { + font-size: 0.62rem; + vertical-align: middle; + margin-left: 0.35rem; + padding: 0.18rem 0.55rem; + border-radius: 999px; + background: rgba(34, 197, 94, 0.12); + border: 1px solid rgba(34, 197, 94, 0.35); + color: #86efac; + letter-spacing: 0.04em; +} + +.hm-command-bar { + position: sticky; + top: 0.5rem; + z-index: 30; + margin-bottom: 1rem; + padding: 0.85rem 1rem; + border-radius: var(--hm-radius); + background: rgba(8, 12, 18, 0.92); + border: 1px solid var(--hm-border); + backdrop-filter: blur(12px); + box-shadow: 0 8px 28px rgba(0, 0, 0, 0.28); +} +.briefing-meta { + margin-top: 0.25rem; + font-size: 0.72rem; + color: #94a3b8; + letter-spacing: 0.02em; +} + +.hm-card-head { + display: flex; + justify-content: space-between; + align-items: center; + gap: 0.5rem; + margin-bottom: 0.65rem; +} +.hm-card-head h4 { margin: 0; } +.hm-card-link { + font-size: 0.68rem; + color: #38bdf8; + text-decoration: none; + letter-spacing: 0.04em; + text-transform: uppercase; +} +.hm-card-link:hover { color: #7dd3fc; } + +.hm-activity-card { border: 1px solid rgba(148, 163, 184, 0.12); } +.hm-activity-timeline { + list-style: none; + margin: 0; + padding: 0; + display: flex; + flex-direction: column; + gap: 0.45rem; +} +.hm-activity-item { + display: grid; + grid-template-columns: 10px 1fr; + gap: 0.65rem; + align-items: start; + padding: 0.45rem 0.55rem; + border-radius: 10px; + background: rgba(0, 0, 0, 0.18); + border: 1px solid rgba(255, 255, 255, 0.04); +} +.hm-activity-dot { + width: 8px; + height: 8px; + border-radius: 50%; + margin-top: 0.35rem; + background: var(--hm-cyan); + box-shadow: 0 0 8px rgba(0, 229, 255, 0.45); +} +.hm-activity-text { + font-size: 0.78rem; + line-height: 1.45; + color: #dbeafe; +} +.hm-activity-empty { + font-size: 0.78rem; + color: #64748b; + padding: 0.35rem 0; +} + +.hm-live-dock { + position: fixed; + right: 1.25rem; + bottom: 1.25rem; + width: min(420px, calc(100vw - 2rem)); + z-index: 120; + padding: 0.85rem 1rem; + background: rgba(8, 12, 18, 0.97); + border: 1px solid rgba(0, 229, 255, 0.35); + border-radius: 14px; + box-shadow: 0 16px 48px rgba(0, 0, 0, 0.55), 0 0 24px rgba(0, 229, 255, 0.1); + backdrop-filter: blur(14px); + animation: hmDockIn 0.28s ease-out; +} +@keyframes hmDockIn { + from { opacity: 0; transform: translateY(12px); } + to { opacity: 1; transform: translateY(0); } +} +.hm-live-dock-active { border-color: var(--hm-cyan); } +.hm-live-dock-done { border-color: rgba(34, 197, 94, 0.45); } +.hm-live-dock-head { + display: flex; + align-items: center; + gap: 0.65rem; + flex-wrap: wrap; + margin-bottom: 0.45rem; +} +.hm-live-log-compact { + max-height: min(36vh, 280px); + overflow-y: auto; + scrollbar-width: thin; + scrollbar-color: rgba(0, 229, 255, 0.35) transparent; +} +.hm-live-log-compact::-webkit-scrollbar { width: 6px; } +.hm-live-log-compact::-webkit-scrollbar-thumb { + background: rgba(0, 229, 255, 0.28); + border-radius: 999px; +} + +@media (max-width: 720px) { + .hm-live-dock { + right: 0.75rem; + left: 0.75rem; + width: auto; + } + .hm-command-bar { position: relative; top: auto; } +} .herman-shell.hm-neo .herman-hero { background: linear-gradient(160deg, rgba(13, 18, 25, 0.95), rgba(8, 12, 18, 0.98)); @@ -114,8 +282,11 @@ } .briefing-card.summary, -.horizon-card { - background: var(--hm-panel); border-radius: 14px; padding: 1rem; +.horizon-card, +.briefing-card.hm-activity-card { + background: var(--hm-panel); border-radius: var(--hm-radius); padding: 1rem 1.05rem; + border: 1px solid rgba(148, 163, 184, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.03); } .briefing-card.summary { border: 1px solid var(--hm-border); } .briefing-card.summary h4, @@ -237,7 +408,8 @@ .hm-chart-panel { background: var(--hm-panel); border: 1px solid var(--hm-border); - border-radius: 14px; padding: 1rem 1.1rem; min-height: 260px; + border-radius: var(--hm-radius); padding: 1rem 1.1rem; min-height: 260px; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.03); } .hm-chart-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 0.75rem; @@ -276,16 +448,7 @@ .page-viz-panel.viz-mode-alt .viz-eq-row { font-size: 0.82rem; padding: 0.15rem 0; } .hm-live-bar { - position: sticky; - top: 0; - z-index: 40; - margin-bottom: 1rem; - padding: 0.75rem 1rem; - background: rgba(8, 12, 18, 0.97); - border: 1px solid rgba(0, 229, 255, 0.35); - border-radius: 12px; - box-shadow: 0 8px 32px rgba(0, 0, 0, 0.45), 0 0 20px rgba(0, 229, 255, 0.08); - backdrop-filter: blur(8px); + display: none; } .hm-live-bar-active { border-color: var(--hm-cyan); animation: hmLivePulse 2s ease-in-out infinite; } .hm-live-bar-done { border-color: rgba(34, 197, 94, 0.45); } @@ -509,9 +672,17 @@ .app-topbar .page-tip { display: none; } } -.hm-highlight-scroll { max-height: 220px; overflow-y: auto; } +.hm-highlight-scroll, +.hm-highlight-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); + gap: 0.65rem; +} .hm-highlight-item { - padding: 0.55rem 0; border-bottom: 1px solid rgba(255,255,255,0.05); + padding: 0.75rem 0.85rem; + border-radius: 12px; + background: rgba(0, 0, 0, 0.22); + border: 1px solid rgba(255, 255, 255, 0.06); } .hm-highlight-item strong { color: #e2e8f0; font-size: 0.85rem; text-decoration: none; } .hm-highlight-item a { color: inherit; text-decoration: none; } @@ -707,13 +878,10 @@ align-items: start; } @media (max-width: 1000px) { .herman-rss-grid { grid-template-columns: 1fr; } } -.herman-rss-list { - max-height: 68vh; - overflow-y: auto; +.hm-rss-list { display: flex; flex-direction: column; gap: 0.55rem; - padding-right: 0.25rem; } .herman-rss-card { margin: 0; } .herman-rss-side-item { diff --git a/cockpit/templates/dashboard.html b/cockpit/templates/dashboard.html index 22be0dc..b928c32 100644 --- a/cockpit/templates/dashboard.html +++ b/cockpit/templates/dashboard.html @@ -2,15 +2,24 @@ {% block extra_head %} - + {% endblock %} {% block content %}
-
-

CEO Dashboard · Cucina Live

-

Business overzicht · retail · deals · briefing · marketing

-