/* PreciseSystem.Blazor — OTS-aligned design tokens */

/* Hide PH chart subcooling/superheat annotations — values don't match solver exactly.
   Extra ancestor selector provides specificity to override chart library CSS. */
.ps-designer-layout .ph-chart .sc-sh-label { display: none; }

:root {
    --ps-primary: var(--ots-primary, #0071bc);
    --ps-bg: var(--ots-bg-primary, #ffffff);
    --ps-panel: var(--ots-bg-secondary, #f8f9fa);
    --ps-text: var(--ots-text-primary, #212529);
    --ps-muted: var(--ots-text-secondary, #6c757d);
    --ps-border: var(--ots-border, #dee2e6);
    --ps-btn-bg: var(--ots-bg-tertiary, #e9ecef);
    --ps-btn-hover: var(--ots-border, #dee2e6);
    --ps-success: var(--ots-success, #0cb14b);
    --ps-danger: var(--ots-danger, #dc3545);
    --ps-error-bg: #fdf0f0;
    --ps-error-border: #e8c4c4;
    --ps-error-text: var(--ots-invalid-text, #9a3030);
    --ps-warning-bg: var(--ots-warning-bg, #fff3cd);
    --ps-warning-border: #e6c34d;
    --ps-warning-text: var(--ots-warning-text, #664d03);
    --ps-overlay-bg: rgba(255, 255, 255, 0.7);
    --ps-font: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
    --ps-radius: 8px;
    --ps-focus-ring: var(--ots-focus-ring, #258cfb);
    --ps-cascade-green: var(--ots-success, #0cb14b);
    --ps-exhaust-orange: var(--ots-chart-5, #fd7e14);
}

[data-bs-theme="dark"] {
    --ps-primary: var(--ots-primary, #3ea6ff);
    --ps-bg: var(--ots-bg-primary, #212529);
    --ps-panel: var(--ots-bg-secondary, #2b3035);
    --ps-text: var(--ots-text-primary, #f8f9fa);
    --ps-muted: var(--ots-text-secondary, #adb5bd);
    --ps-border: var(--ots-border, #495057);
    --ps-btn-bg: var(--ots-bg-tertiary, #343a40);
    --ps-btn-hover: var(--ots-border, #495057);
    --ps-success: var(--ots-success, #2ed573);
    --ps-danger: var(--ots-danger, #f87171);
    --ps-error-bg: #2d1a1a;
    --ps-error-border: #5a2a2a;
    --ps-error-text: var(--ots-invalid-text, #f87171);
    --ps-warning-bg: var(--ots-warning-bg, #3b3010);
    --ps-warning-border: #5a4d2a;
    --ps-warning-text: var(--ots-warning-text, #fbbf24);
    --ps-overlay-bg: rgba(33, 37, 41, 0.7);
    --ps-cascade-green: var(--ots-success, #2ed573);
    --ps-exhaust-orange: var(--ots-chart-5, #fb923c);
}

/* Explicit light-mode override — needed when a parent has data-bs-theme="dark"
   (e.g., <html> set from cookie) but the inner designer layout is light. Without
   this rule, the inner element's data-bs-theme="light" can't reset the variables
   that were set by the dark rule above. */
[data-bs-theme="light"] {
    --ps-primary: var(--ots-primary, #0071bc);
    --ps-bg: var(--ots-bg-primary, #ffffff);
    --ps-panel: var(--ots-bg-secondary, #f8f9fa);
    --ps-text: var(--ots-text-primary, #212529);
    --ps-muted: var(--ots-text-secondary, #6c757d);
    --ps-border: var(--ots-border, #dee2e6);
    --ps-btn-bg: var(--ots-bg-tertiary, #e9ecef);
    --ps-btn-hover: var(--ots-border, #dee2e6);
    --ps-success: var(--ots-success, #0cb14b);
    --ps-danger: var(--ots-danger, #dc3545);
    --ps-error-bg: #fdf0f0;
    --ps-error-border: #e8c4c4;
    --ps-error-text: var(--ots-invalid-text, #9a3030);
    --ps-warning-bg: var(--ots-warning-bg, #fff3cd);
    --ps-warning-border: #e6c34d;
    --ps-warning-text: var(--ots-warning-text, #664d03);
    --ps-overlay-bg: rgba(255, 255, 255, 0.7);
    --ps-cascade-green: var(--ots-success, #0cb14b);
    --ps-exhaust-orange: var(--ots-chart-5, #fd7e14);
}

/* ── Layout ── */

.ps-designer-layout {
    display: flex;
    flex-direction: column;
    background: var(--ps-bg);
    color: var(--ps-text);
    font-family: var(--ps-font);
}

.ps-designer-layout.ps-designer-loading > .ps-designer-body {
    opacity: 0;
}

.ps-designer-layout:not(.ps-designer-loading) > .ps-designer-body {
    animation: ps-fade-in 0.15s ease-out;
}

.ps-loading-indicator {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    padding: 48px 16px;
    color: var(--ps-muted, #6c757d);
    font-size: 0.875rem;
}

.ps-loading-error {
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 48px 16px;
    color: var(--ps-danger, #dc3545);
    font-size: 0.875rem;
    text-align: center;
}

@keyframes ps-fade-in {
    from { opacity: 0; }
    to { opacity: 1; }
}

.ps-designer-layout .ps-designer-body {
    display: flex;
    height: 100%;
}

.ps-designer-layout .ps-designer-sidebar {
    width: 320px;
    min-width: 320px;
    height: 100%;
    max-height: 100vh;
    position: sticky;
    top: 0;
    align-self: flex-start;
    border-right: 1px solid var(--ps-border);
    overflow: hidden;
    display: flex;
    flex-direction: column;
    background: var(--ps-panel);
}

.ps-designer-layout .ps-sidebar-scroll {
    flex: 1;
    overflow-y: auto;
    min-height: 0;
}

.ps-designer-layout .ps-sidebar-header {
    padding: 8px 16px;
    border-bottom: 1px solid var(--ps-border);
    display: flex;
    justify-content: flex-end;
    flex-shrink: 0;
}

.ps-designer-layout .ps-sidebar-header-toggles {
    display: flex;
    gap: 8px;
}

.ps-designer-layout .ps-perf-column {
    width: 180px;
    min-width: 180px;
    border-right: 1px solid var(--ps-border);
    padding: 16px 12px;
    overflow-y: auto;
    background: var(--ps-panel);
}

.ps-designer-layout .ps-designer-main {
    flex: 1;
    display: flex;
    flex-direction: column;
    gap: 12px;
    padding: 16px;
    overflow-y: auto;
    min-width: 0;
}

.ps-designer-layout .ps-chart-area {
    position: relative;
    flex: 1;
    min-height: 200px;
    max-height: calc(100vh - 200px);
    border: 1px solid var(--ps-border);
    border-radius: var(--ps-radius);
    overflow: hidden;
}

/* ── Control Panel ── */

.ps-designer-layout .ps-control-panel {
    font-family: var(--ps-font);
    color: var(--ps-text);
    padding: 12px;
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.ps-designer-layout .ps-control-section {
    border: 1px solid var(--ps-border);
    border-radius: var(--ps-radius);
    padding: 10px;
    background: var(--ps-bg);
}

.ps-designer-layout .ps-control-section h4 {
    margin: 0 0 6px 0;
    font-size: 0.8125rem;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    color: var(--ps-muted);
}

.ps-designer-layout .ps-control-label {
    display: block;
    font-size: 0.8125rem;
    font-weight: 600;
    margin-bottom: 4px;
    color: var(--ps-muted);
}

.ps-designer-layout .ps-control-select {
    width: 100%;
    padding: 6px 8px;
    border: 1px solid var(--ps-border);
    border-radius: 4px;
    background: var(--ps-panel);
    color: var(--ps-text);
    font-size: 0.8125rem;
    font-family: var(--ps-font);
}

.ps-designer-layout .ps-control-select:focus {
    outline: none;
    border-color: var(--ps-primary);
    box-shadow: 0 0 0 2px var(--ps-focus-ring);
}

.ps-designer-layout .ps-refrigerant-description,
.ps-designer-layout .ps-system-description {
    display: block;
    font-size: 0.75rem;
    color: var(--ps-muted);
    margin-top: 4px;
    font-style: italic;
    line-height: 1.3;
}

/* ── Model detail tier (slim inline dropdown inside System section) ── */

.ps-designer-layout .ps-model-detail-select {
    padding: 4px 6px;
    font-size: 0.75rem;
}

.ps-designer-layout .ps-model-detail-note {
    display: block;
    font-size: 0.7rem;
    color: var(--ps-muted);
    margin-top: 4px;
    line-height: 1.3;
}

/* ── Sliders ── */

.ps-designer-layout .ps-slider-row {
    display: grid;
    grid-template-columns: 100px 1fr 90px;
    align-items: center;
    gap: 8px;
    margin-bottom: 6px;
}

.ps-designer-layout .ps-slider-row label {
    font-size: 0.8125rem;
    font-weight: 500;
    color: var(--ps-text);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.ps-designer-layout .ps-slider-row input[type="range"] {
    width: 100%;
    height: 4px;
}

.ps-designer-layout .ps-slider-value {
    display: flex;
    align-items: center;
    gap: 2px;
    justify-content: flex-end;
    font-size: 0.8125rem;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    color: var(--ps-primary);
    min-width: 0;
}

.ps-designer-layout .ps-slider-value input[type="number"] {
    width: 48px;
    min-height: 26px;
    padding: 4px 6px;
    border: 1px solid var(--ps-border);
    border-radius: 4px;
    background: var(--ps-panel);
    color: var(--ps-primary);
    font-size: 0.8125rem;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    text-align: right;
    font-family: var(--ps-font);
    -moz-appearance: textfield;
}

.ps-designer-layout .ps-slider-value input[type="number"]::-webkit-inner-spin-button,
.ps-designer-layout .ps-slider-value input[type="number"]::-webkit-outer-spin-button {
    -webkit-appearance: none;
    margin: 0;
}

.ps-designer-layout .ps-slider-value input[type="number"]:hover {
    border-color: var(--ps-muted);
}

.ps-designer-layout .ps-slider-value input[type="number"]:focus {
    outline: none;
    border-color: var(--ps-primary);
    box-shadow: 0 0 0 2px var(--ps-focus-ring);
}

.ps-designer-layout .ps-slider-value span {
    font-size: 0.75rem;
    color: var(--ps-muted);
    font-weight: 400;
    width: 32px;
    text-align: left;
    flex-shrink: 0;
}

/* ── Input rows ── */

.ps-designer-layout .ps-input-row {
    display: grid;
    grid-template-columns: 120px 1fr 40px;
    align-items: center;
    gap: 8px;
    margin-bottom: 6px;
}

.ps-designer-layout .ps-input-row label {
    font-size: 0.8125rem;
    font-weight: 500;
    color: var(--ps-text);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.ps-designer-layout .ps-input-row input[type="number"] {
    width: 100%;
    min-height: 26px;
    padding: 4px 6px;
    border: 1px solid var(--ps-border);
    border-radius: 4px;
    background: var(--ps-panel);
    color: var(--ps-text);
    font-size: 0.8125rem;
    font-variant-numeric: tabular-nums;
    font-family: var(--ps-font);
}

/* ── Segmented control (3-way picker, alternative to a 3-option <select>) ── */

.ps-designer-layout .ps-segment-group {
    display: grid;
    grid-auto-flow: column;
    grid-auto-columns: 1fr;
    border: 1px solid var(--ps-border);
    border-radius: 4px;
    overflow: hidden;
    background: var(--ps-panel);
    margin-bottom: 8px;
}

.ps-designer-layout .ps-segment {
    appearance: none;
    border: none;
    border-left: 1px solid var(--ps-border);
    background: transparent;
    color: var(--ps-muted);
    font-size: 0.8125rem;
    font-weight: 500;
    font-family: var(--ps-font);
    padding: 6px 8px;
    cursor: pointer;
    min-height: 28px;
}

.ps-designer-layout .ps-segment:first-child {
    border-left: none;
}

.ps-designer-layout .ps-segment:hover {
    background: var(--ps-btn-hover);
}

.ps-designer-layout .ps-segment[aria-pressed="true"] {
    background: var(--ps-primary);
    color: #ffffff;
}

.ps-designer-layout .ps-segment:focus-visible {
    outline: none;
    box-shadow: inset 0 0 0 2px var(--ps-focus-ring);
}

.ps-designer-layout .ps-input-row input:focus {
    outline: none;
    border-color: var(--ps-primary);
    box-shadow: 0 0 0 2px var(--ps-focus-ring);
}

.ps-designer-layout .ps-input-unit {
    font-size: 0.75rem;
    color: var(--ps-muted);
}

/* ── Performance Summary ── */

.ps-designer-layout .ps-performance-summary {
    border: 1px solid var(--ps-border);
    border-radius: var(--ps-radius);
    padding: 12px 16px;
    background: var(--ps-bg);
    font-family: var(--ps-font);
}

.ps-designer-layout .ps-performance-summary.ps-empty { opacity: 0.5; }

.ps-designer-layout .ps-perf-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 12px 20px;
}

.ps-designer-layout .ps-perf-column .ps-perf-grid { grid-template-columns: 1fr; gap: 10px; }
.ps-designer-layout .ps-perf-column .ps-performance-summary { border: none; padding: 0; background: transparent; }

.ps-designer-layout .ps-perf-column .ps-perf-item {
    padding: 8px 12px;
    border: 1px solid var(--ps-border);
    border-radius: 6px;
    background: var(--ps-bg);
}

.ps-designer-layout .ps-perf-column .ps-perf-label { font-size: 0.6875rem; }
.ps-designer-layout .ps-perf-column .ps-perf-value { font-size: 0.9375rem; }
.ps-designer-layout .ps-perf-column .ps-perf-subvalue { font-size: 0.6875rem; }

.ps-designer-layout .ps-perf-item { display: flex; flex-direction: column; gap: 2px; }

.ps-designer-layout .ps-perf-label {
    font-size: 0.75rem;
    text-transform: uppercase;
    letter-spacing: 0.3px;
    color: var(--ps-muted);
}

.ps-designer-layout .ps-perf-value {
    font-size: 1rem;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    color: var(--ps-text);
}

/* Secondary line inside a perf card — a breakdown under the headline value (e.g. the
   sensible/latent split beneath total coil capacity). ps-perf-item is already a flex
   column, so this simply stacks below .ps-perf-value. */
.ps-designer-layout .ps-perf-subvalue {
    font-size: 0.75rem;
    font-weight: 400;
    font-variant-numeric: tabular-nums;
    color: var(--ps-muted);
}

.ps-designer-layout .ps-perf-empty {
    font-size: 0.8125rem;
    color: var(--ps-muted);
    font-style: italic;
}

/* ── Status colors ── */

.ps-designer-layout .ps-status-solving { color: var(--ps-primary); }
.ps-designer-layout .ps-status-converged { color: var(--ps-success); }
.ps-designer-layout .ps-status-danger { color: var(--ps-danger); }

/* ── Node States Table ── */

.ps-designer-layout .ps-node-states-table {
    border: 1px solid var(--ps-border);
    border-radius: var(--ps-radius);
    background: var(--ps-bg);
    font-family: var(--ps-font);
    overflow-x: auto;
    min-height: 200px;
}

.ps-designer-layout .ps-table-header {
    padding: 10px 14px;
    cursor: pointer;
    user-select: none;
}

.ps-designer-layout .ps-table-header h4 {
    margin: 0;
    font-size: 0.8125rem;
    color: var(--ps-text);
}

.ps-designer-layout .ps-table-header:hover { background: var(--ps-btn-bg); }

.ps-designer-layout .ps-node-states-table table {
    width: 100%;
    border-collapse: collapse;
    font-size: 0.75rem;
}

.ps-designer-layout .ps-node-states-table th,
.ps-designer-layout .ps-node-states-table td {
    padding: 3px 4px;
    text-align: right;
    border-bottom: 1px solid var(--ps-border);
    white-space: nowrap;
}

.ps-designer-layout .ps-node-states-table th {
    font-weight: 600;
    font-size: 0.6875rem;
    text-transform: uppercase;
    letter-spacing: 0.3px;
    color: var(--ps-muted);
    background: var(--ps-panel);
}

.ps-designer-layout .ps-node-states-table td.ps-node-id,
.ps-designer-layout .ps-node-states-table th.ps-node-id-header {
    text-align: center;
    font-weight: 600;
    color: var(--ps-primary);
}

.ps-designer-layout .ps-node-states-table .ps-no-data {
    padding: 12px 14px;
    font-size: 0.8125rem;
    color: var(--ps-muted);
    font-style: italic;
    margin: 0;
}

/* ── Sidebar Buttons ── */

.ps-designer-layout .ps-footer-btn {
    padding: 6px 12px;
    border: 1px solid var(--ps-border);
    border-radius: 6px;
    background: var(--ps-btn-bg);
    color: var(--ps-text);
    font-size: 0.8125rem;
    cursor: pointer;
    min-width: 36px;
    text-align: center;
    transition: background 0.15s;
}

.ps-designer-layout .ps-footer-btn:hover { background: var(--ps-btn-hover); }

.ps-designer-layout .ps-cancel-btn {
    padding: 3px 10px;
    border: 1px solid var(--ps-danger);
    border-radius: 4px;
    background: transparent;
    color: var(--ps-danger);
    font-size: 0.6875rem;
    cursor: pointer;
    margin-top: 4px;
}
.ps-designer-layout .ps-cancel-btn:hover { background: var(--ps-danger); color: #fff; }

.ps-designer-layout .ps-control-actions {
    display: flex;
    justify-content: center;
}

.ps-designer-layout .ps-reset-btn {
    padding: 6px 16px;
    border: 1px solid var(--ps-border, #ced4da);
    border-radius: 4px;
    background: transparent;
    color: var(--ps-text-secondary, #6c757d);
    font-size: 0.8125rem;
    cursor: pointer;
    transition: background 0.15s, color 0.15s, border-color 0.15s;
}

.ps-designer-layout .ps-reset-btn:hover:not(:disabled) {
    background: var(--ps-btn-hover, #e9ecef);
    color: var(--ps-text, #212529);
    border-color: var(--ps-text-secondary, #6c757d);
}

.ps-designer-layout .ps-reset-btn:disabled {
    opacity: 0.5;
    cursor: not-allowed;
}

/* ── Spinner ── */

.ps-designer-layout .ps-solve-ps-spinner {
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--ps-overlay-bg);
    z-index: 10;
    border-radius: var(--ps-radius);
}

.ps-designer-layout .ps-spinner {
    width: 36px;
    height: 36px;
    border: 3px solid var(--ps-border);
    border-top-color: var(--ps-primary);
    border-radius: 50%;
    animation: ps-spin 0.8s linear infinite;
}

@keyframes ps-spin { to { transform: rotate(360deg); } }

.ps-designer-layout .ps-solve-progress-bar {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    height: 5px;
    z-index: 10;
    background: var(--ps-border);
    overflow: hidden;
    border-radius: var(--ps-radius) var(--ps-radius) 0 0;
}

.ps-designer-layout .ps-solve-progress-bar::after {
    content: '';
    position: absolute;
    inset: 0;
    background: var(--ps-primary);
    animation: ps-progress-slide 1s ease-in-out infinite;
    transform-origin: left;
}

@keyframes ps-progress-slide {
    0%   { transform: translateX(-100%); }
    50%  { transform: translateX(0%); }
    100% { transform: translateX(100%); }
}

/* ── Error / Warning ── */

.ps-designer-layout .ps-error-banner {
    padding: 10px 14px;
    background: var(--ps-error-bg);
    border: 1px solid var(--ps-error-border);
    border-radius: 6px;
    color: var(--ps-error-text);
    font-size: 0.8125rem;
    line-height: 1.4;
}

.ps-designer-layout .ps-validation-toast {
    position: fixed;
    top: 60px;
    left: 50%;
    transform: translateX(-50%);
    z-index: 9999;
    padding: 12px 20px;
    background: var(--ps-warning-bg);
    border: 1px solid var(--ps-warning-border);
    border-radius: 8px;
    color: var(--ps-warning-text);
    font-size: 0.875rem;
    font-weight: 500;
    line-height: 1.4;
    cursor: pointer;
    display: flex;
    align-items: center;
    gap: 8px;
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
    animation: ps-toast-in 0.3s ease-out;
}

.ps-designer-layout .ps-validation-toast .ps-warning-icon { font-size: 1.125rem; flex-shrink: 0; }

@keyframes ps-toast-in {
    from { opacity: 0; transform: translateX(-50%) translateY(-10px); }
    to { opacity: 1; transform: translateX(-50%) translateY(0); }
}

/* ── Flow chain ── */

.ps-designer-layout .ps-flow-chain {
    font-family: 'Consolas', 'Menlo', monospace;
    font-size: 0.8125rem;
    padding: 8px 12px;
    background: var(--ps-panel);
    border: 1px solid var(--ps-border);
    border-radius: 6px;
    color: var(--ps-text);
    white-space: normal;
    word-break: break-word;
}


/* ── Chart containers ── */

.ps-designer-layout .ps-ph-chart-container { width: 100%; height: 100%; }
.ps-designer-layout .ps-psychro-chart-container { width: 100%; height: 100%; }

/* Hide pin tooltip — chart is read-only but crosshair is kept for value readout.
   Extra ancestor selectors provide specificity to override chart library CSS. */
body .ps-designer-layout .ps-psychro-chart-container .snap-tooltip { display: none; }

/* ── Utility classes ── */

.ps-designer-layout .ps-inline-heading { display: inline; }
.ps-designer-layout .ps-mb-sm { margin-bottom: 0.375rem; }

/* ── Responsive: tablet / small laptop ── */

@media (max-width: 900px) {
    /* Reset everything to simple block flow — one scrollable page */
    .ps-designer-layout,
    .ps-designer-layout .ps-designer-body,
    .ps-designer-layout .ps-designer-sidebar,
    .ps-designer-layout .ps-designer-main {
        display: block;
        width: auto;
        min-width: 0;
        height: auto;
        max-height: none;
        min-height: 0;
        position: static;
        overflow: visible;
        flex: none;
        align-self: auto;
    }

    .ps-designer-layout .ps-designer-sidebar {
        border-right: none;
        border-bottom: 1px solid var(--ps-border);
    }

    .ps-designer-layout .ps-designer-sidebar > .ps-control-panel {
        flex: none;
    }


    .ps-designer-layout .ps-perf-column {
        width: auto;
        min-width: 0;
        border-right: none;
        border-bottom: 1px solid var(--ps-border);
        padding: 12px 16px;
        overflow: visible;
    }

    .ps-designer-layout .ps-perf-column .ps-perf-grid { grid-template-columns: repeat(3, 1fr); }

    .ps-designer-layout .ps-chart-area {
        min-height: 300px;
        height: auto;
        max-height: none;
        flex: none;
    }

    .ps-designer-layout .ps-node-states-table { min-height: auto; }

    /* Slider rows: label on top, slider + value on bottom */
    .ps-designer-layout .ps-slider-row {
        grid-template-columns: 1fr auto;
        grid-template-rows: auto auto;
    }

    .ps-designer-layout .ps-slider-row label {
        grid-column: 1 / -1;
    }

    .ps-designer-layout .ps-slider-row input[type="range"] {
        grid-column: 1;
        min-width: 0;
    }

    .ps-designer-layout .ps-slider-value {
        grid-column: 2;
        min-width: 0;
    }

}

/* ── Responsive: phone ── */

@media (max-width: 480px) {
    .ps-designer-layout .ps-perf-column .ps-perf-grid { grid-template-columns: repeat(2, 1fr); }

    .ps-designer-layout .ps-designer-main { padding: 8px; }

    .ps-designer-layout .ps-chart-area { min-height: 250px; }
}

/* ── Parametric Sweep ── */

.ps-sweep-controls { display: flex; flex-direction: column; gap: 6px; margin-top: 8px; }

.ps-sweep-progress {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-top: 4px;
}

.ps-progress-bar {
    flex: 1;
    height: 6px;
    background: var(--ps-border, #dee2e6);
    border-radius: 3px;
    overflow: hidden;
}

.ps-progress-fill {
    height: 100%;
    background: var(--ps-primary, #0071bc);
    border-radius: 3px;
    transition: width 0.15s ease;
}

.ps-progress-text {
    font-size: 0.75rem;
    color: var(--ps-muted, #6c757d);
    white-space: nowrap;
}

.ps-sweep-info {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-top: 4px;
    font-size: 0.75rem;
    color: var(--ps-muted, #6c757d);
}

.ps-btn-primary {
    width: 100%;
    padding: 6px 12px;
    border: 1px solid var(--ps-primary, #0071bc);
    border-radius: 6px;
    background: var(--ps-primary, #0071bc);
    color: #fff;
    font-size: 0.8125rem;
    font-weight: 600;
    cursor: pointer;
    margin-top: 4px;
}

.ps-btn-primary:hover { opacity: 0.9; }
.ps-btn-primary:disabled { opacity: 0.5; cursor: not-allowed; }

.ps-btn-sm { padding: 3px 8px; font-size: 0.6875rem; }

.ps-section-toggle {
    cursor: pointer;
    list-style: none;
    user-select: none;
}

.ps-section-toggle::-webkit-details-marker { display: none; }

.ps-inline-heading {
    display: inline;
    margin: 0;
}

/* ── Chart Player Bar ── */

.ps-chart-player-bar {
    border: 1px solid var(--ps-border, #dee2e6);
    border-radius: var(--ps-radius, 8px);
    background: var(--ps-panel, #f8f9fa);
    overflow: hidden;
}

[data-bs-theme="dark"] .ps-chart-player-bar {
    background: var(--ps-panel, #1e1e1e);
}

