AgentIC / web /src /hitl.css
vxkyyy's picture
feat: add Supabase auth + 5 new pipeline stages
1d4d3e9
/* ════════════════════════════════════════════════════════════════════
HUMAN-IN-THE-LOOP APPROVAL UI
Warm, minimal, premium β€” Claude.ai / Linear.app aesthetic
════════════════════════════════════════════════════════════════════ */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=JetBrains+Mono:wght@400;500&display=swap');
/* ── Root ────────────────────────────────────────── */
.hitl-root {
--bg: #faf9f7;
--bg-sidebar: #f5f4f1;
--bg-elevated: #ffffff;
--text-primary: #1a1814;
--text-secondary:#6b6560;
--text-tertiary: #a39e98;
--border: #e8e6e1;
--border-subtle: #eeece8;
--amber: #d47c3a;
--green: #4a7c59;
--red: #c0392b;
--blue: #5b8fb9;
--purple: #8b6cc1;
min-height: calc(100vh - 56px);
background: var(--bg);
color: var(--text-primary);
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* ── Prompt Screen ───────────────────────────────── */
.hitl-prompt-screen {
display: flex;
flex-direction: column;
align-items: center;
padding: 5rem 1.5rem 3rem;
gap: 2rem;
max-width: 600px;
margin: 0 auto;
}
.hitl-prompt-hero {
text-align: center;
}
.hitl-hero-title {
font-size: 1.5rem;
font-weight: 600;
color: var(--text-primary);
letter-spacing: -0.025em;
margin: 0;
}
.hitl-hero-sub {
color: var(--text-secondary);
font-size: 0.875rem;
margin-top: 0.5rem;
line-height: 1.6;
}
.hitl-prompt-card {
width: 100%;
display: flex;
flex-direction: column;
gap: 1rem;
}
.hitl-examples {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
}
.hitl-example-chip {
background: var(--bg);
border: 1px solid var(--border);
color: var(--text-secondary);
padding: 0.375rem 0.75rem;
border-radius: 999px;
font-size: 0.75rem;
font-family: inherit;
cursor: pointer;
transition: all 150ms;
}
.hitl-example-chip:hover {
border-color: var(--text-secondary);
color: var(--text-primary);
background: #f0efec;
}
.hitl-prompt-textarea {
width: 100%;
background: var(--bg-elevated);
border: 1px solid var(--border);
color: var(--text-primary);
padding: 0.875rem 1rem;
border-radius: 10px;
font-family: inherit;
font-size: 0.875rem;
resize: vertical;
outline: none;
transition: border-color 150ms;
line-height: 1.6;
box-sizing: border-box;
}
.hitl-prompt-textarea:focus {
border-color: var(--amber);
}
.hitl-prompt-textarea::placeholder {
color: var(--text-tertiary);
}
.hitl-design-name-row {
display: flex;
align-items: center;
gap: 0.5rem;
}
.hitl-design-label {
color: var(--text-secondary);
font-size: 0.75rem;
font-weight: 500;
white-space: nowrap;
}
.hitl-design-input {
flex: 1;
background: var(--bg);
border: 1px solid var(--border);
color: var(--text-primary);
padding: 0.375rem 0.625rem;
border-radius: 6px;
font-family: 'JetBrains Mono', 'Fira Code', monospace;
font-size: 0.8125rem;
outline: none;
}
.hitl-design-input:focus {
border-color: var(--amber);
}
.hitl-options-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
}
.hitl-toggle {
display: flex;
align-items: center;
gap: 0.375rem;
color: var(--text-secondary);
font-size: 0.8125rem;
cursor: pointer;
}
.hitl-toggle input[type='checkbox'] {
accent-color: var(--amber);
}
.hitl-advanced-toggle {
background: transparent;
border: 1px solid var(--border);
color: var(--text-tertiary);
padding: 0.3rem 0.625rem;
border-radius: 6px;
font-size: 0.75rem;
font-family: inherit;
cursor: pointer;
transition: all 120ms;
}
.hitl-advanced-toggle:hover {
border-color: var(--text-secondary);
color: var(--text-secondary);
}
.hitl-advanced-panel {
background: var(--bg-sidebar);
border: 1px solid var(--border);
border-radius: 8px;
padding: 1rem;
display: flex;
flex-direction: column;
gap: 0.75rem;
}
.hitl-opt-grid {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 0.75rem;
}
.hitl-opt {
display: flex;
flex-direction: column;
gap: 0.25rem;
}
.hitl-opt span {
font-size: 0.6875rem;
color: var(--text-secondary);
font-weight: 500;
}
.hitl-opt input,
.hitl-opt select {
background: var(--bg);
border: 1px solid var(--border);
color: var(--text-primary);
padding: 0.375rem 0.5rem;
border-radius: 6px;
font-size: 0.8125rem;
outline: none;
font-family: inherit;
}
.hitl-opt input:focus,
.hitl-opt select:focus {
border-color: var(--amber);
}
.hitl-opt-checks {
display: flex;
gap: 1.5rem;
}
.hitl-error {
background: rgba(192, 57, 43, 0.06);
border: 1px solid rgba(192, 57, 43, 0.18);
color: var(--red);
padding: 0.5rem 0.75rem;
border-radius: 6px;
font-size: 0.8125rem;
}
.hitl-launch-btn {
width: 100%;
background: var(--text-primary);
border: none;
color: #fff;
padding: 0.75rem;
border-radius: 10px;
font-size: 0.875rem;
font-weight: 500;
font-family: inherit;
cursor: pointer;
transition: all 150ms;
}
.hitl-launch-btn:hover:not(:disabled) {
background: #2c2820;
}
.hitl-launch-btn:disabled {
opacity: 0.35;
cursor: not-allowed;
}
/* ── Build Layout ────────────────────────────────── */
.hitl-build-layout {
display: flex;
flex-direction: column;
height: calc(100vh - 56px);
}
/* ── Top Bar ─────────────────────────────────────── */
.hitl-topbar {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 1.25rem;
height: 48px;
border-bottom: 1px solid var(--border);
background: var(--bg);
flex-shrink: 0;
}
.hitl-topbar-left {
display: flex;
align-items: center;
gap: 0.625rem;
}
.hitl-topbar-dot {
width: 8px;
height: 8px;
border-radius: 50%;
background: var(--amber);
animation: hitl-soft-pulse 2s ease-in-out infinite;
}
@keyframes hitl-soft-pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.45; }
}
.hitl-topbar-name {
font-size: 0.875rem;
font-weight: 500;
color: var(--text-primary);
font-family: 'JetBrains Mono', 'Fira Code', monospace;
}
.hitl-topbar-right {
display: flex;
align-items: center;
gap: 1rem;
}
.hitl-topbar-step {
font-size: 0.8125rem;
font-weight: 500;
color: var(--text-secondary);
}
.hitl-topbar-cancel {
background: transparent;
border: 1px solid var(--border);
color: var(--text-tertiary);
font-size: 0.75rem;
font-weight: 500;
font-family: inherit;
padding: 0.25rem 0.625rem;
border-radius: 6px;
cursor: pointer;
transition: all 150ms;
}
.hitl-topbar-cancel:hover {
border-color: var(--text-secondary);
color: var(--text-secondary);
}
/* ── Build Body ──────────────────────────────────── */
.hitl-build-body {
display: flex;
flex: 1;
overflow: hidden;
}
/* ── Sidebar (Pipeline) ──────────────────────────── */
.hitl-sidebar {
width: 200px;
background: var(--bg-sidebar);
border-right: 1px solid var(--border-subtle);
padding: 1.25rem 0;
overflow-y: auto;
flex-shrink: 0;
}
.hitl-sidebar-label {
font-size: 0.6875rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.08em;
color: var(--text-tertiary);
padding: 0 1.25rem;
margin-bottom: 0.875rem;
}
.hitl-sidebar-stages {
display: flex;
flex-direction: column;
}
.hitl-sidebar-stage {
display: flex;
align-items: flex-start;
gap: 0.625rem;
padding: 0.4375rem 1.25rem;
border-left: 2px solid transparent;
transition: all 150ms;
}
.hitl-sidebar-indicator {
width: 14px;
height: 14px;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
margin-top: 0.125rem;
}
.hitl-sidebar-dot-empty {
width: 8px;
height: 8px;
border-radius: 50%;
border: 1.5px solid var(--border);
}
.hitl-sidebar-dot-active {
width: 10px;
height: 10px;
border-radius: 50%;
background: var(--amber);
animation: hitl-soft-pulse 2s ease-in-out infinite;
}
.hitl-sidebar-stage-name {
font-size: 0.8125rem;
font-weight: 400;
color: var(--text-tertiary);
transition: color 150ms;
}
/* Stage info wrapper (name + description) */
.hitl-sidebar-stage-info {
display: flex;
flex-direction: column;
gap: 0.1rem;
min-width: 0;
flex: 1;
}
.hitl-sidebar-stage-desc {
font-size: 0.6875rem;
color: var(--text-tertiary);
opacity: 0.7;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
line-height: 1.3;
}
/* Milestone dot badge (gold star after milestone stages complete) */
.hitl-sidebar-milestone-dot {
width: 6px;
height: 6px;
border-radius: 50%;
background: #f6ad55;
flex-shrink: 0;
box-shadow: 0 0 4px rgba(246,173,85,0.6);
}
/* Milestone stage: subtly bolder left bar on active */
.hitl-stage--milestone.hitl-stage--active {
border-left-color: #f6ad55;
}
/* Stage completion flash for milestone stages */
.hitl-stage--milestone.hitl-stage--completed .hitl-sidebar-stage-name {
color: var(--text-secondary);
}
/* Stage status modifiers */
.hitl-stage--completed .hitl-sidebar-stage-name {
color: var(--text-secondary);
}
.hitl-stage--active {
border-left-color: var(--amber);
}
.hitl-stage--active .hitl-sidebar-stage-name {
color: var(--text-primary);
font-weight: 500;
}
.hitl-stage--waiting {
border-left-color: var(--amber);
}
.hitl-stage--waiting .hitl-sidebar-stage-name {
color: var(--amber);
font-weight: 500;
}
/* Milestone toast ─────────────────────────────────────────────────── */
.hitl-milestone-toast {
position: absolute;
top: 0.875rem;
right: 1rem;
z-index: 50;
display: flex;
align-items: flex-start;
gap: 0.625rem;
background: var(--bg-card, #1a1917);
border: 1px solid rgba(246,173,85,0.35);
border-left: 3px solid #f6ad55;
border-radius: 8px;
padding: 0.625rem 0.875rem;
min-width: 240px;
max-width: 320px;
box-shadow: 0 8px 24px rgba(0,0,0,0.4);
cursor: pointer;
animation: hitl-toast-in 280ms cubic-bezier(0.22,1,0.36,1) both;
}
@keyframes hitl-toast-in {
from { opacity: 0; transform: translateX(16px); }
to { opacity: 1; transform: translateX(0); }
}
.hitl-milestone-toast-icon {
font-size: 0.875rem;
color: #f6ad55;
flex-shrink: 0;
padding-top: 0.06rem;
}
.hitl-milestone-toast-body {
display: flex;
flex-direction: column;
gap: 0.1875rem;
flex: 1;
min-width: 0;
}
.hitl-milestone-toast-title {
font-size: 0.8125rem;
font-weight: 600;
color: var(--text-primary, #e8e5e0);
}
.hitl-milestone-toast-msg {
font-size: 0.75rem;
color: var(--text-secondary, #9a9590);
line-height: 1.45;
}
.hitl-milestone-toast-close {
background: none;
border: none;
font-size: 0.9rem;
color: var(--text-tertiary);
cursor: pointer;
padding: 0;
flex-shrink: 0;
line-height: 1;
}
/* Stall warning banner ────────────────────────────────────────────── */
.hitl-stall-banner {
display: flex;
align-items: center;
justify-content: space-between;
gap: 0.75rem;
background: rgba(251, 191, 36, 0.08);
border: 1px solid rgba(251, 191, 36, 0.40);
border-left: 3px solid #fbbf24;
border-radius: 8px;
padding: 0.75rem 1rem;
margin-bottom: 0.75rem;
flex-wrap: wrap;
animation: hitl-toast-in 280ms cubic-bezier(0.22,1,0.36,1) both;
}
.hitl-stall-body {
display: flex;
align-items: flex-start;
gap: 0.5rem;
flex: 1;
min-width: 0;
}
.hitl-stall-icon {
font-size: 1rem;
flex-shrink: 0;
line-height: 1.4;
}
.hitl-stall-msg {
font-size: 0.8125rem;
color: #fef3c7;
line-height: 1.5;
}
.hitl-stall-actions {
display: flex;
gap: 0.5rem;
flex-shrink: 0;
}
.hitl-stall-cancel-btn {
padding: 0.3rem 0.75rem;
border-radius: 5px;
font-size: 0.75rem;
font-weight: 600;
cursor: pointer;
background: #dc2626;
color: #fff;
border: none;
transition: background 0.15s;
}
.hitl-stall-cancel-btn:hover { background: #b91c1c; }
.hitl-stall-dismiss-btn {
padding: 0.3rem 0.75rem;
border-radius: 5px;
font-size: 0.75rem;
font-weight: 500;
cursor: pointer;
background: rgba(255,255,255,0.08);
color: var(--text-secondary, #9a9590);
border: 1px solid rgba(255,255,255,0.12);
transition: background 0.15s;
}
.hitl-stall-dismiss-btn:hover { background: rgba(255,255,255,0.14); }
.hitl-stage--failed {
border-left-color: var(--red);
}
.hitl-stage--failed .hitl-sidebar-stage-name {
color: var(--red);
font-weight: 500;
}
/* ── Main Area ───────────────────────────────────── */
.hitl-main {
flex: 1;
display: flex;
flex-direction: column;
overflow: hidden;
position: relative;
}
/* ── Live Log ────────────────────────────────────── */
.hitl-log {
flex: 1;
display: flex;
flex-direction: column;
overflow: hidden;
}
.hitl-log-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0.75rem 1.5rem;
border-bottom: 1px solid var(--border-subtle);
flex-shrink: 0;
}
.hitl-log-title {
font-size: 0.6875rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.08em;
color: var(--text-tertiary);
}
.hitl-log-scroll {
background: transparent;
border: 1px solid var(--border);
color: var(--text-secondary);
padding: 0.2rem 0.5rem;
border-radius: 4px;
font-size: 0.6875rem;
font-family: inherit;
cursor: pointer;
transition: all 120ms;
}
.hitl-log-scroll:hover {
border-color: var(--text-secondary);
}
.hitl-log-body {
flex: 1;
overflow-y: auto;
padding: 0.375rem 0;
}
.hitl-log-empty {
display: flex;
align-items: center;
justify-content: center;
height: 100%;
color: var(--text-tertiary);
font-size: 0.875rem;
}
.hitl-log-row {
display: flex;
align-items: baseline;
gap: 0.75rem;
padding: 0.5rem 1.5rem;
border-left: 2px solid transparent;
line-height: 1.65;
transition: background 100ms;
}
.hitl-log-row--expandable {
cursor: pointer;
}
.hitl-log-row:hover {
background: rgba(0, 0, 0, 0.018);
}
.hitl-log-ts {
font-family: 'JetBrains Mono', 'Fira Code', monospace;
font-size: 0.6875rem;
color: var(--text-tertiary);
flex-shrink: 0;
user-select: none;
}
.hitl-log-badge {
font-size: 0.625rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.04em;
color: var(--text-tertiary);
flex-shrink: 0;
white-space: nowrap;
min-width: 5rem;
}
.hitl-log-msg {
font-size: 0.8125rem;
color: var(--text-primary);
line-height: 1.65;
min-width: 0;
word-break: break-word;
}
.hitl-log-expand {
color: var(--text-tertiary);
font-weight: 500;
}
/* ── Approval Bar (bottom-pinned) ────────────────── */
.hitl-approval {
flex-shrink: 0;
background: var(--bg-elevated);
border-top: 1px solid var(--border);
border-radius: 12px 12px 0 0;
padding: 0.875rem 1.5rem;
animation: hitl-slide-up 280ms ease-out;
}
@keyframes hitl-slide-up {
from {
transform: translateY(100%);
opacity: 0;
}
to {
transform: translateY(0);
opacity: 1;
}
}
.hitl-approval-row {
display: flex;
align-items: center;
gap: 1rem;
}
.hitl-approval-left {
display: flex;
align-items: center;
gap: 0.4rem;
flex-shrink: 0;
}
.hitl-approval-dot {
width: 6px;
height: 6px;
border-radius: 50%;
flex-shrink: 0;
}
.hitl-dot--warn {
background: var(--amber);
}
.hitl-dot--error {
background: var(--red);
}
.hitl-approval-stage {
font-size: 0.6875rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.08em;
color: var(--text-tertiary);
white-space: nowrap;
}
.hitl-approval-summary {
flex: 1;
font-size: 0.8125rem;
color: var(--text-primary);
line-height: 1.5;
margin: 0;
min-width: 0;
}
.hitl-approval-actions {
display: flex;
align-items: center;
gap: 0.75rem;
flex-shrink: 0;
}
.hitl-fb-link {
background: none;
border: none;
color: var(--text-tertiary);
font-size: 0.75rem;
font-family: inherit;
cursor: pointer;
text-decoration: underline;
text-underline-offset: 2px;
padding: 0;
transition: color 120ms;
}
.hitl-fb-link:hover {
color: var(--text-secondary);
}
.hitl-continue {
background: transparent;
border: 1px solid var(--border);
color: var(--text-primary);
font-size: 0.8125rem;
font-weight: 500;
font-family: inherit;
padding: 0.375rem 0.875rem;
border-radius: 999px;
cursor: pointer;
transition: all 150ms;
white-space: nowrap;
}
.hitl-continue:hover:not(:disabled) {
background: rgba(0, 0, 0, 0.04);
border-color: var(--text-secondary);
}
.hitl-continue:disabled {
opacity: 0.5;
cursor: not-allowed;
}
/* Inline feedback row */
.hitl-approval-feedback {
display: flex;
align-items: center;
gap: 0.5rem;
margin-top: 0.75rem;
padding-top: 0.75rem;
border-top: 1px solid var(--border-subtle);
}
.hitl-fb-input {
flex: 1;
background: transparent;
border: none;
outline: none;
font-size: 0.8125rem;
color: var(--text-primary);
font-family: inherit;
}
.hitl-fb-input::placeholder {
color: var(--text-tertiary);
}
.hitl-reject-pill {
background: transparent;
border: 1px solid #e0c8c0;
color: var(--red);
font-size: 0.75rem;
font-weight: 500;
font-family: inherit;
padding: 0.25rem 0.625rem;
border-radius: 999px;
cursor: pointer;
transition: all 120ms;
white-space: nowrap;
}
.hitl-reject-pill:hover:not(:disabled) {
background: rgba(192, 57, 43, 0.05);
border-color: var(--red);
}
.hitl-reject-pill:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.hitl-fb-cancel {
background: none;
border: none;
color: var(--text-tertiary);
font-size: 1rem;
cursor: pointer;
padding: 0 0.25rem;
line-height: 1;
transition: color 120ms;
}
.hitl-fb-cancel:hover {
color: var(--text-secondary);
}
/* ── Bottom Status Bar ───────────────────────────── */
.hitl-bottombar {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 1.25rem;
height: 36px;
border-top: 1px solid var(--border);
background: var(--bg);
flex-shrink: 0;
}
.hitl-bottombar-msg {
font-size: 0.75rem;
color: var(--text-secondary);
}
.hitl-bottombar-progress {
display: flex;
align-items: center;
gap: 0.625rem;
}
.hitl-bottombar-track {
width: 120px;
height: 2px;
background: var(--border);
border-radius: 1px;
overflow: hidden;
}
.hitl-bottombar-fill {
height: 100%;
background: var(--amber);
border-radius: 1px;
transition: width 600ms ease;
}
.hitl-bottombar-pct {
font-size: 0.6875rem;
color: var(--text-tertiary);
font-family: 'JetBrains Mono', 'Fira Code', monospace;
min-width: 2.5rem;
text-align: right;
}
/* ── Done Screen ─────────────────────────────────── */
.hitl-done-screen {
display: flex;
flex-direction: column;
align-items: center;
padding: 3rem 1.5rem;
gap: 2rem;
}
.hitl-done-card {
text-align: center;
background: var(--bg-elevated);
border: 1px solid var(--border);
border-radius: 12px;
padding: 2.5rem 3rem;
width: 100%;
max-width: 640px;
}
.hitl-done-success {
border-color: rgba(74, 124, 89, 0.3);
}
.hitl-done-fail {
border-color: rgba(192, 57, 43, 0.3);
}
.hitl-done-card h2 {
font-size: 1.25rem;
font-weight: 600;
color: var(--text-primary);
margin: 0 0 0.375rem;
}
.hitl-done-design {
font-family: 'JetBrains Mono', 'Fira Code', monospace;
color: var(--text-secondary);
font-size: 0.875rem;
margin-bottom: 1.25rem;
}
.hitl-done-details {
display: flex;
flex-direction: column;
gap: 0.25rem;
margin-bottom: 1.5rem;
}
.hitl-done-detail {
font-size: 0.8125rem;
color: var(--text-secondary);
}
.hitl-reset-btn {
background: transparent;
border: 1px solid var(--border);
color: var(--text-secondary);
padding: 0.5rem 1rem;
border-radius: 8px;
font-size: 0.8125rem;
font-family: inherit;
cursor: pointer;
transition: all 120ms;
}
.hitl-reset-btn:hover {
border-color: var(--text-secondary);
color: var(--text-primary);
}
/* Report download row in HITL done screen */
.hitl-report-downloads {
display: flex;
align-items: center;
gap: 0.5rem;
margin-top: 0.5rem;
flex-wrap: wrap;
justify-content: center;
}
.hitl-report-label {
font-size: 0.78rem;
color: var(--text-secondary, #888);
}
.hitl-report-btn {
display: inline-flex;
align-items: center;
gap: 0.2rem;
padding: 0.3rem 0.7rem;
border-radius: 6px;
border: 1px solid rgba(245, 120, 31, 0.3);
background: rgba(245, 120, 31, 0.08);
color: #f5781f;
font-size: 0.77rem;
font-weight: 500;
font-family: inherit;
text-decoration: none;
cursor: pointer;
transition: background 120ms, border-color 120ms;
}
.hitl-report-btn:hover {
background: rgba(245, 120, 31, 0.18);
border-color: rgba(245, 120, 31, 0.5);
text-decoration: none;
}
.hitl-done-log {
width: 100%;
max-width: 800px;
height: 400px;
border: 1px solid var(--border);
border-radius: 8px;
overflow: hidden;
background: var(--bg);
}
/* ── Failure Details ─────────────────────────────── */
.hitl-fail-details {
text-align: left;
margin: 1rem 0 1.5rem;
display: flex;
flex-direction: column;
gap: 1rem;
}
.hitl-fail-stage {
display: flex;
align-items: center;
gap: 0.5rem;
padding: 0.625rem 0.75rem;
background: rgba(192, 57, 43, 0.06);
border: 1px solid rgba(192, 57, 43, 0.15);
border-radius: 8px;
}
.hitl-fail-stage-label {
font-size: 0.75rem;
font-weight: 500;
color: var(--red);
text-transform: uppercase;
letter-spacing: 0.03em;
}
.hitl-fail-stage-name {
font-family: 'JetBrains Mono', monospace;
font-size: 0.8125rem;
font-weight: 500;
color: var(--text-primary);
text-transform: uppercase;
}
.hitl-fail-error {
padding: 0.625rem 0.75rem;
background: rgba(192, 57, 43, 0.04);
border-left: 3px solid var(--red);
border-radius: 0 6px 6px 0;
}
.hitl-fail-error-label {
display: block;
font-size: 0.6875rem;
font-weight: 600;
color: var(--red);
text-transform: uppercase;
letter-spacing: 0.04em;
margin-bottom: 0.25rem;
}
.hitl-fail-error-msg {
font-size: 0.8125rem;
color: var(--text-primary);
line-height: 1.45;
margin: 0;
font-family: 'JetBrains Mono', monospace;
word-break: break-word;
}
.hitl-fail-section-label {
display: block;
font-size: 0.6875rem;
font-weight: 600;
color: var(--text-secondary);
text-transform: uppercase;
letter-spacing: 0.04em;
margin-bottom: 0.375rem;
}
.hitl-fail-completed {
display: flex;
flex-direction: column;
}
.hitl-fail-stage-chips {
display: flex;
flex-wrap: wrap;
gap: 0.375rem;
}
.hitl-fail-chip {
font-size: 0.6875rem;
font-weight: 500;
padding: 0.25rem 0.5rem;
border-radius: 4px;
white-space: nowrap;
}
.hitl-fail-chip--done {
color: var(--green);
background: rgba(74, 124, 89, 0.08);
}
.hitl-fail-chip--fail {
color: var(--red);
background: rgba(192, 57, 43, 0.08);
font-weight: 600;
}
/* Partial artifacts */
.hitl-fail-artifacts {
display: flex;
flex-direction: column;
}
.hitl-fail-artifact-list {
display: flex;
flex-direction: column;
gap: 0.125rem;
border: 1px solid var(--border-subtle);
border-radius: 6px;
overflow: hidden;
}
.hitl-fail-artifact-row {
display: flex;
align-items: center;
gap: 0.5rem;
padding: 0.375rem 0.625rem;
font-size: 0.75rem;
background: var(--bg);
}
.hitl-fail-artifact-row:nth-child(even) {
background: var(--bg-elevated);
}
.hitl-fail-artifact-type {
font-size: 0.625rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.04em;
padding: 0.125rem 0.375rem;
border-radius: 3px;
min-width: 48px;
text-align: center;
}
.hitl-artifact-type--rtl { color: var(--blue); background: rgba(91, 143, 185, 0.1); }
.hitl-artifact-type--waveform { color: var(--purple); background: rgba(139, 108, 193, 0.1); }
.hitl-artifact-type--layout { color: var(--amber); background: rgba(212, 124, 58, 0.1); }
.hitl-artifact-type--constraints { color: var(--green); background: rgba(74, 124, 89, 0.1); }
.hitl-artifact-type--config { color: var(--text-secondary); background: rgba(107, 101, 96, 0.08); }
.hitl-artifact-type--script { color: var(--amber); background: rgba(212, 124, 58, 0.08); }
.hitl-artifact-type--formal { color: var(--purple); background: rgba(139, 108, 193, 0.08); }
.hitl-artifact-type--log { color: var(--text-tertiary); background: rgba(163, 158, 152, 0.1); }
.hitl-artifact-type--report { color: var(--green); background: rgba(74, 124, 89, 0.08); }
.hitl-artifact-type--other { color: var(--text-tertiary); background: rgba(163, 158, 152, 0.08); }
.hitl-fail-artifact-name {
flex: 1;
font-family: 'JetBrains Mono', monospace;
font-size: 0.75rem;
color: var(--text-primary);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.hitl-fail-artifact-size {
font-size: 0.6875rem;
color: var(--text-tertiary);
font-family: 'JetBrains Mono', monospace;
white-space: nowrap;
}
.hitl-fail-artifact-more {
padding: 0.375rem 0.625rem;
font-size: 0.6875rem;
color: var(--text-tertiary);
text-align: center;
font-style: italic;
}
/* Build stats row */
.hitl-fail-stats {
display: flex;
gap: 1rem;
padding-top: 0.5rem;
border-top: 1px solid var(--border-subtle);
}
.hitl-fail-stat {
font-size: 0.75rem;
color: var(--text-secondary);
}
/* Collapsible log section */
.hitl-done-log-section {
width: 100%;
max-width: 800px;
}
.hitl-done-log-toggle {
background: transparent;
border: 1px solid var(--border-subtle);
color: var(--text-secondary);
font-size: 0.8125rem;
font-family: inherit;
padding: 0.5rem 0.75rem;
border-radius: 6px;
cursor: pointer;
transition: all 120ms;
width: 100%;
text-align: left;
}
.hitl-done-log-toggle:hover {
border-color: var(--border);
color: var(--text-primary);
background: var(--bg-elevated);
}
/* ── Responsive ──────────────────────────────────── */
@media (max-width: 768px) {
.hitl-build-body {
flex-direction: column;
}
.hitl-sidebar {
width: 100%;
border-right: none;
border-bottom: 1px solid var(--border-subtle);
padding: 0.75rem 0;
}
.hitl-sidebar-stages {
flex-direction: row;
overflow-x: auto;
padding: 0 1rem;
}
.hitl-sidebar-stage {
padding: 0.375rem 0.75rem;
border-left: none;
border-bottom: 2px solid transparent;
white-space: nowrap;
}
.hitl-stage--active {
border-left-color: transparent;
border-bottom-color: var(--amber);
}
.hitl-stage--waiting {
border-left-color: transparent;
border-bottom-color: var(--amber);
}
.hitl-stage--failed {
border-left-color: transparent;
border-bottom-color: var(--red);
}
.hitl-opt-grid {
grid-template-columns: 1fr;
}
.hitl-approval-row {
flex-wrap: wrap;
gap: 0.5rem;
}
.hitl-approval-summary {
order: 3;
flex-basis: 100%;
}
}
/* ═══════════════════════════════════════════════════════════
IMPROVEMENT 1 – Thinking / Loading Indicator
═══════════════════════════════════════════════════════════ */
@keyframes hitl-pulse {
0%, 100% { opacity: 0.35; }
50% { opacity: 1; }
}
.hitl-thinking-pulse {
display: inline-block;
width: 8px;
height: 8px;
border-radius: 50%;
background: var(--amber, #d47c3a);
animation: hitl-pulse 1.5s ease-in-out infinite;
margin-right: 6px;
vertical-align: middle;
}
.hitl-log-row--thinking {
background: rgba(212, 124, 58, 0.05);
border-left-width: 3px;
border-left-style: solid;
}
/* ═══════════════════════════════════════════════════════════
IMPROVEMENT 2 – Build Mode Selector & Stage Toggles
═══════════════════════════════════════════════════════════ */
.hitl-mode-row {
margin: 0.75rem 0 0.5rem;
}
.hitl-mode-label {
display: block;
font-size: 0.78rem;
font-weight: 600;
color: var(--text-secondary, #6b6560);
text-transform: uppercase;
letter-spacing: 0.06em;
margin-bottom: 0.5rem;
}
.hitl-mode-pills {
display: flex;
gap: 0.5rem;
}
.hitl-mode-pill {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
padding: 0.6rem 0.5rem;
border: 1.5px solid var(--border, #e8e6e1);
border-radius: 10px;
background: transparent;
cursor: pointer;
transition: all 0.2s ease;
font-family: inherit;
}
.hitl-mode-pill:hover {
border-color: var(--amber, #d47c3a);
background: rgba(212, 124, 58, 0.04);
}
.hitl-mode-pill--active {
border-color: var(--amber, #d47c3a);
background: rgba(212, 124, 58, 0.08);
box-shadow: 0 0 0 1px rgba(212, 124, 58, 0.15);
}
.hitl-mode-pill-name {
font-size: 0.82rem;
font-weight: 600;
color: var(--text-primary, #1a1814);
}
.hitl-mode-pill-desc {
font-size: 0.68rem;
color: var(--text-tertiary, #a39e98);
margin-top: 2px;
}
.hitl-stage-toggle-btn {
display: inline-block;
background: none;
border: none;
font-size: 0.78rem;
color: var(--text-secondary, #6b6560);
cursor: pointer;
padding: 0.25rem 0;
margin: 0.25rem 0 0.5rem;
font-family: inherit;
}
.hitl-stage-toggle-btn:hover {
color: var(--amber, #d47c3a);
}
.hitl-stage-toggles {
display: flex;
flex-wrap: wrap;
gap: 0.35rem;
padding: 0.5rem 0;
margin-bottom: 0.5rem;
}
.hitl-stage-chip {
display: inline-flex;
align-items: center;
gap: 4px;
padding: 0.3rem 0.6rem;
border-radius: 16px;
font-size: 0.72rem;
font-weight: 500;
border: 1px solid var(--border, #e8e6e1);
cursor: pointer;
transition: all 0.15s ease;
font-family: inherit;
background: transparent;
}
.hitl-stage-chip--on {
background: rgba(74, 124, 89, 0.10);
border-color: var(--green, #4a7c59);
color: var(--green, #4a7c59);
}
.hitl-stage-chip--off {
background: rgba(163, 158, 152, 0.08);
border-color: var(--border, #e8e6e1);
color: var(--text-tertiary, #a39e98);
text-decoration: line-through;
}
.hitl-stage-chip--locked {
cursor: not-allowed;
opacity: 0.7;
}
.hitl-stage-chip--locked:hover {
cursor: not-allowed;
}
.hitl-stage-lock {
font-size: 0.65rem;
}
/* ═══════════════════════════════════════════════════════════
Sidebar – Skipped Stage Styling
═══════════════════════════════════════════════════════════ */
.hitl-stage--skipped .hitl-sidebar-stage-name {
color: var(--text-tertiary, #a39e98);
text-decoration: line-through;
opacity: 0.6;
}
.hitl-sidebar-dot-skipped {
display: inline-flex;
align-items: center;
justify-content: center;
width: 14px;
height: 14px;
font-size: 0.7rem;
font-weight: 700;
color: var(--text-tertiary, #a39e98);
border: 1.5px solid var(--border, #e8e6e1);
border-radius: 50%;
line-height: 1;
}
/* ═══════════════════════════════════════════════════════════
IMPROVEMENT 3 – Redesigned Build Failed Page
═══════════════════════════════════════════════════════════ */
.hitl-fail-redesign {
text-align: left;
}
.hitl-fail-heading {
display: flex;
align-items: center;
gap: 10px;
margin-bottom: 0.25rem;
}
.hitl-fail-heading-dot {
width: 10px;
height: 10px;
border-radius: 50%;
background: var(--amber, #d47c3a);
flex-shrink: 0;
}
.hitl-fail-heading-text {
font-size: 1.25rem;
font-weight: 500;
color: var(--text-primary, #1a1814);
margin: 0;
}
.hitl-fail-design-name {
font-size: 0.82rem;
color: var(--text-secondary, #6b6560);
font-family: 'SF Mono', 'Fira Code', monospace;
margin: 0.15rem 0 1rem;
}
.hitl-fail-explanation {
background: rgba(212, 124, 58, 0.06);
border-left: 3px solid var(--amber, #d47c3a);
padding: 0.75rem 1rem;
border-radius: 0 8px 8px 0;
margin-bottom: 1rem;
}
.hitl-fail-explanation p {
margin: 0;
font-size: 0.85rem;
color: var(--text-primary, #1a1814);
line-height: 1.5;
}
.hitl-fail-stages {
margin-bottom: 1rem;
}
.hitl-fail-stage-chips {
display: flex;
flex-wrap: wrap;
gap: 0.3rem;
margin-top: 0.4rem;
}
.hitl-fail-chip {
display: inline-flex;
align-items: center;
gap: 3px;
padding: 0.2rem 0.5rem;
border-radius: 12px;
font-size: 0.68rem;
font-weight: 500;
border: 1px solid var(--border, #e8e6e1);
}
.hitl-fail-chip-icon {
font-size: 0.6rem;
}
.hitl-fail-chip--done {
background: rgba(74, 124, 89, 0.08);
border-color: rgba(74, 124, 89, 0.25);
color: var(--green, #4a7c59);
}
.hitl-fail-chip--stopped {
background: rgba(212, 124, 58, 0.10);
border-color: rgba(212, 124, 58, 0.35);
color: var(--amber, #d47c3a);
font-weight: 600;
}
.hitl-fail-chip--skipped {
background: rgba(163, 158, 152, 0.06);
border-color: var(--border, #e8e6e1);
color: var(--text-tertiary, #a39e98);
}
.hitl-fail-chip--pending {
background: transparent;
border-color: var(--border, #e8e6e1);
color: var(--text-tertiary, #a39e98);
}
.hitl-fail-error-brief {
margin-bottom: 1rem;
padding: 0.6rem 0.75rem;
background: rgba(192, 57, 43, 0.04);
border-radius: 8px;
border: 1px solid rgba(192, 57, 43, 0.12);
}
.hitl-fail-error-brief .hitl-fail-error-label {
font-size: 0.7rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.04em;
color: var(--text-tertiary, #a39e98);
}
.hitl-fail-error-brief .hitl-fail-error-msg {
margin: 0.25rem 0 0;
font-size: 0.8rem;
color: var(--text-primary, #1a1814);
font-family: 'SF Mono', 'Fira Code', monospace;
line-height: 1.5;
word-break: break-word;
}
.hitl-fail-artifacts-grouped {
margin-bottom: 1rem;
}
.hitl-fail-artifact-group {
margin-top: 0.5rem;
}
.hitl-fail-artifact-group-label {
display: block;
font-size: 0.68rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.04em;
color: var(--text-tertiary, #a39e98);
margin-bottom: 0.25rem;
padding-left: 0.25rem;
}
.hitl-fail-artifact-row {
display: flex;
align-items: center;
gap: 0.5rem;
padding: 0.3rem 0.5rem;
border-radius: 6px;
transition: background 0.15s ease;
}
.hitl-fail-artifact-row:hover {
background: rgba(212, 124, 58, 0.04);
}
.hitl-fail-artifact-name {
flex: 1;
font-size: 0.78rem;
color: var(--text-primary, #1a1814);
font-family: 'SF Mono', 'Fira Code', monospace;
}
.hitl-fail-artifact-size {
font-size: 0.7rem;
color: var(--text-tertiary, #a39e98);
min-width: 50px;
text-align: right;
}
.hitl-fail-artifact-dl {
display: inline-flex;
align-items: center;
justify-content: center;
width: 24px;
height: 24px;
border-radius: 6px;
font-size: 0.85rem;
color: var(--text-secondary, #6b6560);
text-decoration: none;
transition: background 0.15s ease;
}
.hitl-fail-artifact-dl:hover {
background: rgba(212, 124, 58, 0.10);
color: var(--amber, #d47c3a);
}
.hitl-fail-suggestion {
background: rgba(212, 124, 58, 0.06);
border: 1px solid rgba(212, 124, 58, 0.18);
border-radius: 10px;
padding: 0.75rem 1rem;
margin: 1rem 0;
}
.hitl-fail-suggestion-label {
display: block;
font-size: 0.72rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.04em;
color: var(--amber, #d47c3a);
margin-bottom: 0.3rem;
}
.hitl-fail-suggestion p {
margin: 0;
font-size: 0.82rem;
color: var(--text-primary, #1a1814);
line-height: 1.5;
}
.hitl-fail-actions {
display: flex;
gap: 0.75rem;
margin-top: 1.25rem;
justify-content: center;
}
.hitl-fail-btn-primary {
padding: 0.55rem 1.5rem;
border-radius: 20px;
border: none;
background: var(--amber, #d47c3a);
color: #fff;
font-weight: 600;
font-size: 0.85rem;
cursor: pointer;
transition: all 0.2s ease;
font-family: inherit;
}
.hitl-fail-btn-primary:hover {
background: #c06928;
transform: translateY(-1px);
box-shadow: 0 3px 8px rgba(212, 124, 58, 0.25);
}
.hitl-fail-btn-ghost {
padding: 0.55rem 1.5rem;
border-radius: 20px;
border: 1.5px solid var(--border, #e8e6e1);
background: transparent;
color: var(--text-secondary, #6b6560);
font-weight: 500;
font-size: 0.85rem;
cursor: pointer;
transition: all 0.2s ease;
font-family: inherit;
}
.hitl-fail-btn-ghost:hover {
border-color: var(--amber, #d47c3a);
color: var(--amber, #d47c3a);
}
/* Responsive adjustments for new components */
@media (max-width: 768px) {
.hitl-mode-pills {
flex-direction: column;
}
.hitl-fail-actions {
flex-direction: column;
align-items: stretch;
}
.hitl-fail-btn-primary,
.hitl-fail-btn-ghost {
text-align: center;
}
}
/* ════════════════════════════════════════════════════════════════════
APPROVAL CARD (ac-*)
Premium, minimal β€” stage checkpoint card with next-step context
════════════════════════════════════════════════════════════════════ */
.ac-card {
position: relative;
background: var(--bg-elevated);
border: 1px solid var(--border);
border-radius: 10px;
padding: 1.125rem 1.25rem 1rem;
display: flex;
flex-direction: column;
gap: 0.625rem;
padding-left: 1.5rem; /* space for accent bar */
}
.ac-card::before {
content: '';
position: absolute;
left: 0;
top: 12%;
bottom: 12%;
width: 3px;
border-radius: 0 2px 2px 0;
transition: background 200ms;
}
.ac-card--ok::before { background: var(--green); }
.ac-card--warn::before { background: var(--amber); }
.ac-card--error::before { background: var(--red); }
/* Header */
.ac-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 0.75rem;
}
.ac-stage-id {
display: flex;
align-items: center;
gap: 0.375rem;
}
.ac-stage-symbol {
font-size: 0.6875rem;
color: var(--text-tertiary);
line-height: 1;
}
.ac-stage-label {
font-size: 0.6875rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.09em;
color: var(--text-secondary);
}
.ac-badge {
font-size: 0.625rem;
font-weight: 600;
letter-spacing: 0.04em;
text-transform: uppercase;
padding: 0.125rem 0.4375rem;
border-radius: 4px;
}
.ac-badge--warn { background: rgba(212,124,58,0.1); color: var(--amber); }
.ac-badge--error { background: rgba(192,57,43,0.1); color: var(--red); }
.ac-artifact-pill {
font-size: 0.6875rem;
color: var(--text-tertiary);
font-family: 'JetBrains Mono', monospace;
white-space: nowrap;
}
/* Summary */
.ac-summary {
font-size: 0.875rem;
line-height: 1.65;
color: var(--text-primary);
margin: 0;
}
/* Next stage hint */
.ac-next-hint {
display: flex;
align-items: baseline;
gap: 0.375rem;
font-size: 0.775rem;
color: var(--text-tertiary);
padding: 0.5rem 0 0.125rem;
border-top: 1px solid var(--border-subtle);
}
.ac-next-arrow {
font-size: 0.75rem;
opacity: 0.5;
flex-shrink: 0;
}
.ac-next-text {
line-height: 1.45;
}
/* Footer */
.ac-footer {
display: flex;
align-items: center;
justify-content: flex-end;
gap: 0.625rem;
padding-top: 0.5rem;
border-top: 1px solid var(--border-subtle);
}
/* Stage report download buttons inside ApprovalCard */
.ac-report-downloads {
display: flex;
align-items: center;
gap: 0.375rem;
margin-right: auto;
}
.ac-report-btn {
display: inline-flex;
align-items: center;
gap: 0.2rem;
padding: 0.25rem 0.6rem;
border-radius: 5px;
border: 1px solid var(--border-subtle, rgba(255,255,255,0.1));
background: rgba(245, 120, 31, 0.08);
color: #f5781f;
font-size: 0.72rem;
font-weight: 500;
font-family: inherit;
text-decoration: none;
cursor: pointer;
transition: background 120ms, border-color 120ms;
}
.ac-report-btn:hover {
background: rgba(245, 120, 31, 0.18);
border-color: rgba(245, 120, 31, 0.4);
text-decoration: none;
}
.ac-give-feedback {
background: none;
border: none;
font-family: inherit;
font-size: 0.775rem;
color: var(--text-tertiary);
cursor: pointer;
padding: 0;
text-decoration: underline;
text-underline-offset: 2px;
transition: color 120ms;
margin-right: auto;
}
.ac-give-feedback:hover { color: var(--text-secondary); }
.ac-continue-btn {
display: inline-flex;
align-items: center;
gap: 0.3rem;
background: var(--green);
color: #fff;
border: none;
font-family: inherit;
font-size: 0.8125rem;
font-weight: 500;
padding: 0.4375rem 1rem;
border-radius: 6px;
cursor: pointer;
transition: opacity 150ms, transform 150ms;
letter-spacing: 0.01em;
}
.ac-continue-btn:hover:not(:disabled) {
opacity: 0.88;
transform: translateY(-1px);
}
.ac-continue-btn:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.ac-chevron {
font-size: 0.9rem;
line-height: 1;
opacity: 0.85;
}
/* Feedback row */
.ac-feedback-row {
display: flex;
align-items: center;
gap: 0.5rem;
width: 100%;
}
.ac-feedback-input {
flex: 1;
background: var(--bg);
border: 1px solid var(--border);
border-radius: 6px;
padding: 0.375rem 0.625rem;
font-family: inherit;
font-size: 0.8125rem;
color: var(--text-primary);
outline: none;
transition: border-color 150ms;
}
.ac-feedback-input:focus { border-color: var(--text-secondary); }
.ac-feedback-input::placeholder { color: var(--text-tertiary); }
.ac-reject-btn {
background: transparent;
border: 1px solid rgba(192,57,43,0.3);
color: var(--red);
font-family: inherit;
font-size: 0.775rem;
font-weight: 500;
padding: 0.375rem 0.75rem;
border-radius: 6px;
cursor: pointer;
white-space: nowrap;
transition: all 120ms;
}
.ac-reject-btn:hover:not(:disabled) { background: rgba(192,57,43,0.05); border-color: var(--red); }
.ac-reject-btn:disabled { opacity: 0.5; cursor: not-allowed; }
.ac-cancel-btn {
background: none;
border: none;
font-family: inherit;
font-size: 0.775rem;
color: var(--text-tertiary);
cursor: pointer;
padding: 0.375rem 0.25rem;
transition: color 120ms;
}
.ac-cancel-btn:hover { color: var(--text-secondary); }
/* ── Artifact list (expandable) ─────────────────────────────────── */
.ac-artifact-toggle {
cursor: pointer;
background: none;
border: 1px solid var(--border-subtle);
border-radius: 6px;
padding: 0.175rem 0.5rem;
display: inline-flex;
align-items: center;
gap: 0.25rem;
transition: background 120ms, border-color 120ms;
}
.ac-artifact-toggle:hover {
background: rgba(255,255,255,0.03);
border-color: var(--text-tertiary);
}
.ac-artifact-chevron {
display: inline-block;
font-size: 0.75rem;
transition: transform 160ms ease;
transform: rotate(0deg);
}
.ac-artifact-chevron--open {
transform: rotate(90deg);
}
.ac-artifacts {
display: flex;
flex-direction: column;
gap: 0.25rem;
padding: 0.5rem 0;
border-top: 1px solid var(--border-subtle);
border-bottom: 1px solid var(--border-subtle);
margin: 0.25rem 0;
}
.ac-artifact-row {
display: flex;
align-items: center;
gap: 0.5rem;
padding: 0.3125rem 0.375rem;
border-radius: 4px;
transition: background 100ms;
}
.ac-artifact-row:hover {
background: rgba(255,255,255,0.025);
}
.ac-artifact-type {
font-size: 0.625rem;
font-weight: 600;
letter-spacing: 0.03em;
text-transform: uppercase;
padding: 0.1rem 0.375rem;
border-radius: 3px;
flex-shrink: 0;
font-family: 'JetBrains Mono', monospace;
}
.ac-artifact-type--rtl { background: rgba(99,179,237,0.12); color: #63b3ed; }
.ac-artifact-type--waveform { background: rgba(129,230,217,0.12); color: #81e6d9; }
.ac-artifact-type--layout { background: rgba(183,148,244,0.12); color: #b794f4; }
.ac-artifact-type--constraints{ background: rgba(246,173,85,0.12); color: #f6ad55; }
.ac-artifact-type--config { background: rgba(160,174,192,0.12); color: #a0aec0; }
.ac-artifact-type--script { background: rgba(160,174,192,0.12); color: #a0aec0; }
.ac-artifact-type--formal { background: rgba(246,173,85,0.12); color: #f6ad55; }
.ac-artifact-type--log { background: rgba(160,174,192,0.08); color: #718096; }
.ac-artifact-type--report { background: rgba(72,187,120,0.12); color: #48bb78; }
.ac-artifact-type--other { background: rgba(160,174,192,0.08); color: #718096; }
.ac-artifact-name {
font-family: 'JetBrains Mono', monospace;
font-size: 0.78rem;
color: var(--text-primary);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
min-width: 0;
flex: 1;
}
.ac-artifact-desc {
font-size: 0.72rem;
color: var(--text-tertiary);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 200px;
}
.ac-artifact-dl {
flex-shrink: 0;
font-size: 0.8rem;
color: var(--text-tertiary);
text-decoration: none;
padding: 0.125rem 0.25rem;
border-radius: 3px;
transition: color 120ms, background 120ms;
}
.ac-artifact-dl:hover {
color: var(--text-primary);
background: rgba(255,255,255,0.05);
}