:root {
  --bg: #f4f5f6;
  --panel: #fff;
  --ink: #20252b;
  --muted: #68717b;
  --line: #dfe3e6;
  --primary: #176b4d;
  --primary-soft: #e9f3ee;
  --up: #c83c32;
  --down: #14805b;
}

* { box-sizing: border-box; }
html { min-width: 320px; background: var(--bg); }
body { margin: 0; color: var(--ink); background: var(--bg); font: 13px/1.45 -apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft YaHei", sans-serif; }
button, input, select { font: inherit; }
button { cursor: pointer; }
button:disabled { cursor: not-allowed; opacity: .5; }
.shell { width: min(100% - 24px, 1600px); margin: 0 auto; }

.topbar { display: flex; align-items: center; justify-content: space-between; min-height: 54px; border-bottom: 1px solid var(--line); }
.brand { color: var(--ink); text-decoration: none; }
.brand strong { font-size: 17px; }
.system-state { display: flex; align-items: center; gap: 8px; color: var(--muted); font-size: 12px; }
.status-dot { width: 8px; height: 8px; border-radius: 50%; background: #9ba2a8; }
.status-dot.online { background: #2b9b6f; }
.status-dot.busy { background: #d99427; }
.task-progress { margin: 8px 0 10px; padding: 9px 12px; border: 1px solid #cfd9d4; border-radius: 7px; background: #fff; }
.task-progress[hidden] { display: none; }
.task-progress-heading { display: flex; align-items: center; justify-content: space-between; margin-bottom: 5px; }
.task-progress-heading strong { font-size: 12px; }
.task-progress-heading span { color: var(--primary); font-size: 12px; font-weight: 700; font-variant-numeric: tabular-nums; }
.task-progress-track { height: 8px; overflow: hidden; border-radius: 999px; background: #e8ecea; }
.task-progress-track > span { display: block; width: 0; height: 100%; border-radius: inherit; background: linear-gradient(90deg, #2b9b6f, var(--primary)); transition: width .3s ease; }
.task-progress small { display: block; margin-top: 5px; color: var(--muted); font-size: 11px; }
.button { border: 0; border-radius: 5px; font-weight: 600; }
.button-primary { padding: 8px 12px; background: var(--primary); color: #fff; }
.button-secondary { padding: 8px 12px; border: 1px solid var(--primary); background: #fff; color: var(--primary); }

.view-tabs { display: flex; gap: 0; margin: 12px 0; border-bottom: 1px solid var(--line); }
.view-tab { padding: 9px 16px; border: 0; border-bottom: 2px solid transparent; background: transparent; color: var(--muted); text-align: left; }
.view-tab small { margin-right: 6px; color: #929aa1; font-size: 9px; font-weight: 700; }
.view-tab strong { font-size: 13px; }
.view-tab.active { border-bottom-color: var(--primary); color: var(--primary); }
.view-tab.active small { color: var(--primary); }
.view-panel[hidden] { display: none; }
.data-maintenance { margin: -5px 0 10px auto; width: fit-content; color: var(--muted); font-size: 10px; }
.data-maintenance summary { display: flex; align-items: center; gap: 6px; cursor: pointer; list-style: none; }
.data-maintenance summary::-webkit-details-marker { display: none; }
.data-maintenance summary::after { content: "展开 ▼"; font-size: 9px; }
.data-maintenance[open] summary::after { content: "收起 ▲"; }
.data-maintenance summary span { color: var(--ink); font-weight: 600; }
.data-maintenance summary small { font-size: 9px; }
.data-maintenance-content { display: flex; align-items: center; justify-content: space-between; gap: 18px; min-width: 330px; margin-top: 6px; padding: 9px 10px; border: 1px solid var(--line); border-radius: 6px; background: #fff; box-shadow: 0 3px 10px rgba(27,53,43,.06); }
.data-maintenance-content > div { display: grid; gap: 1px; }
.data-maintenance-content strong { color: var(--ink); font-size: 11px; }
.data-maintenance-content small { font-size: 9px; }

.compact-toolbar, .boll-runbar { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-bottom: 10px; padding: 12px 14px; border: 1px solid var(--line); border-radius: 7px; background: var(--panel); }
.compact-toolbar > div { display: flex; align-items: baseline; gap: 10px; min-width: 0; }
.compact-toolbar strong { font-size: 15px; }
.compact-toolbar span { color: var(--primary); font-weight: 700; }
.compact-toolbar small { overflow: hidden; color: var(--muted); text-overflow: ellipsis; white-space: nowrap; }
.compact-toolbar select, .boll-run-actions select { min-width: 180px; padding: 7px 9px; border: 1px solid var(--line); border-radius: 5px; background: #fff; }
.flow-toolbar-actions { display: flex; align-items: center; gap: 7px; }
.flow-toolbar-actions select:first-child { min-width: 280px; }
.manual-capture-button { flex: 0 0 auto; padding: 7px 10px; font-size: 11px; }
.flow-meta { margin: -2px 0 10px; padding: 8px 12px; border-left: 3px solid var(--primary); background: var(--primary-soft); color: #386450; font-size: 11px; }

.metrics { display: grid; grid-template-columns: repeat(4, 1fr); margin-bottom: 10px; border: 1px solid var(--line); border-radius: 7px; background: var(--panel); }
.metric-card { padding: 11px 14px; border-right: 1px solid var(--line); }
.metric-card:last-child { border-right: 0; }
.metric-card span { color: var(--muted); font-size: 11px; }
.metric-card strong { display: inline-block; margin-left: 8px; font-size: 18px; }
.metric-card small { display: block; margin-top: 2px; color: #9aa1a7; font-size: 10px; }
.metric-up strong { color: var(--up); }
.metric-down strong { color: var(--down); }

.workspace { display: grid; grid-template-columns: 310px minmax(0, 1fr); gap: 10px; align-items: start; margin-bottom: 24px; }
.filters, .results { border: 1px solid var(--line); border-radius: 7px; background: var(--panel); }
.filters { padding: 15px; }
.results { min-height: 420px; overflow: hidden; }
.section-heading { display: flex; align-items: flex-end; justify-content: space-between; gap: 10px; }
.section-heading span { color: var(--primary); font-size: 9px; font-weight: 700; letter-spacing: .1em; }
.section-heading h2 { margin: 2px 0 0; font-size: 16px; }
.text-button { padding: 0; border: 0; background: transparent; color: var(--muted); font-size: 11px; }

.parameter-legend { position: sticky; top: 8px; z-index: 6; margin: 11px 0 12px; padding: 9px; border: 1px solid #cfd9d4; border-radius: 7px; background: rgba(255,255,255,.97); box-shadow: 0 4px 13px rgba(27,53,43,.08); backdrop-filter: blur(5px); }
.parameter-legend-heading { display: flex; align-items: center; gap: 8px; cursor: pointer; list-style: none; }
.parameter-legend-heading::-webkit-details-marker { display: none; }
.parameter-legend-heading::after { content: "展开 ▼"; color: var(--muted); font-size: 9px; font-weight: 600; white-space: nowrap; }
.parameter-legend[open] .parameter-legend-heading::after { content: "收起 ▲"; }
.parameter-legend[open] .parameter-legend-heading { margin-bottom: 5px; }
.parameter-legend-heading:hover::after { color: var(--primary); }
.parameter-legend-heading:focus-visible { border-radius: 3px; outline: 2px solid var(--primary); outline-offset: 2px; }
.parameter-legend-heading strong { font-size: 11px; }
.parameter-legend-heading span { margin-left: auto; padding: 2px 6px; border-radius: 9px; background: var(--primary-soft); color: var(--primary); font-size: 9px; font-weight: 700; }
#parameter-legend-svg { display: block; width: 100%; height: 150px; }
.legend-chart-bg { fill: #fbfcfc; stroke: #e4e8e6; }
#parameter-legend-svg text { fill: #7c8581; font-size: 9px; }
.legend-band { fill: none; stroke-width: 1.4; stroke-dasharray: 5 4; }
.legend-band.upper { stroke: #d65a50; }
.legend-band.boll { stroke: #3d8bb5; }
.legend-preclose { stroke: #8a9290; stroke-width: 1.2; stroke-dasharray: 3 3; }
.legend-gap-arrow { stroke: #d65a50; stroke-width: 1.8; marker-end: none; }
.legend-candle-line, .legend-price-mark { stroke: #176b4d; stroke-width: 2; }
.legend-body { fill: #e85d55; stroke: #b94741; stroke-width: 1.2; }
#legend-high-point, #legend-low-point { fill: #176b4d; }
#parameter-legend-svg [data-legend-part] { transition: opacity .16s ease, filter .16s ease; }
#parameter-legend-svg [data-legend-part].legend-muted { opacity: .16; }
#parameter-legend-svg [data-legend-part].legend-highlight { filter: drop-shadow(0 0 3px rgba(23,107,77,.45)); }
.parameter-legend-formula { min-height: 28px; margin: 4px 1px 5px; color: var(--muted); font-size: 9px; line-height: 1.45; }
.parameter-legend-chips { display: flex; flex-wrap: wrap; gap: 3px; min-height: 18px; }
.parameter-legend-chip { padding: 2px 5px; border-radius: 3px; background: #f0f2f2; color: #626b68; font-size: 8px; line-height: 1.35; }
.parameter-legend-chip.active { background: var(--primary-soft); color: var(--primary); font-weight: 700; }

fieldset { min-width: 0; margin: 17px 0; padding: 0; border: 0; }
legend, .field-label { display: block; margin-bottom: 6px; font-size: 11px; font-weight: 600; }
.range-grid { display: grid; grid-template-columns: 1fr 14px 1fr; gap: 4px; align-items: end; }
.range-grid label > span { display: block; margin-bottom: 4px; color: var(--muted); font-size: 10px; }
.range-separator { padding-bottom: 8px; color: #a0a6ab; text-align: center; }
.input-unit { display: flex; align-items: center; border: 1px solid var(--line); border-radius: 5px; background: #fff; }
.input-unit:focus-within, .filters select:focus, .filters input:focus { border-color: var(--primary); outline: 2px solid rgba(23,107,77,.08); }
.input-unit input { min-width: 0; width: 100%; padding: 8px 3px 8px 8px; border: 0; outline: 0; }
.input-unit i { padding-right: 7px; color: var(--muted); font-size: 10px; font-style: normal; }
.filters select, .filters > form > input { width: 100%; margin-bottom: 14px; padding: 8px 9px; border: 1px solid var(--line); border-radius: 5px; background: #fff; outline: 0; }
.button-submit { width: 100%; padding: 9px; background: var(--primary); color: #fff; }

.quick-range-header { display: flex; align-items: center; justify-content: space-between; margin-top: 9px; }
.quick-range-header > span, .quick-range-empty, .quick-range-feedback { color: var(--muted); font-size: 9px; }
.quick-range-header > button { padding: 2px 0; border: 0; background: transparent; color: var(--primary); font-size: 9px; }
.quick-ranges { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 5px; }
.quick-range-item { display: inline-flex; border: 1px solid var(--line); border-radius: 4px; overflow: hidden; }
.quick-range-item button { border: 0; background: #fff; color: var(--muted); font-size: 9px; }
.quick-range-apply { padding: 4px 5px; }
.quick-range-delete { padding: 4px 5px 4px 2px; }
.quick-range-empty, .quick-range-feedback { min-height: 12px; margin: 4px 0 0; }
.quick-range-feedback { color: var(--primary); }
.quick-range-feedback.error { color: var(--up); }

.industry-rule-box { margin: 15px 0; padding: 11px; border: 1px solid var(--line); border-radius: 6px; background: #fafbfb; }
.industry-rule-box legend { width: 100%; padding: 0 5px; color: var(--ink); }
.industry-collapse-button { display: flex; align-items: center; justify-content: space-between; width: 100%; padding: 2px 0; border: 0; background: transparent; color: var(--ink); font: inherit; font-weight: 700; cursor: pointer; }
.industry-collapse-button:hover .industry-collapse-label { color: var(--primary); }
.industry-collapse-button:focus-visible { border-radius: 3px; outline: 2px solid var(--primary); outline-offset: 2px; }
.industry-collapse-label { margin-left: 12px; color: var(--muted); font-size: 12px; font-weight: 600; white-space: nowrap; }
.industry-rule-content[hidden] { display: none; }
.industry-help { margin: -2px 0 8px; color: var(--muted); font-size: 9px; }
.industry-rule-controls { display: grid; grid-template-columns: 1fr 1.35fr; gap: 6px; }
.industry-rule-controls select { min-width: 0; margin-bottom: 7px; padding: 7px; }
.industry-search { width: 100%; margin-bottom: 6px; padding: 7px 8px; border: 1px solid var(--line); border-radius: 5px; background: #fff; outline: 0; }
.industry-option-list { display: grid; gap: 1px; max-height: 156px; overflow-y: auto; padding: 4px; border: 1px solid var(--line); border-radius: 5px; background: #fff; }
.industry-option { display: flex; align-items: center; gap: 6px; padding: 4px 5px; border-radius: 3px; color: var(--ink); font-size: 10px; cursor: pointer; }
.industry-option:hover { background: var(--primary-soft); }
.industry-option input { margin: 0; accent-color: var(--primary); }
.industry-option-empty { margin: 6px; color: var(--muted); font-size: 9px; text-align: center; }
.industry-add-button { width: 100%; margin-top: 6px; padding: 7px; border: 1px solid var(--primary); border-radius: 4px; background: #fff; color: var(--primary); font-size: 10px; font-weight: 600; }
.industry-add-button:hover { background: var(--primary-soft); }
.industry-rule-list { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 7px; }
.industry-rule-chip { padding: 4px 6px; border: 1px solid #a9cfbd; border-radius: 4px; background: var(--primary-soft); color: var(--primary); font-size: 9px; }
.industry-rule-chip.exclude { border-color: #e2bbb7; background: #fbeceb; color: #a2342c; }
.industry-rule-empty { margin: 6px 0 0; color: var(--muted); font-size: 9px; }
.filter-accordion { margin: 10px 0; border: 1px solid var(--line); border-radius: 6px; background: #fafbfb; overflow: hidden; }
.filter-accordion summary { display: flex; align-items: center; justify-content: space-between; padding: 9px 11px; color: var(--ink); font-size: 11px; font-weight: 700; cursor: pointer; list-style: none; }
.filter-accordion summary::-webkit-details-marker { display: none; }
.filter-accordion summary::after { content: "展开 ▼"; margin-left: 10px; color: var(--muted); font-size: 10px; font-weight: 600; white-space: nowrap; }
.filter-accordion[open] summary { border-bottom: 1px solid var(--line); }
.filter-accordion[open] summary::after { content: "收起 ▲"; }
.filter-accordion summary:hover::after { color: var(--primary); }
.filter-accordion summary:focus-visible { outline: 2px solid var(--primary); outline-offset: -2px; }
.filter-accordion-content { padding: 11px; }
.filter-accordion-content > select, .filter-accordion-content > input { width: 100%; margin-bottom: 12px; padding: 8px 9px; border: 1px solid var(--line); border-radius: 5px; background: #fff; outline: 0; }
.wick-filter-box, .body-filter-box, .open-comparison-box, .dynamic-pe-filter-box, .limit-up-filter-box { margin: 15px 0; padding: 11px; border: 1px solid var(--line); border-radius: 6px; background: #fafbfb; }
.wick-filter-box legend, .body-filter-box legend, .open-comparison-box legend, .dynamic-pe-filter-box legend, .limit-up-filter-box legend { padding: 0 5px; }
.limit-up-filter-row { display: grid; grid-template-columns: auto 76px 1fr; gap: 7px; align-items: center; margin-bottom: 9px; font-size: 11px; }
.limit-up-filter-row input { min-width: 0; width: 100%; padding: 7px; border: 1px solid var(--line); border-radius: 5px; outline: 0; }
.wick-range-title { display: flex; justify-content: space-between; margin: 2px 0 5px; font-size: 12px; font-weight: 600; }
.wick-range-title small { color: var(--primary); font-size: 11px; font-weight: 500; }
.wick-range-grid { display: grid; grid-template-columns: 1fr 14px 1fr; gap: 5px; align-items: center; margin-bottom: 11px; }
.wick-range-grid input { min-width: 0; width: 100%; padding: 8px; border: 1px solid var(--line); border-radius: 5px; outline: 0; }
.wick-range-grid span { color: var(--muted); text-align: center; }
.wick-help { margin: -7px 0 0; color: var(--muted); font-size: 11px; }
.board-filter-help { margin: 0 0 9px; }
.board-option-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
.board-option { display: flex; align-items: center; gap: 8px; min-width: 0; padding: 9px; border: 1px solid var(--line); border-radius: 5px; background: #fff; cursor: pointer; }
.board-option:hover { border-color: #a9cfbd; background: var(--primary-soft); }
.board-option:has(input:checked) { border-color: var(--primary); background: var(--primary-soft); }
.board-option input { flex: 0 0 auto; margin: 0; accent-color: var(--primary); }
.board-option span { display: flex; flex-direction: column; min-width: 0; }
.board-option strong { font-size: 13px; }
.board-option small { margin-top: 2px; color: var(--muted); font-size: 11px; }
.strategy-accordion { margin-top: 17px; border-color: #e2e5e6; background: #fff; }
.strategy-accordion summary { color: var(--muted); font-size: 10px; font-weight: 600; }
.strategy-box { margin: 0; padding: 10px; border: 0; border-radius: 0; background: #f8f9f9; }
.strategy-box textarea { width: 100%; resize: vertical; padding: 8px; border: 1px solid var(--line); border-radius: 5px; background: #fff; color: var(--ink); font: 11px/1.45 ui-monospace, SFMono-Regular, Consolas, monospace; outline: 0; }
.strategy-box textarea:focus { border-color: var(--primary); outline: 2px solid rgba(23,107,77,.08); }
.strategy-actions { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; margin-top: 7px; }
.strategy-actions button { padding: 7px 5px; border: 1px solid var(--primary); border-radius: 4px; background: #fff; color: var(--primary); font-size: 11px; font-weight: 700; }
.strategy-actions button:first-child { background: var(--primary); color: #fff; }
.strategy-feedback { min-height: 18px; margin: 6px 0 0; color: var(--muted); font-size: 10px; }
.strategy-feedback.success { color: var(--primary); }
.strategy-feedback.error { color: var(--up); }

.results-heading { padding: 13px 15px 10px; border-bottom: 1px solid var(--line); }
.results-heading p { margin: 0; color: var(--muted); font-size: 11px; }
.results-heading p strong { color: var(--ink); font-size: 15px; }
.results-actions { display: flex; align-items: center; gap: 9px; }
.candidate-pool-name { width: 180px; padding: 5px 8px; border: 1px solid var(--line); border-radius: 4px; font-size: 10px; }
.flow-save-button { border-color: var(--primary); background: var(--primary); color: #fff; }
.flow-save-button:hover { background: #125a40; color: #fff; }
.export-button { padding: 5px 9px; border: 1px solid var(--line); border-radius: 4px; background: #fff; color: var(--primary); font-size: 10px; font-weight: 600; }
.export-button:hover { border-color: var(--primary); background: var(--primary-soft); }
.message { margin: 10px 14px 0; padding: 9px 10px; border-radius: 5px; background: #f0f2f3; color: var(--muted); font-size: 11px; }
.message:empty { display: none; }
.message.error { background: #fbeceb; color: #a2342c; }
.message.success { background: var(--primary-soft); color: var(--primary); }
.message.warning { background: #fff5dc; color: #8a5a13; }
.eastmoney-sync-button { border-color: #dc4d3f; color: #b83227; }
.eastmoney-sync-button:hover { background: #fff0ed; }
.table-wrap { overflow-x: auto; }
table { width: 100%; border-collapse: collapse; }
th { padding: 9px 12px; border-bottom: 1px solid var(--line); background: #fafbfb; color: #7d858c; font-size: 10px; font-weight: 600; text-align: left; white-space: nowrap; }
td { padding: 10px 12px; border-bottom: 1px solid #edf0f1; font-size: 12px; }
tbody tr:hover { background: #f7faf8; }
.number { text-align: right; font-variant-numeric: tabular-nums; }
.stock-chart { display: block; padding: 0; border: 0; background: transparent; color: var(--ink); font-size: 12px; font-weight: 700; text-align: left; }
.stock-chart:hover { color: var(--primary); text-decoration: underline; }
.stock-chart:focus-visible, .stock-code-copy:focus-visible { border-radius: 2px; outline: 2px solid rgba(23,107,77,.25); outline-offset: 2px; }
.stock-meta { display: flex; align-items: center; gap: 7px; }
.stock-meta > span { color: var(--muted); font-size: 9px; }
.stock-code-copy { padding: 0 3px; border: 0; background: transparent; color: var(--primary); font-size: 9px; }
.stock-code-copy:hover { text-decoration: underline; }
.market-badge { display: inline-block; padding: 2px 5px; border-radius: 3px; background: var(--primary-soft); color: var(--primary); font-size: 9px; font-weight: 700; }
.change { font-weight: 700; }
.change.up { color: var(--up); }
.change.down { color: var(--down); }
.pagination { display: flex; align-items: center; justify-content: space-between; padding: 10px 14px; color: var(--muted); font-size: 10px; }
.page-button { padding: 5px 9px; border: 1px solid var(--line); border-radius: 4px; background: #fff; }

.boll-runbar h2 { margin: 0 0 3px; font-size: 15px; }
.boll-runbar p { margin: 0; color: var(--muted); font-size: 10px; }
.boll-run-actions { display: flex; gap: 7px; flex-shrink: 0; }
.history-date-field { display: flex; align-items: center; gap: 6px; padding: 0 7px; border: 1px solid var(--line); border-radius: 5px; background: #fff; }
.history-date-field span { color: var(--muted); font-size: 11px; white-space: nowrap; }
.history-date-field input { width: 128px; padding: 7px 0; border: 0; background: transparent; font: inherit; }
.boll-results { min-width: 0; }
.boll-table { min-width: 1240px; }
.pattern-tags { display: flex; flex-wrap: wrap; gap: 3px; }
.pattern-tag { display: inline-block; padding: 3px 5px; border-radius: 3px; background: #edf0f1; color: var(--muted); font-size: 8px; font-weight: 700; white-space: nowrap; }
.pattern-tag.upper { background: #fae8e6; color: var(--up); }
.pattern-tag.lower { background: #e4f3ec; color: var(--down); }
.pattern-tag.doji { background: #eee9f8; color: #65489a; }
.pattern-tag.limit-up { border: 1px solid #efc86f; background: #fff1c9; color: #93600b; }
tbody tr.recent-limit-up { background: #fff9e9; }
tbody tr.recent-limit-up:hover { background: #fff4d2; }
.wick-value { color: #76511e; font-weight: 600; }
.body-value { color: #65489a; font-weight: 600; }

.stock-chart-dialog { width: min(1120px, calc(100vw - 28px)); max-width: none; max-height: calc(100vh - 28px); padding: 0; border: 0; border-radius: 10px; background: #fff; box-shadow: 0 18px 60px rgba(20, 27, 31, .25); }
.stock-chart-dialog::backdrop { background: rgba(25, 31, 35, .56); }
.stock-chart-panel { padding: 19px 22px 22px; }
.stock-chart-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 18px; padding-bottom: 13px; border-bottom: 1px solid var(--line); }
.stock-chart-header span { color: var(--primary); font-size: 11px; font-weight: 700; letter-spacing: .12em; }
.stock-chart-header h2 { margin: 2px 0 1px; font-size: 22px; }
.stock-chart-header p { margin: 0; color: var(--muted); font-size: 13px; }
.stock-chart-header-actions { display: flex; align-items: center; gap: 8px; }
.chart-secondary-button { padding: 7px 10px; border: 1px solid var(--line); border-radius: 5px; background: #fff; color: var(--primary); font-weight: 600; }
.chart-close-button { width: 34px; height: 34px; padding: 0; border: 0; border-radius: 50%; background: #f0f2f3; color: var(--muted); font-size: 23px; line-height: 1; }
.chart-close-button:hover { background: #e5e8ea; color: var(--ink); }
.stock-chart-controls { display: flex; align-items: center; gap: 18px; margin: 14px 0 8px; }
.stock-chart-controls label { display: flex; align-items: center; gap: 5px; color: var(--muted); font-size: 13px; cursor: pointer; }
.stock-chart-controls input { accent-color: var(--primary); }
.chart-range-buttons { display: flex; gap: 5px; }
.chart-range-buttons button { padding: 6px 13px; border: 1px solid var(--line); border-radius: 5px; background: #fff; color: var(--muted); font-weight: 600; }
.chart-range-buttons button.active { border-color: var(--primary); background: var(--primary-soft); color: var(--primary); }
.stock-chart-legend { display: flex; flex-wrap: wrap; gap: 14px; margin-bottom: 6px; color: var(--muted); font-size: 12px; }
.stock-chart-legend span { display: inline-flex; align-items: center; gap: 5px; }
.stock-chart-legend i { display: inline-block; width: 14px; height: 3px; border-radius: 2px; }
.stock-chart-legend .candle-up { height: 9px; background: var(--up); }
.stock-chart-legend .candle-down { height: 9px; background: var(--down); }
.stock-chart-legend .line-upper { background: #d65a50; }
.stock-chart-legend .line-mid { background: #d6922f; }
.stock-chart-legend .line-lower { background: #3d8bb5; }
.stock-chart-status { min-height: 21px; color: var(--muted); font-size: 13px; }
.stock-chart-status.error { color: var(--up); }
.stock-chart-status.warning { color: #9a6413; }
.stock-chart-hover { min-height: 30px; margin: 4px 0; padding: 6px 9px; border-radius: 5px; background: #f6f8f8; color: var(--ink); font-size: 13px; font-variant-numeric: tabular-nums; }
.stock-chart-canvas { position: relative; overflow-x: auto; border: 1px solid var(--line); border-radius: 7px; background: #fff; }
#stock-chart-svg { display: block; width: 100%; min-width: 720px; height: auto; }
.stock-chart-empty { position: absolute; inset: 45% 0 auto; margin: 0; color: var(--muted); text-align: center; }
.chart-grid { stroke: #e8ebed; stroke-width: 1; }
.chart-axis-label { fill: #7b838a; font-size: 12px; }
.chart-highlight { fill: rgba(23, 107, 77, .07); stroke: #176b4d; stroke-width: 1; stroke-dasharray: 5 4; }
.chart-boll-upper { fill: none; stroke: #d65a50; stroke-width: 1.7; }
.chart-boll-mid { fill: none; stroke: #d6922f; stroke-width: 1.7; }
.chart-boll-lower { fill: none; stroke: #3d8bb5; stroke-width: 1.7; }
.chart-hit { cursor: crosshair; }

/* Readability: keep the dense dashboard practical without using tiny text. */
body { font-size: 15px; line-height: 1.55; }
.topbar { min-height: 62px; }
.brand strong { font-size: 20px; }
.system-state { font-size: 14px; }
.button-primary { padding: 9px 14px; }
.view-tab { padding: 11px 18px; }
.view-tab small { font-size: 11px; }
.view-tab strong { font-size: 15px; }
.compact-toolbar strong, .boll-runbar h2 { font-size: 17px; }
.compact-toolbar small, .boll-runbar p { font-size: 12px; }
.compact-toolbar select, .boll-run-actions select { font-size: 14px; }
.metric-card span { font-size: 13px; }
.metric-card strong { font-size: 22px; }
.metric-card small { font-size: 12px; }
.workspace { grid-template-columns: 340px minmax(0, 1fr); }
.filters { padding: 18px; }
.section-heading span { font-size: 11px; }
.section-heading h2 { font-size: 19px; }
.text-button { font-size: 13px; }
legend, .field-label { font-size: 13px; }
.range-grid label > span { font-size: 12px; }
.input-unit i { font-size: 12px; }
.filters select, .filters > form > input { font-size: 14px; }
.quick-range-header > span,
.quick-range-empty,
.quick-range-feedback,
.quick-range-header > button,
.quick-range-item button { font-size: 11px; }
.industry-help, .industry-rule-empty, .industry-option-empty { font-size: 11px; }
.industry-rule-controls select, .industry-search { font-size: 14px; }
.industry-option-list { max-height: 190px; }
.industry-option { padding: 6px; font-size: 13px; }
.industry-add-button { padding: 8px; font-size: 12px; }
.industry-rule-chip { padding: 5px 7px; font-size: 11px; }
.strategy-box textarea { font-size: 12px; }
.strategy-actions button { font-size: 12px; }
.strategy-feedback { font-size: 11px; }
.results-heading p { font-size: 13px; }
.results-heading p strong { font-size: 18px; }
.export-button { padding: 6px 10px; font-size: 12px; }
.message { font-size: 13px; }
th { padding: 11px 13px; font-size: 12px; }
td { padding: 12px 13px; font-size: 14px; }
.stock-chart { font-size: 14px; }
.stock-meta > span, .stock-code-copy { font-size: 11px; }
.market-badge { font-size: 11px; }
.pagination { font-size: 12px; }
.page-button { font-size: 12px; }
.pattern-tag { padding: 4px 6px; font-size: 10px; }

@media (max-width: 900px) {
  .workspace { grid-template-columns: 1fr; }
  .metrics { grid-template-columns: repeat(2, 1fr); }
  .metric-card:nth-child(2) { border-right: 0; }
  .metric-card:nth-child(-n+2) { border-bottom: 1px solid var(--line); }
  .compact-toolbar, .boll-runbar { align-items: stretch; flex-direction: column; }
  .compact-toolbar > div { flex-wrap: wrap; }
  .compact-toolbar select { width: 100%; }
  .flow-toolbar-actions { width: 100%; flex-wrap: wrap; }
  .flow-toolbar-actions select:first-child { min-width: 0; }
  .data-maintenance { width: 100%; }
  .data-maintenance summary { justify-content: flex-end; }
  .data-maintenance-content { min-width: 0; }
  .results-heading { align-items: flex-start; flex-direction: column; }
  .results-actions { width: 100%; flex-wrap: wrap; }
}

@media (max-width: 600px) {
  .shell { width: 100%; padding: 0 8px; }
  .system-state > span:not(.status-dot) { display: none; }
  .view-tabs { overflow-x: auto; }
  .view-tab { flex: 0 0 auto; padding: 8px 10px; }
  .boll-run-actions { flex-direction: column; }
  .boll-run-actions select { width: 100%; }
  .history-date-field { justify-content: space-between; }
  th, td { padding: 8px 9px; }
  .stock-chart-panel { padding: 14px; }
  .stock-chart-controls { align-items: flex-start; flex-wrap: wrap; }
  .stock-chart-header h2 { font-size: 19px; }
}
