Files
fusion/packages/dashboard/app/components/InsightsView.css

628 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 {
/*
FNXC:Insights 2026-06-23-19:20:
Insights page horizontal dividers should default invisible with the current seamless header treatment. Keep a local token so themes can restore those dividers with --insights-divider-color or the shared --chrome-divider-color.
*/
--insights-divider-color: var(--chrome-divider-color, transparent);
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: var(--chrome-divider-width, 1px) solid var(--insights-divider-color);
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);
}
.insights-refresh-btn {
flex: 0 0 auto;
}
/* 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: var(--chrome-divider-width, 1px) solid var(--insights-divider-color);
}
.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: var(--chrome-divider-width, 1px) solid var(--insights-divider-color);
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(--chrome-divider-width, 1px) solid var(--insights-divider-color);
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;
}
}