diff --git a/.jules/palette.md b/.jules/palette.md index f963abe5..694574ae 100644 --- a/.jules/palette.md +++ b/.jules/palette.md @@ -7,3 +7,7 @@ ## 2026-05-23 - [Dynamic Report Navigation] **Learning:** Hardcoded section numbering in multi-section reports leads to a fragmented user experience when optional sections are omitted. Dynamic numbering and an interactive Table of Contents (TOC) are essential for institutional-grade readability and accessibility. **Action:** Implement Jinja2-based dynamic numbering and TOC anchor links in all multi-section HTML/Markdown templates. + +## 2026-05-24 - [Situational Awareness in Institutional Reports] +**Learning:** For long-form institutional research reports, operators lose situational awareness of their progress and struggle with jargon-heavy metrics. Real-time visual feedback (scroll progress) and contextual documentation (hover tooltips) bridge the gap between high-density data and human-readable insights. +**Action:** Add scroll progress indicators and descriptive metric tooltips to institutional HTML report templates. diff --git a/src/research/templates/research_report.html.j2 b/src/research/templates/research_report.html.j2 index e92c161f..363d6602 100644 --- a/src/research/templates/research_report.html.j2 +++ b/src/research/templates/research_report.html.j2 @@ -13,6 +13,8 @@ h1 { margin: 0; font-size: 2.75rem; letter-spacing: -0.025em; } .metadata { margin-top: 1rem; font-size: 1rem; opacity: 0.9; display: flex; gap: 20px; } .sticky-nav { position: fixed; top: 0; left: 0; right: 0; background: rgba(44, 62, 80, 0.95); backdrop-filter: blur(8px); color: white; padding: 10px 0; z-index: 1000; box-shadow: 0 2px 4px rgba(0,0,0,0.1); } + .progress-container { width: 100%; height: 4px; background: rgba(255,255,255,0.1); position: absolute; top: 0; left: 0; } + .progress-bar-scroll { height: 4px; background: var(--secondary); width: 0%; transition: width 0.1s ease; } .sticky-nav-container { max-width: 1200px; margin: 0 auto; padding: 0 20px; display: flex; justify-content: space-between; align-items: center; } .sticky-nav a { color: white; text-decoration: none; font-size: 0.9rem; font-weight: 500; margin-left: 20px; transition: color 0.2s; } .sticky-nav a:hover { color: var(--secondary); } @@ -46,7 +48,8 @@ .badge-critical { background: #fde8e8; color: #9b1c1c; } .grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; } .kpi-dashboard { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 20px; margin-bottom: 2.5rem; } - .kpi-card { background: var(--white); padding: 1rem; border-radius: 12px; box-shadow: 0 4px 6px -1px rgba(0,0,0,0.1); text-align: center; border-top: 4px solid var(--secondary); } + .kpi-card { background: var(--white); padding: 1rem; border-radius: 12px; box-shadow: 0 4px 6px -1px rgba(0,0,0,0.1); text-align: center; border-top: 4px solid var(--secondary); transition: transform 0.2s ease, box-shadow 0.2s ease; cursor: default; } + .kpi-card:hover { transform: translateY(-4px); box-shadow: 0 10px 15px -3px rgba(0,0,0,0.1); } .kpi-value { font-size: 1.5rem; font-weight: 800; color: var(--primary); display: block; } .kpi-label { font-size: 0.85rem; font-weight: 600; color: #718096; text-transform: uppercase; letter-spacing: 0.025em; } .status-badge { padding: 8px 16px; border-radius: 999px; font-weight: 700; font-size: 0.9rem; } @@ -78,6 +81,7 @@