Keep creation as a living DAG and archive playable products separately.

Opening accept no longer locks the graph; session.json stays creation-only while play starts from an instance snapshot. Sidebar products nest run saves, and play reading fills the feed at a denser type size.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-01 00:52:05 +08:00
co-authored by Cursor
parent bd5d88abfa
commit f37388761b
22 changed files with 930 additions and 303 deletions
+117 -18
View File
@@ -849,6 +849,13 @@ body.design-workspace[data-design-surface="answer"] .workspace-answer {
color: var(--muted);
max-width: 46rem;
}
.workspace-intent-actions {
margin-top: 22px;
display: flex;
flex-wrap: wrap;
gap: 8px;
align-items: center;
}
.workspace-intent-meta {
margin: 14px 0 0;
font-size: 12px;
@@ -1666,6 +1673,10 @@ body.design-workspace .flow-step[data-run="done"] .flow-name {
}
.explorer-row.child .explorer-name { font-size: 12px; font-weight: 400; }
.explorer-row:hover { background: var(--bg); }
.explorer-row:focus-visible {
outline: 2px solid var(--accent);
outline-offset: -2px;
}
.explorer-row.active { background: var(--accent-soft); }
.explorer-row.active .explorer-name { color: var(--accent); font-weight: 600; }
.explorer-row.selected { background: #dbeafe; }
@@ -1728,15 +1739,59 @@ body.design-workspace .flow-step[data-run="done"] .flow-name {
.explorer-hint {
margin: 4px 8px 4px 28px; font-size: 11px; color: var(--muted); line-height: 1.4;
}
.explorer-product {
margin: 2px 0 6px;
}
.explorer-product.is-open {
border: 1px solid var(--border);
border-radius: 8px;
background: var(--surface);
overflow: hidden;
}
.explorer-product.is-open > .explorer-row {
border-radius: 0;
background: var(--bg);
}
.explorer-product.is-open > .explorer-row:hover {
background: #ececee;
}
.explorer-drop {
border-top: 1px solid var(--border);
padding: 4px;
background: var(--surface);
}
.explorer-drop .explorer-row.child {
padding-left: 12px;
}
.explorer-drop-empty {
margin: 4px 8px 8px 12px;
font-size: 12px;
line-height: 1.4;
color: var(--muted);
}
.sidebar-empty { padding: 12px; color: var(--muted); font-size: 13px; text-align: center; }
/* Lifecycle */
.lifecycle-toggle { display: inline-flex; border: 1px solid var(--border); border-radius: 8px; padding: 2px; }
.lifecycle-toggle {
display: inline-flex;
flex: 0 0 auto;
align-self: center;
border: 1px solid var(--border);
border-radius: 8px;
padding: 2px;
background: var(--surface);
}
.lifecycle-toggle[hidden] { display: none; }
.lifecycle-btn {
border: none; background: transparent; padding: 4px 14px; border-radius: 6px;
font-size: 13px; cursor: pointer; color: var(--muted);
border: none; background: transparent; padding: 4px 10px; border-radius: 6px;
font-size: 12px; cursor: pointer; color: var(--muted); font-weight: 500;
}
.lifecycle-btn.active { background: var(--accent-soft); color: var(--accent); font-weight: 600; }
.lifecycle-btn:disabled { opacity: 0.4; cursor: not-allowed; }
.lifecycle-btn:focus-visible {
outline: 2px solid var(--accent);
outline-offset: 1px;
}
body[data-lifecycle="play"] { --accent: #16a34a; --accent-soft: #dcfce7; --bg: #f0fdf4; }
body[data-lifecycle="play"] .panel-rail { background: #f7fef9; }
@@ -2227,10 +2282,10 @@ body.rail-collapsed .message-feed {
.msg-q-list li { margin: 0.35rem 0; }
.msg-q-lead { margin: 0; line-height: 1.55; font-size: 14px; }
/* 游玩:每轮终稿仍是气泡(方便扫上下文),正文在气泡里撑高 */
/* 游玩:终稿铺满阅读区;字号跟正文阅读走,不跟创作验收的大字稿走 */
body[data-lifecycle="play"] .message-feed {
padding: 16px 18px 22px;
gap: 16px;
padding: 10px 12px 16px;
gap: 10px;
}
body[data-lifecycle="play"] .msg-assistant-row .msg-bubble {
width: min(100%, 44rem);
@@ -2246,7 +2301,12 @@ body[data-lifecycle="play"] .msg-user-row .msg-bubble {
max-width: 90%;
}
body[data-lifecycle="play"] .msg-play-final .msg-bubble {
width: min(100%, 46rem);
width: 100%;
max-width: 100%;
}
body[data-lifecycle="play"] .msg-play-final .msg-body {
padding: 6px 14px 12px;
white-space: normal;
}
body[data-lifecycle="play"] .msg-play-final .present-shell {
border: none;
@@ -2258,14 +2318,25 @@ body[data-lifecycle="play"] .msg-play-final .present-shell {
body[data-lifecycle="play"] .msg-play-final .present-shell-badge {
display: none;
}
body[data-lifecycle="play"] .msg-play-final .present-stack,
body[data-lifecycle="play"] .msg-play-final .present-board,
body[data-lifecycle="play"] .msg-play-final .present-split,
body[data-lifecycle="play"] .msg-play-final .present-reader {
gap: 10px;
}
body[data-lifecycle="play"] .msg-play-final .present-stage .present-region--body .present-region-body,
body[data-lifecycle="play"] .msg-play-final .present-stage.present-region--body .present-region-body {
font-size: 18.5px;
line-height: 1.88;
body[data-lifecycle="play"] .msg-play-final .present-stage.present-region--body .present-region-body,
body[data-lifecycle="play"] .msg-play-final .present-stage--read .present-region-body {
font-size: 15px;
line-height: 1.65;
max-width: none;
max-height: none;
overflow: visible;
}
body[data-lifecycle="play"] .msg-play-final .present-tone--book .present-stage--read .present-region-body,
body[data-lifecycle="play"] .msg-play-final .present-tone--book .present-stage .present-region-body {
max-width: none;
}
body[data-lifecycle="play"] .msg-play-final .present-shell--chat_monitor .present-stage {
padding: 0;
border: none;
@@ -4692,15 +4763,16 @@ body.design-workspace .af-mosaic {
* 视觉:少盒子、少渐变;层级靠字号/间距/对比,不靠装饰抢注意力。
*/
.present-shell {
white-space: normal;
--present-ink: #1c1917;
--present-muted: #78716c;
--present-line: #e7e5e4;
--present-soft: #f5f5f4;
--present-accent: #0f766e;
--present-body: 17.5px;
--present-body-lh: 1.78;
--present-body-hero: 19px;
--present-body-read: 18.5px;
--present-body: 15px;
--present-body-lh: 1.62;
--present-body-hero: 16.5px;
--present-body-read: 15.5px;
display: flex;
flex-direction: column;
gap: 0;
@@ -4749,9 +4821,15 @@ body.design-workspace .af-mosaic {
.present-region-body {
margin: 0;
line-height: 1.65;
white-space: pre-wrap;
white-space: normal;
font-size: 14px;
}
.present-region-body > p {
margin: 0 0 0.7em;
}
.present-region-body > p:last-child {
margin-bottom: 0;
}
/* P0:正文舞台 —— 随字数伸展(500~2000 靠外层滚动,不塞进小框) */
.present-stage {
flex: 1 1 auto;
@@ -4778,8 +4856,8 @@ body.design-workspace .af-mosaic {
.present-stage--read .present-region-body {
font-family: var(--font-read);
font-size: var(--present-body-read);
line-height: 1.9;
max-width: 42rem;
line-height: 1.7;
max-width: none;
}
/* 双栏:侧栏钉住,正文再长也能对照 */
.present-board-side,
@@ -4893,6 +4971,13 @@ body.design-workspace .af-mosaic {
gap: 16px;
align-items: start;
}
.present-board-mid.is-solo,
.present-board-mid:not(:has(.present-board-side)) {
grid-template-columns: minmax(0, 1fr);
}
.present-board-side:empty {
display: none;
}
.present-board-side {
display: flex;
flex-direction: column;
@@ -4912,6 +4997,13 @@ body.design-workspace .af-mosaic {
gap: 16px 20px;
align-items: start;
}
.present-split.is-solo,
.present-split:not(:has(.present-split-side)) {
grid-template-columns: minmax(0, 1fr);
}
.present-split-side:empty {
display: none;
}
.present-split-main {
display: flex;
flex-direction: column;
@@ -4963,6 +5055,13 @@ body.design-workspace .af-mosaic {
gap: 20px;
align-items: start;
}
.present-reader.is-solo,
.present-reader:not(:has(.present-reader-aside)) {
grid-template-columns: minmax(0, 1fr);
}
.present-reader-aside:empty {
display: none;
}
.present-reader-main {
display: flex;
flex-direction: column;
@@ -5015,7 +5114,7 @@ body.design-workspace .af-mosaic {
.present-tone--book .present-stage--read .present-region-body,
.present-tone--book .present-stage .present-region-body {
font-family: var(--font-read);
max-width: 38rem;
max-width: none;
}
.present-tone--terminal {
--present-ink: #d6d3d1;