@zq-silk/yui 2.2.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -3
- package/dist/artifacts/artifactCapability.js +39 -10
- package/dist/artifacts/imageMetadata.js +120 -0
- package/dist/artifacts/managedGit.js +7 -4
- package/dist/artifacts/taskArtifactRepository.js +6 -0
- package/dist/cli/commandCatalog.js +25 -11
- package/dist/cli/interactionPolicy.js +4 -0
- package/dist/cli/invocationAuthority.js +1 -1
- package/dist/commands/executionAuditCommands.js +5 -0
- package/dist/commands/globalRoleCommands.js +41 -3
- package/dist/commands/projectCommands.js +89 -94
- package/dist/commands/roleSkillValidation.js +4 -8
- package/dist/commands/taskCommands.js +30 -9
- package/dist/commands/taskIntegrationCommands.js +5 -16
- package/dist/commands/taskUsageCommand.js +38 -0
- package/dist/context/roleSessionContext.js +18 -2
- package/dist/context/runContextPack.js +5 -1
- package/dist/context/sessionBootstrapManifest.js +10 -1
- package/dist/context/skillCatalog.js +108 -0
- package/dist/context/skillPackage.js +161 -0
- package/dist/context/taskContext.js +3 -2
- package/dist/context/taskSearch.js +127 -0
- package/dist/controlPlaneCli.js +51 -39
- package/dist/controller/clientRuntime.js +3 -2
- package/dist/controller/fileSchedulerStoreAdapter.js +32 -6
- package/dist/controller/jobControl.js +2 -0
- package/dist/controller/nativeHostInput.js +37 -0
- package/dist/controller/runtime.js +93 -2
- package/dist/controller/runtimeEventInbox.js +2 -2
- package/dist/controller/runtimeEventProcessor.js +3 -3
- package/dist/doctor/doctor.js +10 -0
- package/dist/execution/reviewMainRun.js +1 -0
- package/dist/execution/workItemMainRun.js +1 -0
- package/dist/executor/codexConfigConflict.js +6 -4
- package/dist/executor/effectiveLaunch.js +24 -1
- package/dist/executor/fileRoleLaunchPlanner.js +13 -5
- package/dist/integration/gitIntegrationService.js +15 -79
- package/dist/integration/integrationSourceApplication.js +4 -2
- package/dist/job/httpPreview.js +61 -0
- package/dist/job/jobCleanupInspection.js +67 -0
- package/dist/job/jobRunner.js +12 -2
- package/dist/kernel/builtinCapabilities.js +3 -1
- package/dist/message/message.js +15 -1
- package/dist/output/rolePresentation.js +4 -1
- package/dist/repository/executionLaneGitSnapshot.js +2 -1
- package/dist/repository/gitCompatibility.js +62 -0
- package/dist/repository/gitWorkspace.js +86 -80
- package/dist/repository/gitWorktreeInventory.js +121 -0
- package/dist/repository/project.js +74 -25
- package/dist/repository/taskWorkspaceCoordinator.js +72 -145
- package/dist/repository/taskWorkspacePreparer.js +39 -43
- package/dist/repository/workspaceCleanupInspection.js +88 -7
- package/dist/resources/resourceDiscovery.js +2 -2
- package/dist/resources/resourceGc.js +7 -4
- package/dist/resources/resourceRegistrar.js +18 -11
- package/dist/runtime/agentEndpoint.js +8 -0
- package/dist/runtime/agentHost.js +170 -3
- package/dist/runtime/codexAppServerRuntime.js +1 -1
- package/dist/runtime/codexNativeAccess.js +175 -0
- package/dist/runtime/controlledCodexTui.js +116 -0
- package/dist/runtime/integrationRuntimeIsolation.js +21 -0
- package/dist/runtime/publicReply.js +23 -0
- package/dist/runtime/runtimeObservation.js +48 -0
- package/dist/runtime/structuredProviderHost.js +16 -7
- package/dist/runtime/taskCostMetrics.js +133 -0
- package/dist/runtime/taskRuntimeIsolation.js +91 -21
- package/dist/runtime/taskUsageMetrics.js +11 -2
- package/dist/runtime/taskUsageQuery.js +38 -0
- package/dist/scheduler/taskExecutionProjection.js +2 -0
- package/dist/scheduler/taskObservabilityProjection.js +9 -1
- package/dist/storage/homeLayout.js +13 -0
- package/dist/storage/sqliteSchema.js +44 -0
- package/dist/storage/sqliteStore.js +53 -0
- package/dist/storage/storageVersions.js +1 -1
- package/dist/storage/storeRpc.js +2 -0
- package/dist/storage/taskSearch.js +35 -0
- package/dist/storage/upgrade/projectKnowledgeMigration.js +52 -0
- package/dist/task/archiveDiagnostics.js +26 -8
- package/dist/task/archivePreflight.js +26 -9
- package/dist/task/leaderArchive.js +9 -15
- package/dist/task/ordinaryArchive.js +42 -0
- package/dist/tmux/tmuxManager.js +8 -8
- package/dist/web/assets/assetManifest.js +11 -51
- package/dist/web/assets/client/app/catalog.js +215 -0
- package/dist/web/assets/client/app/main.js +148 -0
- package/dist/web/assets/client/app/selection.js +139 -0
- package/dist/web/assets/client/app/settings.js +326 -0
- package/dist/web/assets/client/app/taskView.js +280 -0
- package/dist/web/assets/client/domain/context.js +96 -0
- package/dist/web/assets/client/domain/records.js +126 -0
- package/dist/web/assets/client/domain/runs.js +119 -0
- package/dist/web/assets/client/domain/taskForms.js +197 -0
- package/dist/web/assets/client/domain/vocab.js +69 -0
- package/dist/web/assets/client/domain/work.js +116 -0
- package/dist/web/assets/client/i18n/en.js +900 -0
- package/dist/web/assets/client/i18n/zh-CN.js +898 -0
- package/dist/web/assets/client/index.js +114 -0
- package/dist/web/assets/client/layout/resizer.js +37 -0
- package/dist/web/assets/client/layout/router.js +35 -0
- package/dist/web/assets/client/layout/shortcuts.js +45 -0
- package/dist/web/assets/client/layout/sizing.js +95 -0
- package/dist/web/assets/client/layout/workspace.js +247 -0
- package/dist/web/assets/client/{api.js → lib/api.js} +28 -4
- package/dist/web/assets/client/{dom.js → lib/dom.js} +24 -12
- package/dist/web/assets/client/{format.js → lib/format.js} +7 -0
- package/dist/web/assets/client/lib/i18n.js +54 -0
- package/dist/web/assets/client/lib/markdown.js +167 -0
- package/dist/web/assets/client/lib/prefs.js +28 -0
- package/dist/web/assets/client/lib/theme.js +68 -0
- package/dist/web/assets/client/ui/containers.js +101 -0
- package/dist/web/assets/client/ui/controls.js +51 -0
- package/dist/web/assets/client/ui/forms.js +48 -0
- package/dist/web/assets/client/ui/metrics.js +137 -0
- package/dist/web/assets/client/ui/primitives.js +92 -0
- package/dist/web/assets/client/ui/text.js +33 -0
- package/dist/web/assets/client/ui/toast.js +12 -0
- package/dist/web/assets/client/views/bodySearch.js +172 -0
- package/dist/web/assets/client/views/createTask.js +85 -0
- package/dist/web/assets/client/views/dock/conversation.js +612 -0
- package/dist/web/assets/client/views/dock/discussion.js +173 -0
- package/dist/web/assets/client/views/dock/preview.js +129 -0
- package/dist/web/assets/client/views/dock/terminal.js +199 -0
- package/dist/web/assets/client/views/globalInput.js +67 -0
- package/dist/web/assets/client/{overview.js → views/overview.js} +62 -56
- package/dist/web/assets/client/{sidebar.js → views/sidebar.js} +56 -62
- package/dist/web/assets/client/views/skills.js +152 -0
- package/dist/web/assets/client/views/task/actions.js +36 -0
- package/dist/web/assets/client/views/task/delivery.js +185 -0
- package/dist/web/assets/client/views/task/deliveryResults.js +159 -0
- package/dist/web/assets/client/views/task/files.js +272 -0
- package/dist/web/assets/client/views/task/observation.js +153 -0
- package/dist/web/assets/client/views/task/overview.js +161 -0
- package/dist/web/assets/client/views/task/page.js +131 -0
- package/dist/web/assets/client/views/task/records.js +163 -0
- package/dist/web/assets/client/views/task/runtime.js +130 -0
- package/dist/web/assets/client/views/task/timeline.js +190 -0
- package/dist/web/assets/shared/geometry.js +19 -0
- package/dist/web/assets/{icons.js → shared/icons.js} +4 -0
- package/dist/web/assets/shared/taskTabs.js +8 -0
- package/dist/web/assets/shared/themes.js +93 -0
- package/dist/web/assets/shell/dialogs.js +63 -0
- package/dist/web/assets/shell/dock.js +40 -0
- package/dist/web/assets/shell/index.js +40 -0
- package/dist/web/assets/shell/settings.js +34 -0
- package/dist/web/assets/shell/sidebar.js +45 -0
- package/dist/web/assets/styles/index.js +41 -0
- package/dist/web/assets/styles/{responsive.js → layout/responsive.js} +15 -13
- package/dist/web/assets/styles/{layout.js → layout/workspace.js} +17 -24
- package/dist/web/assets/styles/markdown.js +22 -3
- package/dist/web/assets/styles/tokens.js +10 -63
- package/dist/web/assets/styles/ui/controls.js +76 -0
- package/dist/web/assets/styles/ui/forms.js +46 -0
- package/dist/web/assets/styles/ui/surfaces.js +122 -0
- package/dist/web/assets/styles/views/delivery.js +29 -0
- package/dist/web/assets/styles/views/dock.js +71 -0
- package/dist/web/assets/styles/views/page.js +32 -0
- package/dist/web/assets/styles/views/records.js +70 -0
- package/dist/web/assets/styles/views/settings.js +26 -0
- package/dist/web/assets/styles/views/sidebar.js +74 -0
- package/dist/web/assets/styles/views/task.js +80 -0
- package/dist/web/assets/styles/views/terminal.js +38 -0
- package/dist/web/taskPreviews.js +205 -0
- package/dist/web/tmuxWebTerminal.js +16 -9
- package/dist/web/webConversation.js +373 -0
- package/dist/web/webMaterials.js +155 -0
- package/dist/web/webServer.js +306 -18
- package/dist/web/webSettings.js +331 -0
- package/dist/web/webSkills.js +86 -0
- package/dist/web/webSnapshot.js +40 -8
- package/dist/web/webTaskSurface.js +114 -9
- package/dist/workspace/gitChangeSetCapture.js +3 -1
- package/docs/managed-turn-and-session-runtime.md +9 -0
- package/docs/managed-turn-and-session-runtime.zh-CN.md +7 -0
- package/docs/observability/README.md +13 -3
- package/docs/observability/README.zh-CN.md +10 -3
- package/docs/release-workflow.md +53 -0
- package/docs/release-workflow.zh-CN.md +40 -0
- package/docs/storage-baseline.md +38 -1
- package/docs/storage-baseline.zh-CN.md +22 -0
- package/docs/task-delivery.md +36 -8
- package/docs/task-delivery.zh-CN.md +24 -7
- package/docs/task-discovery.md +28 -0
- package/docs/testing/verification-levels.md +2 -2
- package/i18n/README.zh-CN.md +4 -3
- package/package.json +1 -1
- package/skills/yui-leader/references/execution.md +2 -1
- package/skills/yui-leader/references/integration.md +20 -0
- package/skills/yui-operator/SKILL.md +4 -0
- package/skills/yui-reviewer/SKILL.md +3 -0
- package/skills/yui-runtime/SKILL.md +4 -0
- package/skills/yui-runtime/references/publication.md +20 -4
- package/skills/yui-worker/SKILL.md +3 -0
- package/dist/web/assets/client/app.js +0 -804
- package/dist/web/assets/client/components.js +0 -418
- package/dist/web/assets/client/detail.js +0 -333
- package/dist/web/assets/client/dock.js +0 -225
- package/dist/web/assets/client/evidence.js +0 -172
- package/dist/web/assets/client/forms.js +0 -230
- package/dist/web/assets/client/i18n.js +0 -1161
- package/dist/web/assets/client/markdown.js +0 -114
- package/dist/web/assets/client/records.js +0 -63
- package/dist/web/assets/client/sections.js +0 -313
- package/dist/web/assets/client/theme.js +0 -71
- package/dist/web/assets/shell.js +0 -161
- package/dist/web/assets/styles/components.js +0 -169
- package/dist/web/assets/styles/views.js +0 -292
package/dist/web/assets/shell.js
DELETED
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
import { iconSvg } from "./icons.js";
|
|
2
|
-
// Static application frame. Everything inside #detail, #task-list and the dock
|
|
3
|
-
// panes is rendered by the client modules; this file only fixes the regions
|
|
4
|
-
// and the controls whose identity must survive re-renders.
|
|
5
|
-
export const DASHBOARD_HTML = `<!doctype html>
|
|
6
|
-
<html lang="en" data-theme="sumi">
|
|
7
|
-
<head>
|
|
8
|
-
<meta charset="utf-8">
|
|
9
|
-
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
|
|
10
|
-
<meta name="color-scheme" content="dark light">
|
|
11
|
-
<meta name="yui-web-token" content="__YUI_WEB_TOKEN__">
|
|
12
|
-
<link rel="icon" href="data:,">
|
|
13
|
-
<title>Yui</title>
|
|
14
|
-
<link rel="preload" href="/assets/fonts/inter-500.woff2" as="font" type="font/woff2" crossorigin>
|
|
15
|
-
<link rel="preload" href="/assets/fonts/inter-600.woff2" as="font" type="font/woff2" crossorigin>
|
|
16
|
-
<link rel="stylesheet" href="/assets/css/fonts.css">
|
|
17
|
-
<link rel="stylesheet" href="/assets/css/tokens.css">
|
|
18
|
-
<link rel="stylesheet" href="/assets/css/base.css">
|
|
19
|
-
<link rel="stylesheet" href="/assets/css/layout.css">
|
|
20
|
-
<link rel="stylesheet" href="/assets/css/components.css">
|
|
21
|
-
<link rel="stylesheet" href="/assets/css/views.css">
|
|
22
|
-
<link rel="stylesheet" href="/assets/css/markdown.css">
|
|
23
|
-
<link rel="stylesheet" href="/assets/css/responsive.css">
|
|
24
|
-
<link rel="stylesheet" href="/assets/vendor/xterm.css">
|
|
25
|
-
</head>
|
|
26
|
-
<body>
|
|
27
|
-
<a class="skip-link" href="#center" data-i18n="a11y.skip">Skip to task details</a>
|
|
28
|
-
<div class="app">
|
|
29
|
-
<aside class="sidebar" aria-label="Tasks" data-i18n-aria-label="sidebar.label">
|
|
30
|
-
<header class="side-head">
|
|
31
|
-
<div class="brand">
|
|
32
|
-
<span class="brand-mark" aria-hidden="true">結</span>
|
|
33
|
-
<span class="brand-name">Yui</span>
|
|
34
|
-
</div>
|
|
35
|
-
<span class="sync" id="sync-state" title="Last sync" data-i18n-title="sync.label">
|
|
36
|
-
<i aria-hidden="true"></i><time id="last-sync">—</time>
|
|
37
|
-
</span>
|
|
38
|
-
<button id="refresh" class="icon-btn" type="button" aria-label="Refresh" data-i18n-aria-label="actions.refresh" title="Refresh · R">${iconSvg("refresh")}</button>
|
|
39
|
-
</header>
|
|
40
|
-
<label class="search-field">
|
|
41
|
-
${iconSvg("search")}
|
|
42
|
-
<span class="sr-only" data-i18n="search.label">Search tasks</span>
|
|
43
|
-
<input id="search" type="search" autocomplete="off" spellcheck="false" placeholder="Search tasks" data-i18n-placeholder="search.placeholder">
|
|
44
|
-
<kbd>/</kbd>
|
|
45
|
-
</label>
|
|
46
|
-
<div id="attention-bar" class="attention-bar" aria-live="polite"></div>
|
|
47
|
-
<div id="status-filters" class="status-tabs" role="group" aria-label="Filter by status" data-i18n-aria-label="filters.label"></div>
|
|
48
|
-
<div id="task-list" class="task-list" aria-label="Tasks" data-i18n-aria-label="sidebar.label" aria-live="polite"></div>
|
|
49
|
-
<div id="catalog-controls" class="pager" aria-live="polite">
|
|
50
|
-
<button id="catalog-reset" class="pager-btn" type="button" data-i18n="catalog.first">First page</button>
|
|
51
|
-
<span id="catalog-count" class="pager-count"></span>
|
|
52
|
-
<button id="catalog-next" class="pager-btn" type="button" data-i18n="catalog.next" disabled>Next page</button>
|
|
53
|
-
<button id="catalog-attention-reset" class="pager-clear" type="button" data-i18n="catalog.clearAttention" hidden>Clear attention filter</button>
|
|
54
|
-
</div>
|
|
55
|
-
<footer class="side-foot">
|
|
56
|
-
<button id="operator-terminal" class="foot-btn" type="button" title="Operator session · O">
|
|
57
|
-
${iconSvg("terminal")}<span data-i18n="actions.operator">Operator</span><kbd>O</kbd>
|
|
58
|
-
</button>
|
|
59
|
-
<button id="global-input-open" class="foot-btn" type="button" title="Global input" data-i18n-title="global.open">
|
|
60
|
-
${iconSvg("broadcast")}<span data-i18n="global.open">Global input</span>
|
|
61
|
-
</button>
|
|
62
|
-
<button id="settings-open" class="icon-btn" type="button" aria-label="Settings" data-i18n-aria-label="settings.title" title="Settings">${iconSvg("settings")}</button>
|
|
63
|
-
</footer>
|
|
64
|
-
</aside>
|
|
65
|
-
<div id="sidebar-divider" class="sidebar-divider" role="separator" tabindex="0" aria-orientation="vertical" aria-valuemin="240" aria-valuemax="560" aria-valuenow="264" aria-label="Resize task list" data-i18n-aria-label="sidebar.resize" title="Drag to resize · double-click to reset" data-i18n-title="sidebar.resizeHint"><span aria-hidden="true"></span></div>
|
|
66
|
-
<main id="center" class="center" tabindex="-1">
|
|
67
|
-
<div id="detail" class="detail"></div>
|
|
68
|
-
</main>
|
|
69
|
-
<div id="dock-divider" class="dock-divider" role="separator" tabindex="0" aria-orientation="vertical" aria-valuemin="320" aria-valuemax="720" aria-valuenow="440" aria-label="Resize session panel" data-i18n-aria-label="dock.resize" hidden><span aria-hidden="true"></span></div>
|
|
70
|
-
<aside id="dock" class="dock" aria-label="Session" data-i18n-aria-label="dock.label" hidden>
|
|
71
|
-
<header class="dock-head">
|
|
72
|
-
<div class="seg" role="tablist" aria-label="Session view" data-i18n-aria-label="dock.label">
|
|
73
|
-
<button id="dock-tab-discussion" class="seg-btn" type="button" role="tab" aria-selected="true" aria-controls="dock-discussion">${iconSvg("chat")}<span data-i18n="dock.discussion">Discussion</span></button>
|
|
74
|
-
<button id="dock-tab-session" class="seg-btn" type="button" role="tab" aria-selected="false" aria-controls="dock-session">${iconSvg("terminal")}<span data-i18n="dock.session">Live session</span></button>
|
|
75
|
-
</div>
|
|
76
|
-
<div class="dock-actions">
|
|
77
|
-
<button id="dock-swap" class="icon-btn" type="button" aria-label="Swap with task details" data-i18n-aria-label="dock.swap" title="Swap with task details">${iconSvg("swap")}</button>
|
|
78
|
-
<button id="dock-close" class="icon-btn" type="button" aria-label="Hide session panel" data-i18n-aria-label="dock.hide" title="Hide · D">${iconSvg("close")}</button>
|
|
79
|
-
</div>
|
|
80
|
-
</header>
|
|
81
|
-
<section id="dock-discussion" class="dock-pane dock-discussion" role="tabpanel" aria-labelledby="dock-tab-discussion"></section>
|
|
82
|
-
<section id="dock-session" class="dock-pane dock-session" role="tabpanel" aria-labelledby="dock-tab-session" hidden>
|
|
83
|
-
<div class="session-bar">
|
|
84
|
-
<div id="session-targets" class="session-targets" role="group" aria-label="Session target" data-i18n-aria-label="dock.target"></div>
|
|
85
|
-
<span id="terminal-state" class="conn" data-state="idle"><i aria-hidden="true"></i><span data-i18n="terminal.idle">Not connected</span></span>
|
|
86
|
-
</div>
|
|
87
|
-
<div id="terminal-host" class="terminal-host"></div>
|
|
88
|
-
<div id="terminal-empty" class="terminal-empty">
|
|
89
|
-
${iconSvg("terminal", "icon icon-xl")}
|
|
90
|
-
<p class="terminal-empty-title" data-i18n="terminal.emptyTitle">Attach to a native Session</p>
|
|
91
|
-
<p class="terminal-empty-text" data-i18n="terminal.emptyText">Pick a Role above. The panel shows the Session's current screen; attaching never starts or restarts an Agent.</p>
|
|
92
|
-
</div>
|
|
93
|
-
<footer class="session-foot">
|
|
94
|
-
<span data-i18n="terminal.cliHint">Full terminal</span>
|
|
95
|
-
<code id="terminal-cli">yui operator enter</code>
|
|
96
|
-
</footer>
|
|
97
|
-
</section>
|
|
98
|
-
</aside>
|
|
99
|
-
</div>
|
|
100
|
-
<dialog id="settings-dialog" class="dialog settings-dialog" aria-labelledby="settings-title">
|
|
101
|
-
<form method="dialog" class="dialog-body">
|
|
102
|
-
<header class="dialog-head">
|
|
103
|
-
<h2 id="settings-title" data-i18n="settings.title">Settings</h2>
|
|
104
|
-
<button class="icon-btn" value="close" aria-label="Close" data-i18n-aria-label="actions.close">${iconSvg("close")}</button>
|
|
105
|
-
</header>
|
|
106
|
-
<fieldset class="field">
|
|
107
|
-
<legend data-i18n="settings.theme">Theme</legend>
|
|
108
|
-
<div id="theme-options" class="theme-options"></div>
|
|
109
|
-
</fieldset>
|
|
110
|
-
<label class="field">
|
|
111
|
-
<span data-i18n="settings.language">Language</span>
|
|
112
|
-
<select id="locale-select">
|
|
113
|
-
<option value="en">English</option>
|
|
114
|
-
<option value="zh-CN">简体中文</option>
|
|
115
|
-
</select>
|
|
116
|
-
</label>
|
|
117
|
-
<div class="field">
|
|
118
|
-
<span data-i18n="settings.shortcuts">Keyboard</span>
|
|
119
|
-
<dl class="shortcut-list">
|
|
120
|
-
<dt><kbd>/</kbd></dt><dd data-i18n="shortcut.search">Search tasks</dd>
|
|
121
|
-
<dt><kbd>R</kbd></dt><dd data-i18n="shortcut.refresh">Refresh</dd>
|
|
122
|
-
<dt><kbd>D</kbd></dt><dd data-i18n="shortcut.dock">Show or hide the session panel</dd>
|
|
123
|
-
<dt><kbd>O</kbd></dt><dd data-i18n="shortcut.operator">Operator session</dd>
|
|
124
|
-
<dt><kbd>1</kbd>–<kbd>5</kbd></dt><dd data-i18n="shortcut.tabs">Switch task sections</dd>
|
|
125
|
-
<dt><kbd>Esc</kbd></dt><dd data-i18n="shortcut.escape">Close panel / leave task</dd>
|
|
126
|
-
</dl>
|
|
127
|
-
</div>
|
|
128
|
-
</form>
|
|
129
|
-
</dialog>
|
|
130
|
-
<dialog id="global-input-dialog" class="dialog" aria-labelledby="global-input-title">
|
|
131
|
-
<form id="global-input-form" class="dialog-body">
|
|
132
|
-
<header class="dialog-head">
|
|
133
|
-
<div>
|
|
134
|
-
<h2 id="global-input-title" data-i18n="global.title">Global Role input</h2>
|
|
135
|
-
<p class="dialog-sub" data-i18n="global.help">Queue is the default. A cancel request does not prove the Turn stopped.</p>
|
|
136
|
-
</div>
|
|
137
|
-
<button id="global-input-close" class="icon-btn" type="button" aria-label="Close" data-i18n-aria-label="actions.close">${iconSvg("close")}</button>
|
|
138
|
-
</header>
|
|
139
|
-
<div class="field-row">
|
|
140
|
-
<label class="field"><span data-i18n="global.role">Role</span><input id="global-input-role" value="operator" required pattern="[A-Za-z0-9_-]+"></label>
|
|
141
|
-
<label class="field"><span data-i18n="control.action">Action</span><select id="global-input-action">
|
|
142
|
-
<option value="queue" data-i18n="control.queue">Queue</option>
|
|
143
|
-
<option value="steer" data-i18n="control.steer">Steer</option>
|
|
144
|
-
<option value="interrupt" data-i18n="control.interrupt">Interrupt</option>
|
|
145
|
-
</select></label>
|
|
146
|
-
</div>
|
|
147
|
-
<label id="global-input-body-label" class="field"><span data-i18n="control.message">Message</span><textarea id="global-input-body" maxlength="8000" required rows="4"></textarea></label>
|
|
148
|
-
<label id="global-input-target-label" class="field" hidden><span data-i18n="control.expectedTurn">Expected current Turn</span><input id="global-input-target" class="mono"></label>
|
|
149
|
-
<label id="global-input-then-label" class="field" hidden><span data-i18n="control.then">Then-message reference</span><input id="global-input-then" class="mono"></label>
|
|
150
|
-
<div class="dialog-actions">
|
|
151
|
-
<button id="global-input-inspect" type="button" class="btn" data-i18n="global.inspect">Read state</button>
|
|
152
|
-
<button id="global-input-submit" type="submit" class="btn btn-primary" data-i18n="actions.submit">Submit</button>
|
|
153
|
-
</div>
|
|
154
|
-
<p id="global-input-receipt" role="status" class="receipt" data-i18n="receipt.notSubmitted">Not submitted</p>
|
|
155
|
-
<pre id="global-input-state" class="code-block" hidden></pre>
|
|
156
|
-
</form>
|
|
157
|
-
</dialog>
|
|
158
|
-
<div id="toast" class="toast" role="status" aria-live="polite"></div>
|
|
159
|
-
<script type="module" src="/assets/app.js"></script>
|
|
160
|
-
</body>
|
|
161
|
-
</html>`;
|
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* COMPONENTS — reusable controls and primitives: buttons, segmented
|
|
3
|
-
* controls, badges, dots, chips, cards, disclosures, key/value lists, empty
|
|
4
|
-
* states, metrics, dialogs and the toast. Colour comes only from tokens.
|
|
5
|
-
*/
|
|
6
|
-
export const COMPONENT_STYLES = `
|
|
7
|
-
/* Tones: one semantic colour per tone, used by dots, badges and signals */
|
|
8
|
-
.tone-info{--tone:var(--info);--tone-soft:var(--info-soft)}
|
|
9
|
-
.tone-ok{--tone:var(--ok);--tone-soft:var(--ok-soft)}
|
|
10
|
-
.tone-warn{--tone:var(--warn);--tone-soft:var(--warn-soft)}
|
|
11
|
-
.tone-bad{--tone:var(--bad);--tone-soft:var(--bad-soft)}
|
|
12
|
-
.tone-idle{--tone:var(--idle);--tone-soft:var(--idle-soft)}
|
|
13
|
-
.tone-accent{--tone:var(--accent);--tone-soft:var(--accent-soft)}
|
|
14
|
-
|
|
15
|
-
/* Buttons */
|
|
16
|
-
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:32px;padding:0 12px;border:1px solid var(--line-2);border-radius:var(--r-sm);background:var(--surface-2);color:var(--ink);font-size:var(--fs-sm);font-weight:500;white-space:nowrap;transition:background var(--t-fast),border-color var(--t-fast),color var(--t-fast),transform var(--t-fast)}
|
|
17
|
-
.btn:hover:not(:disabled){border-color:var(--line-3);background:var(--surface-3)}
|
|
18
|
-
.btn:active:not(:disabled){transform:translateY(1px)}
|
|
19
|
-
.btn:disabled{opacity:.45}
|
|
20
|
-
.btn .icon{width:15px;height:15px}
|
|
21
|
-
.btn-primary{background:var(--accent);border-color:transparent;color:var(--accent-ink);font-weight:600}
|
|
22
|
-
.btn-primary:hover:not(:disabled){background:var(--accent);border-color:transparent;filter:brightness(1.08)}
|
|
23
|
-
.btn-ghost{background:transparent;border-color:transparent;color:var(--ink-2)}
|
|
24
|
-
.btn-ghost:hover:not(:disabled){background:var(--surface-3);border-color:transparent;color:var(--ink)}
|
|
25
|
-
.btn-ghost[aria-pressed="true"]{background:var(--accent-soft);color:var(--accent)}
|
|
26
|
-
.btn-link{height:auto;padding:2px 0;border:0;background:transparent;color:var(--accent);font-weight:500}
|
|
27
|
-
.btn-link:hover:not(:disabled){background:transparent;text-decoration:underline;text-underline-offset:3px}
|
|
28
|
-
.link-btn{justify-self:start;padding:0;border:0;background:none;color:var(--accent);font-size:var(--fs-xs);font-weight:500}
|
|
29
|
-
.link-btn:hover{text-decoration:underline;text-underline-offset:3px}
|
|
30
|
-
.icon-btn{display:inline-grid;place-items:center;width:32px;height:32px;flex:none;padding:0;border:0;border-radius:var(--r-sm);background:transparent;color:var(--ink-3);transition:background var(--t-fast),color var(--t-fast)}
|
|
31
|
-
.icon-btn:hover:not(:disabled){background:var(--surface-3);color:var(--ink)}
|
|
32
|
-
.icon-btn[aria-pressed="true"]{background:var(--accent-soft);color:var(--accent)}
|
|
33
|
-
.icon-btn:disabled{opacity:.4}
|
|
34
|
-
.icon-btn .icon{width:17px;height:17px}
|
|
35
|
-
|
|
36
|
-
/* Segmented control */
|
|
37
|
-
.seg{display:inline-flex;gap:2px;padding:3px;border-radius:var(--r-md);background:var(--sunken);border:1px solid var(--line)}
|
|
38
|
-
.seg-btn{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 11px;border:0;border-radius:var(--r-sm);background:transparent;color:var(--ink-3);font-size:var(--fs-sm);font-weight:500;white-space:nowrap;transition:background var(--t-fast),color var(--t-fast),box-shadow var(--t-fast)}
|
|
39
|
-
.seg-btn:hover:not(:disabled){color:var(--ink)}
|
|
40
|
-
.seg-btn[aria-selected="true"],.seg-btn[aria-checked="true"]{background:var(--surface-2);color:var(--ink);box-shadow:var(--shadow-1),0 0 0 1px var(--line-2)}
|
|
41
|
-
.seg-btn:disabled{opacity:.4}
|
|
42
|
-
.seg-btn .icon{width:15px;height:15px}
|
|
43
|
-
.seg-sm .seg-btn{height:24px;padding:0 9px;font-size:var(--fs-xs)}
|
|
44
|
-
|
|
45
|
-
/* Badges, dots, chips */
|
|
46
|
-
.badge{display:inline-flex;align-items:center;gap:6px;height:22px;padding:0 8px;border-radius:var(--r-pill);background:var(--tone-soft,var(--idle-soft));color:var(--tone,var(--ink-2));font-size:var(--fs-xs);font-weight:600;white-space:nowrap;line-height:1}
|
|
47
|
-
.badge-dot{width:6px;height:6px;border-radius:50%;background:currentColor;flex:none}
|
|
48
|
-
.dot{display:inline-block;width:8px;height:8px;flex:none;border-radius:50%;background:var(--tone,var(--idle));box-shadow:0 0 0 3px var(--tone-soft,transparent)}
|
|
49
|
-
.chip{display:inline-flex;align-items:center;height:20px;padding:0 7px;border-radius:var(--r-xs);background:var(--surface-3);color:var(--ink-2);font-size:var(--fs-2xs);font-weight:500;white-space:nowrap}
|
|
50
|
-
.chip-strong{color:var(--ink);background:var(--line-2)}
|
|
51
|
-
.chip-row{display:inline-flex;flex-wrap:wrap;align-items:center;gap:4px}
|
|
52
|
-
code.id{padding:1px 6px;border-radius:var(--r-xs);background:var(--surface-3);color:var(--ink-2);font-size:var(--fs-2xs);white-space:nowrap}
|
|
53
|
-
.when{color:var(--ink-3);font-size:var(--fs-xs);white-space:nowrap}
|
|
54
|
-
.count{display:inline-grid;place-items:center;min-width:18px;height:18px;padding:0 5px;border-radius:var(--r-pill);background:var(--surface-3);color:var(--ink-3);font-size:10.5px;font-weight:600;line-height:1}
|
|
55
|
-
.spacer{flex:1}
|
|
56
|
-
.small{font-size:var(--fs-xs)}
|
|
57
|
-
.mono-line{font-family:var(--font-mono);font-size:var(--fs-2xs);overflow-wrap:anywhere}
|
|
58
|
-
|
|
59
|
-
/* Chip tabs (local filters) */
|
|
60
|
-
.chip-tabs{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}
|
|
61
|
-
.chip-tab{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 10px;border:1px solid var(--line-2);border-radius:var(--r-pill);background:transparent;color:var(--ink-3);font-size:var(--fs-xs);font-weight:500}
|
|
62
|
-
.chip-tab:hover{color:var(--ink);border-color:var(--line-3)}
|
|
63
|
-
.chip-tab[aria-pressed="true"]{background:var(--ink);border-color:var(--ink);color:var(--canvas)}
|
|
64
|
-
.chip-tab[aria-pressed="true"] .count{background:rgba(127,127,127,.25);color:inherit}
|
|
65
|
-
|
|
66
|
-
/* Cards */
|
|
67
|
-
.card{display:flex;flex-direction:column;min-width:0;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface);box-shadow:var(--shadow-1)}
|
|
68
|
-
.card-head{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:4px 10px;padding:14px 16px 0}
|
|
69
|
-
.card-title{display:flex;align-items:center;gap:8px;flex:1;min-width:0;font-size:var(--fs-md);font-weight:600;color:var(--ink)}
|
|
70
|
-
.card-title .icon{color:var(--ink-3)}
|
|
71
|
-
.card-actions{grid-row:1;grid-column:2;display:flex;gap:6px;margin:-4px -6px -4px 0}
|
|
72
|
-
.card-hint{grid-column:1/-1;color:var(--ink-3);font-size:var(--fs-xs);line-height:1.45}
|
|
73
|
-
.card-body{display:grid;gap:12px;padding:14px 16px 16px;min-width:0}
|
|
74
|
-
.card-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;align-items:start}
|
|
75
|
-
.card-grid-1{grid-template-columns:minmax(0,1fr)}
|
|
76
|
-
.card-columns{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;align-items:start}
|
|
77
|
-
.card-column{display:flex;flex-direction:column;gap:14px;min-width:0}
|
|
78
|
-
.stack{display:grid;gap:10px;min-width:0}
|
|
79
|
-
|
|
80
|
-
/* Disclosure */
|
|
81
|
-
.disclosure{min-width:0;border-top:1px solid var(--line)}
|
|
82
|
-
.disclosure>summary{display:flex;align-items:center;gap:8px;padding:10px 0;list-style:none;cursor:pointer;color:var(--ink-2);font-size:var(--fs-sm);font-weight:500;user-select:none}
|
|
83
|
-
.disclosure>summary::-webkit-details-marker{display:none}
|
|
84
|
-
.disclosure>summary:hover{color:var(--ink)}
|
|
85
|
-
.disclosure-chevron{width:14px;height:14px;color:var(--ink-4);transition:transform var(--t-med) var(--ease)}
|
|
86
|
-
details[open]>summary .disclosure-chevron{transform:rotate(90deg)}
|
|
87
|
-
.disclosure-meta{margin-left:auto;color:var(--ink-4);font-size:var(--fs-xs);font-weight:400}
|
|
88
|
-
.disclosure-body{display:grid;gap:10px;padding:0 0 12px 22px;min-width:0}
|
|
89
|
-
.card-disclosure{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface);box-shadow:var(--shadow-1)}
|
|
90
|
-
.card-disclosure>summary{padding:14px 16px;color:var(--ink);font-weight:600;font-size:var(--fs-md)}
|
|
91
|
-
.card-disclosure>.disclosure-body{padding:0 16px 16px}
|
|
92
|
-
|
|
93
|
-
/* Key/value */
|
|
94
|
-
.kv{display:grid;grid-template-columns:minmax(96px,max-content) minmax(0,1fr);gap:7px 16px;margin:0;font-size:var(--fs-sm)}
|
|
95
|
-
.kv dt{color:var(--ink-3)}
|
|
96
|
-
.kv dd{margin:0;min-width:0;color:var(--ink);overflow-wrap:anywhere}
|
|
97
|
-
.kv-compact{gap:3px 12px;font-size:var(--fs-xs)}
|
|
98
|
-
|
|
99
|
-
/* Prose */
|
|
100
|
-
.prose-block{display:grid;gap:5px;min-width:0}
|
|
101
|
-
.prose-label{color:var(--ink-3);font-size:var(--fs-2xs);font-weight:600;text-transform:uppercase;letter-spacing:.06em}
|
|
102
|
-
.prose-block.is-collapsed .md{max-height:180px;overflow:hidden;-webkit-mask-image:linear-gradient(#000 65%,transparent);mask-image:linear-gradient(#000 65%,transparent)}
|
|
103
|
-
.callout{padding:10px 12px;border-radius:var(--r-md);background:var(--tone-soft,var(--surface-3));border-left:2px solid var(--tone,var(--line-3))}
|
|
104
|
-
.bullets{margin:0;padding-left:18px;display:grid;gap:3px;font-size:var(--fs-sm);color:var(--ink-2)}
|
|
105
|
-
.checklist{list-style:none;margin:0;padding:0;display:grid;gap:5px;font-size:var(--fs-sm)}
|
|
106
|
-
.checklist li{display:flex;gap:8px;align-items:flex-start;color:var(--ink-2)}
|
|
107
|
-
.checklist li .icon{margin-top:3px;color:var(--ink-4)}
|
|
108
|
-
.checklist li.is-done .icon{color:var(--ok)}
|
|
109
|
-
|
|
110
|
-
/* Notes, empty states, receipts */
|
|
111
|
-
.note{padding:8px 11px;border-radius:var(--r-sm);background:var(--tone-soft,var(--surface-3));color:var(--ink-2);font-size:var(--fs-xs);line-height:1.5}
|
|
112
|
-
.note.tone-bad{color:var(--bad)}
|
|
113
|
-
.note.tone-warn{color:var(--ink)}
|
|
114
|
-
.empty{display:flex;align-items:center;gap:10px;padding:14px;border:1px dashed var(--line-2);border-radius:var(--r-md);color:var(--ink-3);font-size:var(--fs-sm)}
|
|
115
|
-
.empty .icon{color:var(--ink-4)}
|
|
116
|
-
.receipt{color:var(--ink-3);font-size:var(--fs-xs);overflow-wrap:anywhere}
|
|
117
|
-
.receipt[data-state="pending"]{color:var(--info)}
|
|
118
|
-
.receipt[data-state="ok"]{color:var(--ok)}
|
|
119
|
-
.receipt[data-state="warn"]{color:var(--warn)}
|
|
120
|
-
.receipt[data-state="bad"]{color:var(--bad)}
|
|
121
|
-
.code-block{margin:0;max-height:360px;overflow:auto;padding:10px 12px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--sunken);color:var(--ink-2);font-size:var(--fs-2xs);line-height:1.55;white-space:pre-wrap;overflow-wrap:anywhere}
|
|
122
|
-
.show-more{justify-self:start;display:inline-flex;align-items:center;height:30px;padding:0 12px;border:1px dashed var(--line-3);border-radius:var(--r-sm);background:transparent;color:var(--ink-3);font-size:var(--fs-xs);font-weight:500}
|
|
123
|
-
.show-more:hover{color:var(--accent);border-color:var(--accent-line)}
|
|
124
|
-
.loading-block{display:flex;align-items:center;gap:10px;padding:32px 8px;color:var(--ink-3)}
|
|
125
|
-
.spinner{width:14px;height:14px;border-radius:50%;border:2px solid var(--line-3);border-top-color:var(--accent);animation:spin .8s linear infinite}
|
|
126
|
-
@keyframes spin{to{transform:rotate(360deg)}}
|
|
127
|
-
|
|
128
|
-
/* Metrics */
|
|
129
|
-
.metric{display:grid;gap:4px;align-content:start;min-width:0;padding:12px 14px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface)}
|
|
130
|
-
.metric-label{color:var(--ink-3);font-size:var(--fs-xs)}
|
|
131
|
-
.metric-value{font-size:var(--fs-xl);font-weight:600;letter-spacing:-.02em;color:var(--tone,var(--ink));font-variant-numeric:tabular-nums;line-height:1.2}
|
|
132
|
-
.metric-note{color:var(--ink-4);font-size:var(--fs-2xs);line-height:1.4}
|
|
133
|
-
.metric-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px}
|
|
134
|
-
.usage{display:grid;gap:10px}
|
|
135
|
-
.usage-meta{display:flex;flex-wrap:wrap;gap:4px 16px;color:var(--ink-3);font-size:var(--fs-2xs)}
|
|
136
|
-
|
|
137
|
-
/* Forms */
|
|
138
|
-
.field{display:grid;gap:6px;min-width:0;margin:0;padding:0;border:0;font-size:var(--fs-sm)}
|
|
139
|
-
.field>span,.field>legend{color:var(--ink-2);font-size:var(--fs-xs);font-weight:500;padding:0}
|
|
140
|
-
.field-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
|
|
141
|
-
.form-actions{display:flex;gap:8px;justify-content:flex-end}
|
|
142
|
-
.inline-form{display:grid;gap:8px}
|
|
143
|
-
.inline-row{display:flex;gap:8px}
|
|
144
|
-
.inline-row input{flex:1}
|
|
145
|
-
|
|
146
|
-
/* Dialogs */
|
|
147
|
-
.dialog{width:min(560px,calc(100vw - 32px));max-height:calc(100dvh - 48px);padding:0;overflow:auto;border:1px solid var(--line-2);border-radius:var(--r-lg);background:var(--surface);color:var(--ink);box-shadow:var(--shadow-2)}
|
|
148
|
-
.dialog::backdrop{background:rgba(0,0,0,.45);backdrop-filter:blur(2px)}
|
|
149
|
-
.dialog-body{display:grid;gap:16px;padding:20px}
|
|
150
|
-
.dialog-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
|
|
151
|
-
.dialog-head h2{font-size:var(--fs-lg)}
|
|
152
|
-
.dialog-sub{margin-top:4px;color:var(--ink-3);font-size:var(--fs-xs)}
|
|
153
|
-
.dialog-actions{display:flex;gap:8px;justify-content:flex-end}
|
|
154
|
-
.settings-dialog{width:min(460px,calc(100vw - 32px))}
|
|
155
|
-
.theme-options{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
|
|
156
|
-
.theme-option{display:grid;gap:8px;padding:8px;border:1px solid var(--line-2);border-radius:var(--r-md);background:var(--surface-2);text-align:left;font-size:var(--fs-sm);font-weight:500}
|
|
157
|
-
.theme-option:hover{border-color:var(--line-3)}
|
|
158
|
-
.theme-option[aria-pressed="true"]{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}
|
|
159
|
-
.theme-swatch{display:flex;height:34px;overflow:hidden;border-radius:var(--r-sm);border:1px solid var(--line)}
|
|
160
|
-
.theme-swatch i{flex:2}
|
|
161
|
-
.theme-swatch i[data-part="2"]{flex:1}
|
|
162
|
-
.shortcut-list{display:grid;grid-template-columns:max-content 1fr;gap:6px 14px;margin:0;font-size:var(--fs-sm);color:var(--ink-2)}
|
|
163
|
-
.shortcut-list dt{display:flex;gap:3px;align-items:center}
|
|
164
|
-
.shortcut-list dd{margin:0}
|
|
165
|
-
|
|
166
|
-
/* Toast */
|
|
167
|
-
.toast{position:fixed;left:50%;bottom:24px;z-index:90;max-width:min(520px,calc(100vw - 32px));padding:10px 16px;border:1px solid var(--line-2);border-radius:var(--r-md);background:var(--surface-2);color:var(--ink);box-shadow:var(--shadow-2);font-size:var(--fs-sm);opacity:0;transform:translate(-50%,8px);pointer-events:none;transition:opacity var(--t-med),transform var(--t-med) var(--ease)}
|
|
168
|
-
.toast.show{opacity:1;transform:translate(-50%,0)}
|
|
169
|
-
`;
|
|
@@ -1,292 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* VIEWS — styling for the concrete surfaces: sidebar index, overview, task
|
|
3
|
-
* page (header, tabs, sections, records) and the session dock.
|
|
4
|
-
*/
|
|
5
|
-
export const VIEW_STYLES = `
|
|
6
|
-
/* ---------- Sidebar ---------- */
|
|
7
|
-
.brand-mark{display:grid;place-items:center;width:28px;height:28px;flex:none;border-radius:8px;background:var(--accent);color:var(--accent-ink);font-size:15px;font-weight:700;line-height:1}
|
|
8
|
-
.brand-name{font-size:var(--fs-lg);font-weight:650;letter-spacing:-.02em}
|
|
9
|
-
.sync{display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 8px;border-radius:var(--r-pill);background:var(--surface-3);color:var(--ink-3);font-size:var(--fs-2xs);font-variant-numeric:tabular-nums}
|
|
10
|
-
.sync i{width:6px;height:6px;border-radius:50%;background:var(--ink-4)}
|
|
11
|
-
.sync[data-state="ok"] i{background:var(--ok);box-shadow:0 0 0 3px var(--ok-soft)}
|
|
12
|
-
.sync[data-state="syncing"] i{background:var(--info);animation:blink 1s ease-in-out infinite}
|
|
13
|
-
.sync[data-state="error"] i{background:var(--bad);box-shadow:0 0 0 3px var(--bad-soft)}
|
|
14
|
-
.sync[data-state="error"]{color:var(--bad)}
|
|
15
|
-
@keyframes blink{50%{opacity:.35}}
|
|
16
|
-
.search-field{position:relative;display:flex;align-items:center}
|
|
17
|
-
.search-field>.icon{position:absolute;left:10px;color:var(--ink-4);pointer-events:none}
|
|
18
|
-
.search-field input{height:34px;padding:0 34px 0 32px;border-radius:var(--r-md);background:var(--surface-2)}
|
|
19
|
-
.search-field input::-webkit-search-cancel-button{display:none}
|
|
20
|
-
.search-field kbd{position:absolute;right:8px}
|
|
21
|
-
.attention-list{display:flex;flex-wrap:wrap;gap:6px}
|
|
22
|
-
.attention-pill{display:inline-flex;align-items:center;gap:6px;height:26px;padding:0 9px;border:1px solid transparent;border-radius:var(--r-pill);background:var(--tone-soft);color:var(--tone);font-size:var(--fs-xs);font-weight:500}
|
|
23
|
-
.attention-pill b{font-weight:700;font-variant-numeric:tabular-nums}
|
|
24
|
-
.attention-pill:hover{border-color:var(--tone)}
|
|
25
|
-
.attention-pill[aria-pressed="true"]{background:var(--tone);color:var(--canvas)}
|
|
26
|
-
.attention-clear{display:flex;align-items:center;gap:6px;color:var(--ink-4);font-size:var(--fs-xs)}
|
|
27
|
-
.attention-clear .icon{color:var(--ok)}
|
|
28
|
-
.tabs-row{position:relative;display:flex;gap:2px;overflow-x:auto;scrollbar-width:none;padding-bottom:2px;border-bottom:1px solid var(--line)}
|
|
29
|
-
.tabs-row[data-fade="end"]{-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 28px),transparent);mask-image:linear-gradient(90deg,#000 calc(100% - 28px),transparent)}
|
|
30
|
-
.tabs-row[data-fade="start"]{-webkit-mask-image:linear-gradient(90deg,transparent,#000 28px);mask-image:linear-gradient(90deg,transparent,#000 28px)}
|
|
31
|
-
.tabs-row[data-fade="both"]{-webkit-mask-image:linear-gradient(90deg,transparent,#000 28px,#000 calc(100% - 28px),transparent);mask-image:linear-gradient(90deg,transparent,#000 28px,#000 calc(100% - 28px),transparent)}
|
|
32
|
-
.tabs-row::-webkit-scrollbar{display:none}
|
|
33
|
-
.status-tab{position:relative;display:inline-flex;align-items:center;gap:5px;flex:none;height:32px;padding:0 8px;border:0;background:transparent;color:var(--ink-3);font-size:var(--fs-xs);font-weight:500;white-space:nowrap}
|
|
34
|
-
.status-tab:hover{color:var(--ink)}
|
|
35
|
-
.status-tab[aria-pressed="true"]{color:var(--ink)}
|
|
36
|
-
.status-tab[aria-pressed="true"]::after{content:"";position:absolute;left:6px;right:6px;bottom:-3px;height:2px;border-radius:2px;background:var(--accent)}
|
|
37
|
-
.status-tab-count{color:var(--ink-4);font-size:var(--fs-2xs);font-variant-numeric:tabular-nums}
|
|
38
|
-
.task-group{margin-top:8px}
|
|
39
|
-
.task-group-head{display:flex;align-items:center;gap:6px;padding:4px 8px 4px;color:var(--ink-4);font-size:var(--fs-2xs);font-weight:600;text-transform:uppercase;letter-spacing:.07em}
|
|
40
|
-
.task-group-head .count{background:transparent;padding:0;min-width:0}
|
|
41
|
-
.task-row{position:relative;display:flex;align-items:flex-start;gap:9px;width:100%;padding:7px 10px;border:0;border-radius:var(--r-md);background:transparent;text-align:left;transition:background var(--t-fast)}
|
|
42
|
-
.task-row>.dot{margin-top:5px}
|
|
43
|
-
.task-row:hover{background:var(--surface-3)}
|
|
44
|
-
.task-row[aria-current="true"]{background:var(--surface-3);box-shadow:inset 0 0 0 1px var(--line-2)}
|
|
45
|
-
.task-row[aria-current="true"]::before{content:"";position:absolute;left:0;top:9px;bottom:9px;width:3px;border-radius:0 3px 3px 0;background:var(--accent)}
|
|
46
|
-
.task-body{display:grid;gap:1px;flex:1;min-width:0}
|
|
47
|
-
.task-line{display:flex;align-items:center;gap:8px;min-width:0}
|
|
48
|
-
.task-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink);font-size:var(--fs-md);font-weight:500;line-height:1.35}
|
|
49
|
-
.task-time{flex:none;color:var(--ink-4);font-size:var(--fs-2xs);font-variant-numeric:tabular-nums}
|
|
50
|
-
.task-sub{gap:8px;height:18px;color:var(--ink-4);font-size:var(--fs-2xs)}
|
|
51
|
-
.task-id{font-size:var(--fs-2xs);line-height:1;color:var(--ink-3)}
|
|
52
|
-
.task-count{display:inline-flex;align-items:center;gap:3px;line-height:1;white-space:nowrap}
|
|
53
|
-
.task-count .icon{width:11px;height:11px}
|
|
54
|
-
.task-signals{display:inline-flex;gap:4px;margin-left:auto}
|
|
55
|
-
.signal{display:inline-flex;align-items:center;gap:3px;height:18px;padding:0 6px;border-radius:var(--r-pill);background:var(--tone-soft);color:var(--tone);font-size:10.5px;font-weight:600;font-variant-numeric:tabular-nums}
|
|
56
|
-
.signal .icon{width:11px;height:11px;stroke-width:2}
|
|
57
|
-
.list-empty{display:grid;justify-items:center;gap:8px;padding:36px 16px;color:var(--ink-4);font-size:var(--fs-sm);text-align:center}
|
|
58
|
-
.list-empty.is-error{color:var(--bad)}
|
|
59
|
-
.pager-btn{height:28px;padding:0 10px;border:1px solid var(--line-2);border-radius:var(--r-sm);background:transparent;color:var(--ink-2);font-size:var(--fs-xs)}
|
|
60
|
-
.pager-btn:hover:not(:disabled){border-color:var(--line-3);color:var(--ink)}
|
|
61
|
-
.pager-btn:disabled{opacity:.4}
|
|
62
|
-
.pager-count{grid-column:2;text-align:center;color:var(--ink-4);font-size:var(--fs-2xs);font-variant-numeric:tabular-nums}
|
|
63
|
-
.pager-clear{height:28px;border:1px dashed var(--line-3);border-radius:var(--r-sm);background:transparent;color:var(--ink-3);font-size:var(--fs-xs)}
|
|
64
|
-
.pager-clear:hover{color:var(--accent);border-color:var(--accent-line)}
|
|
65
|
-
.foot-btn{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 8px;border:1px solid var(--line-2);border-radius:var(--r-sm);background:transparent;color:var(--ink-2);font-size:var(--fs-xs);font-weight:500;min-width:0}
|
|
66
|
-
.foot-btn span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
|
67
|
-
.foot-btn:hover{color:var(--ink);border-color:var(--line-3);background:var(--surface-3)}
|
|
68
|
-
.foot-btn[aria-pressed="true"]{color:var(--accent);border-color:var(--accent-line);background:var(--accent-soft)}
|
|
69
|
-
.foot-btn kbd{margin-left:2px}
|
|
70
|
-
.side-foot .icon-btn{margin-left:auto}
|
|
71
|
-
|
|
72
|
-
/* ---------- Page scaffolding ---------- */
|
|
73
|
-
.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;padding:36px 0 24px}
|
|
74
|
-
.kicker{color:var(--accent);font-size:var(--fs-2xs);font-weight:600;text-transform:uppercase;letter-spacing:.1em}
|
|
75
|
-
.page-title{margin-top:6px;font-size:var(--fs-2xl);font-weight:650;letter-spacing:-.025em}
|
|
76
|
-
.page-sub{margin-top:4px;color:var(--ink-3)}
|
|
77
|
-
.page-foot{margin-top:20px;color:var(--ink-4);font-size:var(--fs-xs);text-align:center}
|
|
78
|
-
.section{margin-top:28px;min-width:0}
|
|
79
|
-
.section-title{display:flex;align-items:center;gap:10px;margin-bottom:12px}
|
|
80
|
-
.section-title h2{display:flex;align-items:center;gap:8px;font-size:var(--fs-lg);font-weight:600}
|
|
81
|
-
.section-actions{margin-left:auto}
|
|
82
|
-
.sub-head{display:flex;align-items:center;gap:8px;margin-top:6px;font-size:var(--fs-sm);font-weight:600}
|
|
83
|
-
|
|
84
|
-
/* ---------- Overview ---------- */
|
|
85
|
-
.metric-strip{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;margin-bottom:14px}
|
|
86
|
-
.metric-strip .metric{padding:14px 16px;border-radius:var(--r-lg)}
|
|
87
|
-
.metric-strip .metric-value{font-size:var(--fs-2xl)}
|
|
88
|
-
.overview-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(300px,380px);gap:14px;align-items:start}
|
|
89
|
-
.overview-col{display:flex;flex-direction:column;gap:14px;min-width:0}
|
|
90
|
-
.overview>.card{margin-bottom:14px}
|
|
91
|
-
.row-list{display:grid;gap:2px;margin:-4px -8px}
|
|
92
|
-
.list-row{display:flex;align-items:center;gap:10px;width:100%;min-height:38px;padding:7px 8px;border:0;border-radius:var(--r-sm);background:transparent;color:var(--ink);text-align:left;font-size:var(--fs-sm)}
|
|
93
|
-
.list-row:hover:not(:disabled){background:var(--surface-3)}
|
|
94
|
-
.list-row:disabled{opacity:.45;cursor:default}
|
|
95
|
-
.list-row[aria-pressed="true"]{background:var(--accent-soft)}
|
|
96
|
-
.list-row-title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
|
97
|
-
.list-row-count{font-weight:600;font-variant-numeric:tabular-nums}
|
|
98
|
-
.list-row-go{display:inline-flex;align-items:center;gap:2px;color:var(--accent);font-size:var(--fs-xs);font-weight:500}
|
|
99
|
-
.list-row-wrap{flex-wrap:wrap}
|
|
100
|
-
.list-row-wrap .chip-row{flex-basis:100%}
|
|
101
|
-
|
|
102
|
-
/* ---------- Task page ---------- */
|
|
103
|
-
.task-header{position:sticky;top:0;z-index:10;margin:0 calc(-1 * clamp(16px,3vw,40px));padding:0 clamp(16px,3vw,40px);background:color-mix(in srgb,var(--canvas) 88%,transparent);backdrop-filter:saturate(1.4) blur(10px);-webkit-backdrop-filter:saturate(1.4) blur(10px)}
|
|
104
|
-
.task-bar{display:flex;align-items:center;gap:6px;height:var(--header-h)}
|
|
105
|
-
.back-btn{display:none}
|
|
106
|
-
.crumbs{display:flex;align-items:center;gap:6px;min-width:0;font-size:var(--fs-sm)}
|
|
107
|
-
.crumb{padding:3px 6px;border:0;border-radius:var(--r-xs);background:transparent;color:var(--ink-3)}
|
|
108
|
-
.crumb:hover{color:var(--ink);background:var(--surface-3)}
|
|
109
|
-
.crumb-sep{color:var(--ink-4)}
|
|
110
|
-
.crumb-current{color:var(--ink-2);font-size:var(--fs-xs)}
|
|
111
|
-
.dock-toggle{height:30px}
|
|
112
|
-
.task-hero{padding:14px 0 18px}
|
|
113
|
-
.task-title{font-size:var(--fs-2xl);font-weight:650;letter-spacing:-.025em;line-height:1.25;overflow-wrap:anywhere}
|
|
114
|
-
.task-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:12px;color:var(--ink-3);font-size:var(--fs-xs)}
|
|
115
|
-
.task-meta:empty{display:none}
|
|
116
|
-
.meta-item{display:inline-flex;align-items:center;gap:5px}
|
|
117
|
-
.meta-item .when{font-size:inherit}
|
|
118
|
-
.tabs-wrap{position:sticky;top:var(--header-h);z-index:9;margin:0 calc(-1 * clamp(16px,3vw,40px));padding:0 clamp(16px,3vw,40px);background:color-mix(in srgb,var(--canvas) 88%,transparent);backdrop-filter:saturate(1.4) blur(10px);-webkit-backdrop-filter:saturate(1.4) blur(10px);border-bottom:1px solid var(--line)}
|
|
119
|
-
.tabs{display:flex;gap:4px;overflow-x:auto;scrollbar-width:none}
|
|
120
|
-
.tabs::-webkit-scrollbar{display:none}
|
|
121
|
-
.tab{position:relative;display:inline-flex;align-items:center;gap:7px;flex:none;height:42px;padding:0 10px;border:0;background:transparent;color:var(--ink-3);font-size:var(--fs-sm);font-weight:500}
|
|
122
|
-
.tab:hover{color:var(--ink)}
|
|
123
|
-
.tab[aria-selected="true"]{color:var(--ink)}
|
|
124
|
-
.tab[aria-selected="true"]::after{content:"";position:absolute;left:8px;right:8px;bottom:-1px;height:2px;border-radius:2px;background:var(--accent)}
|
|
125
|
-
.tab .icon{color:var(--ink-4)}
|
|
126
|
-
.tab[aria-selected="true"] .icon{color:var(--accent)}
|
|
127
|
-
.tab:focus-visible{box-shadow:inset var(--focus)}
|
|
128
|
-
.tab-panel{padding-top:20px;min-width:0}
|
|
129
|
-
.tab-panel>.card{margin-bottom:14px}
|
|
130
|
-
.tab-panel>.section:first-child{margin-top:4px}
|
|
131
|
-
|
|
132
|
-
/* Now card */
|
|
133
|
-
.now-card{border-color:var(--line-2);background:linear-gradient(180deg,var(--surface-2),var(--surface))}
|
|
134
|
-
.now-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
|
|
135
|
-
.now-owner{color:var(--ink-2);font-size:var(--fs-sm);font-weight:500}
|
|
136
|
-
.now-summary{margin-top:10px;font-size:var(--fs-lg);line-height:1.45;color:var(--ink)}
|
|
137
|
-
.now-reason{margin-top:4px;color:var(--ink-3);font-size:var(--fs-sm)}
|
|
138
|
-
.now-note{margin-top:8px;color:var(--ink-3);font-size:var(--fs-sm)}
|
|
139
|
-
.signal-list{list-style:none;display:grid;gap:6px;margin:12px 0 0;padding:0}
|
|
140
|
-
.signal-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;padding:8px 10px;border-radius:var(--r-sm);background:var(--tone-soft);font-size:var(--fs-sm)}
|
|
141
|
-
.signal-row>.icon{align-self:center;color:var(--tone)}
|
|
142
|
-
.signal-kind{color:var(--tone);font-weight:600}
|
|
143
|
-
.next-line{display:flex;flex-wrap:wrap;align-items:center;gap:4px;color:var(--ink-3);font-size:var(--fs-xs)}
|
|
144
|
-
.next-line:empty{display:none}
|
|
145
|
-
.next-line .icon{color:var(--accent)}
|
|
146
|
-
.next-line strong{color:var(--ink)}
|
|
147
|
-
|
|
148
|
-
/* Needs you / input requests */
|
|
149
|
-
.needs-card{border-color:var(--warn);box-shadow:0 0 0 3px var(--warn-soft)}
|
|
150
|
-
.needs-card .card-title .icon{color:var(--warn)}
|
|
151
|
-
.input-card{display:grid;gap:10px;padding:14px;border:1px solid var(--line-2);border-radius:var(--r-md);background:var(--surface-2)}
|
|
152
|
-
.input-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px;color:var(--ink-3);font-size:var(--fs-xs)}
|
|
153
|
-
.input-kicker{display:inline-flex;align-items:center;gap:5px;color:var(--warn);font-weight:600;text-transform:uppercase;letter-spacing:.06em;font-size:var(--fs-2xs)}
|
|
154
|
-
.input-timeout{display:inline-flex;align-items:center;gap:4px}
|
|
155
|
-
.input-head .when{margin-left:auto}
|
|
156
|
-
.input-question{font-size:var(--fs-lg);font-weight:500;line-height:1.45;white-space:pre-wrap;overflow-wrap:anywhere}
|
|
157
|
-
.input-facts{color:var(--ink-3);font-size:var(--fs-xs);overflow-wrap:anywhere}
|
|
158
|
-
.input-choices{display:flex;flex-wrap:wrap;gap:8px}
|
|
159
|
-
.choice{display:inline-flex;align-items:center;gap:8px;min-height:36px;padding:6px 14px;border:1px solid var(--line-3);border-radius:var(--r-md);background:var(--surface);color:var(--ink);font-weight:500;text-align:left}
|
|
160
|
-
.choice:hover:not(:disabled){border-color:var(--accent);background:var(--accent-soft)}
|
|
161
|
-
.choice.is-recommended{border-color:var(--accent-line)}
|
|
162
|
-
.choice:disabled{opacity:.5}
|
|
163
|
-
.input-form{display:flex;gap:8px}
|
|
164
|
-
.input-form input{flex:1}
|
|
165
|
-
|
|
166
|
-
/* Decisions, sessions, planning */
|
|
167
|
-
.decision{display:grid;gap:4px;padding-top:10px;border-top:1px solid var(--line)}
|
|
168
|
-
.decision:first-child{padding-top:0;border-top:0}
|
|
169
|
-
.decision-head{display:flex;align-items:center;gap:8px;font-size:var(--fs-sm)}
|
|
170
|
-
.decision-head strong{flex:1;min-width:0;font-weight:600}
|
|
171
|
-
.session-list{list-style:none;display:grid;gap:8px;margin:0;padding:0}
|
|
172
|
-
.session-row{display:grid;gap:3px;padding:9px 11px;border-radius:var(--r-sm);background:var(--surface-2);border:1px solid var(--line)}
|
|
173
|
-
.session-row-head{display:flex;align-items:center;gap:8px;font-size:var(--fs-sm)}
|
|
174
|
-
.session-row p{color:var(--ink-2)}
|
|
175
|
-
.planning-card .kv{font-size:var(--fs-xs)}
|
|
176
|
-
|
|
177
|
-
/* Work items */
|
|
178
|
-
.work-card{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface);box-shadow:var(--shadow-1);min-width:0}
|
|
179
|
-
.work-head{display:flex;align-items:center;gap:10px;padding:13px 16px;list-style:none}
|
|
180
|
-
summary.work-head{cursor:pointer}
|
|
181
|
-
summary.work-head::-webkit-details-marker{display:none}
|
|
182
|
-
.work-title{flex:1;min-width:0;font-weight:600;font-size:var(--fs-md);overflow-wrap:anywhere}
|
|
183
|
-
.work-body{display:grid;gap:12px;padding:0 16px 16px 34px}
|
|
184
|
-
.work-card.is-settled .work-title{color:var(--ink-2);font-weight:500}
|
|
185
|
-
.meta-line{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;color:var(--ink-3);font-size:var(--fs-xs)}
|
|
186
|
-
.meta-strong{display:inline-flex;align-items:center;gap:4px;color:var(--ink-2);font-weight:500}
|
|
187
|
-
.meta-label{color:var(--ink-4)}
|
|
188
|
-
.candidates{margin:0;padding:0;list-style:none;display:grid;gap:4px;font-size:var(--fs-xs)}
|
|
189
|
-
.candidates li{display:flex;flex-wrap:wrap;gap:8px;align-items:baseline}
|
|
190
|
-
.candidate-seq{font-family:var(--font-mono);color:var(--accent)}
|
|
191
|
-
|
|
192
|
-
/* Records, runs, roles */
|
|
193
|
-
.record,.run-card,.review-card{display:grid;gap:8px;min-width:0;padding:12px 14px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface)}
|
|
194
|
-
.record.is-compact{padding:9px 12px;background:var(--surface-2)}
|
|
195
|
-
.record-head,.run-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0;font-size:var(--fs-sm)}
|
|
196
|
-
.record-store{color:var(--ink-3);font-size:var(--fs-2xs);font-weight:600;text-transform:uppercase;letter-spacing:.06em}
|
|
197
|
-
.record-actions{display:flex;gap:8px}
|
|
198
|
-
.run-card[data-status="failed"]{border-color:color-mix(in srgb,var(--bad) 35%,var(--line))}
|
|
199
|
-
.run-role{font-weight:600}
|
|
200
|
-
.role-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}
|
|
201
|
-
.role-card{display:grid;gap:10px;align-content:start;min-width:0;padding:14px;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface);box-shadow:var(--shadow-1)}
|
|
202
|
-
.role-head{display:flex;align-items:center;gap:10px}
|
|
203
|
-
.role-title{display:grid;flex:1;min-width:0;line-height:1.3}
|
|
204
|
-
.role-title .faint{font-size:var(--fs-xs)}
|
|
205
|
-
.avatar{display:grid;place-items:center;width:32px;height:32px;flex:none;border-radius:9px;background:var(--surface-3);color:var(--ink-2);font-weight:650;font-size:var(--fs-sm)}
|
|
206
|
-
.role-card .kv{font-size:var(--fs-xs)}
|
|
207
|
-
.role-actions{display:flex;justify-content:flex-end;margin:-4px -6px -6px}
|
|
208
|
-
|
|
209
|
-
/* History timeline */
|
|
210
|
-
.timeline{list-style:none;margin:0;padding:0;position:relative;display:grid;gap:0}
|
|
211
|
-
.timeline::before{content:"";position:absolute;left:13px;top:6px;bottom:6px;width:1px;background:var(--line-2)}
|
|
212
|
-
.timeline-item{position:relative;display:grid;grid-template-columns:28px minmax(0,1fr);gap:12px;padding:0 0 18px}
|
|
213
|
-
.timeline-mark{position:relative;z-index:1;display:grid;place-items:center;width:28px;height:28px;border-radius:50%;background:var(--surface-2);border:1px solid var(--line-2);color:var(--ink-3)}
|
|
214
|
-
.kind-decision .timeline-mark{color:var(--ok);border-color:var(--ok-soft);background:var(--ok-soft)}
|
|
215
|
-
.kind-milestone .timeline-mark{color:var(--accent);border-color:var(--accent-soft);background:var(--accent-soft)}
|
|
216
|
-
.timeline-body{display:grid;gap:6px;min-width:0;padding-top:3px}
|
|
217
|
-
.timeline-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px;font-size:var(--fs-sm)}
|
|
218
|
-
.timeline-empty{list-style:none}
|
|
219
|
-
.timeline .show-more{margin-left:40px}
|
|
220
|
-
|
|
221
|
-
/* Evidence */
|
|
222
|
-
.file-list{display:grid;gap:2px}
|
|
223
|
-
.file-list:empty{display:none}
|
|
224
|
-
.file-row{display:flex;align-items:center;gap:8px;min-height:32px;padding:5px 8px;border:0;border-radius:var(--r-sm);background:transparent;text-align:left;font-size:var(--fs-sm);color:var(--ink-2)}
|
|
225
|
-
.file-row:hover{background:var(--surface-3);color:var(--ink)}
|
|
226
|
-
.file-row[aria-current="true"]{background:var(--accent-soft);color:var(--ink)}
|
|
227
|
-
.file-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--font-mono);font-size:var(--fs-xs)}
|
|
228
|
-
.file-viewer{display:grid;gap:8px}
|
|
229
|
-
.file-viewer:empty{display:none}
|
|
230
|
-
.viewer-head{display:flex;align-items:center;gap:8px;font-size:var(--fs-sm)}
|
|
231
|
-
.viewer-ref code{white-space:normal;overflow-wrap:anywhere}
|
|
232
|
-
.artifact-text{max-height:480px;color:var(--ink)}
|
|
233
|
-
|
|
234
|
-
/* ---------- Dock ---------- */
|
|
235
|
-
.dock-sub{flex:none;display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 10px;padding:12px 16px 10px;border-bottom:1px solid var(--line)}
|
|
236
|
-
.dock-sub-title{font-weight:600;font-size:var(--fs-sm)}
|
|
237
|
-
.dock-sub-note{color:var(--ink-4);font-size:var(--fs-2xs)}
|
|
238
|
-
.feed{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:14px;padding:16px;scrollbar-gutter:stable}
|
|
239
|
-
.feed:focus-visible{box-shadow:inset var(--focus)}
|
|
240
|
-
.feed>.empty{margin:auto 0}
|
|
241
|
-
.feed-note{color:var(--ink-4);font-size:var(--fs-2xs);text-align:center}
|
|
242
|
-
.feed-day{display:flex;align-items:center;gap:10px;color:var(--ink-4);font-size:var(--fs-2xs);font-weight:500}
|
|
243
|
-
.feed-day::before,.feed-day::after{content:"";flex:1;height:1px;background:var(--line)}
|
|
244
|
-
.msg{display:flex;gap:10px;max-width:100%;min-width:0}
|
|
245
|
-
.msg-avatar{display:grid;place-items:center;width:28px;height:28px;flex:none;border-radius:8px;background:var(--surface-3);color:var(--ink-2);font-size:var(--fs-xs);font-weight:650}
|
|
246
|
-
.msg-main{display:grid;gap:5px;min-width:0;flex:1}
|
|
247
|
-
.msg-head{display:flex;flex-wrap:wrap;align-items:center;gap:6px;font-size:var(--fs-xs)}
|
|
248
|
-
.msg-head strong{font-weight:600}
|
|
249
|
-
.msg-head time{margin-left:auto;color:var(--ink-4);font-size:var(--fs-2xs)}
|
|
250
|
-
.msg-bubble{padding:10px 12px;border-radius:4px var(--r-lg) var(--r-lg) var(--r-lg);background:var(--surface-2);border:1px solid var(--line);min-width:0;overflow-wrap:anywhere}
|
|
251
|
-
.msg.from-user{flex-direction:row-reverse}
|
|
252
|
-
.msg.from-user .msg-head{flex-direction:row-reverse}
|
|
253
|
-
.msg.from-user .msg-head time{margin-left:0;margin-right:auto}
|
|
254
|
-
.msg.from-user .msg-avatar{background:var(--accent);color:var(--accent-ink)}
|
|
255
|
-
.msg.from-user .msg-bubble{border-radius:var(--r-lg) 4px var(--r-lg) var(--r-lg);background:var(--accent-soft);border-color:var(--accent-line)}
|
|
256
|
-
.msg.from-system .msg-bubble{background:transparent;border-style:dashed}
|
|
257
|
-
.composer-wrap{flex:none;padding:10px 12px 12px;border-top:1px solid var(--line);background:var(--surface)}
|
|
258
|
-
.composer{display:grid;gap:6px}
|
|
259
|
-
.composer-box{border:1px solid var(--line-2);border-radius:var(--r-lg);background:var(--sunken);transition:border-color var(--t-fast),box-shadow var(--t-fast)}
|
|
260
|
-
.composer-box:focus-within{border-color:var(--accent-line);box-shadow:0 0 0 3px var(--accent-soft)}
|
|
261
|
-
.composer-input{display:block;min-height:64px;max-height:240px;padding:10px 12px 4px;border:0;background:transparent;resize:none}
|
|
262
|
-
.composer-input:focus,.composer-input:hover{border:0;box-shadow:none;background:transparent}
|
|
263
|
-
.composer-bar{display:flex;align-items:center;gap:8px;padding:6px 6px 6px 8px}
|
|
264
|
-
.composer-send{height:30px}
|
|
265
|
-
.facets:empty{display:none}
|
|
266
|
-
.facets{display:grid;gap:6px;padding:8px 10px;border-radius:var(--r-sm);background:var(--surface-2)}
|
|
267
|
-
.next-step{display:flex;gap:6px;align-items:flex-start;font-size:var(--fs-xs);color:var(--ink-2)}
|
|
268
|
-
.next-step .icon{margin-top:2px;color:var(--accent)}
|
|
269
|
-
|
|
270
|
-
/* Live session (always dark: it renders a native terminal) */
|
|
271
|
-
.dock-session{color:#e6e6e8}
|
|
272
|
-
.target-chip{display:inline-flex;align-items:center;gap:6px;flex:none;height:26px;padding:0 10px;border:1px solid rgba(255,255,255,.12);border-radius:var(--r-pill);background:transparent;color:rgba(255,255,255,.72);font-size:var(--fs-xs);font-weight:500}
|
|
273
|
-
.target-chip:hover{color:#fff;border-color:rgba(255,255,255,.3)}
|
|
274
|
-
.target-chip[aria-pressed="true"]{background:rgba(255,255,255,.12);border-color:rgba(255,255,255,.3);color:#fff}
|
|
275
|
-
.target-chip .dot{width:7px;height:7px;box-shadow:none}
|
|
276
|
-
.dock-session .faint{color:rgba(255,255,255,.4)}
|
|
277
|
-
.conn{display:inline-flex;align-items:center;gap:6px;flex:none;color:rgba(255,255,255,.6);font-size:var(--fs-xs);font-weight:500}
|
|
278
|
-
.conn i{width:7px;height:7px;border-radius:50%;background:rgba(255,255,255,.3)}
|
|
279
|
-
.conn[data-state="connecting"] i{background:var(--warn);animation:blink 1s infinite}
|
|
280
|
-
.conn[data-state="writable"] i{background:#4fd18b;box-shadow:0 0 0 3px rgba(79,209,139,.2)}
|
|
281
|
-
.conn[data-state="readonly"] i{background:#6cb6ff}
|
|
282
|
-
.conn[data-state="error"] i{background:#ff6b7a}
|
|
283
|
-
.conn[data-state="error"]{color:#ff9aa5}
|
|
284
|
-
.terminal-empty{color:rgba(255,255,255,.55)}
|
|
285
|
-
.terminal-empty .icon{color:rgba(255,255,255,.35)}
|
|
286
|
-
.terminal-empty-title{color:#fff;font-weight:600}
|
|
287
|
-
.terminal-empty-text{max-width:300px;font-size:var(--fs-xs);line-height:1.5}
|
|
288
|
-
.session-foot{color:rgba(255,255,255,.45);font-size:var(--fs-2xs)}
|
|
289
|
-
.session-foot code{color:rgba(255,255,255,.8);user-select:all}
|
|
290
|
-
.terminal-host .xterm{height:100%}
|
|
291
|
-
.terminal-host .xterm-viewport{background:transparent!important}
|
|
292
|
-
`;
|