5342 lines
129 KiB
CSS
5342 lines
129 KiB
CSS
/* ══════════════════════════════════════════════════════════════════════════
|
|
Chat UI — Clean Modern Design
|
|
══════════════════════════════════════════════════════════════════════════ */
|
|
|
|
/* ── Layout ───────────────────────────────────────────────────────────── */
|
|
.chat-fullpage {
|
|
display: flex;
|
|
flex: 1;
|
|
min-height: 0;
|
|
overflow: hidden;
|
|
background: var(--bg);
|
|
}
|
|
|
|
.chat-page {
|
|
display: flex;
|
|
width: 100%;
|
|
height: 100%;
|
|
min-height: 0;
|
|
}
|
|
|
|
/* ══════════════════════════════════════════════════════════════════════════
|
|
Sidebar
|
|
══════════════════════════════════════════════════════════════════════════ */
|
|
.session-sidebar {
|
|
width: 272px;
|
|
min-width: 240px;
|
|
border-right: 1px solid var(--border);
|
|
background: var(--bg);
|
|
display: flex;
|
|
flex-direction: column;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.session-new-btn {
|
|
margin: 14px 14px 6px;
|
|
padding: 9px 14px;
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius-sm);
|
|
background: transparent;
|
|
color: var(--text);
|
|
font-size: 13px;
|
|
font-weight: 500;
|
|
font-family: inherit;
|
|
cursor: pointer;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
transition: all 150ms;
|
|
}
|
|
|
|
.session-new-btn:hover {
|
|
background: var(--surface-hover);
|
|
border-color: var(--border-hover);
|
|
}
|
|
|
|
/* ── Nav buttons (Secretary, Activity) ────────────────────────────────── */
|
|
.session-nav-btn {
|
|
margin: 2px 14px;
|
|
padding: 8px 12px;
|
|
border: none;
|
|
border-radius: var(--radius-xs);
|
|
background: transparent;
|
|
color: var(--text-secondary);
|
|
font-size: 12px;
|
|
font-weight: 500;
|
|
font-family: inherit;
|
|
cursor: pointer;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
transition: all 120ms;
|
|
text-align: left;
|
|
}
|
|
|
|
.session-nav-btn:hover { background: var(--surface-hover); color: var(--text); }
|
|
.session-nav-btn.active {
|
|
background: var(--accent-soft);
|
|
color: var(--accent);
|
|
border-left: 2px solid var(--accent);
|
|
padding-left: 10px;
|
|
}
|
|
|
|
.session-activity-btn {
|
|
margin-top: auto;
|
|
margin-bottom: 10px;
|
|
}
|
|
|
|
/* ── Search ───────────────────────────────────────────────────────────── */
|
|
.session-search-wrap {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
margin: 6px 14px 8px;
|
|
padding: 6px 10px;
|
|
border-radius: var(--radius-xs);
|
|
background: var(--surface);
|
|
border: 1px solid transparent;
|
|
color: var(--text-secondary);
|
|
transition: border-color 150ms;
|
|
}
|
|
|
|
.session-search-wrap:focus-within {
|
|
border-color: var(--accent);
|
|
}
|
|
|
|
.session-search {
|
|
flex: 1;
|
|
border: none;
|
|
background: transparent;
|
|
color: var(--text);
|
|
font-size: 12px;
|
|
font-family: inherit;
|
|
outline: none;
|
|
}
|
|
|
|
.session-search::placeholder { color: var(--text-secondary); }
|
|
|
|
/* ── List & Groups ────────────────────────────────────────────────────── */
|
|
.session-list {
|
|
flex: 1;
|
|
overflow-y: auto;
|
|
padding: 0 0 4px;
|
|
scrollbar-width: thin;
|
|
scrollbar-color: var(--border) transparent;
|
|
}
|
|
|
|
.session-list-virtualized {
|
|
position: relative;
|
|
contain: strict;
|
|
}
|
|
|
|
.session-group { margin-bottom: 2px; }
|
|
|
|
.session-group-label {
|
|
padding: 10px 16px 4px;
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
color: var(--text-secondary);
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.08em;
|
|
}
|
|
|
|
/* ── Session tree ─────────────────────────────────────────────────────── */
|
|
.session-tree-node { position: relative; }
|
|
.session-tree-primary { display: flex; align-items: stretch; }
|
|
|
|
.session-expand-btn {
|
|
width: 20px;
|
|
flex-shrink: 0;
|
|
border: none;
|
|
background: transparent;
|
|
cursor: pointer;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
padding: 0;
|
|
margin-left: 4px;
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
.session-expand-btn::before {
|
|
content: '';
|
|
display: block;
|
|
width: 0; height: 0;
|
|
border-left: 4px solid currentColor;
|
|
border-top: 3px solid transparent;
|
|
border-bottom: 3px solid transparent;
|
|
transition: transform 150ms;
|
|
transform: rotate(90deg);
|
|
}
|
|
|
|
.session-expand-btn.collapsed::before { transform: rotate(0deg); }
|
|
.session-expand-btn:hover { color: var(--accent); }
|
|
|
|
.session-children {
|
|
position: relative;
|
|
margin-left: 12px;
|
|
padding-left: 8px;
|
|
border-left: 1px solid var(--border);
|
|
}
|
|
|
|
.session-child-count {
|
|
border: none;
|
|
background: transparent;
|
|
color: var(--text-secondary);
|
|
font-size: 10px;
|
|
font-weight: 500;
|
|
font-family: inherit;
|
|
cursor: pointer;
|
|
padding: 2px 16px 2px 36px;
|
|
text-align: left;
|
|
}
|
|
|
|
.session-child-count:hover { color: var(--accent); }
|
|
|
|
.session-unread-badge {
|
|
flex-shrink: 0;
|
|
min-width: 18px;
|
|
height: 18px;
|
|
padding: 0 5px;
|
|
border-radius: 9px;
|
|
background: var(--accent);
|
|
color: #fff;
|
|
font-size: 10px;
|
|
font-weight: 700;
|
|
line-height: 18px;
|
|
text-align: center;
|
|
}
|
|
|
|
/* ── Session item ─────────────────────────────────────────────────────── */
|
|
.session-item {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
width: 100%;
|
|
padding: 8px 14px;
|
|
border: none;
|
|
border-radius: var(--radius-xs);
|
|
margin: 1px 8px;
|
|
width: calc(100% - 16px);
|
|
background: transparent;
|
|
color: var(--text);
|
|
font-size: 13px;
|
|
font-family: inherit;
|
|
cursor: pointer;
|
|
text-align: left;
|
|
position: relative;
|
|
transition: background 120ms, border-color 120ms;
|
|
border-left: 2px solid transparent;
|
|
}
|
|
|
|
.session-item:hover { background: var(--surface-hover); }
|
|
.session-item.active {
|
|
background: var(--accent-soft);
|
|
border-left-color: var(--accent);
|
|
}
|
|
|
|
.session-item.session-item-child {
|
|
padding: 5px 12px 5px 6px;
|
|
border-left: none;
|
|
font-size: 12px;
|
|
position: relative;
|
|
margin: 0;
|
|
width: 100%;
|
|
}
|
|
|
|
.session-tree-line {
|
|
position: absolute;
|
|
left: -8px;
|
|
top: 0;
|
|
bottom: 50%;
|
|
width: 8px;
|
|
border-left: 1px solid var(--border);
|
|
border-bottom: 1px solid var(--border);
|
|
border-bottom-left-radius: 4px;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.session-tree-line.last { bottom: 50%; }
|
|
|
|
.session-agent-tag {
|
|
display: inline-block;
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
padding: 0 5px;
|
|
border-radius: 3px;
|
|
background: var(--accent-soft);
|
|
color: var(--accent);
|
|
margin-right: 4px;
|
|
}
|
|
|
|
.session-runtime-badge {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
color: var(--accent);
|
|
margin-right: 4px;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.session-runtime-badge svg {
|
|
width: 12px;
|
|
height: 12px;
|
|
}
|
|
|
|
.session-dot {
|
|
width: 7px;
|
|
height: 7px;
|
|
border-radius: 50%;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.session-dot.status-running { background: var(--green); opacity: 0.35; }
|
|
.session-dot.status-running-idle { background: var(--green); opacity: 0.35; }
|
|
.session-dot.status-tool-active {
|
|
background: var(--green);
|
|
box-shadow: 0 0 4px color-mix(in srgb, var(--green) 55%, transparent);
|
|
}
|
|
.session-dot.status-reflecting {
|
|
background: var(--yellow);
|
|
box-shadow: 0 0 4px color-mix(in srgb, var(--yellow) 55%, transparent);
|
|
}
|
|
.session-dot.status-idle { background: var(--accent); opacity: 0.7; }
|
|
.session-dot.status-done { background: var(--green); }
|
|
.session-dot.status-pending { background: var(--text-secondary); opacity: 0.4; }
|
|
.session-dot.status-failed { background: var(--red); }
|
|
.session-dot.status-cancelled { background: var(--text-secondary); opacity: 0.3; }
|
|
.session-dot.status-blocked { background: var(--yellow); }
|
|
|
|
@keyframes pulse-dot {
|
|
0%, 100% { opacity: 1; transform: scale(1); }
|
|
50% { opacity: 0.4; transform: scale(0.7); }
|
|
}
|
|
|
|
.session-item-content {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 1px;
|
|
min-width: 0;
|
|
flex: 1;
|
|
}
|
|
|
|
.session-item-title {
|
|
font-size: 13px;
|
|
font-weight: 500;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
line-height: 1.3;
|
|
}
|
|
|
|
.session-item-meta {
|
|
font-size: 11px;
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
.session-delete-btn {
|
|
position: absolute;
|
|
right: 6px;
|
|
top: 50%;
|
|
transform: translateY(-50%);
|
|
border: none;
|
|
background: transparent;
|
|
color: var(--text-secondary);
|
|
cursor: pointer;
|
|
padding: 4px;
|
|
border-radius: 4px;
|
|
display: flex;
|
|
align-items: center;
|
|
transition: all 120ms;
|
|
}
|
|
|
|
.session-delete-btn:hover { color: var(--red); background: rgba(248, 113, 113, 0.1); }
|
|
|
|
.session-empty {
|
|
padding: 32px 16px;
|
|
text-align: center;
|
|
color: var(--text-secondary);
|
|
font-size: 12px;
|
|
}
|
|
|
|
/* ══════════════════════════════════════════════════════════════════════════
|
|
Task Header Bar
|
|
══════════════════════════════════════════════════════════════════════════ */
|
|
.task-header-shell {
|
|
display: flex;
|
|
flex-direction: column;
|
|
border-bottom: 1px solid var(--border);
|
|
background: var(--bg);
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.task-header-bar {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 10px 20px;
|
|
gap: 12px;
|
|
min-height: 48px;
|
|
/* Defensive: contain children so a too-wide pill row can't paint over
|
|
the right-side action cluster when the panel is dragged narrow. */
|
|
min-width: 0;
|
|
}
|
|
|
|
.task-header-left {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
min-width: 0;
|
|
flex: 1 1 auto;
|
|
/* Allow the pill row to flow onto a second line in a narrow panel
|
|
instead of overflowing under the action buttons. */
|
|
flex-wrap: wrap;
|
|
row-gap: 6px;
|
|
}
|
|
|
|
.task-title {
|
|
font-size: 14px;
|
|
font-weight: 600;
|
|
color: var(--text);
|
|
cursor: pointer;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
transition: color 120ms;
|
|
/* Title may shrink first to leave room for the status pill / actions,
|
|
but never below something legible. */
|
|
min-width: 0;
|
|
max-width: 100%;
|
|
flex: 1 1 auto;
|
|
}
|
|
|
|
.task-title:hover { color: var(--accent); }
|
|
|
|
.task-title-input {
|
|
font-size: 14px;
|
|
font-weight: 600;
|
|
color: var(--text);
|
|
background: var(--surface);
|
|
border: 1px solid var(--accent);
|
|
border-radius: var(--radius-xs);
|
|
padding: 2px 8px;
|
|
font-family: inherit;
|
|
outline: none;
|
|
width: 100%;
|
|
max-width: 400px;
|
|
}
|
|
|
|
.task-status-pill {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 5px;
|
|
padding: 3px 10px;
|
|
border-radius: 999px;
|
|
background: var(--surface);
|
|
font-size: 11px;
|
|
font-weight: 500;
|
|
color: var(--text-secondary);
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.task-status-pill[data-status="running"] { color: var(--green); }
|
|
.task-status-pill[data-status="idle"] { color: var(--accent); }
|
|
.task-status-pill[data-status="failed"] { color: var(--red); }
|
|
.task-status-pill[data-status="blocked"] { color: var(--yellow); }
|
|
|
|
.task-status-dot {
|
|
width: 6px;
|
|
height: 6px;
|
|
border-radius: 50%;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.task-status-pill[data-working="true"] .task-status-dot {
|
|
opacity: 0.9;
|
|
box-shadow: 0 0 5px color-mix(in srgb, currentColor 45%, transparent);
|
|
}
|
|
|
|
.task-tool-pill {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 5px;
|
|
padding: 2px 8px;
|
|
border-radius: 4px;
|
|
background: rgba(52, 211, 153, 0.08);
|
|
color: var(--green);
|
|
font-size: 11px;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.task-tool-pill code {
|
|
font-family: 'JetBrains Mono', 'SF Mono', monospace;
|
|
font-size: 11px;
|
|
font-weight: 500;
|
|
background: none;
|
|
padding: 0;
|
|
}
|
|
|
|
.task-projection-pill {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
padding: 2px 8px;
|
|
border-radius: 4px;
|
|
background: rgba(234, 179, 8, 0.08);
|
|
color: var(--yellow);
|
|
font-size: 10px;
|
|
font-family: 'JetBrains Mono', 'SF Mono', monospace;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.task-role-pill {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
padding: 2px 8px;
|
|
border-radius: 4px;
|
|
background: rgba(16, 185, 129, 0.08);
|
|
color: var(--green);
|
|
font-size: 11px;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.task-employee-pill {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
padding: 2px 8px;
|
|
border-radius: 4px;
|
|
background: rgba(99, 102, 241, 0.08);
|
|
color: var(--accent);
|
|
font-size: 11px;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.task-employee-icon {
|
|
font-size: 11px;
|
|
line-height: 1;
|
|
}
|
|
|
|
.task-agent-pill {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
padding: 2px 8px;
|
|
border-radius: 4px;
|
|
background: rgba(14, 165, 233, 0.08);
|
|
color: var(--blue);
|
|
font-size: 11px;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.task-agent-icon {
|
|
font-size: 11px;
|
|
line-height: 1;
|
|
}
|
|
|
|
.task-header-right {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.task-header-avatars { display: flex; }
|
|
|
|
.task-header-avatar {
|
|
width: 24px;
|
|
height: 24px;
|
|
border-radius: 50%;
|
|
background: var(--accent-soft);
|
|
border: 2px solid var(--bg);
|
|
color: var(--accent);
|
|
font-size: 10px;
|
|
font-weight: 700;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
margin-left: -4px;
|
|
}
|
|
|
|
.task-header-avatar:first-child { margin-left: 0; }
|
|
|
|
.task-header-time {
|
|
font-size: 11px;
|
|
color: var(--text-secondary);
|
|
opacity: 0.6;
|
|
}
|
|
|
|
.task-header-metrics {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 6px 10px;
|
|
padding: 0 20px 10px;
|
|
}
|
|
|
|
.task-runtime-metric {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
min-width: 0;
|
|
max-width: 100%;
|
|
padding: 4px 10px;
|
|
border-radius: 999px;
|
|
border: 1px solid color-mix(in srgb, var(--border) 85%, transparent 15%);
|
|
background: color-mix(in srgb, var(--surface) 86%, var(--bg-elevated) 14%);
|
|
}
|
|
|
|
.task-runtime-metric-label {
|
|
font-size: 10px;
|
|
font-weight: 700;
|
|
letter-spacing: 0.06em;
|
|
text-transform: uppercase;
|
|
color: var(--text-secondary);
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.task-runtime-metric-value {
|
|
font-size: 11px;
|
|
color: var(--text);
|
|
font-family: 'JetBrains Mono', 'SF Mono', monospace;
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
min-width: 0;
|
|
}
|
|
|
|
.task-stop-btn {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
padding: 5px 12px;
|
|
border: 1px solid var(--red);
|
|
border-radius: var(--radius-xs);
|
|
background: transparent;
|
|
color: var(--red);
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
font-family: inherit;
|
|
cursor: pointer;
|
|
transition: all 120ms;
|
|
}
|
|
|
|
.task-stop-btn:hover { background: var(--red); color: #fff; }
|
|
.task-stop-btn:disabled {
|
|
opacity: 0.45;
|
|
cursor: not-allowed;
|
|
}
|
|
.task-stop-btn:disabled:hover {
|
|
background: transparent;
|
|
color: var(--red);
|
|
}
|
|
|
|
.task-resume-btn {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
padding: 5px 12px;
|
|
border: 1px solid var(--accent);
|
|
border-radius: var(--radius-xs);
|
|
background: transparent;
|
|
color: var(--accent);
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
font-family: inherit;
|
|
cursor: pointer;
|
|
transition: all 120ms;
|
|
}
|
|
|
|
.task-resume-btn:hover { background: var(--accent); color: #fff; }
|
|
|
|
.task-done-btn {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
padding: 5px 12px;
|
|
border: 1px solid var(--green);
|
|
border-radius: var(--radius-xs);
|
|
background: transparent;
|
|
color: var(--green);
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
font-family: inherit;
|
|
cursor: pointer;
|
|
transition: all 120ms;
|
|
}
|
|
|
|
.task-done-btn:hover { background: var(--green); color: #fff; }
|
|
|
|
.task-board-btn {
|
|
padding: 5px 8px;
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius-xs);
|
|
background: transparent;
|
|
color: var(--text-secondary);
|
|
cursor: pointer;
|
|
display: flex;
|
|
align-items: center;
|
|
transition: all 120ms;
|
|
}
|
|
|
|
.task-board-btn:hover { background: var(--surface-hover); color: var(--text); }
|
|
|
|
/* ── Responsive: react to the ctx-panel's own width via container queries.
|
|
Viewport-based @media doesn't work here because users can drag the panel
|
|
narrow while the browser window stays wide. ───────────────────────────── */
|
|
|
|
@container ctxpanel (max-width: 720px) {
|
|
.task-header-bar {
|
|
align-items: flex-start;
|
|
flex-wrap: wrap;
|
|
padding: 10px 14px;
|
|
gap: 8px;
|
|
}
|
|
.task-header-right {
|
|
/* Push the action cluster to a second row underneath the pills, so it
|
|
can never paint over them. */
|
|
width: 100%;
|
|
justify-content: flex-end;
|
|
flex-wrap: wrap;
|
|
}
|
|
.task-header-metrics {
|
|
padding: 0 14px 10px;
|
|
}
|
|
}
|
|
|
|
@container ctxpanel (max-width: 560px) {
|
|
/* At this width hide the lower-signal pills — projection-id, employee,
|
|
tool ticker, and the relative timestamp — so the title, status, and
|
|
executing agent stay legible. The data is still in the tooltip on the
|
|
title for advanced users. */
|
|
.task-projection-pill,
|
|
.task-employee-pill,
|
|
.task-tool-pill,
|
|
.task-header-time {
|
|
display: none;
|
|
}
|
|
.task-header-avatars {
|
|
display: none;
|
|
}
|
|
.task-header-bar {
|
|
padding: 10px 12px;
|
|
}
|
|
.task-runtime-metric-value {
|
|
font-size: 10.5px;
|
|
}
|
|
}
|
|
|
|
@container ctxpanel (max-width: 420px) {
|
|
/* Extra-narrow: also collapse the role pill and demote the action buttons
|
|
into compact icon-only chips. */
|
|
.task-role-pill {
|
|
display: none;
|
|
}
|
|
.task-agent-pill .task-agent-icon {
|
|
margin-right: 0;
|
|
}
|
|
.task-stop-btn span,
|
|
.task-done-btn span,
|
|
.task-resume-btn span {
|
|
display: none;
|
|
}
|
|
.task-stop-btn,
|
|
.task-done-btn,
|
|
.task-resume-btn {
|
|
padding: 5px 8px;
|
|
}
|
|
.task-header-bar {
|
|
padding: 8px 10px;
|
|
}
|
|
.task-header-metrics {
|
|
padding: 0 10px 8px;
|
|
gap: 6px 8px;
|
|
}
|
|
}
|
|
|
|
/* ══════════════════════════════════════════════════════════════════════════
|
|
Chat Main Area
|
|
══════════════════════════════════════════════════════════════════════════ */
|
|
.chat-main {
|
|
flex: 1;
|
|
display: flex;
|
|
flex-direction: column;
|
|
min-width: 0;
|
|
background: var(--bg);
|
|
}
|
|
|
|
.chat-main-header {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
padding: 10px 20px;
|
|
border-bottom: 1px solid var(--border);
|
|
flex-shrink: 0;
|
|
min-height: 48px;
|
|
}
|
|
|
|
.chat-main-icon {
|
|
font-size: 13px;
|
|
font-weight: 700;
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
.chat-main-name {
|
|
font-size: 14px;
|
|
font-weight: 600;
|
|
color: var(--text);
|
|
}
|
|
|
|
.chat-main-desc {
|
|
margin-left: 8px;
|
|
font-size: 11px;
|
|
color: var(--text-secondary);
|
|
font-weight: 400;
|
|
}
|
|
|
|
/* ══════════════════════════════════════════════════════════════════════════
|
|
Message List
|
|
══════════════════════════════════════════════════════════════════════════ */
|
|
.msg-list-shell {
|
|
flex: 1;
|
|
min-height: 0;
|
|
min-width: 0;
|
|
position: relative;
|
|
display: flex;
|
|
flex-direction: column;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.msg-list {
|
|
flex: 1;
|
|
min-height: 0;
|
|
overflow-y: auto;
|
|
padding: 16px 0 20px;
|
|
scrollbar-width: thin;
|
|
scrollbar-gutter: stable;
|
|
scrollbar-color: var(--border) transparent;
|
|
overscroll-behavior-y: contain;
|
|
position: relative;
|
|
}
|
|
|
|
.msg-list:focus {
|
|
outline: none;
|
|
}
|
|
|
|
.msg-list-following {
|
|
overflow-anchor: none;
|
|
}
|
|
|
|
.msg-list-browsing {
|
|
overflow-anchor: auto;
|
|
}
|
|
|
|
.msg-list-content {
|
|
width: 100%;
|
|
min-height: 100%;
|
|
}
|
|
|
|
.msg-timeline-row {
|
|
overflow-anchor: auto;
|
|
}
|
|
|
|
.msg-list-following .msg-timeline-row {
|
|
overflow-anchor: none;
|
|
}
|
|
|
|
.msg-end-anchor {
|
|
height: 1px;
|
|
flex-shrink: 0;
|
|
overflow-anchor: none;
|
|
}
|
|
|
|
.msg-list-floating-actions {
|
|
position: absolute;
|
|
left: 50%;
|
|
bottom: 12px;
|
|
z-index: 8;
|
|
transform: translateX(-50%);
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
max-width: calc(100% - 24px);
|
|
pointer-events: none;
|
|
}
|
|
|
|
.msg-list-float-btn {
|
|
pointer-events: auto;
|
|
min-width: 0;
|
|
max-width: min(320px, 70vw);
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
border: 1px solid color-mix(in srgb, var(--border) 72%, var(--accent) 28%);
|
|
border-radius: 999px;
|
|
padding: 7px 12px;
|
|
background: color-mix(in srgb, var(--bg-elevated) 92%, var(--accent) 8%);
|
|
color: var(--text);
|
|
box-shadow: 0 6px 22px rgba(0, 0, 0, 0.28);
|
|
font: inherit;
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.msg-list-float-btn:hover {
|
|
border-color: var(--accent);
|
|
background: color-mix(in srgb, var(--bg-elevated) 84%, var(--accent) 16%);
|
|
}
|
|
|
|
.msg-list-pending-btn {
|
|
border-color: color-mix(in srgb, var(--yellow) 55%, var(--border));
|
|
color: var(--yellow);
|
|
}
|
|
|
|
.msg-history-hint {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 10px;
|
|
padding: 0 20px 14px;
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.msg-history-load-btn {
|
|
border: 1px solid var(--border);
|
|
background: var(--surface);
|
|
color: var(--text);
|
|
border-radius: 999px;
|
|
padding: 6px 12px;
|
|
font-size: 12px;
|
|
font-family: inherit;
|
|
cursor: pointer;
|
|
transition: background 120ms, border-color 120ms;
|
|
}
|
|
|
|
.msg-history-load-btn:hover {
|
|
background: var(--surface-hover);
|
|
border-color: var(--border-hover);
|
|
}
|
|
|
|
.msg-history-load-btn:disabled {
|
|
opacity: 0.65;
|
|
cursor: default;
|
|
}
|
|
|
|
.msg-history-meta {
|
|
font-size: 11px;
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
/* ── Welcome ──────────────────────────────────────────────────────────── */
|
|
.msg-welcome {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 14px;
|
|
padding: 56px 24px;
|
|
color: var(--text-secondary);
|
|
text-align: center;
|
|
/* Center vertically when the list area is taller than the welcome block;
|
|
keep the message anchored toward the top on shorter viewports. */
|
|
flex: 1;
|
|
min-height: 0;
|
|
}
|
|
|
|
.msg-welcome-icon {
|
|
color: var(--accent);
|
|
width: 56px;
|
|
height: 56px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
background:
|
|
radial-gradient(circle at 30% 30%, color-mix(in srgb, var(--accent) 18%, transparent 82%), transparent 70%),
|
|
color-mix(in srgb, var(--accent-soft) 65%, var(--bg-elevated) 35%);
|
|
border: 1px solid color-mix(in srgb, var(--accent) 22%, transparent 78%);
|
|
border-radius: 50%;
|
|
box-shadow:
|
|
0 1px 0 color-mix(in srgb, var(--accent) 22%, transparent 78%) inset,
|
|
0 8px 24px -10px color-mix(in srgb, var(--accent) 60%, transparent 40%);
|
|
}
|
|
|
|
.msg-welcome-icon svg { width: 26px; height: 26px; opacity: 0.85; }
|
|
|
|
.msg-welcome-title {
|
|
font-size: 18px;
|
|
font-weight: 600;
|
|
color: var(--text);
|
|
margin-top: 2px;
|
|
letter-spacing: -0.01em;
|
|
}
|
|
|
|
.msg-welcome-hint {
|
|
font-size: 13px;
|
|
line-height: 1.55;
|
|
max-width: 320px;
|
|
color: var(--text-secondary);
|
|
opacity: 0.85;
|
|
}
|
|
|
|
@container ctxpanel (max-width: 480px) {
|
|
.msg-welcome {
|
|
padding: 36px 20px;
|
|
gap: 10px;
|
|
}
|
|
.msg-welcome-icon {
|
|
width: 48px;
|
|
height: 48px;
|
|
}
|
|
.msg-welcome-icon svg { width: 22px; height: 22px; }
|
|
.msg-welcome-title { font-size: 16px; }
|
|
.msg-welcome-hint { font-size: 12px; line-height: 1.5; }
|
|
}
|
|
|
|
/* ── Date separator ───────────────────────────────────────────────────── */
|
|
.msg-date-sep {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
padding: 12px 0 8px;
|
|
}
|
|
|
|
.msg-date-sep span {
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
color: var(--text-secondary);
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.06em;
|
|
padding: 2px 12px;
|
|
background: var(--surface);
|
|
border-radius: 999px;
|
|
}
|
|
|
|
/* ── System message ───────────────────────────────────────────────────── */
|
|
.msg-system {
|
|
display: flex;
|
|
justify-content: center;
|
|
padding: 6px 20px;
|
|
}
|
|
|
|
.msg-system span {
|
|
font-size: 11px;
|
|
color: var(--text-secondary);
|
|
background: var(--surface);
|
|
padding: 4px 12px;
|
|
border-radius: 999px;
|
|
}
|
|
|
|
/* ── Work-item divider ───────────────────────────────────────────────────── */
|
|
.work-item-divider {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 12px;
|
|
padding: 14px 24px;
|
|
max-width: 820px;
|
|
margin: 4px auto;
|
|
animation: msg-enter 200ms ease-out;
|
|
}
|
|
|
|
.work-item-divider-line {
|
|
flex: 1;
|
|
height: 1px;
|
|
background: linear-gradient(90deg, transparent, var(--border) 20%, var(--border) 80%, transparent);
|
|
}
|
|
|
|
.work-item-divider-label {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
letter-spacing: 0.04em;
|
|
color: var(--text-secondary);
|
|
white-space: nowrap;
|
|
text-transform: capitalize;
|
|
}
|
|
|
|
.work-item-divider-icon {
|
|
font-size: 10px;
|
|
line-height: 1;
|
|
}
|
|
|
|
.work-item-divider-action {
|
|
font-weight: 400;
|
|
opacity: 0.7;
|
|
font-size: 10px;
|
|
}
|
|
|
|
.work-item-divider-active .work-item-divider-icon { color: #F59E0B; }
|
|
.work-item-divider-active .work-item-divider-line { background: linear-gradient(90deg, transparent, rgba(245,158,11,0.25) 20%, rgba(245,158,11,0.25) 80%, transparent); }
|
|
|
|
.work-item-divider-passed .work-item-divider-icon { color: #10B981; }
|
|
.work-item-divider-passed .work-item-divider-label { color: #10B981; opacity: 0.8; }
|
|
.work-item-divider-passed .work-item-divider-line { background: linear-gradient(90deg, transparent, rgba(16,185,129,0.2) 20%, rgba(16,185,129,0.2) 80%, transparent); }
|
|
|
|
.work-item-divider-rejected .work-item-divider-icon { color: #F59E0B; }
|
|
.work-item-divider-rejected .work-item-divider-label { color: #F59E0B; opacity: 0.8; }
|
|
|
|
.work-item-divider-failed .work-item-divider-icon { color: var(--red); }
|
|
.work-item-divider-failed .work-item-divider-label { color: var(--red); opacity: 0.8; }
|
|
.work-item-divider-failed .work-item-divider-line { background: linear-gradient(90deg, transparent, rgba(239,68,68,0.15) 20%, rgba(239,68,68,0.15) 80%, transparent); }
|
|
|
|
.work-item-divider-waiting .work-item-divider-icon { color: var(--text-secondary); }
|
|
.work-item-divider-waiting .work-item-divider-label { color: var(--text-secondary); }
|
|
|
|
/* ── Message row ──────────────────────────────────────────────────────── */
|
|
.msg-row {
|
|
display: flex;
|
|
gap: 10px;
|
|
padding: 6px 24px;
|
|
max-width: 820px;
|
|
width: 100%;
|
|
margin: 0 auto;
|
|
animation: msg-enter 200ms ease-out;
|
|
border-radius: var(--radius-xs);
|
|
transition: background 100ms;
|
|
}
|
|
|
|
/* Agent row hover handled by .msg-content-agent-card */
|
|
|
|
@keyframes msg-enter {
|
|
from { opacity: 0; }
|
|
to { opacity: 1; }
|
|
}
|
|
|
|
.msg-row.user {
|
|
justify-content: flex-end;
|
|
}
|
|
|
|
.msg-row.deleted-sender { opacity: 0.5; }
|
|
|
|
/* ── Grouped messages (consecutive same sender) ──────────────────────── */
|
|
.msg-row.grouped {
|
|
padding-top: 0;
|
|
padding-bottom: 0;
|
|
animation: none;
|
|
}
|
|
|
|
.msg-row-inline-progress {
|
|
align-items: flex-start;
|
|
}
|
|
|
|
.msg-row-context,
|
|
.msg-row-draft {
|
|
align-items: flex-start;
|
|
}
|
|
|
|
.msg-row.agent.grouped .msg-content-agent-card {
|
|
border-top: none;
|
|
border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
|
|
margin-top: -1px;
|
|
}
|
|
|
|
.msg-row.user.grouped {
|
|
padding-top: 2px;
|
|
}
|
|
|
|
.msg-row.user.grouped .msg-content-user {
|
|
border-radius: 18px 4px 4px 18px;
|
|
}
|
|
|
|
.msg-avatar-spacer {
|
|
width: 34px;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.msg-time-inline {
|
|
font-size: 10px;
|
|
opacity: 0;
|
|
transition: opacity 150ms;
|
|
}
|
|
|
|
.msg-row:hover .msg-time-inline { opacity: 0.6; }
|
|
|
|
/* ── Avatar ───────────────────────────────────────────────────────────── */
|
|
.msg-avatar {
|
|
width: 34px;
|
|
height: 34px;
|
|
border-radius: 50%;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
flex-shrink: 0;
|
|
font-size: 13px;
|
|
font-weight: 700;
|
|
margin-top: 1px;
|
|
}
|
|
|
|
.agent-avatar {
|
|
background: linear-gradient(135deg, var(--accent-soft), var(--surface));
|
|
color: #fff;
|
|
border: none;
|
|
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
|
|
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
|
|
}
|
|
|
|
.msg-avatar-context {
|
|
background: linear-gradient(135deg, rgba(59, 130, 246, 0.18), rgba(14, 165, 233, 0.28));
|
|
color: var(--accent);
|
|
}
|
|
|
|
.msg-avatar-draft {
|
|
background: linear-gradient(135deg, rgba(16, 185, 129, 0.22), rgba(59, 130, 246, 0.2));
|
|
color: var(--green);
|
|
}
|
|
|
|
/* ── Message body ─────────────────────────────────────────────────────── */
|
|
.msg-body {
|
|
flex: 1;
|
|
min-width: 0;
|
|
}
|
|
|
|
.msg-inline-progress-body {
|
|
width: 100%;
|
|
}
|
|
|
|
.msg-inline-progress-shell {
|
|
width: 100%;
|
|
max-width: 100%;
|
|
}
|
|
|
|
.msg-body-user {
|
|
max-width: 70%;
|
|
}
|
|
|
|
/* ── Agent header ─────────────────────────────────────────────────────── */
|
|
.msg-agent-header {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
margin-bottom: 3px;
|
|
}
|
|
|
|
.msg-sender {
|
|
font-size: 12px;
|
|
font-weight: 600;
|
|
color: var(--text);
|
|
}
|
|
|
|
.msg-sender.deleted { color: var(--text-secondary); text-decoration: line-through; }
|
|
|
|
.msg-time {
|
|
font-size: 10px;
|
|
color: var(--text-secondary);
|
|
opacity: 0.6;
|
|
}
|
|
|
|
.msg-reply-indicator {
|
|
font-size: 11px;
|
|
color: var(--text-secondary);
|
|
padding: 2px 0 4px 10px;
|
|
border-left: 2px solid var(--accent-soft);
|
|
margin-bottom: 4px;
|
|
}
|
|
|
|
/* ── System ops row (compact log line for "[Delegating to codex]" etc.) ── */
|
|
/* Renders system operational events as a single-line summary instead of a
|
|
full agent card. The row matches the same centered/max-width container
|
|
as .msg-row so it visually sits in the same column as agent messages,
|
|
then indents internal content past where the avatar would be. Click
|
|
expands to reveal the raw payload (cmd, paths). */
|
|
.msg-ops-row {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
/* Mirror .msg-row centered-column layout but never overflow when the
|
|
panel is narrow. `min(820px, 100%)` collapses below 820px without
|
|
stretching beyond the panel. */
|
|
width: min(820px, 100%);
|
|
margin: 2px auto;
|
|
/* Avatar column width = 36 (avatar) + 10 (gap) + 10 (row-padding) = 56px.
|
|
We mirror that so the dot sits roughly where the avatar would be,
|
|
then `clamp` lets the pad gracefully shrink when the panel is narrow
|
|
(without needing media queries everywhere). */
|
|
padding: 5px clamp(12px, 3vw, 24px) 5px clamp(20px, 8vw, 56px);
|
|
box-sizing: border-box;
|
|
border-radius: 8px;
|
|
font-size: clamp(11px, 0.74rem, 12.5px);
|
|
color: var(--text-secondary);
|
|
background: transparent;
|
|
border: 1px solid transparent;
|
|
cursor: default;
|
|
user-select: none;
|
|
transition: background 140ms ease, border-color 140ms ease, color 140ms ease;
|
|
/* Defensive: never produce a horizontal scrollbar on the message list,
|
|
even if a child overflows. */
|
|
min-width: 0;
|
|
}
|
|
|
|
.msg-ops-row[role='button'] {
|
|
cursor: pointer;
|
|
}
|
|
|
|
.msg-ops-row:hover,
|
|
.msg-ops-row.expanded {
|
|
background: color-mix(in srgb, var(--surface) 60%, transparent 40%);
|
|
border-color: color-mix(in srgb, var(--border) 60%, transparent 40%);
|
|
color: var(--text);
|
|
}
|
|
|
|
.msg-ops-dot {
|
|
width: 5px;
|
|
height: 5px;
|
|
border-radius: 999px;
|
|
flex-shrink: 0;
|
|
background: color-mix(in srgb, var(--text-secondary) 60%, transparent 40%);
|
|
}
|
|
|
|
.msg-ops-tone-info .msg-ops-dot { background: color-mix(in srgb, var(--accent) 80%, transparent 20%); }
|
|
.msg-ops-tone-success .msg-ops-dot { background: var(--green); }
|
|
.msg-ops-tone-warning .msg-ops-dot { background: var(--yellow); }
|
|
.msg-ops-tone-danger .msg-ops-dot { background: var(--red); }
|
|
|
|
.msg-ops-label {
|
|
font-weight: 600;
|
|
letter-spacing: 0.01em;
|
|
color: var(--text);
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.msg-ops-tone-info .msg-ops-label { color: color-mix(in srgb, var(--accent) 88%, var(--text) 12%); }
|
|
.msg-ops-tone-success .msg-ops-label { color: color-mix(in srgb, var(--green) 90%, var(--text) 10%); }
|
|
.msg-ops-tone-warning .msg-ops-label { color: color-mix(in srgb, var(--yellow) 90%, var(--text) 10%); }
|
|
.msg-ops-tone-danger .msg-ops-label { color: color-mix(in srgb, var(--red) 90%, var(--text) 10%); }
|
|
|
|
.msg-ops-summary {
|
|
color: var(--text-secondary);
|
|
flex: 1;
|
|
min-width: 0;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.msg-ops-time {
|
|
font-size: 10.5px;
|
|
color: var(--text-secondary);
|
|
opacity: 0.55;
|
|
flex-shrink: 0;
|
|
font-variant-numeric: tabular-nums;
|
|
}
|
|
|
|
.msg-ops-chevron {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
width: 16px;
|
|
height: 16px;
|
|
color: var(--text-secondary);
|
|
opacity: 0.6;
|
|
flex-shrink: 0;
|
|
transition: transform 160ms ease, opacity 160ms ease;
|
|
transform: rotate(0deg);
|
|
}
|
|
|
|
.msg-ops-row.expanded .msg-ops-chevron {
|
|
opacity: 1;
|
|
}
|
|
|
|
.msg-ops-details {
|
|
/* Same containment & padding system as `.msg-ops-row` so the expanded
|
|
panel aligns under the row at every panel width. */
|
|
width: min(820px, 100%);
|
|
margin: 0 auto 6px;
|
|
padding: 10px clamp(12px, 3vw, 24px) 10px clamp(20px, 8vw, 56px);
|
|
box-sizing: border-box;
|
|
border-radius: 8px;
|
|
background: color-mix(in srgb, var(--bg-elevated) 80%, var(--surface) 20%);
|
|
border: 1px solid color-mix(in srgb, var(--border) 70%, transparent 30%);
|
|
}
|
|
|
|
.msg-ops-details-pre {
|
|
margin: 0;
|
|
font-family: 'JetBrains Mono', 'SF Mono', monospace;
|
|
font-size: 10.5px;
|
|
line-height: 1.55;
|
|
color: var(--text-secondary);
|
|
white-space: pre-wrap;
|
|
word-break: break-word;
|
|
max-height: 220px;
|
|
overflow-y: auto;
|
|
}
|
|
|
|
/* Note: the `.msg-ops-row` and `.msg-ops-details` padding is already
|
|
fluid via `clamp()` — no extra container query needed. The clamp
|
|
floor (12/20) handles panels as narrow as ~280px without breaking. */
|
|
|
|
.msg-ops-bundle {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
width: min(820px, 100%);
|
|
margin: 3px auto;
|
|
padding: 6px clamp(12px, 3vw, 24px) 6px clamp(20px, 8vw, 56px);
|
|
box-sizing: border-box;
|
|
border: 1px dashed color-mix(in srgb, var(--border) 70%, transparent);
|
|
border-radius: 8px;
|
|
background: color-mix(in srgb, var(--surface) 42%, transparent);
|
|
color: var(--text-secondary);
|
|
font: inherit;
|
|
font-size: 12px;
|
|
text-align: left;
|
|
cursor: pointer;
|
|
min-width: 0;
|
|
transition: background 140ms ease, border-color 140ms ease, color 140ms ease;
|
|
}
|
|
|
|
.msg-ops-bundle:hover,
|
|
.msg-ops-bundle.expanded {
|
|
background: color-mix(in srgb, var(--surface) 76%, transparent);
|
|
border-color: color-mix(in srgb, var(--accent) 40%, var(--border));
|
|
color: var(--text);
|
|
}
|
|
|
|
.msg-ops-bundle-dot {
|
|
width: 6px;
|
|
height: 6px;
|
|
border-radius: 999px;
|
|
flex: 0 0 auto;
|
|
background: color-mix(in srgb, var(--accent) 72%, transparent);
|
|
}
|
|
|
|
.msg-ops-bundle-title {
|
|
flex: 0 0 auto;
|
|
color: var(--text);
|
|
font-weight: 650;
|
|
}
|
|
|
|
.msg-ops-bundle-summary {
|
|
flex: 1;
|
|
min-width: 0;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.msg-ops-bundle-time {
|
|
flex: 0 0 auto;
|
|
font-size: 10.5px;
|
|
color: var(--text-secondary);
|
|
opacity: 0.6;
|
|
font-variant-numeric: tabular-nums;
|
|
}
|
|
|
|
.msg-ops-bundle-chevron {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
width: 16px;
|
|
height: 16px;
|
|
color: var(--text-secondary);
|
|
flex: 0 0 auto;
|
|
}
|
|
|
|
.msg-ops-bundle-details {
|
|
width: min(820px, 100%);
|
|
margin: 0 auto 8px;
|
|
padding: 6px clamp(12px, 3vw, 24px) 8px clamp(20px, 8vw, 56px);
|
|
box-sizing: border-box;
|
|
border-radius: 8px;
|
|
background: color-mix(in srgb, var(--bg-elevated) 80%, var(--surface) 20%);
|
|
border: 1px solid color-mix(in srgb, var(--border) 68%, transparent);
|
|
}
|
|
|
|
.msg-ops-bundle-event {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
min-width: 0;
|
|
padding: 4px 0;
|
|
font-size: 11.5px;
|
|
}
|
|
|
|
/* ── Agent message card ───────────────────────────────────────────────── */
|
|
.msg-content-agent-card {
|
|
background: var(--surface);
|
|
border: 1px solid var(--border);
|
|
border-left: 3px solid var(--accent);
|
|
border-radius: 2px var(--radius-sm) var(--radius-sm) 2px;
|
|
padding: 10px 14px;
|
|
transition: border-color 200ms, box-shadow 200ms, border-left-color 200ms;
|
|
}
|
|
|
|
.msg-attached-thinking {
|
|
margin-bottom: 10px;
|
|
}
|
|
|
|
.msg-row.agent:hover .msg-content-agent-card {
|
|
border-color: var(--border-hover);
|
|
border-left-color: var(--accent);
|
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
|
|
}
|
|
|
|
.msg-context-card {
|
|
border-left-color: rgba(59, 130, 246, 0.75);
|
|
background: linear-gradient(180deg, rgba(59, 130, 246, 0.06), var(--surface));
|
|
}
|
|
|
|
.msg-context-label,
|
|
.msg-draft-label {
|
|
font-size: 11px;
|
|
font-weight: 700;
|
|
letter-spacing: 0.04em;
|
|
text-transform: uppercase;
|
|
color: var(--text-secondary);
|
|
margin-bottom: 6px;
|
|
}
|
|
|
|
.msg-draft-card {
|
|
border-style: dashed;
|
|
border-left-color: var(--green);
|
|
background: linear-gradient(180deg, rgba(16, 185, 129, 0.06), var(--surface));
|
|
}
|
|
|
|
.msg-row-project-update .msg-body {
|
|
min-width: 0;
|
|
}
|
|
|
|
.msg-project-update-card {
|
|
background: var(--surface);
|
|
border: 1px solid var(--border);
|
|
border-left: 3px solid var(--accent);
|
|
border-radius: 2px var(--radius-sm) var(--radius-sm) 2px;
|
|
padding: 11px 14px 10px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 10px;
|
|
min-width: 0;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.msg-project-update-report {
|
|
border-left-color: var(--accent);
|
|
}
|
|
|
|
.msg-project-update-review {
|
|
border-left-color: var(--green);
|
|
}
|
|
|
|
.msg-project-update-update {
|
|
border-left-color: var(--yellow);
|
|
}
|
|
|
|
.msg-project-update-head {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 8px;
|
|
min-width: 0;
|
|
}
|
|
|
|
.msg-project-update-label {
|
|
font-size: 11px;
|
|
font-weight: 800;
|
|
letter-spacing: 0.04em;
|
|
text-transform: uppercase;
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
.msg-project-update-chip {
|
|
flex: 0 1 auto;
|
|
min-width: 0;
|
|
max-width: 60%;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
padding: 2px 7px;
|
|
border-radius: 999px;
|
|
background: color-mix(in srgb, var(--green) 14%, transparent);
|
|
color: color-mix(in srgb, var(--green) 86%, var(--text) 14%);
|
|
font-size: 11px;
|
|
font-weight: 650;
|
|
}
|
|
|
|
.msg-project-update-title {
|
|
margin-top: 8px;
|
|
color: var(--text-secondary);
|
|
font-size: 12px;
|
|
font-weight: 650;
|
|
line-height: 1.35;
|
|
overflow-wrap: anywhere;
|
|
word-break: break-word;
|
|
}
|
|
|
|
.msg-project-update-summary {
|
|
color: var(--text);
|
|
line-height: 1.58;
|
|
font-size: 14px;
|
|
overflow-wrap: anywhere;
|
|
word-break: break-word;
|
|
}
|
|
|
|
.msg-project-update-summary p {
|
|
margin: 0 0 7px;
|
|
}
|
|
|
|
.msg-project-update-summary p:last-child {
|
|
margin-bottom: 0;
|
|
}
|
|
|
|
.msg-project-update-section {
|
|
min-width: 0;
|
|
}
|
|
|
|
.msg-project-update-section-label {
|
|
margin-bottom: 5px;
|
|
color: var(--text-secondary);
|
|
font-size: 11px;
|
|
font-weight: 750;
|
|
letter-spacing: 0.04em;
|
|
text-transform: uppercase;
|
|
}
|
|
|
|
.msg-project-update-artifacts {
|
|
display: grid;
|
|
gap: 6px;
|
|
}
|
|
|
|
.msg-project-update-artifact {
|
|
display: grid;
|
|
grid-template-columns: minmax(0, 1fr) auto;
|
|
gap: 4px 8px;
|
|
align-items: center;
|
|
min-width: 0;
|
|
padding: 7px 9px;
|
|
border: 1px solid color-mix(in srgb, var(--border) 78%, transparent);
|
|
border-radius: 6px;
|
|
background: color-mix(in srgb, var(--bg-elevated) 46%, transparent);
|
|
}
|
|
|
|
.msg-project-update-artifact-name {
|
|
min-width: 0;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
color: var(--text);
|
|
font-size: 12.5px;
|
|
font-weight: 650;
|
|
}
|
|
|
|
.msg-project-update-artifact-status {
|
|
color: var(--green);
|
|
font-size: 11px;
|
|
font-weight: 650;
|
|
text-transform: lowercase;
|
|
}
|
|
|
|
.msg-project-update-artifact-path {
|
|
grid-column: 1 / -1;
|
|
min-width: 0;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
color: var(--text-secondary);
|
|
background: transparent;
|
|
font-size: 11px;
|
|
}
|
|
|
|
.msg-project-update-grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
gap: 10px;
|
|
}
|
|
|
|
.msg-project-update-list {
|
|
margin: 0;
|
|
padding-left: 18px;
|
|
color: var(--text-secondary);
|
|
font-size: 12.5px;
|
|
line-height: 1.48;
|
|
min-width: 0;
|
|
}
|
|
|
|
.msg-project-update-list li {
|
|
margin: 0 0 4px;
|
|
overflow-wrap: anywhere;
|
|
word-break: break-word;
|
|
}
|
|
|
|
@media (max-width: 680px) {
|
|
.msg-project-update-grid {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.msg-project-update-head {
|
|
align-items: flex-start;
|
|
flex-direction: column;
|
|
}
|
|
|
|
.msg-project-update-chip {
|
|
max-width: 100%;
|
|
}
|
|
}
|
|
|
|
.msg-content-agent {
|
|
font-size: 14px;
|
|
line-height: 1.65;
|
|
color: var(--text);
|
|
word-wrap: break-word;
|
|
}
|
|
|
|
.msg-content-agent h1,
|
|
.msg-content-agent h2,
|
|
.msg-content-agent h3,
|
|
.msg-content-agent h4,
|
|
.msg-content-agent h5,
|
|
.msg-content-agent h6 {
|
|
margin: 0 0 10px;
|
|
line-height: 1.35;
|
|
}
|
|
|
|
.msg-content-agent p { margin: 0 0 8px; }
|
|
.msg-content-agent p:last-child { margin-bottom: 0; }
|
|
.msg-content-agent ul, .msg-content-agent ol { margin: 4px 0 8px; padding-left: 20px; }
|
|
.msg-content-agent li { margin-bottom: 3px; line-height: 1.55; }
|
|
|
|
.msg-content-agent pre {
|
|
background: var(--bg);
|
|
padding: 10px 14px;
|
|
border-radius: var(--radius-xs);
|
|
border: 1px solid var(--border);
|
|
overflow-x: auto;
|
|
font-size: 12px;
|
|
line-height: 1.5;
|
|
margin: 8px 0;
|
|
}
|
|
|
|
.msg-content-agent code {
|
|
font-family: 'JetBrains Mono', 'SF Mono', 'Fira Code', monospace;
|
|
font-size: 12px;
|
|
background: var(--accent-soft);
|
|
padding: 2px 6px;
|
|
border-radius: 4px;
|
|
color: var(--accent);
|
|
}
|
|
|
|
.msg-content-agent pre code {
|
|
background: transparent;
|
|
padding: 0;
|
|
color: var(--text);
|
|
}
|
|
|
|
.msg-content-agent blockquote {
|
|
margin: 8px 0;
|
|
padding: 6px 14px;
|
|
border-left: 3px solid var(--accent-soft);
|
|
color: var(--text-secondary);
|
|
background: rgba(0, 0, 0, 0.04);
|
|
border-radius: 0 var(--radius-xs) var(--radius-xs) 0;
|
|
}
|
|
|
|
.msg-content-agent table {
|
|
border-collapse: collapse;
|
|
margin: 8px 0;
|
|
font-size: 13px;
|
|
width: 100%;
|
|
}
|
|
|
|
.msg-content-agent th, .msg-content-agent td {
|
|
border: 1px solid var(--border);
|
|
padding: 6px 12px;
|
|
text-align: left;
|
|
}
|
|
|
|
.msg-content-agent th {
|
|
background: var(--bg);
|
|
font-weight: 600;
|
|
font-size: 12px;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.03em;
|
|
}
|
|
|
|
.msg-content-agent strong { color: var(--text); }
|
|
.msg-content-agent a { color: var(--accent); text-decoration: none; }
|
|
.msg-content-agent a:hover { text-decoration: underline; }
|
|
.msg-content-agent hr { border: none; border-top: 1px solid var(--border); margin: 12px 0; }
|
|
|
|
/* ── User message ─────────────────────────────────────────────────────── */
|
|
.msg-content-user {
|
|
background: var(--accent);
|
|
color: #fff;
|
|
padding: 10px 16px;
|
|
border-radius: 18px 18px 4px 18px;
|
|
font-size: 14px;
|
|
line-height: 1.5;
|
|
word-wrap: break-word;
|
|
white-space: pre-wrap;
|
|
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
|
|
}
|
|
|
|
.msg-content-user-markdown {
|
|
color: inherit;
|
|
font-size: inherit;
|
|
line-height: inherit;
|
|
}
|
|
|
|
.msg-content-user-markdown h1,
|
|
.msg-content-user-markdown h2,
|
|
.msg-content-user-markdown h3,
|
|
.msg-content-user-markdown h4,
|
|
.msg-content-user-markdown h5,
|
|
.msg-content-user-markdown h6 {
|
|
margin: 0 0 8px;
|
|
line-height: 1.35;
|
|
color: inherit;
|
|
}
|
|
|
|
.msg-content-user-markdown p { margin: 0 0 8px; }
|
|
.msg-content-user-markdown p:last-child { margin-bottom: 0; }
|
|
.msg-content-user-markdown ul,
|
|
.msg-content-user-markdown ol { margin: 4px 0 8px; padding-left: 20px; }
|
|
.msg-content-user-markdown li { margin-bottom: 3px; line-height: 1.5; }
|
|
.msg-content-user-markdown strong { color: inherit; }
|
|
.msg-content-user-markdown a { color: inherit; text-decoration: underline; }
|
|
.msg-content-user-markdown code {
|
|
background: rgba(255, 255, 255, 0.14);
|
|
color: inherit;
|
|
border-radius: 4px;
|
|
padding: 0.08em 0.35em;
|
|
font-size: 0.92em;
|
|
}
|
|
.msg-content-user-markdown pre {
|
|
background: rgba(0, 0, 0, 0.16);
|
|
border: 1px solid rgba(255, 255, 255, 0.12);
|
|
border-radius: var(--radius-xs);
|
|
padding: 10px 12px;
|
|
margin: 8px 0;
|
|
overflow-x: auto;
|
|
}
|
|
.msg-content-user-markdown pre code {
|
|
background: transparent;
|
|
border: none;
|
|
padding: 0;
|
|
}
|
|
|
|
.msg-meta-user {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: flex-end;
|
|
gap: 6px;
|
|
margin-top: 4px;
|
|
opacity: 0;
|
|
transition: opacity 150ms;
|
|
}
|
|
|
|
.msg-row.user:hover .msg-meta-user { opacity: 1; }
|
|
|
|
/* ── Message actions ──────────────────────────────────────────────────── */
|
|
.msg-card-actions {
|
|
display: flex;
|
|
gap: 2px;
|
|
margin-top: 4px;
|
|
padding-top: 0;
|
|
height: 0;
|
|
overflow: hidden;
|
|
opacity: 0;
|
|
transition: opacity 150ms, height 150ms;
|
|
}
|
|
|
|
.msg-row:hover .msg-card-actions {
|
|
opacity: 1;
|
|
height: 26px;
|
|
}
|
|
|
|
/* (actions now inside card — see .msg-card-actions) */
|
|
|
|
.msg-action-btn {
|
|
border: none;
|
|
background: transparent;
|
|
color: var(--text-secondary);
|
|
cursor: pointer;
|
|
font-size: 11px;
|
|
padding: 3px 8px;
|
|
border-radius: 4px;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
font-family: inherit;
|
|
transition: all 120ms;
|
|
}
|
|
|
|
.msg-action-btn:hover {
|
|
background: var(--surface);
|
|
color: var(--text);
|
|
}
|
|
|
|
/* ── Agent working indicator ──────────────────────────────────────────── */
|
|
.agent-working-row {
|
|
animation: msg-enter 200ms ease-out;
|
|
}
|
|
|
|
.agent-working-row .progress-block {
|
|
border: 1px dashed var(--border-hover);
|
|
background: transparent;
|
|
}
|
|
|
|
/* ══════════════════════════════════════════════════════════════════════════
|
|
Agent Progress Timeline (ptl-*)
|
|
══════════════════════════════════════════════════════════════════════════ */
|
|
.ptl-block {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 0;
|
|
animation: ptl-enter 200ms ease-out;
|
|
}
|
|
|
|
@keyframes ptl-enter {
|
|
from { opacity: 0; }
|
|
to { opacity: 1; }
|
|
}
|
|
|
|
/* ── Live status (thinking / running tool) ─────────────────────────────── */
|
|
.ptl-live {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
padding: 8px 12px;
|
|
border-radius: var(--radius-sm);
|
|
margin-bottom: 6px;
|
|
font-size: 12px;
|
|
font-weight: 500;
|
|
}
|
|
|
|
.ptl-live-think {
|
|
background: var(--accent-soft);
|
|
color: var(--accent);
|
|
}
|
|
|
|
.ptl-live-tool {
|
|
background: rgba(52, 211, 153, 0.06);
|
|
color: var(--green);
|
|
}
|
|
|
|
.ptl-live-icon {
|
|
display: flex;
|
|
align-items: center;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.ptl-live-think .ptl-live-icon {
|
|
animation: ptl-spin 3s linear infinite;
|
|
}
|
|
|
|
@keyframes ptl-spin {
|
|
from { transform: rotate(0deg); }
|
|
to { transform: rotate(360deg); }
|
|
}
|
|
|
|
.ptl-live-text { white-space: nowrap; }
|
|
|
|
.ptl-live-tool-name {
|
|
font-family: 'JetBrains Mono', 'SF Mono', monospace;
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
background: rgba(52, 211, 153, 0.1);
|
|
padding: 2px 8px;
|
|
border-radius: 4px;
|
|
}
|
|
|
|
.ptl-live-shimmer {
|
|
flex: 1;
|
|
height: 2px;
|
|
min-width: 32px;
|
|
border-radius: 1px;
|
|
background: linear-gradient(90deg,
|
|
transparent 0%,
|
|
currentColor 50%,
|
|
transparent 100%
|
|
);
|
|
opacity: 0.25;
|
|
background-size: 200% 100%;
|
|
animation: ptl-shimmer 1.5s ease-in-out infinite;
|
|
}
|
|
|
|
@keyframes ptl-shimmer {
|
|
0% { background-position: 200% 0; }
|
|
100% { background-position: -200% 0; }
|
|
}
|
|
|
|
/* ── Tool elapsed time in live status ────────────────────────────────── */
|
|
.ptl-live-elapsed {
|
|
font-size: 10px;
|
|
font-family: 'JetBrains Mono', 'SF Mono', monospace;
|
|
color: var(--text-secondary);
|
|
white-space: nowrap;
|
|
}
|
|
|
|
/* ── Last tool result summary ────────────────────────────────────────── */
|
|
.ptl-last-tool-summary {
|
|
display: flex;
|
|
align-items: baseline;
|
|
gap: 6px;
|
|
padding: 4px 12px;
|
|
font-size: 11px;
|
|
color: var(--text-secondary);
|
|
border-bottom: 1px solid rgba(128, 128, 128, 0.08);
|
|
}
|
|
.ptl-last-tool-label {
|
|
font-weight: 600;
|
|
white-space: nowrap;
|
|
color: var(--green);
|
|
font-size: 10px;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.3px;
|
|
}
|
|
.ptl-last-tool-text {
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
/* ── Autonomy / permission card ──────────────────────────────────────── */
|
|
.ptl-autonomy-card {
|
|
border-left-color: var(--yellow);
|
|
}
|
|
.ptl-autonomy-detail {
|
|
color: var(--text-secondary);
|
|
font-size: 11px;
|
|
padding: 4px 8px;
|
|
}
|
|
|
|
/* ── Approval metric highlight ───────────────────────────────────────── */
|
|
.task-runtime-metric-approval {
|
|
color: var(--yellow);
|
|
font-weight: 600;
|
|
}
|
|
|
|
/* ── Completion indicator (terminal state) ─────────────────────────────── */
|
|
.ptl-completion {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
padding: 6px 12px;
|
|
margin-top: 4px;
|
|
border-radius: 6px;
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
}
|
|
.ptl-completion-icon {
|
|
font-size: 13px;
|
|
line-height: 1;
|
|
}
|
|
.ptl-completion-done {
|
|
color: var(--green);
|
|
background: rgba(16, 185, 129, 0.08);
|
|
}
|
|
.ptl-completion-failed {
|
|
color: var(--red);
|
|
background: rgba(239, 68, 68, 0.08);
|
|
}
|
|
.ptl-completion-cancelled {
|
|
color: var(--text-secondary);
|
|
background: rgba(128, 128, 128, 0.06);
|
|
}
|
|
|
|
/* ── Expand toggle ─────────────────────────────────────────────────────── */
|
|
.ptl-expand {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
border: none;
|
|
background: transparent;
|
|
color: var(--text-secondary);
|
|
font-size: 11px;
|
|
font-weight: 500;
|
|
font-family: inherit;
|
|
cursor: pointer;
|
|
padding: 4px 12px;
|
|
margin-bottom: 2px;
|
|
transition: color 120ms;
|
|
}
|
|
|
|
.ptl-expand:hover { color: var(--accent); }
|
|
|
|
/* ── Timeline container ────────────────────────────────────────────────── */
|
|
.ptl-timeline {
|
|
display: flex;
|
|
flex-direction: column;
|
|
padding-left: 2px;
|
|
}
|
|
|
|
/* ── Individual entry ──────────────────────────────────────────────────── */
|
|
.ptl-entry {
|
|
display: flex;
|
|
gap: 0;
|
|
min-height: 30px;
|
|
animation: ptl-entry-in 180ms ease-out;
|
|
}
|
|
|
|
@keyframes ptl-entry-in {
|
|
from { opacity: 0; }
|
|
to { opacity: 1; }
|
|
}
|
|
|
|
/* ── Connector (dot + line) ────────────────────────────────────────────── */
|
|
.ptl-connector {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
width: 26px;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.ptl-dot {
|
|
width: 22px;
|
|
height: 22px;
|
|
border-radius: 6px;
|
|
background: var(--surface);
|
|
border: 1px solid var(--border);
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
flex-shrink: 0;
|
|
transition: border-color 200ms, background 200ms;
|
|
}
|
|
|
|
.ptl-dot svg { width: 12px; height: 12px; }
|
|
|
|
.ptl-entry:hover .ptl-dot {
|
|
border-color: currentColor;
|
|
background: color-mix(in srgb, currentColor 6%, var(--surface));
|
|
}
|
|
|
|
.ptl-line {
|
|
width: 1px;
|
|
flex: 1;
|
|
background: var(--border);
|
|
min-height: 8px;
|
|
}
|
|
|
|
.ptl-entry-last .ptl-line { display: none; }
|
|
|
|
/* ── Entry content ─────────────────────────────────────────────────────── */
|
|
.ptl-content {
|
|
flex: 1;
|
|
min-width: 0;
|
|
padding: 2px 0 8px 8px;
|
|
}
|
|
|
|
.ptl-row {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
flex-wrap: nowrap;
|
|
min-height: 22px;
|
|
}
|
|
|
|
.ptl-label {
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.03em;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.ptl-tool-badge {
|
|
font-family: 'JetBrains Mono', 'SF Mono', monospace;
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
background: rgba(52, 211, 153, 0.08);
|
|
color: var(--green);
|
|
padding: 1px 7px;
|
|
border-radius: 4px;
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
max-width: 180px;
|
|
}
|
|
|
|
.ptl-summary {
|
|
font-size: 12px;
|
|
color: var(--text-secondary);
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
flex: 1;
|
|
min-width: 0;
|
|
}
|
|
|
|
.ptl-tool-card {
|
|
width: 100%;
|
|
min-width: 0;
|
|
background: color-mix(in srgb, var(--surface) 78%, #d9dde5 22%);
|
|
border: 1px solid var(--border);
|
|
border-radius: 10px;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.ptl-tool-toggle {
|
|
width: 100%;
|
|
border: none;
|
|
background: transparent;
|
|
padding: 8px 10px;
|
|
text-align: left;
|
|
}
|
|
|
|
.ptl-tool-toggle.clickable {
|
|
cursor: pointer;
|
|
}
|
|
|
|
.ptl-tool-toggle.clickable:hover {
|
|
background: color-mix(in srgb, var(--surface) 70%, #e7ebf2 30%);
|
|
}
|
|
|
|
.ptl-tool-chevron {
|
|
margin-left: auto;
|
|
color: var(--text-secondary);
|
|
display: inline-flex;
|
|
align-items: center;
|
|
}
|
|
|
|
.ptl-tool-card-detail {
|
|
border-top: 1px solid var(--border);
|
|
padding: 9px 10px 10px;
|
|
margin: 0;
|
|
font-size: 11px;
|
|
color: var(--text-secondary);
|
|
white-space: pre-wrap;
|
|
overflow-wrap: anywhere;
|
|
word-break: break-word;
|
|
overflow-x: auto;
|
|
max-width: 100%;
|
|
font-family: 'JetBrains Mono', 'SF Mono', monospace;
|
|
background: color-mix(in srgb, var(--surface) 86%, #f2f4f8 14%);
|
|
}
|
|
|
|
.ptl-thinking-detail {
|
|
font-family: inherit;
|
|
font-size: 12px;
|
|
line-height: 1.6;
|
|
color: var(--text);
|
|
max-height: 300px;
|
|
overflow-y: auto;
|
|
}
|
|
|
|
.ptl-time {
|
|
font-size: 10px;
|
|
color: var(--text-secondary);
|
|
opacity: 0.5;
|
|
flex-shrink: 0;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.ptl-detail {
|
|
font-size: 11px;
|
|
color: var(--text-secondary);
|
|
opacity: 0.7;
|
|
margin-top: 2px;
|
|
padding-left: 1px;
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
font-family: 'JetBrains Mono', 'SF Mono', monospace;
|
|
max-width: 400px;
|
|
}
|
|
|
|
.ckpt-escalation {
|
|
border-color: color-mix(in srgb, var(--yellow) 55%, var(--border) 45%);
|
|
}
|
|
|
|
.ckpt-icon-escalation {
|
|
color: var(--yellow);
|
|
background: color-mix(in srgb, var(--yellow) 14%, transparent);
|
|
}
|
|
|
|
.ckpt-escalation-body {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 6px;
|
|
margin-top: 10px;
|
|
}
|
|
|
|
.ckpt-escalation-line {
|
|
font-size: 12px;
|
|
color: var(--text-secondary);
|
|
white-space: pre-wrap;
|
|
word-break: break-word;
|
|
}
|
|
|
|
.ckpt-escalation-actions {
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.ckpt-escalation-hint {
|
|
margin-top: 10px;
|
|
font-size: 11px;
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
/* ── Working indicator row styling ─────────────────────────────────────── */
|
|
.agent-working-row .ptl-block {
|
|
border: 1px dashed var(--border-hover);
|
|
border-radius: var(--radius-sm);
|
|
padding: 10px 12px;
|
|
background: transparent;
|
|
}
|
|
|
|
/* ══════════════════════════════════════════════════════════════════════════
|
|
Code Block (fenced code)
|
|
══════════════════════════════════════════════════════════════════════════ */
|
|
.code-block-wrap {
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius-sm);
|
|
overflow: hidden;
|
|
margin: 8px 0;
|
|
}
|
|
|
|
.code-block-header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 5px 12px;
|
|
background: var(--surface);
|
|
border-bottom: 1px solid var(--border);
|
|
}
|
|
|
|
.code-block-lang {
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
color: var(--text-secondary);
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.05em;
|
|
}
|
|
|
|
.code-block-copy {
|
|
border: none;
|
|
background: transparent;
|
|
color: var(--text-secondary);
|
|
cursor: pointer;
|
|
font-size: 10px;
|
|
font-family: inherit;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
padding: 2px 6px;
|
|
border-radius: 4px;
|
|
transition: all 120ms;
|
|
}
|
|
|
|
.code-block-copy:hover { color: var(--text); background: var(--surface-hover); }
|
|
|
|
.code-block-wrap pre {
|
|
margin: 0;
|
|
border: none;
|
|
border-radius: 0;
|
|
background: var(--bg) !important;
|
|
}
|
|
|
|
/* ══════════════════════════════════════════════════════════════════════════
|
|
Message Composer
|
|
══════════════════════════════════════════════════════════════════════════ */
|
|
.msg-composer {
|
|
padding: 4px 24px 16px;
|
|
flex-shrink: 0;
|
|
max-width: 820px;
|
|
width: 100%;
|
|
margin: 0 auto;
|
|
}
|
|
|
|
.msg-composer .composer-input-area {
|
|
background: var(--surface);
|
|
border: 1px solid var(--border);
|
|
border-radius: 12px;
|
|
overflow: hidden;
|
|
transition: border-color 200ms, box-shadow 200ms;
|
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
|
|
}
|
|
|
|
.msg-composer.focused .composer-input-area {
|
|
border-color: var(--accent);
|
|
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08), 0 0 0 3px var(--accent-glow);
|
|
}
|
|
|
|
.msg-composer .composer-input-area textarea {
|
|
width: 100%;
|
|
padding: 14px 16px 0;
|
|
border: none;
|
|
background: transparent;
|
|
color: var(--text);
|
|
font-size: 14px;
|
|
font-family: inherit;
|
|
outline: none;
|
|
resize: none;
|
|
min-height: 24px;
|
|
max-height: 200px;
|
|
line-height: 1.5;
|
|
}
|
|
|
|
.msg-composer .composer-input-area textarea::placeholder {
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
.composer-bottom {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
padding: 6px 8px 8px 16px;
|
|
}
|
|
|
|
.composer-config-group {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
padding: 4px 6px;
|
|
border-radius: 18px;
|
|
border: 1px solid color-mix(in srgb, var(--border) 78%, var(--accent-soft) 22%);
|
|
background:
|
|
linear-gradient(180deg, color-mix(in srgb, var(--bg-elevated) 88%, white 12%), color-mix(in srgb, var(--surface) 86%, var(--bg-elevated) 14%));
|
|
box-shadow:
|
|
inset 0 1px 0 rgba(255, 255, 255, 0.08),
|
|
0 10px 20px rgba(15, 23, 42, 0.08);
|
|
min-width: 0;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.composer-config-divider {
|
|
width: 1px;
|
|
height: 24px;
|
|
background: color-mix(in srgb, var(--border) 72%, transparent 28%);
|
|
border-radius: 999px;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.composer-mode-inline {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
min-width: 0;
|
|
flex-shrink: 0;
|
|
padding: 0 4px;
|
|
}
|
|
|
|
.composer-mode-inline-label {
|
|
font-size: 10px;
|
|
font-weight: 700;
|
|
letter-spacing: 0.06em;
|
|
text-transform: uppercase;
|
|
color: var(--text-secondary);
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.composer-mode-inline[data-kind='mode'] .composer-mode-inline-label {
|
|
color: color-mix(in srgb, var(--accent) 74%, var(--text-secondary) 26%);
|
|
}
|
|
|
|
.composer-mode-inline[data-kind='agent'] .composer-mode-inline-label {
|
|
color: color-mix(in srgb, var(--yellow) 78%, var(--text-secondary) 22%);
|
|
}
|
|
|
|
.composer-mode-inline[data-kind='org'] .composer-mode-inline-label {
|
|
color: color-mix(in srgb, var(--green) 74%, var(--text-secondary) 26%);
|
|
}
|
|
|
|
.composer-mode-select-wrap {
|
|
position: relative;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
}
|
|
|
|
.composer-mode-select-wrap::after {
|
|
content: '';
|
|
position: absolute;
|
|
right: 11px;
|
|
top: 50%;
|
|
width: 6px;
|
|
height: 6px;
|
|
border-right: 1.5px solid var(--text-secondary);
|
|
border-bottom: 1.5px solid var(--text-secondary);
|
|
transform: translateY(-65%) rotate(45deg);
|
|
pointer-events: none;
|
|
}
|
|
|
|
.composer-mode-select {
|
|
appearance: none;
|
|
min-height: 30px;
|
|
max-width: 210px;
|
|
padding: 5px 28px 5px 12px;
|
|
border: 1px solid transparent;
|
|
border-radius: 12px;
|
|
background: color-mix(in srgb, var(--surface) 70%, var(--bg-elevated) 30%);
|
|
color: var(--text);
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
font-family: inherit;
|
|
cursor: pointer;
|
|
transition: border-color 150ms, background 150ms, box-shadow 150ms, transform 150ms;
|
|
}
|
|
|
|
.composer-mode-select:hover {
|
|
border-color: color-mix(in srgb, var(--border-hover) 70%, var(--accent-soft) 30%);
|
|
background: color-mix(in srgb, var(--surface-hover) 76%, var(--bg-elevated) 24%);
|
|
}
|
|
|
|
.composer-mode-select:focus {
|
|
outline: none;
|
|
border-color: color-mix(in srgb, var(--accent) 52%, var(--border) 48%);
|
|
box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent-soft) 78%, transparent 22%);
|
|
}
|
|
|
|
.composer-mode-select:disabled {
|
|
opacity: 0.5;
|
|
cursor: default;
|
|
}
|
|
|
|
.composer-mode-inline[data-kind='org'] .composer-mode-select {
|
|
max-width: 260px;
|
|
}
|
|
|
|
.composer-hint {
|
|
font-size: 10px;
|
|
color: var(--text-secondary);
|
|
opacity: 0.5;
|
|
flex: 1;
|
|
}
|
|
|
|
.composer-mode {
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
padding: 6px 10px;
|
|
border-radius: 10px;
|
|
background: color-mix(in srgb, var(--surface) 72%, var(--bg-elevated) 28%);
|
|
color: var(--text);
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.composer-mode[data-kind='mode'] {
|
|
color: var(--accent);
|
|
}
|
|
|
|
.composer-mode[data-kind='agent'] {
|
|
color: var(--yellow);
|
|
}
|
|
|
|
/* ── Locked-mode chip (replaces dropdown after chat has started) ───────── */
|
|
|
|
.composer-config-group[data-locked='true'] {
|
|
/* Softer card to signal "this is now a status display, not a control" */
|
|
background:
|
|
linear-gradient(180deg, color-mix(in srgb, var(--bg-elevated) 94%, transparent 6%), color-mix(in srgb, var(--surface) 92%, var(--bg-elevated) 8%));
|
|
border-color: color-mix(in srgb, var(--border) 90%, transparent 10%);
|
|
box-shadow: none;
|
|
}
|
|
|
|
.composer-mode-chip {
|
|
position: relative;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
padding: 5px 10px;
|
|
border-radius: 999px;
|
|
border: 1px solid color-mix(in srgb, var(--border) 78%, transparent 22%);
|
|
background: color-mix(in srgb, var(--surface) 60%, var(--bg-elevated) 40%);
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
color: var(--text);
|
|
white-space: nowrap;
|
|
cursor: default;
|
|
outline: none;
|
|
transition: border-color 150ms, background 150ms;
|
|
}
|
|
|
|
/* Invisible bridge that extends the chip's hover area upward so the popover
|
|
stays open as the mouse traverses the 8px gap between chip and popover. */
|
|
.composer-mode-chip::before {
|
|
content: '';
|
|
position: absolute;
|
|
bottom: 100%;
|
|
left: -8px;
|
|
right: -8px;
|
|
height: 12px;
|
|
background: transparent;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.composer-mode-chip:hover::before,
|
|
.composer-mode-chip:focus-within::before {
|
|
pointer-events: auto;
|
|
}
|
|
|
|
.composer-mode-chip:hover,
|
|
.composer-mode-chip:focus-visible {
|
|
border-color: color-mix(in srgb, var(--border-hover) 78%, var(--accent-soft) 22%);
|
|
background: color-mix(in srgb, var(--surface-hover) 70%, var(--bg-elevated) 30%);
|
|
}
|
|
|
|
.composer-mode-chip[data-kind='mode'] {
|
|
color: color-mix(in srgb, var(--accent) 92%, var(--text) 8%);
|
|
}
|
|
|
|
.composer-mode-chip[data-kind='agent'] {
|
|
color: color-mix(in srgb, var(--yellow) 88%, var(--text) 12%);
|
|
}
|
|
|
|
.composer-mode-chip-icon {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
width: 14px;
|
|
height: 14px;
|
|
border-radius: 6px;
|
|
background: color-mix(in srgb, currentColor 14%, transparent 86%);
|
|
color: currentColor;
|
|
flex-shrink: 0;
|
|
opacity: 0.85;
|
|
}
|
|
|
|
.composer-mode-chip-label {
|
|
letter-spacing: 0.01em;
|
|
}
|
|
|
|
.composer-mode-chip-popover {
|
|
position: absolute;
|
|
bottom: calc(100% + 8px);
|
|
left: 50%;
|
|
transform: translateX(-50%) translateY(4px);
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 4px;
|
|
min-width: 220px;
|
|
max-width: 280px;
|
|
padding: 10px 12px;
|
|
border-radius: 10px;
|
|
border: 1px solid var(--border);
|
|
background: var(--bg-elevated);
|
|
color: var(--text);
|
|
font-size: 11px;
|
|
font-weight: 400;
|
|
line-height: 1.45;
|
|
letter-spacing: 0;
|
|
text-align: left;
|
|
white-space: normal;
|
|
box-shadow:
|
|
0 8px 24px rgba(15, 23, 42, 0.18),
|
|
0 2px 6px rgba(15, 23, 42, 0.08);
|
|
opacity: 0;
|
|
pointer-events: none;
|
|
visibility: hidden;
|
|
transition: opacity 140ms ease, transform 140ms ease, visibility 140ms ease;
|
|
z-index: 20;
|
|
}
|
|
|
|
.composer-mode-chip-popover::after {
|
|
content: '';
|
|
position: absolute;
|
|
top: 100%;
|
|
left: 50%;
|
|
transform: translateX(-50%);
|
|
width: 0;
|
|
height: 0;
|
|
border-left: 6px solid transparent;
|
|
border-right: 6px solid transparent;
|
|
border-top: 6px solid var(--bg-elevated);
|
|
filter: drop-shadow(0 1px 0 var(--border));
|
|
}
|
|
|
|
.composer-mode-chip:hover .composer-mode-chip-popover,
|
|
.composer-mode-chip:focus-visible .composer-mode-chip-popover,
|
|
.composer-mode-chip:focus-within .composer-mode-chip-popover {
|
|
opacity: 1;
|
|
pointer-events: auto;
|
|
visibility: visible;
|
|
transform: translateX(-50%) translateY(0);
|
|
}
|
|
|
|
.composer-mode-chip-popover-title {
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
color: var(--text);
|
|
letter-spacing: 0.01em;
|
|
}
|
|
|
|
.composer-mode-chip-popover-body {
|
|
font-size: 11px;
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
.composer-mode-chip-popover-body strong {
|
|
color: var(--text);
|
|
font-weight: 600;
|
|
}
|
|
|
|
.composer-mode-chip-popover-divider {
|
|
height: 1px;
|
|
margin: 4px -12px 2px;
|
|
background: linear-gradient(
|
|
90deg,
|
|
transparent 0%,
|
|
color-mix(in srgb, var(--border) 80%, transparent 20%) 16%,
|
|
color-mix(in srgb, var(--border) 80%, transparent 20%) 84%,
|
|
transparent 100%
|
|
);
|
|
}
|
|
|
|
.composer-mode-chip-popover-action-title {
|
|
margin-top: 2px;
|
|
font-size: 10px;
|
|
font-weight: 700;
|
|
letter-spacing: 0.08em;
|
|
text-transform: uppercase;
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
.composer-mode-chip-popover-actions {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 4px;
|
|
margin: 2px -4px -2px;
|
|
}
|
|
|
|
.composer-mode-chip-popover-action {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
padding: 8px 10px;
|
|
border: 1px solid transparent;
|
|
border-radius: 8px;
|
|
background: transparent;
|
|
color: var(--text);
|
|
font: inherit;
|
|
font-size: 11px;
|
|
text-align: left;
|
|
cursor: pointer;
|
|
transition: background 140ms ease, border-color 140ms ease, transform 140ms ease;
|
|
}
|
|
|
|
.composer-mode-chip-popover-action:hover,
|
|
.composer-mode-chip-popover-action:focus-visible {
|
|
background: color-mix(in srgb, var(--accent-soft) 35%, var(--surface) 65%);
|
|
border-color: color-mix(in srgb, var(--accent) 36%, transparent 64%);
|
|
outline: none;
|
|
}
|
|
|
|
.composer-mode-chip-popover-action:active {
|
|
transform: scale(0.985);
|
|
}
|
|
|
|
.composer-mode-chip-popover-action-icon {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
width: 22px;
|
|
height: 22px;
|
|
border-radius: 7px;
|
|
background: color-mix(in srgb, var(--surface) 70%, var(--bg-elevated) 30%);
|
|
color: var(--accent);
|
|
flex-shrink: 0;
|
|
transition: background 140ms ease, color 140ms ease;
|
|
}
|
|
|
|
.composer-mode-chip-popover-action:hover .composer-mode-chip-popover-action-icon,
|
|
.composer-mode-chip-popover-action:focus-visible .composer-mode-chip-popover-action-icon {
|
|
background: color-mix(in srgb, var(--accent) 18%, var(--surface) 82%);
|
|
color: var(--accent);
|
|
}
|
|
|
|
.composer-mode-chip-popover-action-text {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 1px;
|
|
flex: 1;
|
|
min-width: 0;
|
|
}
|
|
|
|
.composer-mode-chip-popover-action-label {
|
|
font-size: 11.5px;
|
|
font-weight: 600;
|
|
color: var(--text);
|
|
line-height: 1.25;
|
|
}
|
|
|
|
.composer-mode-chip-popover-action-desc {
|
|
font-size: 10px;
|
|
color: var(--text-secondary);
|
|
line-height: 1.3;
|
|
}
|
|
|
|
.composer-mode-chip-popover-action-arrow {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
width: 14px;
|
|
height: 14px;
|
|
color: var(--text-secondary);
|
|
opacity: 0.6;
|
|
transform: translateX(-2px);
|
|
transition: transform 160ms ease, opacity 160ms ease, color 160ms ease;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.composer-mode-chip-popover-action:hover .composer-mode-chip-popover-action-arrow,
|
|
.composer-mode-chip-popover-action:focus-visible .composer-mode-chip-popover-action-arrow {
|
|
opacity: 1;
|
|
color: var(--accent);
|
|
transform: translateX(0);
|
|
}
|
|
|
|
/* Anchor the popover to the right side of the chip when the chat panel is
|
|
narrow, so the menu never overflows past the panel's right edge. Uses a
|
|
container query against the ctx-panel (or multi-card container) so it
|
|
correctly reacts to the panel's actual width, not the viewport's. */
|
|
@container ctxpanel (max-width: 540px) {
|
|
.composer-mode-chip-popover {
|
|
left: auto;
|
|
right: 0;
|
|
transform: translateY(4px);
|
|
}
|
|
.composer-mode-chip-popover::after {
|
|
left: auto;
|
|
right: 16px;
|
|
transform: none;
|
|
}
|
|
.composer-mode-chip:hover .composer-mode-chip-popover,
|
|
.composer-mode-chip:focus-visible .composer-mode-chip-popover,
|
|
.composer-mode-chip:focus-within .composer-mode-chip-popover {
|
|
transform: translateY(0);
|
|
}
|
|
}
|
|
|
|
.composer-send-btn {
|
|
width: 32px;
|
|
height: 32px;
|
|
border: none;
|
|
border-radius: var(--radius-sm);
|
|
background: var(--accent);
|
|
color: #fff;
|
|
cursor: pointer;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
flex-shrink: 0;
|
|
transition: all 150ms;
|
|
}
|
|
|
|
.composer-send-btn:disabled { opacity: 0.3; cursor: default; }
|
|
.composer-send-btn:not(:disabled):hover { filter: brightness(1.15); transform: scale(1.05); }
|
|
|
|
/* Container-driven wrap: composer reacts to its host panel's actual width,
|
|
not the viewport, so the wrap kicks in when the chat is dragged narrow. */
|
|
@container ctxpanel (max-width: 540px) {
|
|
.composer-bottom {
|
|
display: grid;
|
|
grid-template-columns: 36px minmax(0, 1fr) 32px 32px;
|
|
grid-template-areas:
|
|
"attach hint context send"
|
|
"config config config config";
|
|
align-items: center;
|
|
row-gap: 8px;
|
|
column-gap: 8px;
|
|
}
|
|
|
|
.composer-config-group {
|
|
grid-area: config;
|
|
width: 100%;
|
|
display: grid;
|
|
grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
|
|
align-items: center;
|
|
gap: 8px;
|
|
justify-content: stretch;
|
|
padding: 6px;
|
|
border-radius: 16px;
|
|
}
|
|
|
|
.composer-mode-inline {
|
|
display: grid;
|
|
grid-template-columns: auto minmax(0, 1fr);
|
|
align-items: center;
|
|
min-width: 0;
|
|
padding: 0;
|
|
}
|
|
|
|
.composer-mode-select-wrap {
|
|
width: 100%;
|
|
min-width: 0;
|
|
}
|
|
|
|
.composer-mode-select {
|
|
max-width: none;
|
|
width: 100%;
|
|
min-width: 0;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
}
|
|
|
|
.composer-config-divider {
|
|
height: 28px;
|
|
}
|
|
|
|
.composer-attach-btn { grid-area: attach; }
|
|
.composer-hint {
|
|
grid-area: hint;
|
|
min-width: 0;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
.composer-context-ring { grid-area: context; justify-self: end; }
|
|
.composer-send-btn { grid-area: send; justify-self: end; }
|
|
}
|
|
|
|
/* Fallback for usage outside ctx-panel (e.g., future hosts): keep the old
|
|
viewport-based wrap so the composer doesn't regress in standalone use. */
|
|
@media (max-width: 760px) {
|
|
.composer-bottom {
|
|
display: grid;
|
|
grid-template-columns: 36px minmax(0, 1fr) 32px 32px;
|
|
grid-template-areas:
|
|
"attach hint context send"
|
|
"config config config config";
|
|
align-items: center;
|
|
row-gap: 8px;
|
|
column-gap: 8px;
|
|
}
|
|
|
|
.composer-config-group {
|
|
grid-area: config;
|
|
width: 100%;
|
|
display: grid;
|
|
grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
|
|
align-items: center;
|
|
gap: 8px;
|
|
justify-content: stretch;
|
|
}
|
|
|
|
.composer-mode-inline {
|
|
display: grid;
|
|
grid-template-columns: auto minmax(0, 1fr);
|
|
min-width: 0;
|
|
}
|
|
|
|
.composer-mode-select-wrap,
|
|
.composer-mode-select {
|
|
width: 100%;
|
|
min-width: 0;
|
|
max-width: none;
|
|
}
|
|
|
|
.composer-attach-btn { grid-area: attach; }
|
|
.composer-hint { grid-area: hint; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
.composer-context-ring { grid-area: context; justify-self: end; }
|
|
.composer-send-btn { grid-area: send; justify-self: end; }
|
|
}
|
|
|
|
@container ctxpanel (max-width: 430px) {
|
|
.msg-composer {
|
|
padding-left: 14px;
|
|
padding-right: 14px;
|
|
}
|
|
|
|
.msg-composer .composer-input-area textarea {
|
|
padding: 13px 14px 2px;
|
|
}
|
|
|
|
.composer-bottom {
|
|
grid-template-columns: 36px minmax(0, 1fr) 32px;
|
|
grid-template-areas:
|
|
"attach hint send"
|
|
"config config config";
|
|
}
|
|
|
|
.composer-context-ring {
|
|
display: none;
|
|
}
|
|
|
|
.composer-config-group {
|
|
grid-template-columns: 1fr;
|
|
gap: 6px;
|
|
border-radius: 14px;
|
|
}
|
|
|
|
.composer-config-divider {
|
|
display: none;
|
|
}
|
|
|
|
.composer-mode-inline {
|
|
grid-template-columns: minmax(68px, auto) minmax(0, 1fr);
|
|
gap: 8px;
|
|
width: 100%;
|
|
}
|
|
}
|
|
|
|
@media (max-width: 430px) {
|
|
.composer-bottom {
|
|
grid-template-columns: 36px minmax(0, 1fr) 32px;
|
|
grid-template-areas:
|
|
"attach hint send"
|
|
"config config config";
|
|
}
|
|
|
|
.composer-context-ring {
|
|
display: none;
|
|
}
|
|
|
|
.composer-config-group {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.composer-config-divider {
|
|
display: none;
|
|
}
|
|
|
|
.composer-mode-inline {
|
|
grid-template-columns: minmax(68px, auto) minmax(0, 1fr);
|
|
width: 100%;
|
|
}
|
|
}
|
|
|
|
/* ── Composer status bar (when agent working) ─────────────────────────── */
|
|
.composer-status {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
padding: 8px 16px;
|
|
margin-bottom: 6px;
|
|
border-radius: 10px;
|
|
background: var(--surface);
|
|
border: 1px solid var(--border);
|
|
font-size: 12px;
|
|
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04);
|
|
}
|
|
|
|
.composer-status-indicator {
|
|
width: 7px;
|
|
height: 7px;
|
|
border-radius: 50%;
|
|
background: var(--green);
|
|
flex-shrink: 0;
|
|
box-shadow: 0 0 6px rgba(16, 185, 129, 0.4);
|
|
}
|
|
|
|
.composer-status-text {
|
|
flex: 1;
|
|
color: var(--text-secondary);
|
|
font-weight: 500;
|
|
letter-spacing: 0.01em;
|
|
}
|
|
|
|
.composer-stop-btn {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
padding: 4px 12px;
|
|
border: 1px solid var(--red);
|
|
border-radius: var(--radius-xs);
|
|
background: transparent;
|
|
color: var(--red);
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
font-family: inherit;
|
|
cursor: pointer;
|
|
transition: all 120ms;
|
|
}
|
|
|
|
.composer-stop-btn:hover { background: var(--red); color: #fff; }
|
|
.composer-stop-btn:disabled {
|
|
opacity: 0.45;
|
|
cursor: not-allowed;
|
|
}
|
|
.composer-stop-btn:disabled:hover {
|
|
background: transparent;
|
|
color: var(--red);
|
|
}
|
|
|
|
/* ── Composer disabled ───────────────────────────────────────────────── */
|
|
.msg-composer .composer-input-area textarea:disabled {
|
|
cursor: not-allowed;
|
|
opacity: 0.5;
|
|
}
|
|
|
|
.msg-composer .composer-input-area textarea:disabled::placeholder {
|
|
font-style: italic;
|
|
}
|
|
|
|
/* ── Composer working state glow ─────────────────────────────────────── */
|
|
.msg-composer.working .composer-input-area {
|
|
border-color: var(--green);
|
|
box-shadow: 0 0 0 2px rgba(52, 211, 153, 0.08);
|
|
}
|
|
|
|
/* ══════════════════════════════════════════════════════════════════════════
|
|
Split Layout (parent + child sessions)
|
|
══════════════════════════════════════════════════════════════════════════ */
|
|
.chat-main.chat-main-split { flex: 1; }
|
|
|
|
.child-sessions-container {
|
|
flex: 1;
|
|
display: flex;
|
|
flex-direction: column;
|
|
overflow-y: auto;
|
|
border-left: 1px solid var(--border);
|
|
min-width: 300px;
|
|
max-width: 50%;
|
|
}
|
|
|
|
.child-session-panel {
|
|
display: flex;
|
|
flex-direction: column;
|
|
border-bottom: 1px solid var(--border);
|
|
min-height: 200px;
|
|
max-height: 400px;
|
|
}
|
|
|
|
.child-session-header {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
padding: 8px 12px;
|
|
border-bottom: 1px solid var(--border);
|
|
font-size: 12px;
|
|
}
|
|
|
|
.child-session-agent { font-weight: 700; color: var(--accent); }
|
|
|
|
.child-session-title {
|
|
flex: 1;
|
|
color: var(--text);
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
}
|
|
|
|
.child-session-status {
|
|
font-size: 10px;
|
|
padding: 2px 6px;
|
|
border-radius: 999px;
|
|
background: var(--bg);
|
|
border: 1px solid var(--border);
|
|
}
|
|
|
|
.child-session-status.status-running { color: var(--yellow); border-color: var(--yellow); }
|
|
.child-session-status.status-done { color: var(--green); border-color: var(--green); }
|
|
.child-session-status.status-failed { color: var(--red); border-color: var(--red); }
|
|
|
|
.child-session-messages {
|
|
flex: 1;
|
|
overflow-y: auto;
|
|
min-height: 0;
|
|
}
|
|
|
|
/* ══════════════════════════════════════════════════════════════════════════
|
|
Agent Work Panel (Master-Detail sidebar for child sessions)
|
|
══════════════════════════════════════════════════════════════════════════ */
|
|
.awp {
|
|
display: flex;
|
|
flex-direction: column;
|
|
border-left: 1px solid var(--border);
|
|
width: clamp(280px, 30vw, 420px);
|
|
min-width: 280px;
|
|
min-height: 0;
|
|
background: var(--bg);
|
|
overflow: hidden;
|
|
}
|
|
|
|
.awp-header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 8px 12px;
|
|
border-bottom: 1px solid var(--border);
|
|
background: var(--bg-elevated);
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.awp-title {
|
|
font-size: 12px;
|
|
font-weight: 700;
|
|
color: var(--text);
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
}
|
|
|
|
.awp-count {
|
|
font-weight: 400;
|
|
font-size: 10px;
|
|
color: var(--text-secondary);
|
|
background: var(--bg);
|
|
padding: 1px 6px;
|
|
border-radius: 999px;
|
|
border: 1px solid var(--border);
|
|
}
|
|
|
|
.awp-controls {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
}
|
|
|
|
.awp-filter {
|
|
font-size: 10px;
|
|
padding: 2px 6px;
|
|
border-radius: 4px;
|
|
background: var(--bg);
|
|
color: var(--text-secondary);
|
|
border: 1px solid var(--border);
|
|
cursor: pointer;
|
|
}
|
|
.awp-filter:focus { outline: 1px solid var(--accent); }
|
|
|
|
.awp-search-toggle {
|
|
background: none;
|
|
border: none;
|
|
color: var(--text-secondary);
|
|
cursor: pointer;
|
|
padding: 2px;
|
|
border-radius: 4px;
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
.awp-search-toggle:hover, .awp-search-toggle.active {
|
|
color: var(--accent);
|
|
background: var(--bg);
|
|
}
|
|
.awp-search-toggle svg { width: 14px; height: 14px; }
|
|
|
|
.awp-search-bar {
|
|
padding: 4px 8px;
|
|
border-bottom: 1px solid var(--border);
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.awp-search-input {
|
|
width: 100%;
|
|
font-size: 11px;
|
|
padding: 4px 8px;
|
|
border-radius: 4px;
|
|
border: 1px solid var(--border);
|
|
background: var(--bg);
|
|
color: var(--text);
|
|
}
|
|
.awp-search-input:focus { outline: 1px solid var(--accent); border-color: var(--accent); }
|
|
|
|
/* ── Compact list ────────────────────────────────────── */
|
|
.awp-list {
|
|
flex: 1 1 260px;
|
|
min-height: 180px;
|
|
overflow-y: auto;
|
|
scrollbar-width: thin;
|
|
scrollbar-color: var(--border) transparent;
|
|
}
|
|
|
|
.awp-row {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
width: 100%;
|
|
padding: 6px 12px;
|
|
border: none;
|
|
border-bottom: 1px solid color-mix(in srgb, var(--border) 50%, transparent);
|
|
background: transparent;
|
|
color: var(--text);
|
|
cursor: pointer;
|
|
text-align: left;
|
|
font-size: 11px;
|
|
transition: background 0.12s;
|
|
}
|
|
.awp-row:hover { background: var(--bg-elevated); }
|
|
.awp-row-selected {
|
|
background: color-mix(in srgb, var(--accent) 8%, transparent);
|
|
border-left: 2px solid var(--accent);
|
|
padding-left: 10px;
|
|
}
|
|
.awp-row-active .awp-row-activity { color: var(--accent); font-weight: 600; }
|
|
|
|
.awp-dot {
|
|
width: 6px;
|
|
height: 6px;
|
|
border-radius: 50%;
|
|
background: var(--text-secondary);
|
|
flex-shrink: 0;
|
|
opacity: 0.5;
|
|
}
|
|
.awp-dot-active {
|
|
background: var(--green);
|
|
opacity: 1;
|
|
box-shadow: 0 0 4px var(--green);
|
|
animation: awp-pulse 2s ease-in-out infinite;
|
|
}
|
|
|
|
@keyframes awp-pulse {
|
|
0%, 100% { opacity: 1; }
|
|
50% { opacity: 0.5; }
|
|
}
|
|
|
|
.awp-row-info {
|
|
flex: 1;
|
|
min-width: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 1px;
|
|
}
|
|
|
|
.awp-row-name {
|
|
font-weight: 600;
|
|
font-size: 11px;
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
}
|
|
|
|
.awp-row-projection {
|
|
font-size: 9px;
|
|
color: var(--text-secondary);
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
text-transform: capitalize;
|
|
}
|
|
|
|
.awp-row-activity {
|
|
font-size: 10px;
|
|
color: var(--text-secondary);
|
|
white-space: nowrap;
|
|
max-width: 100px;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.awp-row-time {
|
|
font-size: 9px;
|
|
color: var(--text-muted, var(--text-secondary));
|
|
opacity: 0.6;
|
|
white-space: nowrap;
|
|
flex-shrink: 0;
|
|
min-width: 20px;
|
|
text-align: right;
|
|
}
|
|
|
|
.awp-empty {
|
|
padding: 16px;
|
|
text-align: center;
|
|
font-size: 11px;
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
/* ── Detail panel ────────────────────────────────────── */
|
|
.awp-detail {
|
|
flex: 1;
|
|
min-height: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
border-top: 1px solid var(--border);
|
|
overflow: hidden;
|
|
}
|
|
|
|
.awp-detail-header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 8px 12px;
|
|
border-bottom: 1px solid var(--border);
|
|
background: var(--bg-elevated);
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.awp-detail-identity {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
min-width: 0;
|
|
}
|
|
|
|
.awp-detail-avatar {
|
|
width: 28px;
|
|
height: 28px;
|
|
border-radius: 6px;
|
|
background: var(--accent);
|
|
color: #fff;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 13px;
|
|
font-weight: 700;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.awp-detail-meta {
|
|
display: flex;
|
|
flex-direction: column;
|
|
min-width: 0;
|
|
}
|
|
|
|
.awp-detail-name {
|
|
font-size: 12px;
|
|
font-weight: 700;
|
|
color: var(--text);
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
text-transform: capitalize;
|
|
}
|
|
|
|
.awp-detail-projection {
|
|
font-size: 10px;
|
|
color: var(--accent);
|
|
text-transform: capitalize;
|
|
}
|
|
|
|
.awp-detail-role {
|
|
font-size: 10px;
|
|
color: var(--green);
|
|
}
|
|
|
|
.awp-detail-employee {
|
|
font-size: 10px;
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
.awp-detail-actions {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.awp-detail-expand,
|
|
.awp-detail-close {
|
|
background: none;
|
|
border: none;
|
|
color: var(--text-secondary);
|
|
cursor: pointer;
|
|
padding: 4px;
|
|
border-radius: 4px;
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
.awp-detail-expand:hover,
|
|
.awp-detail-close:hover {
|
|
color: var(--text);
|
|
background: var(--bg);
|
|
}
|
|
.awp-detail-expand svg,
|
|
.awp-detail-close svg { width: 14px; height: 14px; }
|
|
|
|
.awp-detail-body {
|
|
flex: 1;
|
|
overflow-y: auto;
|
|
padding: 8px 12px;
|
|
scrollbar-width: thin;
|
|
scrollbar-color: var(--border) transparent;
|
|
}
|
|
|
|
.awp-detail-section { margin-bottom: 12px; }
|
|
|
|
.awp-detail-section-label {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
color: var(--text-secondary);
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.04em;
|
|
margin-bottom: 6px;
|
|
}
|
|
.awp-detail-section-label svg { width: 12px; height: 12px; }
|
|
|
|
.awp-detail-handoff {
|
|
font-size: 11px;
|
|
color: var(--text-secondary);
|
|
max-height: 220px;
|
|
overflow-y: auto;
|
|
}
|
|
|
|
.awp-detail-handoff-markdown {
|
|
padding: 2px 0;
|
|
}
|
|
|
|
.awp-detail-empty {
|
|
font-size: 11px;
|
|
color: var(--text-secondary);
|
|
text-align: center;
|
|
padding: 12px;
|
|
}
|
|
|
|
/* ── AWP terminal state icons ──────────────────────────────────────────── */
|
|
.awp-terminal-icon {
|
|
width: 16px;
|
|
flex-shrink: 0;
|
|
font-size: 11px;
|
|
font-weight: 700;
|
|
text-align: center;
|
|
line-height: 1;
|
|
}
|
|
.awp-terminal-done { color: var(--green); }
|
|
.awp-terminal-failed { color: var(--red); }
|
|
.awp-terminal-cancelled { color: var(--text-secondary); opacity: 0.6; }
|
|
|
|
/* ── AWP row terminal styling ──────────────────────────────────────────── */
|
|
.awp-row-terminal {
|
|
opacity: 0.7;
|
|
}
|
|
.awp-row-terminal:hover {
|
|
opacity: 0.9;
|
|
}
|
|
.awp-row-terminal .awp-row-activity {
|
|
font-weight: 500;
|
|
}
|
|
.awp-row-terminal.awp-terminal-done .awp-row-activity { color: var(--green); }
|
|
.awp-row-terminal.awp-terminal-failed .awp-row-activity { color: var(--red); }
|
|
|
|
/* ── AWP result banner ─────────────────────────────────────────────────── */
|
|
.awp-result-banner {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
padding: 10px 14px;
|
|
margin: 8px 12px 12px;
|
|
border-radius: 8px;
|
|
font-size: 12px;
|
|
font-weight: 500;
|
|
}
|
|
.awp-result-icon {
|
|
font-size: 14px;
|
|
font-weight: 700;
|
|
line-height: 1;
|
|
}
|
|
.awp-result-done {
|
|
background: rgba(16, 185, 129, 0.1);
|
|
color: var(--green);
|
|
border: 1px solid rgba(16, 185, 129, 0.2);
|
|
}
|
|
.awp-result-failed {
|
|
background: rgba(239, 68, 68, 0.1);
|
|
color: var(--red);
|
|
border: 1px solid rgba(239, 68, 68, 0.2);
|
|
}
|
|
.awp-result-cancelled {
|
|
background: rgba(128, 128, 128, 0.08);
|
|
color: var(--text-secondary);
|
|
border: 1px solid var(--border);
|
|
}
|
|
|
|
/* ── AWP detail avatar terminal states ─────────────────────────────────── */
|
|
.awp-detail-avatar.awp-terminal-done {
|
|
border: 2px solid var(--green);
|
|
}
|
|
.awp-detail-avatar.awp-terminal-failed {
|
|
border: 2px solid var(--red);
|
|
}
|
|
.awp-detail-avatar.awp-terminal-cancelled {
|
|
border: 2px solid var(--text-secondary);
|
|
opacity: 0.6;
|
|
}
|
|
|
|
/* ══════════════════════════════════════════════════════════════════════════
|
|
Kanban status badge
|
|
══════════════════════════════════════════════════════════════════════════ */
|
|
.kanban-status-badge {
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
margin-left: auto;
|
|
}
|
|
|
|
/* ══════════════════════════════════════════════════════════════════════════
|
|
Responsive
|
|
══════════════════════════════════════════════════════════════════════════ */
|
|
@media (max-width: 1024px) {
|
|
.session-sidebar { width: 60px; min-width: 60px; }
|
|
.session-new-btn span { display: none; }
|
|
.session-new-btn { justify-content: center; padding: 10px; }
|
|
.session-search-wrap { display: none; }
|
|
.session-group-label { display: none; }
|
|
.session-item-content { display: none; }
|
|
.session-item { padding: 10px; justify-content: center; margin: 1px 4px; width: calc(100% - 8px); border-left: none; }
|
|
.session-item.active { border-left: none; }
|
|
.session-dot { width: 10px; height: 10px; }
|
|
.session-nav-btn span { display: none; }
|
|
.session-nav-btn { justify-content: center; }
|
|
.session-expand-btn { display: none; }
|
|
.session-children { display: none; }
|
|
.session-child-count { display: none; }
|
|
.session-tree-primary { justify-content: center; }
|
|
.session-delete-btn { display: none; }
|
|
}
|
|
|
|
@media (max-width: 700px) {
|
|
.chat-page { flex-direction: column; }
|
|
.session-sidebar {
|
|
width: 100%;
|
|
max-height: 52px;
|
|
border-right: none;
|
|
border-bottom: 1px solid var(--border);
|
|
flex-direction: row;
|
|
overflow: hidden;
|
|
}
|
|
.session-new-btn { margin: 8px; padding: 6px 12px; }
|
|
.session-search-wrap { display: none; }
|
|
.session-list { display: flex; overflow-x: auto; padding: 4px 8px; gap: 4px; flex-direction: row; }
|
|
.session-list.session-list-virtualized { display: block; overflow-x: hidden; overflow-y: auto; padding: 4px 8px; }
|
|
.session-group { display: flex; gap: 2px; margin-bottom: 0; }
|
|
.session-group-label { display: none; }
|
|
.session-item {
|
|
white-space: nowrap;
|
|
padding: 4px 10px;
|
|
border-radius: 999px;
|
|
border: 1px solid var(--border);
|
|
flex-shrink: 0;
|
|
margin: 0;
|
|
width: auto;
|
|
}
|
|
.session-item.active { border-color: var(--accent); background: var(--accent-soft); border-left: none; }
|
|
.session-item-meta { display: none; }
|
|
.session-nav-btn { display: none; }
|
|
.session-expand-btn { display: none; }
|
|
.session-children { display: none; }
|
|
.session-child-count { display: none; }
|
|
.session-item.session-item-child { display: none; }
|
|
.session-tree-primary { flex-shrink: 0; }
|
|
.msg-row { padding: 8px 16px; }
|
|
.msg-body-user { max-width: 85%; }
|
|
.msg-composer { padding: 0 12px 12px; }
|
|
.msg-composer .composer-input-area textarea { font-size: 16px; }
|
|
}
|
|
|
|
/* ══════════════════════════════════════════════════════════════════════════
|
|
Checkpoint Panels (ckpt-*)
|
|
══════════════════════════════════════════════════════════════════════════ */
|
|
.ckpt-panel {
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius-sm);
|
|
overflow: hidden;
|
|
animation: msg-enter 200ms ease-out;
|
|
}
|
|
|
|
.ckpt-recruitment { border-left: 3px solid var(--accent); }
|
|
.ckpt-staffing { border-left: 3px solid var(--green); }
|
|
.ckpt-reorg { border-left: 3px solid var(--yellow); }
|
|
.ckpt-user-input { border-left: 3px solid var(--blue); }
|
|
|
|
/* ── Header ──────────────────────────────────────────────────────────── */
|
|
.ckpt-header {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
padding: 10px 14px;
|
|
background: var(--surface);
|
|
border-bottom: 1px solid var(--border);
|
|
}
|
|
|
|
.ckpt-icon {
|
|
width: 28px;
|
|
height: 28px;
|
|
border-radius: 6px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.ckpt-icon-recruit { background: var(--accent-soft); color: var(--accent); }
|
|
.ckpt-icon-staffing { background: rgba(52, 211, 153, 0.1); color: var(--green); }
|
|
.ckpt-icon-reorg { background: rgba(251, 191, 36, 0.1); color: var(--yellow); }
|
|
.ckpt-icon-user-input { background: rgba(59, 130, 246, 0.1); color: var(--blue); }
|
|
|
|
.ckpt-title {
|
|
font-size: 13px;
|
|
font-weight: 600;
|
|
color: var(--text);
|
|
flex: 1;
|
|
}
|
|
|
|
/* ── Badges ──────────────────────────────────────────────────────────── */
|
|
.ckpt-badge {
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
padding: 2px 8px;
|
|
border-radius: 999px;
|
|
border: 1px solid var(--border);
|
|
color: var(--text-secondary);
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.ckpt-badge-profile { color: var(--accent); border-color: var(--accent); background: var(--accent-soft); }
|
|
.ckpt-badge-responded { color: var(--green); border-color: var(--green); background: rgba(52, 211, 153, 0.06); }
|
|
.ckpt-badge-scope { color: var(--yellow); border-color: var(--yellow); background: rgba(251, 191, 36, 0.06); }
|
|
|
|
.ckpt-badge-proposed_hire { color: var(--accent); border-color: var(--accent); }
|
|
.ckpt-badge-existing_staff { color: var(--green); border-color: var(--green); }
|
|
.ckpt-badge-fallback_role_only { color: var(--text-secondary); }
|
|
.ckpt-badge-direct_role_execution { color: var(--blue); border-color: var(--blue); }
|
|
.ckpt-badge-employee { color: var(--green); border-color: var(--green); }
|
|
.ckpt-badge-template { color: var(--accent); border-color: var(--accent); }
|
|
.ckpt-badge-fallback { color: var(--text-secondary); }
|
|
|
|
/* ── Summary / Rationale ──────────────────────────────────────────────── */
|
|
.ckpt-summary {
|
|
padding: 10px 14px;
|
|
font-size: 13px;
|
|
line-height: 1.55;
|
|
color: var(--text);
|
|
border-bottom: 1px solid var(--border);
|
|
background: var(--bg);
|
|
}
|
|
|
|
.ckpt-rationale {
|
|
padding: 6px 14px;
|
|
font-size: 12px;
|
|
line-height: 1.5;
|
|
color: var(--text-secondary);
|
|
font-style: italic;
|
|
}
|
|
|
|
.ckpt-recruitment-reasons {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
|
|
gap: 1px;
|
|
background: var(--border);
|
|
border-bottom: 1px solid var(--border);
|
|
}
|
|
|
|
.ckpt-recruitment-reason {
|
|
min-width: 0;
|
|
padding: 10px 14px;
|
|
background: var(--bg);
|
|
}
|
|
|
|
.ckpt-recruitment-reason .ckpt-rationale {
|
|
padding: 0;
|
|
}
|
|
|
|
/* ── Proposals list ──────────────────────────────────────────────────── */
|
|
.ckpt-proposals {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 1px;
|
|
background: var(--border);
|
|
}
|
|
|
|
.ckpt-proposal-card {
|
|
padding: 10px 14px;
|
|
background: var(--bg);
|
|
}
|
|
|
|
.ckpt-proposal-header {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
margin-bottom: 6px;
|
|
}
|
|
|
|
.ckpt-role-name {
|
|
font-size: 13px;
|
|
font-weight: 600;
|
|
color: var(--text);
|
|
font-family: 'JetBrains Mono', 'SF Mono', monospace;
|
|
}
|
|
|
|
.ckpt-role-labels {
|
|
display: flex;
|
|
gap: 4px;
|
|
flex-wrap: wrap;
|
|
margin-bottom: 6px;
|
|
}
|
|
|
|
.ckpt-field-tag {
|
|
font-size: 10px;
|
|
font-weight: 500;
|
|
padding: 1px 6px;
|
|
border-radius: 3px;
|
|
background: var(--surface);
|
|
color: var(--text-secondary);
|
|
border: 1px solid var(--border);
|
|
}
|
|
|
|
/* ── Candidate / Employee ─────────────────────────────────────────────── */
|
|
.ckpt-candidate,
|
|
.ckpt-employee {
|
|
padding: 8px 10px;
|
|
border-radius: var(--radius-xs);
|
|
background: var(--surface);
|
|
border: 1px solid var(--border);
|
|
margin-top: 4px;
|
|
}
|
|
|
|
.ckpt-cand-name,
|
|
.ckpt-emp-name {
|
|
font-size: 13px;
|
|
font-weight: 600;
|
|
color: var(--text);
|
|
}
|
|
|
|
.ckpt-cand-meta {
|
|
display: flex;
|
|
gap: 4px;
|
|
flex-wrap: wrap;
|
|
margin-top: 4px;
|
|
}
|
|
|
|
.ckpt-cand-category {
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.04em;
|
|
color: var(--accent);
|
|
}
|
|
|
|
.ckpt-domain-tag {
|
|
font-size: 10px;
|
|
padding: 1px 6px;
|
|
border-radius: 3px;
|
|
background: rgba(52, 211, 153, 0.08);
|
|
color: var(--green);
|
|
font-weight: 500;
|
|
}
|
|
|
|
.ckpt-emp-row {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
}
|
|
|
|
.ckpt-emp-id {
|
|
font-size: 11px;
|
|
color: var(--text-secondary);
|
|
font-family: 'JetBrains Mono', 'SF Mono', monospace;
|
|
}
|
|
|
|
/* ── Experience bar ──────────────────────────────────────────────────── */
|
|
.ckpt-exp-bar-wrap {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
margin-top: 6px;
|
|
height: 16px;
|
|
background: var(--bg);
|
|
border-radius: 8px;
|
|
overflow: hidden;
|
|
border: 1px solid var(--border);
|
|
position: relative;
|
|
}
|
|
|
|
.ckpt-exp-bar {
|
|
height: 100%;
|
|
background: linear-gradient(90deg, var(--accent), var(--green));
|
|
border-radius: 8px 0 0 8px;
|
|
transition: width 500ms ease-out;
|
|
min-width: 4px;
|
|
}
|
|
|
|
.ckpt-exp-label {
|
|
position: absolute;
|
|
right: 6px;
|
|
font-size: 9px;
|
|
font-weight: 700;
|
|
color: var(--text);
|
|
}
|
|
|
|
.ckpt-agent-picker {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
margin-top: 10px;
|
|
}
|
|
|
|
.ckpt-recruiter-agent {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
padding: 10px 14px;
|
|
border-bottom: 1px solid var(--border);
|
|
background: color-mix(in srgb, var(--surface) 72%, var(--bg));
|
|
}
|
|
|
|
.ckpt-agent-label {
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
color: var(--text-secondary);
|
|
text-transform: uppercase;
|
|
letter-spacing: 0;
|
|
flex: 0 0 auto;
|
|
}
|
|
|
|
.ckpt-agent-select {
|
|
min-width: 180px;
|
|
max-width: 100%;
|
|
padding: 7px 10px;
|
|
border-radius: 8px;
|
|
border: 1px solid var(--border);
|
|
background: var(--surface);
|
|
color: var(--text);
|
|
font-size: 12px;
|
|
line-height: 1.2;
|
|
}
|
|
|
|
.ckpt-agent-select:disabled {
|
|
opacity: 0.7;
|
|
cursor: not-allowed;
|
|
}
|
|
|
|
/* ── Manual staffing grid ───────────────────────────────────────────────── */
|
|
.ckpt-staffing-grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
|
|
gap: 1px;
|
|
background: var(--border);
|
|
}
|
|
|
|
.ckpt-staffing-card {
|
|
min-width: 0;
|
|
padding: 10px 14px;
|
|
background: var(--bg);
|
|
}
|
|
|
|
.ckpt-staffing-selected {
|
|
padding: 8px 10px;
|
|
border-radius: var(--radius-xs);
|
|
background: var(--surface);
|
|
border: 1px solid var(--border);
|
|
margin-bottom: 8px;
|
|
}
|
|
|
|
.ckpt-staffing-search {
|
|
width: 100%;
|
|
padding: 7px 10px;
|
|
border-radius: var(--radius-xs);
|
|
border: 1px solid var(--border);
|
|
background: var(--surface);
|
|
color: var(--text);
|
|
font-size: 12px;
|
|
font-family: inherit;
|
|
outline: none;
|
|
}
|
|
|
|
.ckpt-staffing-search:focus { border-color: var(--accent); }
|
|
.ckpt-staffing-search:disabled { opacity: 0.7; cursor: not-allowed; }
|
|
|
|
.ckpt-staffing-options {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fit, minmax(126px, 1fr));
|
|
gap: 6px;
|
|
margin-top: 8px;
|
|
}
|
|
|
|
.ckpt-staffing-option {
|
|
min-width: 0;
|
|
min-height: 42px;
|
|
padding: 6px 8px;
|
|
border-radius: var(--radius-xs);
|
|
border: 1px solid var(--border);
|
|
background: var(--surface);
|
|
color: var(--text);
|
|
font-family: inherit;
|
|
cursor: pointer;
|
|
text-align: left;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 3px;
|
|
transition: border-color 120ms, background 120ms;
|
|
}
|
|
|
|
.ckpt-staffing-option:hover:not(:disabled) {
|
|
border-color: var(--accent);
|
|
background: var(--surface-hover);
|
|
}
|
|
|
|
.ckpt-staffing-option.active {
|
|
border-color: var(--green);
|
|
background: rgba(52, 211, 153, 0.08);
|
|
}
|
|
|
|
.ckpt-staffing-option:disabled {
|
|
opacity: 0.7;
|
|
cursor: not-allowed;
|
|
}
|
|
|
|
.ckpt-staffing-option-kind {
|
|
font-size: 9px;
|
|
font-weight: 700;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.05em;
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
.ckpt-staffing-option-name {
|
|
min-width: 0;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
font-size: 12px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
@media (max-width: 640px) {
|
|
.ckpt-recruiter-agent,
|
|
.ckpt-agent-picker {
|
|
align-items: stretch;
|
|
flex-direction: column;
|
|
gap: 6px;
|
|
}
|
|
|
|
.ckpt-agent-select {
|
|
width: 100%;
|
|
min-width: 0;
|
|
}
|
|
}
|
|
|
|
/* ── Reorg badges row ─────────────────────────────────────────────────── */
|
|
.ckpt-reorg-badges {
|
|
display: flex;
|
|
gap: 6px;
|
|
padding: 8px 14px;
|
|
border-bottom: 1px solid var(--border);
|
|
}
|
|
|
|
/* ── Change sections ─────────────────────────────────────────────────── */
|
|
.ckpt-changes-section {
|
|
padding: 8px 14px;
|
|
border-top: 1px solid var(--border);
|
|
}
|
|
|
|
.ckpt-changes-title {
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
color: var(--text-secondary);
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.05em;
|
|
margin-bottom: 6px;
|
|
}
|
|
|
|
.ckpt-change-row {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
padding: 3px 0;
|
|
font-size: 12px;
|
|
}
|
|
|
|
.ckpt-change-action {
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
padding: 1px 6px;
|
|
border-radius: 3px;
|
|
text-transform: uppercase;
|
|
}
|
|
|
|
.ckpt-action-add { background: rgba(52, 211, 153, 0.1); color: var(--green); }
|
|
.ckpt-action-remove { background: rgba(248, 113, 113, 0.1); color: var(--red); }
|
|
.ckpt-action-replace { background: rgba(251, 191, 36, 0.1); color: var(--yellow); }
|
|
.ckpt-action-update { background: var(--accent-soft); color: var(--accent); }
|
|
|
|
.ckpt-change-id {
|
|
font-family: 'JetBrains Mono', 'SF Mono', monospace;
|
|
font-size: 12px;
|
|
font-weight: 500;
|
|
color: var(--text);
|
|
}
|
|
|
|
.ckpt-change-arrow {
|
|
color: var(--text-secondary);
|
|
font-size: 12px;
|
|
}
|
|
|
|
.ckpt-change-reason {
|
|
color: var(--text-secondary);
|
|
font-size: 11px;
|
|
margin-left: auto;
|
|
max-width: 200px;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
/* ── Impact ──────────────────────────────────────────────────────────── */
|
|
.ckpt-impact {
|
|
display: flex;
|
|
gap: 16px;
|
|
padding: 8px 14px;
|
|
border-top: 1px solid var(--border);
|
|
font-size: 11px;
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
.ckpt-section,
|
|
.ckpt-task-section {
|
|
padding: 10px 14px 0;
|
|
}
|
|
|
|
.ckpt-section + .ckpt-section,
|
|
.ckpt-task-section + .ckpt-task-section {
|
|
border-top: 1px solid rgba(148, 163, 184, 0.12);
|
|
margin-top: 10px;
|
|
}
|
|
|
|
.ckpt-section-title,
|
|
.ckpt-task-section-title {
|
|
margin-bottom: 8px;
|
|
font-size: 10px;
|
|
font-weight: 700;
|
|
letter-spacing: 0.08em;
|
|
text-transform: uppercase;
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
.ckpt-markdown {
|
|
min-width: 0;
|
|
font-size: 13px;
|
|
line-height: 1.58;
|
|
color: var(--text);
|
|
}
|
|
|
|
.ckpt-markdown-muted {
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
.ckpt-markdown > :first-child { margin-top: 0; }
|
|
.ckpt-markdown > :last-child { margin-bottom: 0; }
|
|
.ckpt-markdown p { margin: 0 0 8px; }
|
|
.ckpt-markdown ul,
|
|
.ckpt-markdown ol {
|
|
margin: 0 0 8px;
|
|
padding-left: 20px;
|
|
}
|
|
.ckpt-markdown li + li { margin-top: 4px; }
|
|
.ckpt-markdown code {
|
|
font-size: 12px;
|
|
border-radius: 4px;
|
|
padding: 1px 4px;
|
|
background: var(--surface);
|
|
border: 1px solid var(--border);
|
|
}
|
|
.ckpt-markdown pre code {
|
|
padding: 0;
|
|
border: 0;
|
|
background: transparent;
|
|
}
|
|
|
|
.ckpt-task-prompt {
|
|
padding: 10px 14px;
|
|
font-size: 13px;
|
|
line-height: 1.55;
|
|
color: var(--text);
|
|
white-space: pre-wrap;
|
|
background: var(--bg);
|
|
}
|
|
|
|
.ckpt-task-list {
|
|
margin: 0;
|
|
padding-left: 18px;
|
|
color: var(--text);
|
|
}
|
|
|
|
.ckpt-task-list li + li {
|
|
margin-top: 6px;
|
|
}
|
|
|
|
.ckpt-task-tags {
|
|
display: flex;
|
|
gap: 6px;
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.ckpt-task-note {
|
|
padding: 10px 14px 0;
|
|
font-size: 12px;
|
|
line-height: 1.5;
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
.ckpt-choice-list {
|
|
display: grid;
|
|
gap: 12px;
|
|
}
|
|
|
|
.ckpt-choice-question {
|
|
display: grid;
|
|
gap: 8px;
|
|
min-width: 0;
|
|
}
|
|
|
|
.ckpt-question-header {
|
|
font-size: 13px;
|
|
font-weight: 700;
|
|
color: var(--text);
|
|
}
|
|
|
|
.ckpt-choice-grid {
|
|
display: grid;
|
|
gap: 8px;
|
|
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
|
|
}
|
|
|
|
.ckpt-choice-option {
|
|
display: grid;
|
|
grid-template-columns: 28px 1fr;
|
|
gap: 8px;
|
|
align-items: flex-start;
|
|
min-width: 0;
|
|
padding: 9px 10px;
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius-xs);
|
|
background: var(--bg);
|
|
color: var(--text);
|
|
text-align: left;
|
|
font: inherit;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.ckpt-choice-option:hover {
|
|
border-color: var(--accent);
|
|
background: var(--surface-hover);
|
|
}
|
|
|
|
.ckpt-choice-option.is-selected {
|
|
border-color: var(--accent);
|
|
background: var(--accent-soft);
|
|
}
|
|
|
|
.ckpt-choice-letter {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
width: 24px;
|
|
height: 24px;
|
|
border-radius: 999px;
|
|
background: var(--surface);
|
|
border: 1px solid var(--border);
|
|
color: var(--text-secondary);
|
|
font-size: 11px;
|
|
font-weight: 700;
|
|
}
|
|
|
|
.ckpt-choice-option.is-selected .ckpt-choice-letter {
|
|
background: var(--accent);
|
|
border-color: var(--accent);
|
|
color: #fff;
|
|
}
|
|
|
|
.ckpt-choice-copy {
|
|
display: grid;
|
|
gap: 3px;
|
|
min-width: 0;
|
|
}
|
|
|
|
.ckpt-choice-label {
|
|
font-size: 12px;
|
|
font-weight: 700;
|
|
color: var(--text);
|
|
}
|
|
|
|
.ckpt-choice-desc {
|
|
font-size: 12px;
|
|
line-height: 1.35;
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
.ckpt-other-field {
|
|
min-height: 64px;
|
|
}
|
|
|
|
.ckpt-runtime-details {
|
|
margin: 10px 14px 0;
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius-xs);
|
|
background: var(--surface);
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
.ckpt-runtime-details summary {
|
|
cursor: pointer;
|
|
padding: 8px 10px;
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.05em;
|
|
}
|
|
|
|
.ckpt-runtime-body {
|
|
display: grid;
|
|
gap: 5px;
|
|
padding: 0 10px 10px;
|
|
font-size: 12px;
|
|
line-height: 1.45;
|
|
}
|
|
|
|
/* ── Action buttons ──────────────────────────────────────────────────── */
|
|
.ckpt-actions {
|
|
display: flex;
|
|
gap: 8px;
|
|
padding: 10px 14px;
|
|
border-top: 1px solid var(--border);
|
|
background: var(--surface);
|
|
}
|
|
|
|
.ckpt-actions-inline-feedback {
|
|
align-items: stretch;
|
|
}
|
|
|
|
.ckpt-btn {
|
|
padding: 6px 16px;
|
|
border-radius: var(--radius-xs);
|
|
font-size: 12px;
|
|
font-weight: 600;
|
|
font-family: inherit;
|
|
cursor: pointer;
|
|
border: 1px solid transparent;
|
|
transition: all 120ms;
|
|
}
|
|
|
|
.ckpt-btn:disabled { opacity: 0.4; cursor: default; }
|
|
|
|
.ckpt-btn-approve {
|
|
background: var(--green);
|
|
color: #fff;
|
|
border-color: var(--green);
|
|
}
|
|
.ckpt-btn-approve:not(:disabled):hover { filter: brightness(1.1); }
|
|
|
|
.ckpt-btn-deny {
|
|
background: transparent;
|
|
color: var(--red);
|
|
border-color: var(--red);
|
|
}
|
|
.ckpt-btn-deny:hover { background: var(--red); color: #fff; }
|
|
|
|
.ckpt-btn-feedback {
|
|
background: transparent;
|
|
color: var(--accent);
|
|
border-color: var(--accent);
|
|
}
|
|
.ckpt-btn-feedback:hover { background: var(--accent-soft); }
|
|
|
|
.ckpt-btn-cancel {
|
|
background: transparent;
|
|
color: var(--text-secondary);
|
|
border-color: var(--border);
|
|
}
|
|
.ckpt-btn-cancel:hover { background: var(--surface-hover); }
|
|
|
|
/* ── Feedback area ───────────────────────────────────────────────────── */
|
|
.ckpt-feedback-area {
|
|
flex: 1;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 6px;
|
|
padding: 10px 14px;
|
|
border-top: 1px solid var(--border);
|
|
background: var(--surface);
|
|
}
|
|
|
|
.ckpt-feedback-input {
|
|
width: 100%;
|
|
padding: 8px 10px;
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius-xs);
|
|
background: var(--bg);
|
|
color: var(--text);
|
|
font-size: 12px;
|
|
font-family: inherit;
|
|
resize: vertical;
|
|
outline: none;
|
|
min-height: 48px;
|
|
}
|
|
|
|
.ckpt-feedback-input:focus { border-color: var(--accent); }
|
|
|
|
.ckpt-feedback-inline-input {
|
|
min-height: 34px;
|
|
flex: 1;
|
|
resize: vertical;
|
|
}
|
|
|
|
.ckpt-feedback-btns {
|
|
display: flex;
|
|
gap: 6px;
|
|
}
|
|
|
|
@media (max-width: 640px) {
|
|
.ckpt-actions-inline-feedback {
|
|
flex-direction: column;
|
|
}
|
|
}
|
|
|
|
/* ══════════════════════════════════════════════════════════════════════════
|
|
Work-Item Progress Card
|
|
══════════════════════════════════════════════════════════════════════════ */
|
|
|
|
.wi-progress-card {
|
|
width: 100%;
|
|
min-width: 0;
|
|
flex-shrink: 0;
|
|
background: var(--surface);
|
|
border: 1px solid var(--border);
|
|
border-radius: 10px;
|
|
padding: 12px 14px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 10px;
|
|
}
|
|
|
|
.wi-progress-header {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
font-size: 13px;
|
|
font-weight: 600;
|
|
color: var(--text-primary);
|
|
}
|
|
|
|
.wi-progress-header svg {
|
|
color: var(--accent);
|
|
}
|
|
|
|
/* ── Pipeline (horizontal projection chips) ────────────────────────────── */
|
|
|
|
.wi-progress-pipeline {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 0;
|
|
flex-wrap: wrap;
|
|
row-gap: 6px;
|
|
}
|
|
|
|
.wi-projection-group {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 0;
|
|
}
|
|
|
|
.wi-projection-chip {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
padding: 3px 10px;
|
|
border-radius: 12px;
|
|
font-size: 11px;
|
|
font-weight: 500;
|
|
border: 1px solid var(--border);
|
|
background: transparent;
|
|
cursor: pointer;
|
|
font-family: inherit;
|
|
transition: background 120ms, border-color 120ms;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.wi-projection-chip:hover {
|
|
background: var(--surface-hover, rgba(255, 255, 255, 0.04));
|
|
}
|
|
|
|
.wi-projection-label {
|
|
max-width: 120px;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
}
|
|
|
|
.wi-projection-icon {
|
|
font-size: 10px;
|
|
line-height: 1;
|
|
}
|
|
|
|
/* Projection status variants */
|
|
.wi-projection-active {
|
|
border-color: var(--accent);
|
|
color: var(--accent);
|
|
background: color-mix(in srgb, var(--accent) 10%, transparent);
|
|
}
|
|
|
|
.wi-projection-done {
|
|
border-color: var(--green);
|
|
color: var(--green);
|
|
background: color-mix(in srgb, var(--green) 10%, transparent);
|
|
}
|
|
|
|
.wi-projection-failed {
|
|
border-color: var(--red);
|
|
color: var(--red);
|
|
background: color-mix(in srgb, var(--red) 10%, transparent);
|
|
}
|
|
|
|
.wi-projection-waiting {
|
|
border-color: var(--yellow);
|
|
color: var(--yellow);
|
|
background: color-mix(in srgb, var(--yellow) 10%, transparent);
|
|
}
|
|
|
|
.wi-projection-pending {
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
@keyframes wf-pulse {
|
|
0%, 100% { opacity: 1; }
|
|
50% { opacity: 0.3; }
|
|
}
|
|
|
|
.wi-projection-pulse {
|
|
animation: wf-pulse 1.5s ease-in-out infinite;
|
|
}
|
|
|
|
/* ── Projection connector arrow ────────────────────────────────────────── */
|
|
|
|
.wi-projection-connector {
|
|
margin: 0 4px;
|
|
color: var(--text-tertiary, var(--text-secondary));
|
|
font-size: 12px;
|
|
opacity: 0.6;
|
|
}
|
|
|
|
.wi-progress-toggle {
|
|
align-self: flex-start;
|
|
margin-top: -2px;
|
|
}
|
|
|
|
/* ── Role summary list ───────────────────────────────────────────── */
|
|
|
|
.wf-role-summaries {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 10px;
|
|
}
|
|
|
|
.wf-role-summary {
|
|
border: 1px solid color-mix(in srgb, var(--border) 88%, transparent);
|
|
border-radius: 8px;
|
|
background: color-mix(in srgb, var(--surface) 92%, transparent);
|
|
padding: 10px 11px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 10px;
|
|
}
|
|
|
|
.wf-role-summary-head {
|
|
display: flex;
|
|
align-items: flex-start;
|
|
justify-content: space-between;
|
|
gap: 10px;
|
|
}
|
|
|
|
.wf-role-summary-identity {
|
|
min-width: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 6px;
|
|
}
|
|
|
|
.wf-role-summary-meta {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 6px 8px;
|
|
font-size: 11px;
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
.wf-role-open {
|
|
border: 1px solid var(--border);
|
|
background: var(--surface);
|
|
color: var(--text-secondary);
|
|
border-radius: 8px;
|
|
padding: 5px 9px;
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
font-family: inherit;
|
|
cursor: pointer;
|
|
transition: border-color 120ms, color 120ms, background 120ms;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.wf-role-open:hover {
|
|
color: var(--text);
|
|
border-color: var(--border-hover);
|
|
background: var(--surface-hover);
|
|
}
|
|
|
|
.wf-role-summary-body {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 10px;
|
|
}
|
|
|
|
.wf-role-summary-block {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 6px;
|
|
}
|
|
|
|
.wf-role-summary-block-label {
|
|
font-size: 11px;
|
|
font-weight: 700;
|
|
color: var(--text-secondary);
|
|
text-transform: uppercase;
|
|
}
|
|
|
|
.wf-role-summary-block-content {
|
|
font-size: 12px;
|
|
line-height: 1.55;
|
|
color: var(--text);
|
|
white-space: pre-wrap;
|
|
overflow-wrap: anywhere;
|
|
word-break: break-word;
|
|
}
|
|
|
|
/* ── Per-role turn list (chronological, kanban-column-labelled) ─── */
|
|
|
|
.wf-role-turns {
|
|
list-style: none;
|
|
margin: 6px 0 0 0;
|
|
padding: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 4px;
|
|
}
|
|
|
|
.wf-role-turn {
|
|
border-radius: 6px;
|
|
border: 1px solid var(--border);
|
|
background: var(--surface-muted, rgba(255, 255, 255, 0.03));
|
|
}
|
|
|
|
.wf-role-turn-button {
|
|
width: 100%;
|
|
display: grid;
|
|
grid-template-columns: auto 1fr auto;
|
|
gap: 10px;
|
|
align-items: center;
|
|
padding: 6px 10px;
|
|
background: transparent;
|
|
border: none;
|
|
color: inherit;
|
|
font: inherit;
|
|
text-align: left;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.wf-role-turn-button:hover {
|
|
background: var(--surface-hover, rgba(255, 255, 255, 0.06));
|
|
}
|
|
|
|
/* Kanban-column badge — mirrors the colour scheme of the board so
|
|
* the vocabulary stays consistent between the progress bar and the
|
|
* column headers. */
|
|
.wf-role-turn-column {
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
letter-spacing: 0.04em;
|
|
text-transform: uppercase;
|
|
padding: 2px 6px;
|
|
border-radius: 4px;
|
|
background: var(--surface-muted, rgba(255, 255, 255, 0.06));
|
|
color: var(--text-secondary);
|
|
white-space: nowrap;
|
|
}
|
|
|
|
/* Column badge colours mirror the agreed status palette:
|
|
* todo → muted gray (no work yet)
|
|
* in_progress → orange (matches ``--accent``, "actively working")
|
|
* in_review → yellow (matches ``--yellow``, "waiting on review")
|
|
* done → green (matches ``--green``, terminal-success)
|
|
* Prior values had in_progress = blue and in_review = orange, which
|
|
* conflicted with the chip pulse semantics elsewhere. Aligning the badge
|
|
* colours with the chip means a glance at the row tells you the same
|
|
* thing as the chip above it. */
|
|
.wf-role-turn-column-todo {
|
|
background: color-mix(in srgb, var(--text-secondary) 18%, transparent);
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
.wf-role-turn-column-in_progress {
|
|
background: color-mix(in srgb, var(--accent) 18%, transparent);
|
|
color: var(--accent);
|
|
}
|
|
|
|
.wf-role-turn-column-in_review {
|
|
background: color-mix(in srgb, var(--yellow) 18%, transparent);
|
|
color: var(--yellow);
|
|
}
|
|
|
|
.wf-role-turn-column-done {
|
|
background: color-mix(in srgb, var(--green) 18%, transparent);
|
|
color: var(--green);
|
|
}
|
|
|
|
.wf-role-turn-title {
|
|
min-width: 0;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
font-size: 12px;
|
|
color: var(--text-primary);
|
|
}
|
|
|
|
.wf-role-turn-time {
|
|
font-size: 11px;
|
|
color: var(--text-secondary);
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.wf-role-turn-active .wf-role-turn-title {
|
|
font-weight: 600;
|
|
}
|
|
|
|
.wf-role-turn-failed .wf-role-turn-column {
|
|
background: rgba(255, 100, 100, 0.18);
|
|
color: rgba(255, 150, 150, 0.95);
|
|
}
|
|
|
|
/* "Show N earlier turns" / "Collapse earlier turns" row. */
|
|
.wf-role-turn-expander {
|
|
border-style: dashed;
|
|
background: transparent;
|
|
}
|
|
|
|
.wf-role-turn-expander-button {
|
|
width: 100%;
|
|
padding: 6px 10px;
|
|
background: transparent;
|
|
border: none;
|
|
color: var(--text-secondary);
|
|
font: inherit;
|
|
font-size: 11px;
|
|
cursor: pointer;
|
|
text-align: center;
|
|
}
|
|
|
|
.wf-role-turn-expander-button:hover {
|
|
color: var(--text-primary);
|
|
background: var(--surface-hover, rgba(255, 255, 255, 0.04));
|
|
}
|
|
|
|
/* ── Latest event detail row ──────────────────────────────────────── */
|
|
|
|
.wf-event-row {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
font-size: 12px;
|
|
color: var(--text-secondary);
|
|
padding-top: 4px;
|
|
border-top: 1px solid var(--border);
|
|
}
|
|
|
|
.wf-event-icon {
|
|
display: flex;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.wf-event-icon svg {
|
|
width: 14px;
|
|
height: 14px;
|
|
}
|
|
|
|
.wf-event-text {
|
|
flex: 1;
|
|
min-width: 0;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.wf-event-text strong {
|
|
color: var(--text-primary);
|
|
font-weight: 600;
|
|
}
|
|
|
|
.wf-event-time {
|
|
flex-shrink: 0;
|
|
font-size: 11px;
|
|
opacity: 0.7;
|
|
}
|
|
|
|
@media (max-width: 640px) {
|
|
.wf-role-summary-head {
|
|
flex-direction: column;
|
|
}
|
|
|
|
.wf-role-open {
|
|
width: fit-content;
|
|
}
|
|
}
|
|
|
|
/* ── Attachment preview strip in composer ──────────────── */
|
|
.composer-attachments {
|
|
display: flex;
|
|
gap: 10px;
|
|
padding: 10px 12px 6px;
|
|
overflow-x: auto;
|
|
scrollbar-width: thin;
|
|
}
|
|
.attachment-chip {
|
|
position: relative;
|
|
display: grid;
|
|
grid-template-columns: auto minmax(0, 1fr) auto;
|
|
align-items: center;
|
|
gap: 10px;
|
|
padding: 10px 12px;
|
|
border-radius: 14px;
|
|
background:
|
|
linear-gradient(180deg, color-mix(in srgb, var(--bg-elevated) 85%, transparent), color-mix(in srgb, var(--surface) 92%, transparent));
|
|
border: 1px solid var(--border);
|
|
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.03);
|
|
min-width: 220px;
|
|
max-width: min(320px, 72vw);
|
|
flex-shrink: 0;
|
|
}
|
|
.attachment-chip.error {
|
|
border-color: color-mix(in srgb, var(--red) 55%, var(--border));
|
|
background: color-mix(in srgb, var(--red) 10%, var(--bg-elevated));
|
|
}
|
|
.attachment-chip-remove {
|
|
position: absolute;
|
|
top: 8px;
|
|
right: 8px;
|
|
width: 22px;
|
|
height: 22px;
|
|
border-radius: 50%;
|
|
background: color-mix(in srgb, var(--bg-elevated) 88%, transparent);
|
|
color: var(--text-secondary);
|
|
border: none;
|
|
cursor: pointer;
|
|
opacity: 0;
|
|
transition: opacity 0.15s ease, background 0.15s ease, color 0.15s ease;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
.attachment-chip:hover .attachment-chip-remove,
|
|
.attachment-chip-remove:focus-visible { opacity: 1; }
|
|
.attachment-chip-remove:hover {
|
|
background: color-mix(in srgb, var(--red) 16%, var(--bg-elevated));
|
|
color: var(--red);
|
|
}
|
|
.attachment-thumb {
|
|
width: 52px;
|
|
height: 52px;
|
|
border-radius: 12px;
|
|
object-fit: cover;
|
|
cursor: pointer;
|
|
border: 1px solid color-mix(in srgb, var(--border) 70%, transparent);
|
|
background: color-mix(in srgb, var(--bg-elevated) 80%, transparent);
|
|
}
|
|
.attachment-file-icon {
|
|
width: 52px;
|
|
height: 52px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
border-radius: 14px;
|
|
background: color-mix(in srgb, var(--bg-elevated) 88%, transparent);
|
|
border: 1px solid color-mix(in srgb, var(--border) 75%, transparent);
|
|
color: var(--text);
|
|
font-size: 11px;
|
|
font-weight: 700;
|
|
letter-spacing: 0.08em;
|
|
text-transform: uppercase;
|
|
}
|
|
.attachment-file-icon.tone-image {
|
|
background: color-mix(in srgb, var(--green) 12%, var(--bg-elevated));
|
|
color: var(--green);
|
|
}
|
|
.attachment-file-icon.tone-video {
|
|
background: color-mix(in srgb, var(--accent) 16%, var(--bg-elevated));
|
|
color: color-mix(in srgb, var(--accent) 70%, var(--text));
|
|
}
|
|
.attachment-file-icon.tone-pdf {
|
|
background: color-mix(in srgb, var(--red) 12%, var(--bg-elevated));
|
|
color: var(--red);
|
|
}
|
|
.attachment-file-icon.tone-office {
|
|
background: color-mix(in srgb, var(--yellow) 14%, var(--bg-elevated));
|
|
color: var(--yellow);
|
|
}
|
|
.attachment-file-icon.tone-data {
|
|
background: color-mix(in srgb, var(--accent) 14%, var(--bg-elevated));
|
|
color: var(--accent);
|
|
}
|
|
.attachment-file-icon.tone-text {
|
|
background: color-mix(in srgb, var(--text-secondary) 16%, var(--bg-elevated));
|
|
color: var(--text);
|
|
}
|
|
.attachment-file-icon.tone-code {
|
|
background: color-mix(in srgb, var(--accent) 12%, var(--bg-elevated));
|
|
color: color-mix(in srgb, var(--accent) 40%, var(--text));
|
|
}
|
|
.attachment-chip-info {
|
|
display: flex;
|
|
flex-direction: column;
|
|
min-width: 0;
|
|
gap: 4px;
|
|
}
|
|
.attachment-chip-name {
|
|
font-size: 12px;
|
|
font-weight: 600;
|
|
color: var(--text);
|
|
line-height: 1.35;
|
|
word-break: break-word;
|
|
display: -webkit-box;
|
|
-webkit-line-clamp: 2;
|
|
-webkit-box-orient: vertical;
|
|
overflow: hidden;
|
|
}
|
|
.attachment-chip-size {
|
|
font-size: 11px;
|
|
color: var(--text-secondary);
|
|
}
|
|
.attachment-chip.error .attachment-chip-size {
|
|
color: var(--red);
|
|
}
|
|
.attachment-progress-ring {
|
|
position: relative;
|
|
width: 32px;
|
|
height: 32px;
|
|
flex-shrink: 0;
|
|
}
|
|
.attachment-progress-ring svg {
|
|
width: 32px;
|
|
height: 32px;
|
|
transform: rotate(-90deg);
|
|
}
|
|
.attachment-progress-track,
|
|
.attachment-progress-value {
|
|
fill: none;
|
|
stroke-width: 2.5;
|
|
}
|
|
.attachment-progress-track {
|
|
stroke: color-mix(in srgb, var(--border) 85%, transparent);
|
|
}
|
|
.attachment-progress-value {
|
|
stroke: var(--accent);
|
|
stroke-linecap: round;
|
|
transition: stroke-dashoffset 0.2s ease;
|
|
}
|
|
.attachment-progress-ring.ready .attachment-progress-value {
|
|
stroke: var(--green);
|
|
}
|
|
.attachment-progress-ring.error .attachment-progress-value {
|
|
stroke: var(--red);
|
|
}
|
|
.attachment-progress-center {
|
|
position: absolute;
|
|
inset: 0;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 9px;
|
|
font-weight: 700;
|
|
color: var(--text);
|
|
}
|
|
.attachment-progress-ring.ready .attachment-progress-center {
|
|
color: var(--green);
|
|
}
|
|
.attachment-progress-ring.error .attachment-progress-center {
|
|
color: var(--red);
|
|
}
|
|
.attachment-progress-center svg {
|
|
width: 13px;
|
|
height: 13px;
|
|
transform: none;
|
|
}
|
|
.composer-attach-btn {
|
|
background: color-mix(in srgb, var(--bg-elevated) 88%, transparent);
|
|
border: 1px solid var(--border);
|
|
width: 34px;
|
|
height: 34px;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
cursor: pointer;
|
|
padding: 0;
|
|
border-radius: 10px;
|
|
color: var(--text-secondary);
|
|
transition: border-color 0.15s ease, color 0.15s ease, background 0.15s ease;
|
|
}
|
|
.composer-attach-btn:hover:not(:disabled) {
|
|
color: var(--text);
|
|
border-color: var(--border-hover);
|
|
background: color-mix(in srgb, var(--surface-hover) 88%, transparent);
|
|
}
|
|
|
|
/* ── Attachment display in message bubbles ─────────────── */
|
|
.msg-attachments { margin-top: 10px; }
|
|
.msg-attachment-grid {
|
|
display: grid;
|
|
gap: 8px;
|
|
}
|
|
.msg-attachment-grid.cols-2 {
|
|
grid-template-columns: 1fr 1fr;
|
|
}
|
|
.msg-attachment-image {
|
|
max-width: 320px;
|
|
border-radius: 12px;
|
|
cursor: pointer;
|
|
border: 1px solid color-mix(in srgb, var(--border) 80%, transparent);
|
|
transition: opacity 0.15s ease, transform 0.15s ease;
|
|
}
|
|
.msg-attachment-video {
|
|
width: 100%;
|
|
max-width: 320px;
|
|
border-radius: 12px;
|
|
border: 1px solid color-mix(in srgb, var(--border) 80%, transparent);
|
|
background: color-mix(in srgb, var(--bg-elevated) 88%, transparent);
|
|
}
|
|
.msg-attachment-image:hover {
|
|
opacity: 0.92;
|
|
transform: translateY(-1px);
|
|
}
|
|
.msg-attachment-files {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fit, minmax(220px, max-content));
|
|
gap: 8px;
|
|
margin-top: 8px;
|
|
}
|
|
.msg-attachment-file-chip {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
padding: 10px 12px;
|
|
border-radius: 12px;
|
|
background: color-mix(in srgb, var(--surface) 94%, transparent);
|
|
border: 1px solid color-mix(in srgb, var(--border) 85%, transparent);
|
|
font-size: 12px;
|
|
text-decoration: none;
|
|
color: var(--text);
|
|
transition: background 0.15s ease, border-color 0.15s ease, transform 0.15s ease;
|
|
}
|
|
.msg-attachment-file-chip:hover {
|
|
background: color-mix(in srgb, var(--surface-hover) 96%, transparent);
|
|
border-color: var(--border-hover);
|
|
transform: translateY(-1px);
|
|
}
|
|
.msg-attachment-file-size {
|
|
color: var(--text-secondary);
|
|
font-size: 11px;
|
|
margin-left: 4px;
|
|
}
|
|
|
|
/* ── Image lightbox ────────────────────────────────────── */
|
|
@media (max-width: 640px) {
|
|
.attachment-chip {
|
|
min-width: min(250px, 82vw);
|
|
max-width: 82vw;
|
|
}
|
|
|
|
.msg-attachment-files {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
}
|
|
|
|
.lightbox-overlay {
|
|
position: fixed;
|
|
inset: 0;
|
|
background: rgba(0, 0, 0, 0.8);
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
z-index: 2000;
|
|
cursor: zoom-out;
|
|
}
|
|
.lightbox-img {
|
|
max-width: 90vw;
|
|
max-height: 90vh;
|
|
border-radius: 8px;
|
|
}
|
|
|
|
/* ── Inline delete confirmation ─────────────────────────────── */
|
|
.session-confirm-delete {
|
|
display: flex;
|
|
gap: 4px;
|
|
flex-shrink: 0;
|
|
margin-left: auto;
|
|
animation: msgListFadeIn 0.15s ease-out;
|
|
}
|
|
.session-confirm-yes {
|
|
font-size: 11px;
|
|
padding: 1px 8px;
|
|
border-radius: 4px;
|
|
border: none;
|
|
background: #e53935;
|
|
color: white;
|
|
cursor: pointer;
|
|
font-weight: 600;
|
|
}
|
|
.session-confirm-yes:hover { background: #c62828; }
|
|
.session-confirm-no {
|
|
font-size: 11px;
|
|
padding: 1px 6px;
|
|
border-radius: 4px;
|
|
border: 1px solid var(--border, #ddd);
|
|
background: transparent;
|
|
color: var(--text-secondary);
|
|
cursor: pointer;
|
|
}
|
|
.session-confirm-no:hover { background: var(--surface-hover, #f0f0f0); }
|
|
|
|
/* ── Session switch fade-in ────────────────────────────────── */
|
|
@keyframes msgListFadeIn {
|
|
from { opacity: 0; }
|
|
to { opacity: 1; }
|
|
}
|
|
.msg-list { animation: msgListFadeIn 0.2s ease-out; }
|
|
|
|
/* ══════════════════════════════════════════════════════════════════════════
|
|
Message Content Collapsing & Code Block Truncation
|
|
══════════════════════════════════════════════════════════════════════════ */
|
|
|
|
/* ── "Show more / Show less" toggle for long messages ────────────────── */
|
|
.msg-collapse-toggle {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
margin-top: 8px;
|
|
padding: 4px 12px;
|
|
border: 1px solid var(--border);
|
|
border-radius: 999px;
|
|
background: var(--surface);
|
|
color: var(--accent);
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
font-family: inherit;
|
|
cursor: pointer;
|
|
transition: all 120ms;
|
|
}
|
|
|
|
.msg-collapse-toggle:hover {
|
|
background: var(--accent-soft);
|
|
border-color: var(--accent);
|
|
}
|
|
|
|
/* ── Code block omitted lines indicator ──────────────────────────────── */
|
|
.code-block-omitted {
|
|
display: block;
|
|
padding: 6px 0;
|
|
color: var(--accent);
|
|
font-style: italic;
|
|
font-weight: 500;
|
|
cursor: pointer;
|
|
opacity: 0.85;
|
|
transition: opacity 120ms;
|
|
user-select: none;
|
|
}
|
|
|
|
.code-block-omitted:hover {
|
|
opacity: 1;
|
|
text-decoration: underline;
|
|
}
|
|
|
|
/* ── Code block collapse button (shown when expanded) ────────────────── */
|
|
.code-block-collapse-btn {
|
|
display: block;
|
|
width: 100%;
|
|
padding: 4px 12px;
|
|
border: none;
|
|
border-top: 1px solid var(--border);
|
|
background: var(--surface);
|
|
color: var(--accent);
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
font-family: inherit;
|
|
cursor: pointer;
|
|
text-align: center;
|
|
transition: background 120ms;
|
|
}
|
|
|
|
.code-block-collapse-btn:hover {
|
|
background: var(--accent-soft);
|
|
}
|
|
|
|
/* ── Context window ring (in composer bottom bar) ────────────────────── */
|
|
.composer-context-ring {
|
|
position: relative;
|
|
width: 28px;
|
|
height: 28px;
|
|
flex-shrink: 0;
|
|
cursor: default;
|
|
}
|
|
|
|
.composer-context-ring svg {
|
|
width: 28px;
|
|
height: 28px;
|
|
transform: rotate(-90deg);
|
|
}
|
|
|
|
.composer-context-ring-track,
|
|
.composer-context-ring-value {
|
|
fill: none;
|
|
stroke-width: 2.5;
|
|
}
|
|
|
|
.composer-context-ring-track {
|
|
stroke: color-mix(in srgb, var(--border) 85%, transparent);
|
|
}
|
|
|
|
.composer-context-ring-value {
|
|
stroke: var(--accent);
|
|
stroke-linecap: round;
|
|
transition: stroke-dashoffset 0.4s ease, stroke 0.4s ease;
|
|
}
|
|
|
|
.composer-context-ring.low .composer-context-ring-value {
|
|
stroke: var(--yellow);
|
|
}
|
|
|
|
.composer-context-ring.critical .composer-context-ring-value {
|
|
stroke: var(--red);
|
|
}
|
|
|
|
.composer-context-ring-label {
|
|
position: absolute;
|
|
inset: 0;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 7px;
|
|
font-weight: 700;
|
|
color: var(--text-secondary);
|
|
line-height: 1;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.composer-context-ring.low .composer-context-ring-label {
|
|
color: var(--yellow);
|
|
}
|
|
|
|
.composer-context-ring.critical .composer-context-ring-label {
|
|
color: var(--red);
|
|
}
|
|
|
|
|
|
.composer-send-btn:focus-visible,
|
|
.composer-attach-btn:focus-visible,
|
|
.composer-stop-btn:focus-visible,
|
|
.msg-action-btn:focus-visible,
|
|
.session-item:focus-visible,
|
|
.awp-row:focus-visible,
|
|
.awp-filter:focus-visible {
|
|
outline: 2px solid var(--accent);
|
|
outline-offset: 2px;
|
|
}
|
|
|
|
/* ── Work-item-driven Execution Progress additions ─────────────────────
|
|
* Styles supporting the role / work-item rollup (see
|
|
* ``WorkItemProgressCard.tsx`` and ``AgentWorkPanelRoleView``).
|
|
* Colour scheme mirrors the chip vocabulary so the row, chip, and badge
|
|
* speak the same language. */
|
|
|
|
.wf-role-turn-tag {
|
|
display: inline-block;
|
|
margin-right: 6px;
|
|
padding: 1px 6px;
|
|
border-radius: 3px;
|
|
background: color-mix(in srgb, var(--yellow) 22%, transparent);
|
|
color: var(--yellow);
|
|
font-size: 10px;
|
|
font-weight: 600;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.04em;
|
|
}
|
|
|
|
.wf-role-turn-chevron {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
color: var(--text-secondary);
|
|
margin-left: 4px;
|
|
}
|
|
|
|
.wf-role-turn-expanded {
|
|
border-color: color-mix(in srgb, var(--accent) 35%, var(--border));
|
|
}
|
|
|
|
.wf-role-turn-activity {
|
|
padding: 8px 10px 10px;
|
|
border-top: 1px dashed var(--border);
|
|
background: var(--surface, rgba(255, 255, 255, 0.02));
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 6px;
|
|
}
|
|
|
|
.wf-role-turn-activity-sections {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 8px;
|
|
}
|
|
|
|
.wf-role-turn-activity-section {
|
|
padding: 6px 0 0;
|
|
border-top: 1px solid color-mix(in srgb, var(--border) 70%, transparent);
|
|
}
|
|
|
|
.wf-role-turn-activity-section:first-child {
|
|
padding-top: 0;
|
|
border-top: 0;
|
|
}
|
|
|
|
.wf-role-turn-activity-section-head {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
margin-bottom: 4px;
|
|
min-width: 0;
|
|
font-size: 11px;
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
.wf-role-turn-activity-section-title {
|
|
color: var(--text-primary);
|
|
font-weight: 600;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.wf-role-turn-activity-section-role,
|
|
.wf-role-turn-activity-section-count {
|
|
flex: 0 0 auto;
|
|
padding: 1px 6px;
|
|
border-radius: 999px;
|
|
background: color-mix(in srgb, var(--border) 55%, transparent);
|
|
}
|
|
|
|
.wf-role-turn-empty-activity {
|
|
color: var(--text-secondary);
|
|
font-size: 12px;
|
|
padding: 4px 0;
|
|
}
|
|
|
|
.wf-role-turn-open-session {
|
|
align-self: flex-start;
|
|
padding: 4px 10px;
|
|
border-radius: 4px;
|
|
border: 1px solid var(--border);
|
|
background: transparent;
|
|
color: var(--text-secondary);
|
|
font-size: 11px;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.wf-role-turn-open-session:hover {
|
|
background: var(--surface-hover, rgba(255, 255, 255, 0.06));
|
|
color: var(--text-primary);
|
|
}
|
|
|
|
/* AgentWorkPanel role-view dot colours align with the role's
|
|
* aggregated status. ``.awp-dot-active`` was a green pulse before; we
|
|
* override it for the role-view to use the orange accent because
|
|
* "active" in that context means "this role is working right now" —
|
|
* orange matches the chip. The pulse animation is preserved (defined in
|
|
* ``@keyframes awp-pulse`` above) so the dot still alternates opacity
|
|
* and reads as alive at a glance. */
|
|
.awp-dot-active {
|
|
background: var(--accent);
|
|
opacity: 1;
|
|
box-shadow: 0 0 4px var(--accent);
|
|
animation: awp-pulse 2s ease-in-out infinite;
|
|
}
|
|
.awp-dot-waiting {
|
|
background: var(--yellow);
|
|
opacity: 1;
|
|
}
|
|
.awp-dot-pending {
|
|
background: var(--text-secondary);
|
|
opacity: 0.6;
|
|
}
|
|
.awp-dot-done {
|
|
background: var(--green);
|
|
opacity: 1;
|
|
}
|
|
.awp-dot-failed {
|
|
background: var(--red);
|
|
opacity: 1;
|
|
}
|
|
|
|
.awp-row-terminal.awp-terminal-active .awp-row-activity { color: var(--accent); }
|
|
.awp-row-terminal.awp-terminal-waiting .awp-row-activity { color: var(--yellow); }
|