+
@@ -2215,12 +2400,6 @@ const CompareView = forwardRef(function CompareView({ selected, groupByList, set
);
})}
- {/* Overlay-mode metric controls: rendered below the primary chart */}
- {supplementalMetrics.map(function (sm, si) {
- if (sm.display === 'panel') return null;
- return renderMetricControls(sm, si);
- })}
-
);
})}
diff --git a/queries/cdmq/web-ui/src/index.css b/queries/cdmq/web-ui/src/index.css
index 3a39e66a..cba039e5 100644
--- a/queries/cdmq/web-ui/src/index.css
+++ b/queries/cdmq/web-ui/src/index.css
@@ -60,7 +60,6 @@ body {
}
.app {
- max-width: 1400px;
margin: 0 auto;
padding: 16px 24px 120px;
}
@@ -1066,6 +1065,220 @@ a.run-id:hover {
flex: 1;
}
+/* Scrollable chart area */
+.compare-chart-scroll {
+ overflow-x: auto;
+ scrollbar-width: thin;
+}
+
+/* CSS Grid for chips below bar chart */
+.compare-chips-grid {
+ display: grid;
+ gap: 2px;
+}
+
+.compare-chips-grid-label {
+ display: flex;
+ align-items: center;
+ gap: 2px;
+ padding: 2px 4px 2px 6px;
+ font-size: 10px;
+ font-weight: 600;
+ color: var(--text-secondary);
+ background: var(--surface-alt);
+ border: 1px solid var(--border);
+ border-radius: var(--radius-sm);
+ min-height: 20px;
+}
+
+.compare-dim-groupby {
+ background: rgba(91, 141, 239, 0.08);
+ border-color: rgba(91, 141, 239, 0.3);
+}
+
+.compare-dim-name {
+ flex: 1;
+ overflow-wrap: break-word;
+ word-break: break-word;
+ white-space: normal;
+ text-align: right;
+ font-family: 'SF Mono', ui-monospace, Consolas, monospace;
+}
+
+.compare-dim-btn {
+ flex-shrink: 0;
+ background: none;
+ border: none;
+ cursor: pointer;
+ padding: 0;
+ font-size: 8px;
+ color: var(--text-muted);
+ line-height: 1;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 14px;
+ height: 14px;
+ border-radius: 2px;
+}
+
+.compare-dim-btn:hover {
+ color: var(--accent);
+ background: rgba(91, 141, 239, 0.1);
+}
+
+.compare-dim-btn:disabled {
+ opacity: 0.2;
+ cursor: default;
+}
+
+.compare-dim-btn:disabled:hover {
+ background: none;
+ color: var(--text-muted);
+}
+
+.compare-dim-btn-x:hover {
+ color: #ef4444;
+ background: rgba(239, 68, 68, 0.1);
+}
+
+/* Iteration chips below bar chart */
+.compare-iter-chips-row {
+ display: flex;
+ flex: 1;
+ gap: 0;
+ align-items: stretch;
+ min-width: 0;
+}
+
+.compare-iter-chip-gap {
+ flex: 1;
+}
+
+.compare-iter-chip-col {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 2px;
+ padding: 4px 2px;
+ border: 2px solid var(--border);
+ border-radius: var(--radius-sm);
+ cursor: pointer;
+ transition: border-color 0.15s, background-color 0.15s;
+ min-width: 0;
+ box-sizing: border-box;
+}
+
+.compare-iter-chip-col:hover {
+ border-color: var(--accent);
+}
+
+.compare-iter-chip-dd-on {
+ border-width: 2px;
+ font-weight: 600;
+}
+
+.compare-iter-chip-param.param,
+.compare-iter-chip-param.tag,
+.compare-iter-chip-param.benchmark-badge {
+ white-space: normal;
+ overflow-wrap: break-word;
+ word-break: break-word;
+ font-size: 10px;
+ text-align: center;
+ max-width: 100%;
+}
+
+.compare-iter-chip-id {
+ font-size: 10px;
+ font-family: 'SF Mono', ui-monospace, Consolas, monospace;
+ color: var(--text-muted);
+ text-align: center;
+}
+
+/* Spanning group-by dimension label */
+.compare-span-label {
+ width: 60px;
+ flex-shrink: 0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ text-align: center;
+ font-size: 10px;
+ font-weight: 600;
+ padding: 2px 4px;
+ margin-right: 2px;
+ border-radius: var(--radius-sm);
+ overflow-wrap: break-word;
+ word-break: break-word;
+ white-space: normal;
+}
+
+/* Spanning group-by value chips */
+.compare-span-chip {
+ text-align: center;
+ padding: 3px 4px;
+ margin: 1px;
+ border-radius: var(--radius-sm);
+ font-size: 10px;
+ overflow-wrap: break-word;
+ word-break: break-word;
+ white-space: normal;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ min-height: 16px;
+}
+
+.compare-span-chip.param,
+.compare-span-chip.tag,
+.compare-span-chip.benchmark-badge {
+ white-space: normal;
+ margin: 0 !important;
+ display: flex;
+}
+
+/* Deep-dive selection row */
+.compare-dd-label {
+ border-color: transparent;
+ background: transparent;
+}
+
+.compare-dd-cell {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border: 2px dashed var(--border);
+ border-radius: var(--radius-sm);
+ cursor: pointer;
+ min-height: 22px;
+ font-size: 13px;
+ font-weight: 700;
+ font-family: 'SF Mono', ui-monospace, Consolas, monospace;
+ color: rgba(255, 255, 255, 0.9);
+ transition: background-color 0.15s, border-color 0.15s;
+}
+
+.compare-dd-cell:hover {
+ border-color: var(--accent);
+ border-style: solid;
+}
+
+.compare-dd-selected {
+ border-style: solid;
+}
+
+.compare-dd-disabled {
+ opacity: 0.3;
+ cursor: default;
+}
+
+.compare-dd-disabled:hover {
+ border-color: var(--border);
+ border-style: dashed;
+}
+
.compare-subtitle {
display: flex;
flex-wrap: wrap;
@@ -1792,6 +2005,43 @@ a.run-id:hover {
align-self: flex-start;
}
+.compare-sidebar-hidden {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 4px;
+ align-items: center;
+ padding-bottom: 6px;
+ border-bottom: 1px solid var(--border);
+ margin-bottom: 4px;
+}
+
+.compare-sidebar-hidden-label {
+ font-size: 9px;
+ font-weight: 600;
+ color: var(--text-muted);
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+}
+
+.compare-sidebar-hidden-chip {
+ display: inline-block;
+ padding: 2px 6px;
+ font-size: 10px;
+ font-family: 'SF Mono', ui-monospace, Consolas, monospace;
+ background: var(--surface);
+ border: 1px dashed var(--border);
+ border-radius: var(--radius-sm);
+ color: var(--text-muted);
+ cursor: pointer;
+ transition: border-color 0.15s, color 0.15s;
+}
+
+.compare-sidebar-hidden-chip:hover {
+ border-color: var(--accent);
+ color: var(--text);
+ border-style: solid;
+}
+
.compare-sidebar-empty {
color: var(--text-muted);
font-size: 11px;