Skip to content

Commit 0cc06d9

Browse files
authored
feat: sharpen command desk hierarchy (#92)
* feat: sharpen command desk hierarchy * test: cover command desk branch paths * test: relax compare verdict assertions * test: fix planner and compare review assertions * fix: tighten compare observation state
1 parent c6c3daa commit 0cc06d9

16 files changed

Lines changed: 1062 additions & 171 deletions

.stitch/DESIGN.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,15 @@ Avoid Inter, generic serif fonts, and oversized startup-style hero typography.
6868
- Show the operator loop before adoption/router content.
6969
- Include a philosophy band for Prompt / Context / Harness Engineering.
7070

71+
### planner
72+
- Make one priority wave obvious above the fold.
73+
- Treat the desk as triage-first, artifact-second.
74+
- Empty state must still read like an operational launch deck.
75+
76+
### run-compare
77+
- Turn the page into a compare truth room with one verdict band, one signal strip, and one clear next action.
78+
- Keep evidence archive folded into the second layer.
79+
7180
### command-tower
7281
- Make risk and next action obvious above the fold.
7382
- Use dense but calm structure.
@@ -80,3 +89,6 @@ Avoid Inter, generic serif fonts, and oversized startup-style hero typography.
8089

8190
### desktop-overview
8291
- Mirror the web loop with denser operator affordances.
92+
93+
### desktop-run-compare
94+
- Mirror the web truth room, but compress it into a denser desktop operator panel.

apps/dashboard/app/globals.feature.part04.css

Lines changed: 333 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,339 @@
117117
line-height: 1.5;
118118
}
119119

120+
/* ── Home briefing / command deck ── */
121+
122+
.home-briefing-shell,
123+
.planner-hero-shell,
124+
.compare-room-shell {
125+
display: grid;
126+
grid-template-columns: minmax(0, 1.35fr) minmax(320px, 0.95fr);
127+
gap: var(--space-5);
128+
align-items: stretch;
129+
}
130+
131+
.home-briefing-copy,
132+
.planner-hero-copy,
133+
.compare-room-copy {
134+
display: flex;
135+
flex-direction: column;
136+
gap: var(--space-4);
137+
}
138+
139+
.home-briefing-directive {
140+
border: 1px solid var(--color-border-subtle);
141+
border-radius: var(--radius-lg);
142+
background:
143+
linear-gradient(180deg, color-mix(in srgb, var(--color-bg-elevated) 92%, transparent), transparent),
144+
var(--color-surface-subtle);
145+
padding: var(--space-4) var(--space-5);
146+
display: grid;
147+
gap: var(--space-2);
148+
}
149+
150+
.home-briefing-directive p,
151+
.planner-priority-summary,
152+
.compare-verdict-summary {
153+
color: var(--color-text-secondary);
154+
font-size: var(--text-sm);
155+
line-height: 1.6;
156+
}
157+
158+
.home-briefing-actions,
159+
.planner-primary-actions {
160+
display: flex;
161+
flex-wrap: wrap;
162+
gap: var(--space-2);
163+
}
164+
165+
.home-briefing-panel,
166+
.planner-priority-card,
167+
.compare-verdict-card {
168+
position: relative;
169+
overflow: hidden;
170+
background:
171+
linear-gradient(180deg, rgba(255, 255, 255, 0.02), transparent 48%),
172+
linear-gradient(145deg, color-mix(in srgb, var(--color-bg-surface) 88%, var(--color-bg-elevated)), var(--color-bg-elevated));
173+
}
174+
175+
.home-briefing-panel::before,
176+
.planner-priority-card::before,
177+
.compare-verdict-card::before {
178+
content: "";
179+
position: absolute;
180+
inset: 0;
181+
background: linear-gradient(135deg, color-mix(in srgb, var(--color-primary) 6%, transparent), transparent 60%);
182+
pointer-events: none;
183+
}
184+
185+
.home-briefing-panel-head,
186+
.planner-priority-head,
187+
.compare-verdict-head {
188+
display: flex;
189+
align-items: center;
190+
justify-content: space-between;
191+
gap: var(--space-2);
192+
margin-bottom: var(--space-3);
193+
}
194+
195+
.home-briefing-signal-list,
196+
.planner-priority-meta {
197+
display: grid;
198+
gap: var(--space-3);
199+
}
200+
201+
.home-briefing-signal {
202+
display: grid;
203+
gap: var(--space-1);
204+
padding: var(--space-3) 0;
205+
border-top: 1px solid var(--color-border-subtle);
206+
}
207+
208+
.home-briefing-signal:first-child {
209+
border-top: 0;
210+
padding-top: 0;
211+
}
212+
213+
.home-briefing-signal strong,
214+
.planner-priority-title,
215+
.compare-verdict-title {
216+
font-size: var(--text-lg);
217+
line-height: 1.25;
218+
letter-spacing: -0.02em;
219+
}
220+
221+
.home-briefing-signal p {
222+
color: var(--color-text-muted);
223+
font-size: var(--text-xs);
224+
line-height: 1.55;
225+
margin: 0;
226+
}
227+
228+
.home-command-grid {
229+
display: grid;
230+
grid-template-columns: repeat(3, minmax(0, 1fr));
231+
gap: var(--space-4);
232+
}
233+
234+
.home-command-card {
235+
display: grid;
236+
gap: var(--space-2);
237+
padding: var(--space-5);
238+
border: 1px solid var(--color-border);
239+
border-radius: var(--radius-lg);
240+
background: var(--color-bg-elevated);
241+
text-decoration: none;
242+
color: inherit;
243+
transition: border-color var(--motion-fast) var(--motion-ease-out), box-shadow var(--motion-fast) var(--motion-ease-out), transform var(--motion-fast) var(--motion-ease-out);
244+
}
245+
246+
.home-command-card:hover {
247+
border-color: var(--color-border-primary-mid);
248+
box-shadow: var(--shadow-md);
249+
transform: translateY(-1px);
250+
text-decoration: none;
251+
color: inherit;
252+
}
253+
254+
.home-command-kicker,
255+
.home-loop-index {
256+
font-family: var(--font-mono);
257+
font-size: var(--text-kicker);
258+
color: var(--color-text-muted);
259+
text-transform: uppercase;
260+
letter-spacing: 0.08em;
261+
}
262+
263+
.home-command-title,
264+
.home-loop-title {
265+
font-size: var(--text-base);
266+
font-weight: 600;
267+
line-height: 1.35;
268+
}
269+
270+
.home-command-desc,
271+
.home-loop-desc {
272+
color: var(--color-text-muted);
273+
font-size: var(--text-xs);
274+
line-height: 1.55;
275+
}
276+
277+
.home-loop-rail {
278+
list-style: none;
279+
margin: 0;
280+
padding: 0;
281+
display: grid;
282+
grid-template-columns: repeat(5, minmax(0, 1fr));
283+
gap: var(--space-3);
284+
}
285+
286+
.home-loop-step {
287+
min-width: 0;
288+
}
289+
290+
.home-loop-link {
291+
display: flex;
292+
gap: var(--space-3);
293+
min-height: 100%;
294+
padding: var(--space-4);
295+
border: 1px solid var(--color-border);
296+
border-radius: var(--radius-lg);
297+
background: var(--color-bg-elevated);
298+
text-decoration: none;
299+
color: inherit;
300+
transition: border-color var(--motion-fast) var(--motion-ease-out), box-shadow var(--motion-fast) var(--motion-ease-out), transform var(--motion-fast) var(--motion-ease-out);
301+
}
302+
303+
.home-loop-link:hover {
304+
border-color: var(--color-border-primary-mid);
305+
box-shadow: var(--shadow-md);
306+
transform: translateY(-1px);
307+
text-decoration: none;
308+
color: inherit;
309+
}
310+
311+
.home-loop-body {
312+
display: grid;
313+
gap: var(--space-1);
314+
}
315+
316+
/* ── Planner desk ── */
317+
318+
.planner-priority-card--failed {
319+
border-color: var(--color-border-danger-mid);
320+
}
321+
322+
.planner-priority-card--warning {
323+
border-color: var(--color-border-warning-mid);
324+
}
325+
326+
.planner-priority-card--running {
327+
border-color: var(--color-border-primary-mid);
328+
}
329+
330+
.planner-empty-stage {
331+
display: grid;
332+
gap: var(--space-5);
333+
}
334+
335+
.planner-empty-grid {
336+
display: grid;
337+
grid-template-columns: repeat(3, minmax(0, 1fr));
338+
gap: var(--space-3);
339+
}
340+
341+
.planner-empty-card {
342+
display: grid;
343+
gap: var(--space-2);
344+
padding: var(--space-4);
345+
border: 1px solid var(--color-border-subtle);
346+
border-radius: var(--radius-lg);
347+
background: var(--color-surface-subtle);
348+
text-decoration: none;
349+
color: inherit;
350+
}
351+
352+
.planner-empty-card:hover {
353+
border-color: var(--color-border-primary-mid);
354+
box-shadow: var(--shadow-sm);
355+
transform: translateY(-1px);
356+
text-decoration: none;
357+
color: inherit;
358+
}
359+
360+
.planner-empty-card strong {
361+
font-size: var(--text-base);
362+
}
363+
364+
.planner-empty-card span:last-child {
365+
color: var(--color-text-muted);
366+
font-size: var(--text-xs);
367+
line-height: 1.55;
368+
}
369+
370+
.planner-row-actions {
371+
display: grid;
372+
gap: var(--space-2);
373+
}
374+
375+
.planner-row-queue {
376+
padding-top: var(--space-1);
377+
border-top: 1px dashed var(--color-border-subtle);
378+
}
379+
380+
.planner-archive-list {
381+
display: grid;
382+
gap: var(--space-1);
383+
}
384+
385+
/* ── Compare room ── */
386+
387+
.compare-verdict-card--success,
388+
.compare-decision-card--success {
389+
border-color: var(--color-border-success-mid);
390+
}
391+
392+
.compare-verdict-card--warning,
393+
.compare-decision-card--warning {
394+
border-color: var(--color-border-warning-mid);
395+
}
396+
397+
.compare-verdict-card--failed,
398+
.compare-decision-card--failed {
399+
border-color: var(--color-border-danger-mid);
400+
}
401+
402+
.compare-toolbar-row {
403+
align-items: center;
404+
justify-content: flex-start;
405+
}
406+
407+
.compare-primary-grid {
408+
display: grid;
409+
grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr);
410+
gap: var(--space-4);
411+
}
412+
413+
.compare-copilot-card {
414+
padding: var(--space-3);
415+
}
416+
417+
.compare-signal-grid {
418+
display: grid;
419+
grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
420+
gap: var(--space-2);
421+
margin-top: var(--space-3);
422+
}
423+
424+
.compare-signal-card {
425+
display: grid;
426+
gap: var(--space-1);
427+
padding: var(--space-3);
428+
border: 1px solid var(--color-border-subtle);
429+
border-radius: var(--radius-md);
430+
background: var(--color-surface-subtle);
431+
}
432+
433+
.compare-signal-card strong {
434+
font-size: var(--text-lg);
435+
line-height: 1.1;
436+
}
437+
438+
@media (max-width: 1040px) {
439+
.home-briefing-shell,
440+
.planner-hero-shell,
441+
.compare-room-shell,
442+
.compare-primary-grid {
443+
grid-template-columns: 1fr;
444+
}
445+
446+
.home-command-grid,
447+
.planner-empty-grid,
448+
.home-loop-rail {
449+
grid-template-columns: 1fr;
450+
}
451+
}
452+
120453
/* =========================================
121454
Policy / Contract / Event / Chain Utilities
122455
========================================= */

0 commit comments

Comments
 (0)