Files
jaredandClaude Fable 5.1 eca5cb45b1
Lint / JS (eslint) (pull_request) Successful in 10s
Lint / Notify on failure (pull_request) Skipped
Lint / Deploy (pull_request) Skipped
Security / JS Security (npm audit) (pull_request) Failing after 10s
Test / JS Tests (jest) (pull_request) Successful in 14s
Lint / JS (eslint) (push) Successful in 11s
Lint / Notify on failure (push) Skipped
Lint / Deploy (push) Skipped
Security / JS Security (npm audit) (push) Failing after 11s
Test / JS Tests (jest) (push) Successful in 10s
feat(ui): TDS migration stage 3 — integration fixes, legacy removal, docs
- Fix design-system class names that do not exist in base.css (.lt-alert--error,
  .lt-form-hint); add shared .lt-modal-lg, .lt-field-error and .is-invalid rules
- Remove public/index.html and the public/base.js symlink
- package.json: start script, correct main
- README: vendored design system, Web UI section, new env vars, read-only dev mode

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HamVMDrA8RqhyxmUHgiqRp
2026-09-08 22:17:15 -04:00

253 lines
7.3 KiB
CSS

/* =====================================================================
PULSE — Executions page (WP-E) styles
---------------------------------------------------------------------
Only additions the design system does not already provide. Everything
is namespaced `.ex-*` or scoped under an `#ex-*` id, except the two
log-entry colour modifiers that extend `.lt-log-entry` (base.css ships
.success/.warning/.error only — grey and cyan are Pulse-local).
===================================================================== */
/* ---------------------------------------------------------------------
1. Modal sizing — width comes from the shared `.lt-modal-lg` rule in
/assets/app.css; only the scroll behaviour of these two modals is
page-specific.
--------------------------------------------------------------------- */
#ex-detail-modal .lt-modal-body,
#ex-compare-modal .lt-modal-body {
max-height: 72vh;
overflow-y: auto;
}
#ex-detail-modal .lt-modal-footer {
display: flex;
flex-wrap: wrap;
gap: var(--space-sm);
justify-content: flex-end;
}
/* ---------------------------------------------------------------------
2. Tab-bar count badges
--------------------------------------------------------------------- */
#ex-count-manual:empty,
#ex-count-automated:empty { display: none; }
/* ---------------------------------------------------------------------
3. Rows
--------------------------------------------------------------------- */
.ex-row { cursor: pointer; }
.ex-row:focus-visible {
outline: 2px solid var(--accent-cyan);
outline-offset: -2px;
}
.ex-row.is-selected td {
background: rgba(255, 179, 0, 0.12);
}
.ex-row.is-selected td:first-child {
border-left: 3px solid var(--accent-amber);
}
.ex-col-check { width: 2rem; }
.ex-check {
display: inline-block;
min-width: 1rem;
color: var(--accent-amber);
font-weight: 700;
}
.ex-elapsed {
font-family: var(--font-mono);
color: var(--accent-amber);
}
#ex-compare-toggle.is-active {
border-color: var(--accent-amber);
color: var(--accent-amber);
}
/* ---------------------------------------------------------------------
4. Log entries — extra colour semantics on top of base.css
--------------------------------------------------------------------- */
.lt-log-entry.ex-log-dim {
border-left-color: var(--border-color);
opacity: 0.85;
}
.lt-log-entry.ex-log-dim .ex-log-title { color: var(--text-dim); }
.lt-log-entry.ex-log-info { border-left-color: var(--accent-cyan); }
.lt-log-entry.ex-log-info .ex-log-title { color: var(--accent-cyan); }
.ex-log-title {
font-family: var(--font-mono);
font-size: 0.75rem;
font-weight: 700;
color: var(--text-primary);
overflow-wrap: anywhere;
}
.lt-log-entry.success .ex-log-title { color: var(--accent-green); }
.lt-log-entry.warning .ex-log-title { color: var(--accent-amber); }
.lt-log-entry.error .ex-log-title { color: var(--accent-red); }
.ex-log-details { margin-top: 0.3rem; }
.ex-log-field {
font-size: 0.72rem;
color: var(--text-secondary);
margin-bottom: 0.2rem;
overflow-wrap: anywhere;
}
.ex-log-label {
color: var(--text-dim);
text-transform: uppercase;
letter-spacing: 0.05em;
font-size: 0.66rem;
}
.ex-log-answer { color: var(--accent-amber); }
.ex-log-by {
color: var(--text-muted);
font-size: 0.66rem;
margin-left: 0.6rem;
font-weight: 400;
}
.ex-log-output-err {
color: var(--accent-red);
border-left-color: var(--accent-red);
text-shadow: none;
}
.ex-code {
font-family: var(--font-mono);
font-size: 0.7rem;
color: var(--accent-cyan);
overflow-wrap: anywhere;
}
/* Parsed-variable table (parse_complete) */
.ex-parse-table {
display: grid;
grid-template-columns: max-content 1fr;
gap: 1px var(--space-md);
font-family: var(--font-mono);
font-size: 0.68rem;
}
.ex-parse-key { color: var(--text-dim); }
.ex-parse-val { color: var(--text-secondary); overflow-wrap: anywhere; }
.ex-route-label { font-size: 0.72rem; color: var(--text-secondary); }
.ex-route-goto { font-size: 0.72rem; color: var(--accent-cyan); }
/* ---------------------------------------------------------------------
5. Prompt (waiting for input)
--------------------------------------------------------------------- */
.ex-prompt-box { margin: var(--space-md) 0; }
.ex-prompt-msg {
color: var(--text-primary);
font-size: 0.74rem;
margin: 0.4rem 0;
}
.ex-opt-row {
display: flex;
flex-wrap: wrap;
gap: var(--space-xs);
margin-top: var(--space-sm);
}
.ex-opt.is-answered { opacity: 0.55; }
/* ---------------------------------------------------------------------
6. Detail modal layout
--------------------------------------------------------------------- */
.ex-section-title {
font-family: var(--font-mono);
font-size: 0.72rem;
text-transform: uppercase;
letter-spacing: 0.08em;
color: var(--accent-orange);
margin: var(--space-lg) 0 var(--space-sm);
}
.ex-id-cell {
display: flex;
align-items: center;
gap: var(--space-sm);
flex-wrap: wrap;
}
/* ---------------------------------------------------------------------
7. Compare modal
--------------------------------------------------------------------- */
.ex-cmp-grid {
display: grid;
gap: var(--space-md);
}
.ex-cmp-col {
border: 1px solid var(--border-dim);
background: var(--bg-terminal);
min-width: 0;
}
.ex-cmp-head {
padding: var(--space-sm);
border-bottom: 1px solid var(--border-dim);
background: var(--bg-secondary);
color: var(--accent-amber);
font-family: var(--font-mono);
font-size: 0.74rem;
}
.ex-cmp-sub {
color: var(--text-dim);
font-size: 0.66rem;
overflow-wrap: anywhere;
}
.ex-cmp-body { padding: var(--space-sm); }
.ex-cmp-label {
font-family: var(--font-mono);
font-size: 0.66rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.06em;
color: var(--accent-amber);
margin-top: var(--space-sm);
}
.ex-cmp-label--err { color: var(--accent-red); }
.ex-cmp-col .lt-log-output {
max-height: 320px;
overflow: auto;
white-space: pre-wrap;
overflow-wrap: anywhere;
}
@media (max-width: 767px) {
.ex-cmp-grid { grid-template-columns: 1fr !important; }
}
/* ---------------------------------------------------------------------
8. Diff
--------------------------------------------------------------------- */
.ex-diff-stats {
font-family: var(--font-mono);
font-size: 0.72rem;
margin-bottom: var(--space-sm);
}
.ex-diff {
font-family: var(--font-mono);
font-size: 0.68rem;
}
.ex-diff-same {
color: var(--text-muted);
padding: 1px 0;
white-space: pre-wrap;
overflow-wrap: anywhere;
}
.ex-diff-line {
background: rgba(255, 179, 0, 0.1);
border-left: 3px solid var(--accent-amber);
padding: 2px 4px;
margin: 2px 0;
white-space: pre-wrap;
overflow-wrap: anywhere;
}
.ex-diff-a { color: var(--accent-green); }
.ex-diff-b { color: var(--accent-amber); }
/* ---------------------------------------------------------------------
9. Light theme
--------------------------------------------------------------------- */
html[data-theme="light"] .ex-cmp-col { background: var(--bg-tertiary); }
html[data-theme="light"] .ex-cmp-head { background: var(--bg-secondary); }
html[data-theme="light"] .ex-log-title { color: var(--text-primary); }
html[data-theme="light"] .ex-diff-same { color: var(--text-muted); }
html[data-theme="light"] .ex-row.is-selected td { background: rgba(255, 179, 0, 0.18); }