Files
sanderling/replay-ui/src/panels/ViolationsPanel.css
T
pj 9958b0ddc8 Attribute violations to the causing step and render witness evidence (#59)
* feat(ltl): attribute violations to the obligation origin step

* feat(verifier): label evaluator observations with the runner step index

* feat(trace): carry the causing step in violation witnesses and summary

* feat(replay): move the violation marker to the causing step

* feat(replay-ui): render witness evidence in the violations panel

* feat(replay-ui): wire witnesses and step jump into violation panels

* fix(ltl): treat next obligations as vacuous at run end

* fix(runner): give the finalize trace record its own step index
2026-06-05 23:46:36 +05:30

169 lines
3.0 KiB
CSS

.violations-panel {
display: flex;
flex-direction: column;
gap: 8px;
font-family: var(--font-mono);
color: var(--text-primary);
}
.violations-panel-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
}
.violations-panel-title {
font-size: 12px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.06em;
color: var(--text-muted);
margin: 0;
}
.violations-panel-jump {
font-family: var(--font-mono);
font-size: 11px;
text-transform: lowercase;
padding: 4px 8px;
background: var(--surface);
color: var(--text-primary);
border: 1px solid var(--border);
border-radius: 3px;
cursor: pointer;
}
.violations-panel-jump:hover:not(:disabled) {
border-color: var(--border-strong);
}
.violations-panel-jump:disabled {
color: var(--text-muted);
cursor: not-allowed;
opacity: 0.6;
}
.violations-panel-list {
list-style: none;
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
gap: 6px;
}
.violations-panel-row {
border: 1px solid var(--border);
border-radius: 3px;
padding: 8px;
background: var(--surface-elevated);
}
.violations-panel-row[data-status="violated"] {
border-color: var(--accent-violation);
}
.violations-panel-row-head {
display: flex;
align-items: center;
gap: 8px;
}
.violations-panel-badge {
font-size: 10px;
text-transform: uppercase;
letter-spacing: 0.06em;
padding: 2px 6px;
border-radius: 3px;
border: 1px solid var(--border);
background: var(--surface);
color: var(--text-muted);
}
.violations-panel-badge[data-status="violated"] {
color: var(--accent-violation);
border-color: var(--accent-violation);
background: transparent;
}
.violations-panel-badge[data-status="holds"] {
color: var(--text-muted);
opacity: 0.7;
}
.violations-panel-name {
font-weight: 700;
font-size: 13px;
}
.violations-panel-witness {
margin-top: 6px;
display: flex;
flex-direction: column;
gap: 4px;
font-size: 12px;
}
.violations-panel-witness-line {
display: flex;
align-items: baseline;
gap: 8px;
margin: 0;
}
.violations-panel-witness-key {
flex-shrink: 0;
min-width: 96px;
color: var(--text-muted);
font-size: 11px;
text-transform: lowercase;
}
.violations-panel-witness-value {
word-break: break-all;
white-space: pre-wrap;
margin: 0;
}
.violations-panel-witness-step {
font-family: var(--font-mono);
font-size: 11px;
padding: 1px 6px;
background: var(--surface);
color: var(--text-primary);
border: 1px solid var(--border);
border-radius: 3px;
cursor: pointer;
}
.violations-panel-witness-step:hover {
border-color: var(--border-strong);
}
.violations-panel-witness-evidence {
display: flex;
flex-direction: column;
gap: 3px;
margin: 0;
}
.violations-panel-residual {
margin-top: 6px;
font-size: 12px;
}
.violations-panel-residual summary {
cursor: pointer;
color: var(--text-muted);
font-size: 11px;
text-transform: uppercase;
letter-spacing: 0.06em;
padding: 2px 0;
user-select: none;
}
.violations-panel-residual[open] summary {
margin-bottom: 6px;
}