|
58 | 58 | border: 1px solid #0f3460; border-radius: 6px; padding: 12px 14px; |
59 | 59 | color: #e0e0e0; font-size: 12px; z-index: 50; max-width: 480px; |
60 | 60 | }} |
| 61 | + .campaign-objective.collapsed {{ padding: 6px 12px; }} |
| 62 | + .campaign-objective .obj-header {{ |
| 63 | + display: flex; align-items: center; justify-content: space-between; |
| 64 | + gap: 12px; cursor: pointer; user-select: none; |
| 65 | + }} |
61 | 66 | .campaign-objective .obj-label {{ |
62 | 67 | color: #888; font-size: 10px; text-transform: uppercase; |
63 | | - letter-spacing: 0.8px; margin-bottom: 6px; |
| 68 | + letter-spacing: 0.8px; |
| 69 | + }} |
| 70 | + .campaign-objective:not(.collapsed) .obj-header {{ margin-bottom: 6px; }} |
| 71 | + .campaign-objective .obj-toggle {{ |
| 72 | + color: #888; font-size: 10px; transition: transform 0.15s; |
| 73 | + transform: rotate(180deg); |
64 | 74 | }} |
| 75 | + .campaign-objective.collapsed .obj-toggle {{ transform: rotate(0deg); }} |
| 76 | + .campaign-objective .obj-header:hover .obj-label, |
| 77 | + .campaign-objective .obj-header:hover .obj-toggle {{ color: #ccc; }} |
| 78 | + .campaign-objective.collapsed .obj-body {{ display: none; }} |
65 | 79 | .campaign-objective .obj-question {{ |
66 | 80 | color: #ccc; font-style: italic; line-height: 1.5; margin-bottom: 6px; |
67 | 81 | }} |
|
467 | 481 |
|
468 | 482 | let currentView = "iterations"; |
469 | 483 |
|
470 | | -// Render campaign objective box (bottom-left corner) |
| 484 | +// Render campaign objective box (top-center). Collapsible; persists across reloads via localStorage. |
| 485 | +const OBJECTIVE_COLLAPSED_KEY = "nous-viz-objective-collapsed"; |
| 486 | +function toggleObjective() {{ |
| 487 | + const box = document.getElementById("campaign-objective-box"); |
| 488 | + if (!box) return; |
| 489 | + const nowCollapsed = !box.classList.contains("collapsed"); |
| 490 | + box.classList.toggle("collapsed", nowCollapsed); |
| 491 | + try {{ localStorage.setItem(OBJECTIVE_COLLAPSED_KEY, nowCollapsed ? "1" : "0"); }} catch (e) {{}} |
| 492 | +}} |
471 | 493 | if (campaignContext && (campaignContext.research_question || campaignContext.target_commit)) {{ |
472 | 494 | const box = document.getElementById("campaign-objective-box"); |
473 | 495 | if (box) {{ |
474 | | - let html = ''; |
| 496 | + let bodyHtml = ''; |
475 | 497 | if (campaignContext.research_question) {{ |
476 | | - html += '<div class="obj-label">Research Objective</div>'; |
477 | | - html += '<div class="obj-question">' + campaignContext.research_question + '</div>'; |
| 498 | + bodyHtml += '<div class="obj-question">' + campaignContext.research_question + '</div>'; |
478 | 499 | }} |
479 | | - // Show runtime metadata line |
480 | 500 | const metaParts = []; |
481 | 501 | if (campaignContext.target_commit) {{ |
482 | 502 | const shortSha = campaignContext.target_commit.substring(0, 7); |
|
488 | 508 | metaParts.push('<span class="obj-meta-item">nous <code>' + shortVer + '</code></span>'); |
489 | 509 | }} |
490 | 510 | if (metaParts.length > 0) {{ |
491 | | - html += '<div class="obj-meta">' + metaParts.join(' · ') + '</div>'; |
| 511 | + bodyHtml += '<div class="obj-meta">' + metaParts.join(' · ') + '</div>'; |
492 | 512 | }} |
493 | | - box.innerHTML = html; |
| 513 | + box.innerHTML = |
| 514 | + '<div class="obj-header" onclick="toggleObjective()">' + |
| 515 | + '<span class="obj-label">Research Objective</span>' + |
| 516 | + '<span class="obj-toggle">▾</span>' + |
| 517 | + '</div>' + |
| 518 | + '<div class="obj-body">' + bodyHtml + '</div>'; |
| 519 | + let startCollapsed = true; |
| 520 | + try {{ |
| 521 | + const stored = localStorage.getItem(OBJECTIVE_COLLAPSED_KEY); |
| 522 | + if (stored === "0") startCollapsed = false; |
| 523 | + }} catch (e) {{}} |
| 524 | + box.classList.toggle("collapsed", startCollapsed); |
494 | 525 | box.style.display = "block"; |
495 | 526 | }} |
496 | 527 | }} |
|
0 commit comments