diff --git a/app/globals.css b/app/globals.css index dbb837d..02347c6 100644 --- a/app/globals.css +++ b/app/globals.css @@ -24,6 +24,50 @@ animation-delay: 0.16s; } +/* ── CU skeleton overlay during synthesis refresh ─────────────── */ + +.cu-skeleton-overlay { + pointer-events: none; +} + +.cu-skeleton-lines { + display: flex; + flex-direction: column; + align-items: center; + width: 100%; + margin-top: auto; +} + +.cu-skeleton-line { + height: 16px; + border-radius: 8px; + background-color: #e5e7eb; + position: relative; + overflow: hidden; +} + +/* Striped shimmer that travels left → right through each bar */ +.cu-skeleton-line::after { + content: ""; + position: absolute; + inset: 0; + background: repeating-linear-gradient( + 105deg, + transparent 0%, + transparent 8px, + rgba(255, 255, 255, 0.45) 8px, + rgba(255, 255, 255, 0.45) 16px, + transparent 16px, + transparent 24px + ); + animation: cuSkeletonShimmer 1.6s linear infinite; +} + +@keyframes cuSkeletonShimmer { + 0% { transform: translateX(-100%); } + 100% { transform: translateX(100%); } +} + @media (prefers-reduced-motion: reduce) { [style*="animation:spin"] { animation: none !important; @@ -32,4 +76,8 @@ .investigation-card { animation: none; } + + .cu-skeleton-line::after { + animation: none !important; + } } diff --git a/components/reasoning-workspace.jsx b/components/reasoning-workspace.jsx index be25d22..b27148a 100644 --- a/components/reasoning-workspace.jsx +++ b/components/reasoning-workspace.jsx @@ -394,7 +394,7 @@ function FocusedQuestionBody({ // ── Persistent navigation controls (overlay-level, outside content grid) ── -function FocusedWorkspaceNavigation({ nodeId, doneForNow, isDoneForNowActive, isProcessing }) { +function FocusedWorkspaceNavigation({ nodeId, doneForNow, isDoneForNowActive, isProcessing, onImmediateGraphChange }) { const canDoneForNow = Boolean(isDoneForNowActive) && !isProcessing; return (
{propUnderstanding}
+ {cuSynthesisLoading && ( +Clarifying your current understanding…
+ +