Files
fusion/packages/dashboard/app/components/InsightsView.css
gsxdsm 4850e4309e fix(dashboard): apply code-review fixes + live UI tweaks
Code review (8 reviewers) fixes:
- P1: embedded board task-detail now passes onRequestClose so delete/merge/retry dismiss the panel (no ghost task).
- P1: RightDock + TerminalModal drag handlers add pointercancel + unmount teardown (no leaked document listeners / rAF / stuck userSelect); remove dead onOpenChange prop.
- Planning slot DOM-poll interval now caps (self-cancels on mobile); heartbeat slider persist debounced + mounted-guarded.
- Cleanup: remove dead ViewHeader-migration CSS (Skills/Insights), extract shared GithubIcon, move Activity Log embedded CSS to ActivityLogModal.css, FNXC date-format fixes, AGENTS lazy-view note.
- Update stale RightDock roster tests + LeftSidebarNav 'Compound Eng' test to current behavior.

Live UI tweaks:
- Default load lands on board, never the Command Center Dashboard.
- View Board/View Agents moved to the Command Center Overview tab (under the live-activity strip).
- Heartbeat card full-width with spaced, wrapping controls.
- Dev Server panel scrolls in the dock; ChatView right-pane title takes the full line.
- Files pop-out renders deterministic left-right two-pane.
- Mailbox list pane narrower + narrow by default; Add Goal button height matches the Compound stage button; Memory Working-Memory tab no longer overlaps; Skills view fills full width.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 03:57:10 -07:00

618 lines
13 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* === InsightsView === */
.insights-view {
display: flex;
flex-direction: column;
height: 100%;
min-height: 0;
overflow: hidden;
}
/*
FNXC:Insights 2026-06-22-01:00:
Header migrated to the shared ViewHeader component (.view-header). The old .insights-view-header / .insights-view-title / .insights-view-actions rules were removed; the count badge and action toggles still render inside ViewHeader's actions slot, so their styling rules are retained below.
*/
.insights-view-count {
font-size: 0.8125rem;
color: var(--text-muted);
font-weight: normal;
}
/* Model configuration row — collapsible, below the action bar */
.insights-model-config {
display: flex;
align-items: center;
gap: var(--space-sm);
padding: var(--space-sm) var(--space-lg);
border-bottom: 1px solid var(--border);
background: var(--surface-subtle);
}
.insights-model-label {
font-size: 0.8125rem;
color: var(--text-muted);
white-space: nowrap;
flex-shrink: 0;
}
.insights-model-config .model-combobox {
max-width: 320px;
}
/* Gear toggle with active indicator */
.insights-model-toggle {
position: relative;
}
.insights-model-indicator {
position: absolute;
top: 2px;
right: 2px;
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--todo, #f59e0b);
}
.insights-view-close {
color: var(--text-muted);
}
.insights-view-close:hover {
color: var(--text);
}
/* Status region */
.insights-status-region {
padding: var(--space-md) var(--space-lg);
flex-shrink: 0;
}
.insights-status-region:empty {
padding: 0;
}
.insights-status-message {
display: flex;
align-items: center;
gap: var(--space-sm);
padding: var(--space-sm) var(--space-md);
border-radius: var(--radius-md);
font-size: 0.8125rem;
}
.insights-status-message--success {
background: color-mix(in srgb, var(--color-success) 10%, transparent);
color: var(--color-success);
}
.insights-status-message--error {
background: color-mix(in srgb, var(--color-error) 10%, transparent);
color: var(--color-error);
}
.insights-status-message--info {
background: color-mix(in srgb, var(--accent) 10%, transparent);
color: var(--accent);
}
/* Error callout */
.insights-error-callout {
display: flex;
align-items: center;
gap: var(--space-sm);
margin: 0 var(--space-lg) var(--space-md);
padding: var(--space-md);
background: color-mix(in srgb, var(--color-error) 10%, transparent);
border: 1px solid color-mix(in srgb, var(--color-error) 30%, transparent);
border-radius: var(--radius-md);
color: var(--color-error);
font-size: 0.8125rem;
flex-shrink: 0;
}
/* Run info */
.insights-run-info {
padding: 0 var(--space-lg) var(--space-md);
flex-shrink: 0;
}
.insights-run-status {
font-size: 0.75rem;
color: var(--text-muted);
}
/* Loading state */
.insights-loading {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: var(--space-md);
padding: var(--space-2xl);
color: var(--text-muted);
}
/* Error state */
.insights-error {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: var(--space-md);
padding: var(--space-2xl);
text-align: center;
}
.insights-error p {
color: var(--text-muted);
margin: 0;
}
/* Empty state */
.insights-empty {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: var(--space-md);
padding: var(--space-2xl);
text-align: center;
flex: 1;
}
.insights-empty h3 {
margin: 0;
font-size: 1.125rem;
color: var(--text);
}
.insights-empty p {
color: var(--text-muted);
margin: 0;
max-width: calc(var(--space-2xl) * 12 + var(--space-lg));
}
/* Two-pane body */
.insights-body {
flex: 1;
min-height: 0;
display: flex;
overflow: hidden;
}
/* Sidebar (categories) */
.insights-sidebar {
width: calc(var(--space-2xl) * 7 + var(--space-lg));
flex-shrink: 0;
border-right: 1px solid var(--border);
background: var(--surface);
overflow-y: auto;
min-height: 0;
}
.insights-category-list {
list-style: none;
margin: 0;
padding: var(--space-sm);
display: flex;
flex-direction: column;
gap: var(--space-xs);
}
.insights-category-item {
width: 100%;
display: flex;
align-items: center;
gap: var(--space-sm);
padding: var(--space-sm) var(--space-md);
background: transparent;
border: 1px solid transparent;
border-radius: var(--radius-md);
color: var(--text);
font: inherit;
font-size: 0.8125rem;
text-align: left;
cursor: pointer;
transition: background var(--transition-fast), border-color var(--transition-fast);
}
.insights-category-item:hover {
background: var(--surface-1);
}
.insights-category-item--active {
background: color-mix(in srgb, var(--accent) 12%, transparent);
border-color: color-mix(in srgb, var(--accent) 35%, transparent);
color: var(--accent);
}
.insights-category-icon {
flex-shrink: 0;
color: var(--accent);
}
.insights-category-label {
flex: 1;
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-weight: 500;
}
.insights-category-count {
flex-shrink: 0;
font-size: 0.75rem;
color: var(--text-muted);
background: var(--surface-1);
padding: var(--space-xs) var(--space-sm);
border-radius: var(--radius-pill);
border: 1px solid var(--border);
}
.insights-category-item--active .insights-category-count {
background: var(--surface);
color: var(--accent);
border-color: color-mix(in srgb, var(--accent) 30%, transparent);
}
/* Detail pane */
.insights-detail {
flex: 1;
min-width: 0;
min-height: 0;
overflow-y: auto;
padding: var(--space-lg);
}
/* Section (single, in detail pane) */
.insights-section {
background: var(--card);
border: 1px solid var(--border);
border-radius: var(--radius-lg);
overflow: hidden;
}
.insights-section-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: var(--space-md) var(--space-lg);
background: var(--surface);
border-bottom: 1px solid var(--border);
}
.insights-section-title {
display: flex;
align-items: center;
gap: var(--space-sm);
}
.insights-section-title h3 {
margin: 0;
font-size: 0.9375rem;
font-weight: 600;
}
.insights-section-icon {
color: var(--accent);
}
.insights-section-count {
font-size: 0.75rem;
color: var(--text-muted);
background: var(--surface-1);
padding: var(--space-xs) var(--space-sm);
border-radius: var(--radius-pill);
border: 1px solid var(--border);
}
.insights-section-content {
padding: var(--space-md);
}
/* Insights list */
.insights-list {
list-style: none;
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
gap: var(--space-md);
}
/* Individual insight item */
.insight-item {
padding: var(--space-md);
background: var(--surface);
border: 1px solid var(--border);
border-left: var(--space-xs) solid var(--accent);
border-radius: var(--radius-md);
transition: border-color var(--transition-fast);
}
.insight-item:hover {
border-color: var(--accent);
}
.insight-item-header {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: var(--space-sm);
}
.insight-item-title {
margin: 0;
font-size: 0.875rem;
font-weight: 600;
color: var(--text);
line-height: 1.4;
}
.insight-item-actions {
display: flex;
align-items: center;
gap: var(--space-xs);
flex-shrink: 0;
}
/* Borderless icon-prominent action buttons inside insight items */
.insight-item-action-btn {
display: inline-flex;
align-items: center;
justify-content: center;
width: calc(var(--space-lg) * 2);
height: calc(var(--space-lg) * 2);
padding: 0;
background: transparent;
border: none;
border-radius: var(--radius-md);
color: var(--text-muted);
cursor: pointer;
transition: background var(--transition-fast), color var(--transition-fast);
}
.insight-item-action-btn:hover:not(:disabled) {
background: var(--surface-1);
color: var(--accent);
}
.insight-item-action-btn:focus-visible {
outline: none;
box-shadow: var(--focus-ring-strong);
}
.insight-item-action-btn:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.insight-item-content {
margin: var(--space-sm) 0 0;
font-size: 0.8125rem;
color: var(--text-muted);
line-height: 1.5;
white-space: pre-wrap;
word-break: break-word;
}
.insight-item-meta {
display: flex;
align-items: center;
gap: var(--space-md);
margin-top: var(--space-sm);
font-size: 0.75rem;
color: var(--text-muted);
}
.insight-item-status {
padding: var(--space-xs) var(--space-sm);
border-radius: var(--radius-sm);
text-transform: capitalize;
font-weight: 500;
}
.insight-item-status--generated {
background: color-mix(in srgb, var(--accent) 15%, transparent);
color: var(--accent);
}
.insight-item-status--confirmed {
background: color-mix(in srgb, var(--color-success) 15%, transparent);
color: var(--color-success);
}
.insight-item-status--stale {
background: color-mix(in srgb, var(--color-warning) 15%, transparent);
color: var(--color-warning);
}
.insight-item-status--dismissed {
background: color-mix(in srgb, var(--text-dim) 15%, transparent);
color: var(--text-dim);
}
.insight-item-status--archived {
background: color-mix(in srgb, var(--text-dim) 15%, transparent);
color: var(--text-dim);
}
.insight-item--archived {
opacity: 0.6;
border-left-color: var(--text-dim);
}
.insight-item--archived .insight-item-title {
text-decoration: line-through;
color: var(--text-muted);
}
.insight-item--archived .insight-item-content {
text-decoration: line-through;
}
.insight-item-date {
display: flex;
align-items: center;
gap: var(--space-xs);
}
/* Mobile responsive: stack panes vertically; sidebar becomes a horizontal scroller */
@media (max-width: 768px) {
.insights-body {
flex-direction: column;
}
.insights-sidebar {
width: 100%;
border-right: none;
border-bottom: 1px solid var(--border);
overflow-x: auto;
overflow-y: hidden;
flex-shrink: 0;
}
.insights-category-list {
flex-direction: row;
flex-wrap: nowrap;
padding: var(--space-sm);
gap: var(--space-xs);
}
.insights-category-list > li {
flex-shrink: 0;
}
.insights-category-item {
white-space: nowrap;
padding: var(--space-xs) var(--space-sm);
}
.insights-category-label {
overflow: visible;
text-overflow: clip;
}
.insights-detail {
padding: var(--space-md);
}
.insights-section-header {
padding: var(--space-sm) var(--space-md);
}
.insights-section-content {
padding: var(--space-sm);
}
.insight-item {
padding: var(--space-sm);
}
.insight-item-title {
word-break: break-word;
}
.insight-item-header {
flex-direction: column;
gap: var(--space-sm);
}
.insight-item-meta {
flex-wrap: wrap;
gap: var(--space-sm);
}
.insight-item-actions {
align-self: flex-end;
}
.insight-item-action-btn {
width: calc(var(--space-2xl) + var(--space-sm));
height: calc(var(--space-2xl) + var(--space-sm));
}
.view-header__actions .insights-view-actions-btn {
min-height: calc(var(--space-2xl) + var(--space-xs));
}
.insights-show-archived-toggle {
max-width: calc(var(--space-2xl) * 5 + var(--space-md));
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.insights-view-close {
min-height: calc(var(--space-2xl) + var(--space-xs));
min-width: calc(var(--space-2xl) + var(--space-xs));
}
.insights-view-count {
font-size: 0.75rem;
}
.insights-model-config {
padding: var(--space-xs) var(--space-md);
}
.insights-model-config .model-combobox {
max-width: 200px;
}
}
/*
FNXC:InsightsView 2026-06-20-00:34:
Insights tablets at 769px–1024px were inheriting the desktop fixed category sidebar, which squeezed the detail pane inside the .project-content flex chain. Stack the category rail above the detail pane and keep both panes shrinkable so long insight content cannot force horizontal cut-off.
*/
@media (min-width: 769px) and (max-width: 1024px) {
.insights-view {
flex: 1;
inline-size: 100%;
min-inline-size: 0;
min-block-size: 0;
overflow: hidden;
}
.insights-body {
flex-direction: column;
inline-size: 100%;
min-width: 0;
min-inline-size: 0;
min-block-size: 0;
overflow: hidden;
}
.insights-sidebar {
width: 100%;
min-width: 0;
min-inline-size: 0;
border-right: none;
border-bottom: var(--btn-border-width) solid var(--border);
overflow-x: auto;
overflow-y: hidden;
}
.insights-category-list {
flex-direction: row;
flex-wrap: nowrap;
}
.insights-category-list > li {
flex-shrink: 0;
}
.insights-category-item {
white-space: nowrap;
}
.insights-detail {
flex: 1 1 0;
min-width: 0;
min-inline-size: 0;
min-block-size: 0;
overflow-y: auto;
}
}