
    :root {
      color-scheme: light;
      --page:#f4f7f6; --surface:#fff; --surface2:#eef1ef; --ink:#15201c; --muted:#66736e; --grid:#dfe7e3; --line:#dde5e1;
      --actual:#087f5b; --predicted:#b85c00; --adjusted:#6554c0; --ratio:#0891b2; --day-ahead:#c2410c; --real-time:#2563eb; --focus:#075d45; --danger:#a63d40;
      --increase:#dc2626; --decrease:#16a34a; --increase-ink:#7f1d1d; --decrease-ink:#14532d; --zero-bg:#f1f5f3; --zero-ink:#52615b;
      --nav-hover:#f1f4f2; --nav-active-bg:#ece8ff; --nav-active-ink:#493a9e; --primary-soft:#eeebff;
      --tooltip-bg:#15201c; --tooltip-note:#d6d0ff; --cell-empty:#f8faf9; --cell-empty-ink:#86938d; --crosshair:#82928b;
      /* 图表数据系列色（可随主题微调） */
      --sim-target:#2563eb; --sim-similar:#e11d48; --w-right:#8b5cf6; --w-hl-stroke:#fff;
      /* 主题化扩展令牌 */
      --font-sans:Arial,"Microsoft YaHei",sans-serif; --font-display:Arial,"Microsoft YaHei",sans-serif;
      --primary:#6554c0; --primary-ink:#fff;
      --brand-a:#2fbf8f; --brand-b:#8b7cf8;
      --radius-card:16px; --radius-btn:8px; --radius-box:8px; --radius-sm:6px;
      --shadow-card:0 14px 40px rgba(29,51,43,.08); --shadow-lg:0 14px 40px rgba(29,51,43,.12);
      --overlay-bg:rgba(255,255,255,.92); --selection-fill:rgba(101,84,192,.13); --swatch-border:rgba(0,0,0,.08);
      font-family:var(--font-sans);
    }
    /* ===== UI 风格主题：Claude（Anthropic 设计语言）===== */
    html[data-theme="claude"] {
      color-scheme: light;
      --page:#faf9f5; --surface:#ffffff; --surface2:#f2f0ea; --ink:#1f1e1d; --muted:#6f6c66; --grid:#e9e6df; --line:#e3e0d8;
      --actual:#0e8345; --predicted:#c26a1d; --adjusted:#7c5cd6; --ratio:#2f7f86; --day-ahead:#c2410c; --real-time:#3b6fd4; --focus:#d97757; --danger:#c0392b;
      --increase:#c0392b; --decrease:#0e8345; --increase-ink:#8a2217; --decrease-ink:#0a5c31; --zero-bg:#f4f2ec; --zero-ink:#6f6c66;
      --nav-hover:#f1eee8; --nav-active-bg:#f6eee7; --nav-active-ink:#a4531f; --primary-soft:#f6eee7;
      --tooltip-bg:#2b2a26; --tooltip-note:#e8d5c5; --cell-empty:#f8f7f3; --cell-empty-ink:#8a8780; --crosshair:#9a968e;
      --sim-target:#b45a2c; --sim-similar:#a34a2a; --w-right:#8c6ab0; --w-hl-stroke:#fff7f0;
      --font-sans:-apple-system,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
      --font-display:"Palatino Linotype","Tiempos","Georgia","Songti SC","SimSun",serif;
      --primary:#d97757; --primary-ink:#fff;
      --brand-a:#d97757; --brand-b:#b95a3d;
      --radius-card:12px; --radius-btn:9px; --radius-box:9px; --radius-sm:6px;
      --shadow-card:0 6px 24px rgba(80,60,40,.10); --shadow-lg:0 10px 32px rgba(80,60,40,.14);
      --overlay-bg:rgba(250,249,245,.92); --selection-fill:rgba(217,119,87,.16); --swatch-border:rgba(60,50,40,.10);
    }
    /* ===== UI 风格主题：Apple（Human Interface Guidelines · Pinguo 设计系统导出）===== */
    html[data-theme="apple"] {
      color-scheme: light;
      /* 背景层：Silver Mist #f5f5f7 / 白卡片 / 次级 #f2f2f7 */
      --page:#f5f5f7; --surface:#ffffff; --surface2:#f2f2f7; --ink:#1d1d1f; --muted:#6e6e73; --grid:#e5e5ea; --line:#e5e5ea;
      /* 数据系列色锚定 HIG System Colors（chart-1..5 / brand-500） */
      --actual:#34c759; --predicted:#ff9500; --adjusted:#af52de; --ratio:#5ac8fa; --day-ahead:#ff9500; --real-time:#007aff; --focus:#007aff; --danger:#ff3b30;
      /* 增减语义 = System Red/Green */
      --increase:#ff3b30; --decrease:#34c759; --increase-ink:#c4001d; --decrease-ink:#1d8a3d; --zero-bg:#f2f2f7; --zero-ink:#8e8e93;
      /* 导航：sidebar 用系统灰 #f2f2f7，active 用 brand-50 蓝底 */
      --nav-hover:#f2f2f7; --nav-active-bg:#e8f2ff; --nav-active-ink:#007aff; --primary-soft:#e8f2ff;
      --tooltip-bg:#1c1c1e; --tooltip-note:#aeaeb2; --cell-empty:#f5f5f7; --cell-empty-ink:#8e8e93; --crosshair:#aeaeb2;
      --sim-target:#007aff; --sim-similar:#ff3b30; --w-right:#af52de; --w-hl-stroke:#fff;
      /* 字体：DM Sans 界面/展示 + JetBrains Mono 数字 */
      --font-sans:"DM Sans",-apple-system,BlinkMacSystemFont,"SF Pro Text","Helvetica Neue","PingFang SC","Microsoft YaHei",sans-serif;
      --font-display:"DM Sans",-apple-system,BlinkMacSystemFont,"SF Pro Display","Helvetica Neue","PingFang SC","Microsoft YaHei",sans-serif;
      --font-mono:"JetBrains Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
      /* 主色 = System Blue #007aff；品牌渐变蓝系 */
      --primary:#007aff; --primary-ink:#fff;
      --brand-a:#007aff; --brand-b:#5ac8fa;
      /* 圆角：卡片 1.2rem，按钮全胶囊，容器 14px */
      --radius-card:1.2rem; --radius-btn:999px; --radius-box:14px; --radius-sm:8px;
      /* 阴影 whisper-light：静息 1px 边框感，悬浮 8px 深 */
      --shadow-card:0 1px 2px 0 rgba(0,0,0,.05),0 1px 3px -1px rgba(0,0,0,.05);
      --shadow-lg:0 8px 24px -8px rgba(0,0,0,.08),0 4px 8px -4px rgba(0,0,0,.05);
      --overlay-bg:rgba(245,245,247,.92); --selection-fill:rgba(0,122,255,.14); --swatch-border:rgba(0,0,0,.10);
    }
    /* Apple 动效：cubic-bezier(0.32,0.72,0,1)，350ms 过渡带 */
    html[data-theme="apple"].theme-anim, html[data-theme="apple"].theme-anim * { transition-duration:.35s !important; transition-timing-function:cubic-bezier(.32,.72,0,1) !important; }
    /* Apple 规范：侧边栏用系统灰 #f2f2f7（--sidebar），与白卡片区分 */
    html[data-theme="apple"] .sidebar { background:var(--surface2); }
    /* Apple 规范：导航 hover 用 sidebar-accent #e5e5ea；数字表格用 JetBrains Mono */
    html[data-theme="apple"] .sidebar-item:hover:not(.active) { background:#e5e5ea; }
    html[data-theme="apple"] .spread-cell, html[data-theme="apple"] .boundary-cell .bval, html[data-theme="apple"] .boundary-table .hour-cell { font-family:var(--font-mono); }
    /* 主题切换平滑过渡（仅切换瞬间启用） */
    html.theme-anim, html.theme-anim * { transition:background-color .4s ease,color .4s ease,border-color .4s ease,box-shadow .4s ease !important; }
    * { box-sizing:border-box; }
    body { margin:0; min-width:320px; background:var(--page); color:var(--ink); }
    .layout { display:flex; min-height:100vh; }
    .sidebar { width:232px; flex-shrink:0; background:var(--surface); border-right:1px solid var(--line); display:flex; flex-direction:column; padding:18px 12px; position:sticky; top:0; height:100vh; }
    .sidebar-brand { padding:6px 10px 18px; font-size:13.5px; font-weight:800; line-height:1.45; letter-spacing:.02em; color:var(--ink); font-family:var(--font-display); }
    .sidebar-brand { border:0; background:transparent; cursor:pointer; text-align:left; width:100%; position:relative; z-index:1; }
    .sidebar-brand:active { transform:scale(.97); }
    .sidebar-brand .logo { width:32px; height:32px; border-radius:9px; background:linear-gradient(135deg,var(--brand-a),var(--brand-b)); display:grid; place-items:center; color:#fff; font-size:16px; font-weight:700; }
    /* 点击特效 */
    .brand-rainbow { background:linear-gradient(90deg,#ff3b30,#ff9500,#ffcc00,#34c759,#5ac8fa,#af52de,#ff2d55); background-size:300% 100%; -webkit-background-clip:text; background-clip:text; color:transparent; animation:brandRB 1.2s linear infinite; }
    @keyframes brandRB { to { background-position:300% 0; } }
    /* 全屏特效层（20 种逆天特效移植） */
    canvas#fx { position:fixed; inset:0; z-index:9995; pointer-events:none; }
    @keyframes pixFly { to { transform:translate(var(--dx),var(--dy)) rotate(var(--rot)) scale(.2); opacity:0; } }
    .sidebar-nav { display:grid; gap:3px; }
    .sidebar-subnav { display:grid; gap:2px; padding:2px 0 6px 12px; }
    .sidebar-subitem { min-height:30px; padding:5px 12px; border:0; border-radius:var(--radius-sm); background:transparent; color:var(--muted); font-size:12.5px; text-align:left; cursor:pointer; }
    .sidebar-subitem:hover { background:var(--surface2); color:var(--ink); }
    .sidebar-subitem.active { color:var(--adjusted); font-weight:700; }
    .sidebar-item { display:flex; align-items:center; gap:10px; min-height:40px; padding:8px 12px; border:0; border-radius:var(--radius-btn); background:transparent; color:var(--muted); font-size:14px; font-weight:600; text-align:left; cursor:pointer; }
    .sidebar-item .sarrow { margin-left:auto; font-size:10px; color:var(--muted); transition:transform .15s; }
    .sidebar-item.collapsed .sarrow { transform:rotate(-90deg); }
    .sidebar-subnav.collapsed { display:none; }
    .sidebar-item:hover:not(.active) { background:var(--nav-hover); color:var(--ink); }
    .sidebar-item.active { background:var(--nav-active-bg); color:var(--nav-active-ink); }
    .sidebar-foot { margin-top:auto; border-top:1px solid var(--line); padding-top:14px; display:grid; gap:10px; }
    .sidebar-user { color:var(--muted); font-size:13px; padding:0 6px; line-height:1.6; }
    .sidebar-user strong { color:var(--ink); }
    .sidebar-admin { padding:0 6px; }
    .sidebar-admin select { width:100%; min-height:34px; border:1px solid var(--line); border-radius:var(--radius-box); background:var(--surface); color:var(--ink); padding:4px 8px; font:inherit; }
    .sidebar-foot button { min-height:36px; }
    /* UI 风格切换（分段控件） */
    .theme-switch { display:grid; grid-template-columns:repeat(3,1fr); gap:2px; padding:3px; border:1px solid var(--line); border-radius:var(--radius-btn); background:var(--surface2); }
    .theme-btn { min-height:30px; padding:4px 6px; border:0; border-radius:calc(var(--radius-btn) - 3px); background:transparent; color:var(--muted); font-size:12px; font-weight:700; cursor:pointer; transition:background .18s ease,color .18s ease; }
    .theme-btn:hover { color:var(--ink); }
    .theme-btn.active { background:var(--surface); color:var(--nav-active-ink); box-shadow:0 1px 3px rgba(0,0,0,.12); }
    .theme-label { display:block; margin:2px 6px 6px; color:var(--muted); font-size:11px; font-weight:700; letter-spacing:.06em; }
    .sidebar-theme { padding:0 6px; margin-bottom:2px; }
    .content { flex:1; min-width:0; }
    .content main { width:min(1120px,calc(100% - 32px)); margin:32px auto; }
    h2 { margin:0; font-size:19px; font-family:var(--font-display); }
    .date-control { display:grid; gap:7px; min-width:190px; color:var(--muted); font-size:13px; font-weight:700; }
    input[type="date"],input[type="number"] { min-height:42px; border:1px solid var(--line); border-radius:var(--radius-box); background:var(--surface); color:var(--ink); padding:8px 11px; font:inherit; }
    input[type="date"] { width:100%; }
    button { min-height:40px; border:1px solid var(--line); border-radius:var(--radius-btn); background:var(--surface); color:var(--ink); padding:8px 14px; font:inherit; font-weight:700; cursor:pointer; }
    button:hover { background:var(--surface2); }
    button:disabled { cursor:not-allowed; opacity:.55; }
    button.primary { border-color:var(--primary); background:var(--primary); color:var(--primary-ink); }
    button.active { border-color:var(--primary); background:var(--primary-soft); color:var(--nav-active-ink); }
    input:focus-visible,button:focus-visible,.hit-area:focus-visible { outline:3px solid color-mix(in srgb,var(--focus) 35%,transparent); outline-offset:2px; }
    .card { border:1px solid var(--line); border-radius:var(--radius-card); background:var(--surface); box-shadow:var(--shadow-card); overflow:hidden; }
    .chart-head { display:flex; align-items:end; justify-content:space-between; flex-wrap:wrap; gap:14px; padding:20px 24px 0; }
    .chart-head p { margin:6px 0 0; color:var(--muted); font-size:13px; }
    .chart-tools { display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:12px; padding:14px 24px 0; }
    .tool-note { color:var(--muted); font-size:13px; }
    .legend { display:flex; flex-wrap:wrap; gap:18px; padding:14px 24px 0; color:var(--muted); font-size:13px; }
    .legend-item { display:inline-flex; align-items:center; gap:8px; }
    .legend-line { width:30px; border-top:3px solid; }
    .legend-line.actual { border-color:var(--actual); }
    .legend-line.predicted { border-color:var(--predicted); }
    .legend-line.adjusted { border-color:var(--adjusted); border-top-style:dashed; }
    .legend-line.day-ahead { border-color:var(--day-ahead); }
    .legend-line.real-time { border-color:var(--real-time); }
    .legend-bar { width:18px; height:12px; border-radius:2px; background:color-mix(in srgb,var(--ratio) 38%,transparent); border:1px solid var(--ratio); }
    .price-section { margin-top:22px; padding:20px 24px 24px; }
    .price-section-head { display:flex; align-items:end; justify-content:space-between; flex-wrap:wrap; gap:14px; padding:0; }
    .price-section-head p { margin:6px 0 0; color:var(--muted); font-size:13px; }
    .price-status { min-height:18px; margin:8px 0 0; color:var(--muted); font-size:13px; }
    .price-status.error { color:var(--danger); }
    .price-section .legend { padding-inline:0; }
    .price-chart-shell { position:relative; min-height:350px; padding:8px 20px 12px; }
    .price-section .price-chart-shell { padding-inline:0; }
    #price-chart { display:block; width:100%; height:auto; min-height:300px; }
    .price-curve { fill:none; stroke-width:2.5; stroke-linejoin:round; stroke-linecap:round; }
    .price-curve.day-ahead { stroke:var(--day-ahead); }
    .price-curve.real-time { stroke:var(--real-time); }
    .price-point { fill:var(--surface); stroke-width:2; pointer-events:none; }
    .price-point.day-ahead { stroke:var(--day-ahead); }
    .price-point.real-time { stroke:var(--real-time); }
    .spread-section { margin-top:22px; padding:22px 24px 24px; }
    .spread-head { display:flex; align-items:end; justify-content:space-between; flex-wrap:wrap; gap:16px; }
    .spread-head p { margin:6px 0 0; color:var(--muted); font-size:13px; }
    .spread-controls { display:flex; align-items:end; flex-wrap:wrap; gap:10px; }
    .spread-controls label { display:grid; gap:6px; color:var(--muted); font-size:12px; font-weight:700; }
    .spread-controls input { min-width:155px; }
    .spread-legend { display:flex; align-items:center; flex-wrap:wrap; gap:10px; margin:16px 0 10px; color:var(--muted); font-size:12px; }
    .spread-swatch { width:30px; height:14px; border:1px solid var(--swatch-border); border-radius:3px; }
    .spread-swatch.negative { background:var(--increase); }
    .spread-swatch.zero { background:var(--zero-bg); }
    .spread-swatch.positive { background:var(--decrease); }
    .spread-swatch.decrease { background:var(--decrease); }
    .spread-swatch.increase { background:var(--increase); }
    .spread-status { min-height:20px; margin:0 0 10px; color:var(--muted); font-size:13px; }
    .spread-status.error { color:var(--danger); }
    .spread-table-wrap { overflow-x:auto; overflow-y:visible; border:1px solid var(--line); border-radius:var(--radius-box); }
    .spread-table { min-width:920px; table-layout:fixed; border-collapse:separate; border-spacing:3px; padding:3px; }
    .spread-table th,.spread-table td { width:30px; height:24px; padding:0; border:0; border-radius:3px; text-align:center; font-size:0; }
    .spread-table th { height:28px; color:var(--muted); font-size:10px; font-weight:700; }
    .spread-table th:first-child,.spread-table td:first-child { position:sticky; left:0; z-index:2; width:112px; min-width:112px; padding:0 8px; background:var(--surface2); border-radius:0; text-align:left; font-size:11px; font-weight:700; }
    .spread-table thead th { top:0; z-index:3; }
    .spread-table thead th:first-child { z-index:4; }
    .spread-cell { font-variant-numeric:tabular-nums; font-weight:700; }
    .spread-table.numeric-mode { min-width:1840px; border-collapse:collapse; border-spacing:0; padding:0; }
    .spread-table.numeric-mode th,.spread-table.numeric-mode td { width:70px; height:auto; padding:9px 6px; border:1px solid var(--line); border-radius:0; font-size:11px; }
    .spread-table.numeric-mode th:first-child,.spread-table.numeric-mode td:first-child { width:112px; min-width:112px; padding:9px 8px; }
    .strategy-total { width:100px !important; min-width:100px; padding:0 8px !important; border-left:2px solid var(--line) !important; font-size:11px !important; font-weight:700; }
    .numeric-mode .strategy-total { padding:9px 8px !important; }
    .strategy-summary-row td { border-top:2px solid var(--muted) !important; }
    .strategy-summary-row td:first-child { font-weight:700; }
    .overview-head { display:flex; align-items:end; justify-content:space-between; flex-wrap:wrap; gap:16px; padding:22px 24px 0; }
    .overview-head p { margin:6px 0 0; color:var(--muted); font-size:13px; }
    .overview-status { min-height:20px; margin:0 0 10px; color:var(--muted); font-size:13px; }
    .overview-status.error { color:var(--danger); }
    .overview-substatus { min-height:20px; margin:12px 0 8px; color:var(--adjusted); font-size:13px; font-weight:700; }
    .overview-hourly-wrap { overflow:auto; }
    .overview-table { min-width:0; width:max-content; margin:0 auto; }
    .overview-table th,.overview-table td { width:44px; }
    .overview-table th { font-size:11px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
    .overview-table th:first-child,.overview-table td:first-child { width:80px; min-width:80px; padding:0 4px; text-align:center; }
    .overview-table.numeric-mode { min-width:0; margin:0 auto; }
    .overview-table.numeric-mode th,.overview-table.numeric-mode td { width:68px; }
    .overview-table.numeric-mode th:first-child,.overview-table.numeric-mode td:first-child { width:80px; min-width:80px; padding:9px 6px; text-align:center; }
    .overview-table .date-cell { cursor:pointer; }
    .overview-table tr:hover td:first-child { background:var(--surface2); }
    .placeholder-module { padding:22px; border-bottom:1px solid var(--line); }
    .placeholder-module:last-child { border-bottom:0; }
    .placeholder-module h2 { margin:0 0 14px; font-size:16px; color:var(--ink); }
    .placeholder-empty { min-height:120px; border:1px dashed var(--grid); border-radius:var(--radius-box); display:grid; place-items:center; color:var(--muted); font-size:13px; }
    /* 复盘表excel文件（两列：模板下载 | 交易记录上传） */
    .rv-columns { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:16px; max-width:1080px; }
    .rv-col { border:1px solid var(--line); border-radius:var(--radius-box); background:var(--surface); padding:14px 16px 16px; }
    .rv-col h3 { margin:0 0 12px; font-size:14px; color:var(--ink); font-family:var(--font-display); }
    .rv-all-wrap { margin-top:22px; max-width:1080px; }
    .rv-all-wrap[hidden] { display:none; }
    .rv-all-wrap h3 { margin:0 0 6px; font-size:14px; color:var(--ink); font-family:var(--font-display); }
    .rv-all-hint { margin:0 0 10px; font-size:12px; color:var(--muted); }
    .rv-all-scroll { overflow-x:auto; }
    .rv-all-table { border-collapse:collapse; font-size:12px; }
    .rv-all-table th, .rv-all-table td { border:1px solid var(--grid); padding:4px 8px; text-align:center; white-space:nowrap; }
    .rv-all-table th { background:var(--surface2); font-weight:700; color:var(--ink); }
    .rv-all-table .rv-all-month { font-weight:700; color:var(--ink); font-family:var(--font-mono,monospace); }
    .rv-all-btn { min-height:26px; padding:2px 12px; font-size:12px; white-space:nowrap; border:1px solid var(--line); border-radius:var(--radius-sm); background:var(--surface); color:var(--ink); cursor:pointer; transition:border-color .18s, box-shadow .18s, transform .18s, filter .18s; }
    .rv-all-btn:hover:not(:disabled) { border-color:var(--primary); transform:translateY(-1px); box-shadow:0 2px 8px rgba(0,0,0,.08); filter:brightness(1.05); }
    .rv-all-btn:active:not(:disabled) { transform:translateY(0); }
    .rv-all-btn:disabled { opacity:.45; cursor:not-allowed; }
    /* 上传日志弹窗（页面内，非浏览器弹窗） */
    .rv-modal-overlay { position:fixed; inset:0; z-index:1200; background:rgba(0,0,0,.35); display:flex; align-items:center; justify-content:center; }
    .rv-modal-overlay[hidden] { display:none; }
    .rv-modal { width:min(520px,92vw); background:var(--surface); border:1px solid var(--line); border-radius:var(--radius-box); box-shadow:0 12px 40px rgba(0,0,0,.18); padding:16px 18px; }
    .rv-modal h3 { margin:0 0 10px; font-size:14px; color:var(--ink); font-family:var(--font-display); }
    .rv-modal-logs { max-height:240px; overflow-y:auto; background:var(--surface2); border:1px solid var(--grid); border-radius:var(--radius-sm); padding:10px 12px; font-family:var(--font-mono,monospace); font-size:12px; line-height:1.7; color:var(--ink); }
    .rv-modal-foot { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-top:10px; }
    .rv-modal-note { font-size:12px; font-weight:600; color:var(--primary); }
    .rv-modal-foot button { min-height:28px; padding:4px 16px; font-size:13px; }
    /* 复盘统计（月度汇总数据展示） */
    .rvw-controls { display:flex; align-items:center; gap:14px; flex-wrap:wrap; margin:0 0 12px; }
    .rvw-month-wrap { display:flex; align-items:center; gap:8px; font-size:12px; color:var(--muted); white-space:nowrap; }
    .rvw-month-wrap select { min-height:28px; padding:2px 8px; font-size:12px; }
    .rvw-hint { font-size:12px; color:var(--muted); }
    .rvw-count { font-size:12px; color:var(--muted); font-family:var(--font-mono,monospace); }
    .rvw-actions { display:flex; gap:8px; margin-left:auto; }
    .rvw-actions button { min-height:28px; padding:4px 14px; font-size:12px; border:1px solid var(--grid); border-radius:999px; background:var(--surface); color:var(--ink); cursor:pointer; transition:border-color .18s, box-shadow .18s, color .18s; }
    .rvw-actions button:hover:not(:disabled) { border-color:var(--primary); color:var(--primary); box-shadow:0 2px 8px rgba(0,0,0,.06); }
    .rvw-actions button:disabled { opacity:.45; cursor:not-allowed; }
    .pstat-head-month { margin-left:auto; }
    .pstat-msel { position:relative; margin-left:auto; }
    .pstat-msel-btn { min-height:28px; padding:4px 14px; font-size:12px; border:1px solid var(--grid); border-radius:8px; background:var(--surface); color:var(--ink); cursor:pointer; transition:border-color .15s, color .15s; }
    .pstat-msel-btn:hover { border-color:var(--primary); color:var(--primary); }
    .pstat-msel-panel { position:absolute; right:0; top:calc(100% + 4px); z-index:30; min-width:150px; max-height:264px; overflow:auto; padding:6px; border:1px solid var(--grid); border-radius:8px; background:var(--surface); box-shadow:0 10px 26px rgba(0,0,0,.12); }
    .pstat-msel-item { display:flex; align-items:center; gap:8px; padding:4px 8px; font-size:12px; color:var(--ink); border-radius:6px; cursor:pointer; white-space:nowrap; }
    .pstat-msel-item:hover { background:var(--surface2); }
    .pstat-sep { stroke:var(--grid); stroke-width:1; stroke-dasharray:4 4; }
    .pstat-month-label { font-size:11px; font-weight:700; fill:var(--ink); }
    .pstat-whisker { stroke:var(--day-ahead); stroke-width:1.5; }
    .pstat-box { fill:color-mix(in srgb,var(--day-ahead) 15%,transparent); stroke:var(--day-ahead); stroke-width:1.5; }
    .pstat-med { stroke:var(--day-ahead); stroke-width:2.5; }
    .pstat-chart-card { margin-top:12px; }
    .pstat-chart-card svg { width:100%; height:auto; display:block; }
    .rvw-scroll { overflow-x:auto; max-width:100%; border-radius:var(--radius-sm); }
    .rvw-table { border-collapse:separate; border-spacing:0; font-size:12px; min-width:100%; }
    .rvw-table th, .rvw-table td { border-bottom:1px solid color-mix(in srgb,var(--grid) 40%,transparent); padding:5px 10px; text-align:right; white-space:nowrap; background:var(--surface); font-variant-numeric:tabular-nums; }
    .rvw-table tr:first-child th { position:sticky; top:0; z-index:3; background:var(--surface2); font-weight:700; color:var(--ink); text-align:center; border-bottom:1px solid var(--grid); }
    .rvw-table th:first-child, .rvw-table td.rvw-item { position:sticky; left:0; z-index:2; text-align:left; background:var(--surface); color:var(--ink); width:260px; min-width:260px; max-width:260px; overflow:hidden; text-overflow:ellipsis; }
    .rvw-table tr:first-child th:first-child { z-index:5; background:var(--surface2); }
    .rvw-table td.rvw-item { font-weight:600; }
    .rvw-table td.rvw-lvl1 { padding-left:32px; font-weight:500; }
    .rvw-table td.rvw-lvl2 { padding-left:56px; font-weight:400; }
    .rvw-table tr.rvw-hdr td { font-weight:700; }
    .rvw-table tr.rvw-hdr td.rvw-item { font-weight:700; }
    .rvw-table tr.rvw-sec td { border-top:none; padding-top:14px; }
    .rvw-table tr:has(+ .rvw-sec) td { border-bottom:none; }
    .rvw-table tr:first-child th:nth-child(2), .rvw-table td:nth-child(2) { position:sticky; left:260px; z-index:2; font-weight:600; color:var(--ink); }
    .rvw-table tr:first-child th:nth-child(2) { z-index:5; background:var(--surface2); }
    .rvw-table tr:not(:first-child):hover td { background:color-mix(in srgb,var(--primary) 5%,var(--surface)); }
    .rvw-table td.rvw-na { color:var(--muted); }
    .rvw-table th.rvw-hl, .rvw-table td.rvw-hl { background:color-mix(in srgb,var(--primary) 8%,var(--surface)); }
    .rvw-table tr:first-child th.rvw-hl { background:color-mix(in srgb,var(--primary) 8%,var(--surface2)); }
    .rvw-table td.rvw-hlc { background:color-mix(in srgb,var(--primary) 13%,var(--surface)) !important; font-weight:700; }
    .rvw-table td.rvw-pos { color:var(--increase); }
    .rvw-table td.rvw-neg { color:var(--real-time); }
    .rvw-cards { display:flex; flex-direction:column; gap:12px; }
    .rvw-card { border:0.5px solid var(--grid); border-radius:var(--radius-sm); overflow:hidden; background:var(--surface); }
    .rvw-card-head { padding:8px 12px; background:var(--surface2); font-weight:700; color:var(--ink); font-size:13px; }
    .rvw-card-wrap { overflow-x:auto; }
    #allsum-cards td { text-align:center; }
    #allsum-cards td.rvw-item { text-align:left; }
    /* ---- 模拟交易 ---- */
    .sim-controls { display:flex; flex-wrap:wrap; align-items:center; gap:14px; margin:10px 0 12px; font-size:13px; color:var(--muted); }
    .sim-controls input[type=date] { margin-left:6px; }
    .sim-quote { display:flex; align-items:baseline; gap:8px; }
    .sim-quote strong { font-size:20px; font-weight:700; font-variant-numeric:tabular-nums; }
    .sim-quote span { font-size:13px; font-variant-numeric:tabular-nums; }
    .sim-up { color:var(--increase); }
    .sim-down { color:var(--real-time); }
    .sim-muted { color:var(--muted); }
    .sim-wrap { width:1120px; max-width:100%; margin:0 auto; }
    .sim-top { display:grid; grid-template-columns:minmax(0,1fr) 360px; gap:12px; align-items:stretch; display:grid; }
    .sim-chart-card { display:flex; flex-direction:column; }
    .sim-chart-card .rvw-card-wrap { flex:1; min-height:420px; }
    .sim-other-card { margin-top:12px; }
    .sim-other { display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr) minmax(0,1.15fr); gap:14px; }
    .sim-other-col { min-width:0; }
    .sim-other-sub { font-size:12px; font-weight:600; color:var(--ink); opacity:.72; margin:2px 0 6px; }
    .sim-right { display:flex; flex-direction:column; gap:12px; min-width:0; }
    .sim-left { display:flex; flex-direction:column; gap:12px; min-width:0; }

    .sim-table-wrap { max-height:320px; overflow:auto; }
    .sim-table { font-variant-numeric:tabular-nums; table-layout:auto; width:100%; }
    .sim-table th, .sim-table td { text-align:center; white-space:nowrap; width:auto; min-width:0; padding:6px 10px; }
    .sim-table tr:first-child th, .sim-table thead th { position:sticky; top:0; left:auto; z-index:3; background:var(--surface); box-shadow:inset 0 -0.5px 0 var(--grid); }
    .sim-table th:first-child, .sim-table td:first-child, .sim-table th:nth-child(2), .sim-table td:nth-child(2) { position:static; left:auto; width:auto; min-width:0; }
    .sim-table thead th:first-child, .sim-table thead th:nth-child(2),
    .sim-table tr:first-child th:first-child, .sim-table tr:first-child th:nth-child(2) { position:sticky; top:0; left:auto; }
    .sim-table tr:first-child th:nth-child(2), .sim-table tr:not(:first-child) td:nth-child(2) { left:auto; }
    .sim-sk { display:inline-block; width:72%; height:9px; border-radius:4px; background:color-mix(in srgb,var(--muted) 18%,transparent); animation:simSk 1.2s ease-in-out infinite; }
    @keyframes simSk { 0%,100% { opacity:.45; } 50% { opacity:.95; } }
    .sim-empty-cell { text-align:center; color:var(--muted); font-size:12px; padding:18px 8px; }
    .sim-row-flash td { background:color-mix(in srgb,var(--primary) 14%,transparent) !important; transition:background .5s ease; }
    .sim-row-me td { background:color-mix(in srgb,var(--muted) 7%,transparent); }
    .sim-row-me td:first-child { font-weight:700; }
    .sim-stats { font-size:12px; color:var(--muted); font-variant-numeric:tabular-nums; }
    .sim-legend { float:right; display:inline-flex; align-items:center; gap:4px; font-size:11px; font-weight:400; color:var(--muted); }
    .sim-legend i { display:inline-block; width:10px; height:2px; margin-left:6px; }
    .sim-legend i.lg-price { background:var(--real-time); }
    .sim-legend i.lg-avg { background:var(--primary); }
    .sim-submit { width:100%; }
    .sim-submit.sim-submit-buy, .sim-submit.sim-submit-buy:hover { background:var(--increase); border-color:var(--increase); color:#fff; }
    .sim-submit.sim-submit-sell, .sim-submit.sim-submit-sell:hover { background:var(--decrease); border-color:var(--decrease); color:#fff; }
    .sim-submit:disabled { opacity:.45; }
    .sim-chips { display:inline-flex; gap:4px; margin-left:8px; vertical-align:middle; }
    .sim-chips button { font-size:11px; padding:1px 8px; border-radius:999px; border:0.5px solid var(--grid); background:transparent; color:var(--muted); }
    .sim-chips button.active { border-color:var(--primary); color:var(--primary); background:color-mix(in srgb,var(--primary) 10%,transparent); }
    .sim-toast { position:fixed; right:26px; top:22px; z-index:90; min-width:220px; max-width:360px; padding:10px 14px; border-radius:8px; background:var(--surface); border:0.5px solid var(--grid); box-shadow:0 10px 26px rgba(0,0,0,.13); font-size:13px; }
    .sim-toast.ok { border-left:3px solid var(--decrease); }
    .sim-toast.warn { border-left:3px solid var(--primary); }
    .sim-toast.err { border-left:3px solid var(--increase); }
    #sim-my-orders, #sim-trades, #sim-pnl { font-size:11px; table-layout:fixed; width:100%; }
    #sim-my-orders th, #sim-my-orders td,
    #sim-trades th, #sim-trades td,
    #sim-pnl th, #sim-pnl td { padding:5px 4px; overflow:hidden; text-overflow:ellipsis; }
    #sim-my-orders button { font-size:11px; padding:2px 6px; }

    .sim-book { padding:6px 10px 10px; font-variant-numeric:tabular-nums; }
    .sim-book-row { display:grid; grid-template-columns:44px 1fr 1fr; gap:8px; padding:5px 0; font-size:13px; }
    .sim-book-row.ask .sim-book-price, .sim-book-row.ask .sim-book-side { color:var(--decrease); }
    .sim-book-row.bid .sim-book-price, .sim-book-row.bid .sim-book-side { color:var(--increase); }
    .sim-book-head { display:grid; grid-template-columns:44px 1fr 1fr; gap:8px; padding:4px 0 6px; border-bottom:0.5px solid var(--grid); font-size:11px; color:var(--muted); }
    .sim-book-head .sim-book-price, .sim-book-head .sim-book-qty { text-align:right; }
    .sim-book-side { text-align:left; }
    .sim-book-price, .sim-book-qty { text-align:right; }
    .sim-book-mid { display:flex; align-items:baseline; justify-content:space-between; gap:8px; padding:8px 0; margin:4px 0; border-top:0.5px solid var(--grid); border-bottom:0.5px solid var(--grid); font-size:13px; }
    .sim-book-mid strong { font-size:19px; font-weight:700; }
    .sim-order { display:flex; flex-direction:column; gap:8px; }
    .sim-side { display:flex; gap:8px; }
    .sim-side button { flex:1; }
    .sim-side button.active { border-color:var(--primary); color:var(--primary); }
    .sim-field { display:flex; align-items:center; justify-content:space-between; gap:8px; font-size:13px; color:var(--muted); }
    .sim-field input { width:130px; text-align:right; font-variant-numeric:tabular-nums; }
    .sim-hint { font-size:12px; line-height:1.5; }
    .sim-quick { display:flex; align-items:center; gap:6px; }
    .sim-quick button { font-size:12px; padding:3px 10px; }
    .sim-quick-gap { flex:1; }
    .sim-book-row { position:relative; }
    .sim-book-bar { position:absolute; right:0; top:2px; bottom:2px; border-radius:2px; opacity:.14; pointer-events:none; }
    .sim-book-row.ask .sim-book-bar { background:var(--decrease); }
    .sim-book-row.bid .sim-book-bar { background:var(--increase); }
    .sim-book-side, .sim-book-price, .sim-book-qty { position:relative; }
    .sim-book-mid strong { font-size:22px; }
    .sim-side button.active { border-color:currentColor; }
    #sim-buy.active { color:var(--increase); background:color-mix(in srgb,var(--increase) 10%,transparent); }
    #sim-sell.active { color:var(--decrease); background:color-mix(in srgb,var(--decrease) 10%,transparent); }
    .sim-chip { display:inline-block; padding:1px 8px; border-radius:999px; font-size:11px; line-height:1.6; }
    .sim-chip.chip-pending, .sim-chip.chip-partial { color:var(--primary); background:color-mix(in srgb,var(--primary) 13%,transparent); }
    .sim-chip.chip-filled { color:var(--decrease); background:color-mix(in srgb,var(--decrease) 13%,transparent); }
    .sim-chip.chip-cancelled { color:var(--muted); background:color-mix(in srgb,var(--muted) 13%,transparent); }
    .sim-table th { font-weight:600; font-size:11px; color:var(--ink); opacity:.62; letter-spacing:.02em; }
    .sim-table tr:hover td { background:color-mix(in srgb,var(--primary) 4%,transparent); }
    .sim-myorders-head { margin-top:4px; font-size:13px; font-weight:700; color:var(--ink); }
    .sim-tip { position:absolute; z-index:40; padding:8px 10px; border-radius:var(--radius-sm); background:var(--surface); border:0.5px solid var(--grid); box-shadow:0 6px 18px rgba(0,0,0,0.12); font-size:12px; pointer-events:none; }
    @media (max-width: 1180px) { .sim-top, .sim-other { grid-template-columns:1fr; } .sim-wrap { width:auto; } }
    .rvw-empty { padding:26px; border:1px dashed var(--grid); border-radius:var(--radius-box); color:var(--muted); font-size:13px; text-align:center; }
    .rv-col-list { display:grid; gap:8px; }
    .rv-month-row { display:flex; align-items:center; gap:12px; padding:8px 12px; border:1px solid var(--grid); border-radius:var(--radius-sm); background:var(--surface2); transition:border-color .18s, box-shadow .18s; }
    .rv-month-row:hover { border-color:var(--primary); box-shadow:0 2px 8px rgba(0,0,0,.06); }
    .rv-month-label { flex:1; font-weight:700; color:var(--ink); font-family:var(--font-display); white-space:nowrap; }
    .rv-month-time { font-size:11px; font-weight:500; color:var(--muted); font-family:var(--font-mono,monospace); white-space:nowrap; }
    .rv-month-row button.rv-btn-del { color:var(--danger); border-color:color-mix(in srgb,var(--danger) 40%,transparent); }
    .rv-month-row button.rv-btn-del:hover:not(:disabled) { border-color:var(--danger); box-shadow:0 4px 12px color-mix(in srgb,var(--danger) 25%,transparent); }
    .rv-month-row button { min-height:32px; padding:4px 16px; font-size:13px; white-space:nowrap; transition:transform .18s, box-shadow .18s, filter .18s; }
    .rv-month-row button:hover:not(:disabled) { transform:translateY(-2px); box-shadow:0 4px 12px rgba(0,0,0,.14); filter:brightness(1.06); }
    .rv-month-row button:active:not(:disabled) { transform:translateY(0); box-shadow:0 1px 4px rgba(0,0,0,.1); }
    .rv-month-row button:disabled { opacity:.45; cursor:not-allowed; }
    @media (max-width:1100px){ .rv-columns { grid-template-columns:1fr; max-width:1080px; } .rv-month-row { flex-wrap:wrap; } .rv-month-time { white-space:normal; } }
    /* 中长期-气象数据分析（分日预测 + 分时预测） */
    .lt-weather-module { padding:0; }
    .lt-weather-block { padding:22px 24px 24px; border-bottom:1px solid var(--line); }
    .lt-weather-block:last-child { border-bottom:0; }
    .lt-block-head { display:flex; align-items:end; justify-content:space-between; flex-wrap:wrap; gap:16px; }
    .lt-block-head h3 { margin:0; font-size:16px; color:var(--ink); font-family:var(--font-display); }
    .lt-block-head p { margin:6px 0 0; color:var(--muted); font-size:13px; }
    .lt-range-controls { display:flex; align-items:end; flex-wrap:wrap; gap:10px; }
    .lt-range-controls label { display:grid; gap:6px; color:var(--muted); font-size:12px; font-weight:700; }
    .lt-range-controls input,.lt-range-controls select { min-height:34px; padding:4px 8px; border:1px solid var(--line); border-radius:var(--radius-sm); background:var(--surface); color:var(--ink); font:inherit; }
    .lt-status { min-height:18px; margin:10px 0 12px; color:var(--muted); font-size:13px; }
    .lt-status.error { color:var(--danger); }
    .lt-day-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:16px; }
    .lt-chart-card { border:1px solid var(--line); border-radius:var(--radius-box); background:var(--surface); padding:12px 12px 8px; }
    .lt-chart-head { display:flex; align-items:baseline; justify-content:space-between; gap:8px; margin-bottom:4px; }
    .lt-chart-head strong { font-size:13px; color:var(--ink); font-family:var(--font-display); }
    .lt-chart-unit { font-size:11px; color:var(--muted); font-family:var(--font-mono,monospace); }
    .lt-chart-card svg { display:block; width:100%; height:auto; }
    .lt-sim-grid { padding:4px 0 0; }
    @media (max-width:1000px){ .lt-day-grid { grid-template-columns:1fr; } }
    .overview-table tr.row-selected td:first-child { background:var(--adjusted); color:#fff; font-weight:700; }
    .overview-table tr.row-selected td:not(:first-child) { box-shadow:inset 0 0 0 2px var(--adjusted); }
    .chart-shell { position:relative; padding:8px 20px 12px; }
    .chart-shell.selecting { user-select:none; }
    .chart-shell.selecting #chart { touch-action:none; cursor:crosshair; }
    #chart { display:block; width:100%; height:auto; }
    .grid { stroke:var(--grid); stroke-width:1; }
    .ratio-grid { stroke:var(--ratio); stroke-width:1; stroke-dasharray:6 4; opacity:.6; }
    .axis { stroke:var(--muted); stroke-width:1; }
    .tick { fill:var(--muted); font-size:13px; }
    .x-tick { font-size:13px; font-weight:700; }
    .axis-title { fill:var(--muted); font-size:13px; font-weight:700; }
    .curve { fill:none; stroke-width:2.5; stroke-linejoin:round; stroke-linecap:round; }
    .curve.actual { stroke:var(--actual); }
    .curve.predicted { stroke:var(--predicted); }
    .curve.adjusted { stroke:var(--adjusted); stroke-dasharray:9 6; }
    .point { fill:var(--surface); stroke-width:2; pointer-events:none; }
    .point.actual { stroke:var(--actual); }
    .point.predicted { stroke:var(--predicted); }
    .point.adjusted { stroke:var(--adjusted); }
    .ratio-bar { fill:color-mix(in srgb,var(--ratio) 28%,transparent); stroke:var(--ratio); stroke-width:1; pointer-events:none; }
    .ratio-bar.ratio-clipped { fill:color-mix(in srgb,var(--ratio) 50%,transparent); stroke-width:1.5; }
    .ratio-axis { stroke:var(--ratio); }
    .ratio-tick,.ratio-axis-title { fill:var(--ratio); }
    .selected-ring { fill:none; stroke:var(--adjusted); stroke-width:3; pointer-events:none; }
    .selection-box { fill:var(--selection-fill); stroke:var(--adjusted); stroke-width:1.5; stroke-dasharray:6 4; pointer-events:none; }
    .hit-area { fill:transparent; cursor:crosshair; }
    .crosshair { stroke:var(--crosshair); stroke-width:1; stroke-dasharray:3 3; pointer-events:none; }
    .tooltip { position:fixed; z-index:100; min-width:220px; padding:10px 12px; border-radius:8px; background:var(--tooltip-bg); color:#fff; font-size:13px; line-height:1.65; pointer-events:none; transform:translate(-50%,calc(-100% - 14px)); box-shadow:0 10px 26px rgba(0,0,0,.5); }
    .tooltip.w-tip { transform:translate(-50%,0); }
    .tooltip-row { display:flex; justify-content:space-between; gap:18px; }
    .tooltip-note { color:var(--tooltip-note); font-size:11px; }
    .status { position:absolute; inset:0; display:grid; place-items:center; padding:32px; background:var(--overlay-bg); color:var(--muted); text-align:center; }
    .status.error,.save-status.error { color:var(--danger); }
    [hidden] { display:none !important; }
    .editor { margin:0 20px 20px; border:1px solid var(--line); border-radius:var(--radius-box); background:var(--surface); padding:18px; }
    .editor-head,.editor-actions,.batch-row { display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:12px; }
    .editor-warning { margin:8px 0 16px; color:var(--danger); font-size:13px; }
    .batch-row { justify-content:flex-start; border-radius:9px; background:var(--surface2); padding:12px; }
    .batch-row input { width:180px; }
    .point-inputs { display:grid; grid-template-columns:repeat(auto-fit,minmax(165px,1fr)); gap:10px; margin:16px 0; }
    .point-input { display:grid; gap:5px; color:var(--muted); font-size:12px; font-weight:700; }
    .editor-actions { justify-content:flex-end; }
    .save-status { margin-right:auto; color:var(--muted); font-size:13px; }
    details { border-top:1px solid var(--line); }
    summary { cursor:pointer; padding:16px 24px; color:var(--ink); font-weight:700; }
    .table-wrap { max-height:390px; overflow:auto; }
    table { width:100%; border-collapse:collapse; font-variant-numeric:tabular-nums; white-space:nowrap; }
    th,td { padding:11px 20px; border-top:1px solid var(--line); text-align:right; }
    th:first-child,td:first-child { text-align:left; }
    th { position:sticky; top:0; z-index:1; background:var(--surface2); color:var(--muted); font-size:12px; }
    .fallback { color:var(--adjusted); font-size:11px; }
    .select-cell { display:flex; align-items:center; justify-content:flex-end; gap:8px; }
    .mode-selector { display:flex; gap:0; margin:10px 0 16px; border:1px solid var(--line); border-radius:var(--radius-box); overflow:hidden; }
    .mode-btn { flex:1; min-height:38px; border:none; border-radius:0; background:transparent; color:var(--muted); font:inherit; font-size:13px; font-weight:700; cursor:pointer; transition:background .15s,color .15s; }
    .mode-btn:hover { background:var(--surface2); }
    .mode-btn.active { background:var(--primary); color:var(--primary-ink); }
    .mode-btn + .mode-btn { border-left:1px solid var(--line); }
    .ratio-info { display:flex; flex-wrap:wrap; align-items:center; gap:4px 8px; font-size:12px; color:var(--muted); }
    .ratio-info input { width:80px; }
    .ratio-preview { font-weight:700; color:var(--adjusted); white-space:nowrap; }
    .ratio-disabled { color:var(--danger); font-size:12px; }
    .point-inputs.ratio-mode { grid-template-columns:repeat(auto-fit,minmax(300px,1fr)); }
    .auth-overlay { position:fixed; inset:0; z-index:10; display:grid; place-items:center; padding:20px; background:var(--page); }
    .auth-card { width:min(400px,100%); border:1px solid var(--line); border-radius:var(--radius-card); background:var(--surface); box-shadow:var(--shadow-lg); padding:28px; }
    .auth-card h2 { margin:0 0 4px; font-family:var(--font-display); }
    .auth-subtitle { margin:0 0 18px; color:var(--muted); font-size:13px; line-height:1.6; }
    .auth-form { display:grid; gap:12px; }
    .auth-form label { display:grid; gap:6px; color:var(--muted); font-size:13px; font-weight:700; }
    .auth-form input { min-height:42px; border:1px solid var(--line); border-radius:var(--radius-box); background:var(--surface); color:var(--ink); padding:8px 11px; font:inherit; }
    .auth-hint { font-weight:400; }
    .auth-hint-gap { margin:14px 0 0; }
    .auth-error { margin:0; min-height:18px; color:var(--danger); font-size:13px; }
    .auth-submit { border-color:var(--primary); background:var(--primary); color:var(--primary-ink); }
    @media (max-width:760px) {
      .layout { flex-direction:column; }
      .sidebar { width:100%; height:auto; position:static; flex-direction:row; align-items:center; padding:10px 12px; gap:8px; }
      .sidebar-brand { display:none; }
      .sidebar-nav { display:flex; gap:6px; margin-left:auto; }
      .sidebar-subnav { display:flex; gap:4px; padding:2px 0 0; overflow-x:auto; max-width:100%; }
      .sidebar-subitem { white-space:nowrap; }
      .sidebar-item { min-height:34px; padding:6px 10px; }
      .sidebar-foot { margin-top:0; margin-left:auto; border-top:0; padding-top:0; display:flex; align-items:center; gap:8px; }
      .sidebar-user,.sidebar-admin { display:none; }
      main { width:min(100% - 20px,1120px); margin:22px auto; }
      .date-control { width:100%; }
      .chart-tools,.legend { padding-inline:16px; }
      .chart-head { align-items:stretch; flex-direction:column; padding:16px 16px 0; }
      .chart-head .date-control { width:100%; }
      .price-section-head { align-items:stretch; flex-direction:column; }
      .price-section-head .date-control { width:100%; }
      .price-chart-shell,.chart-shell { padding-inline:6px; overflow-x:auto; }
      .price-chart-shell { min-height:320px; }
      .spread-section,.price-section { padding-inline:14px; }
      .spread-head { align-items:stretch; flex-direction:column; }
      .overview-head { align-items:stretch; flex-direction:column; padding-inline:14px; }
      .spread-controls { align-items:stretch; }
      .spread-controls label { flex:1 1 160px; }
      .spread-controls input,.spread-controls button { width:100%; }
      #price-chart,#chart { min-width:760px; }
      #price-chart { min-height:290px; }
      .editor { margin-inline:10px; }
      .batch-row input { width:100%; }
      th,td { padding:10px 14px; }
    }
    .weather-section { margin-top:22px; }
    .weather-head { padding:18px 22px 4px; }
    .weather-panel { display:flex; gap:20px; padding:8px 20px 20px; }
    .weather-col { flex:1; min-width:0; display:flex; flex-direction:column; }
    .weather-controls { display:flex; flex-wrap:wrap; gap:14px; align-items:center; margin-bottom:6px; min-height:34px; }
    .weather-controls label { display:inline-flex; align-items:center; gap:6px; font-size:13px; color:var(--muted); white-space:nowrap; }
    .weather-controls input,.weather-controls select { padding:4px 8px; border:1px solid var(--line); border-radius:var(--radius-sm); font-size:13px; background:var(--surface); color:var(--ink); }
    .weather-status { min-height:18px; font-size:12px; color:var(--muted); margin:2px 0; }
    .weather-legend { display:flex; flex-wrap:wrap; gap:10px 14px; margin:8px 0 0; font-size:12px; color:var(--muted); min-height:20px; align-items:center; }
    .weather-legend .wlegend-item { display:inline-flex; align-items:center; gap:5px; cursor:pointer; user-select:none; }
    .weather-legend .wlegend-item .wlegend-swatch { width:18px; height:4px; border-radius:2px; }
    .weather-legend .wlegend-item.off { opacity:.35; text-decoration:line-through; }
    .weather-chart-shell { position:relative; border:1px solid var(--line); border-radius:var(--radius-box); padding:6px 12px 10px; background:var(--surface); height:360px; }
    #wchart-left,#wchart-right { width:100%; height:100%; display:block; }
    .w-curve { fill:none; stroke-width:2; stroke-linejoin:round; stroke-linecap:round; }
    .w-hl { pointer-events:none; }
    @media (max-width:1100px){ .weather-panel{flex-direction:column;} }
    .boundary-section { margin-top:22px; }
    .boundary-head { padding:18px 22px 4px; }
    .boundary-controls { padding:4px 22px 8px; display:flex; flex-wrap:wrap; gap:14px; align-items:center; }
    .boundary-controls label { display:inline-flex; align-items:center; gap:6px; font-size:13px; color:var(--muted); font-weight:700; white-space:nowrap; }
    .boundary-controls input { min-height:34px; padding:4px 8px; border:1px solid var(--line); border-radius:var(--radius-sm); background:var(--surface); color:var(--ink); font:inherit; }
    .boundary-status { padding:2px 22px 8px; min-height:16px; color:var(--muted); font-size:12px; }
    .boundary-table-wrap { overflow-x:auto; padding:0 22px 22px; }
    .boundary-table { width:100%; border-collapse:separate; border-spacing:0; font-variant-numeric:tabular-nums; }
    .boundary-table th { padding:8px 10px; background:var(--surface2); color:var(--muted); font-size:12px; font-weight:700; border-bottom:1px solid var(--line); border-right:1px dashed var(--grid); white-space:nowrap; }
    .boundary-table th.bh-hour { border-right:1px dashed var(--grid); }
    .boundary-table th.bh-hour { width:80px; text-align:center; }
    .boundary-table td { padding:0; border-bottom:1px solid var(--line); border-right:1px dashed var(--grid); height:28px; font-size:12px; vertical-align:middle; }
    .boundary-cell { position:relative; width:140px; min-width:140px; }
    .boundary-cell .bar { position:absolute; top:2px; height:24px; border-radius:3px; }
    .boundary-cell .bpos { left:50%; background:color-mix(in srgb,var(--decrease) 38%,transparent); }
    .boundary-cell .bneg { right:50%; background:color-mix(in srgb,var(--increase) 38%,transparent); }
    .boundary-cell .bval { position:relative; z-index:1; line-height:28px; text-align:center; font-weight:700; color:var(--ink); padding:0 6px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
    .boundary-cell.empty .bval { color:var(--muted); font-weight:400; }
    .boundary-table .hour-cell { width:80px; text-align:center; padding:0 8px; font-weight:700; color:var(--muted); background:var(--surface2); }
    .similar-section { margin-top:22px; }
    .similar-head { padding:18px 22px 4px; }
    .similar-head p { margin:6px 0 0; color:var(--muted); font-size:13px; }
    .similar-controls { padding:6px 22px 12px; display:flex; flex-wrap:wrap; gap:14px; align-items:center; }
    .similar-controls label { display:inline-flex; align-items:center; gap:6px; font-size:13px; color:var(--muted); font-weight:700; white-space:nowrap; }
    .similar-controls input { min-height:34px; padding:4px 8px; border:1px solid var(--line); border-radius:var(--radius-sm); background:var(--surface); color:var(--ink); font:inherit; }
    .similar-status { padding:0 22px 8px; min-height:16px; color:var(--muted); font-size:12px; }
    .similar-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:16px; padding:4px 22px 22px; }
    .sim-card { position:relative; border:1px solid var(--line); border-radius:var(--radius-box); background:var(--surface); padding:10px 12px 8px; }
    .sim-head { display:flex; align-items:center; justify-content:space-between; gap:8px; margin-bottom:4px; }
    .sim-head strong { font-size:13px; color:var(--ink); font-family:var(--font-display); }
    .sim-head button { min-height:26px; padding:3px 10px; font-size:12px; border:1px solid var(--line); border-radius:var(--radius-sm); background:var(--surface); color:var(--muted); cursor:pointer; font-weight:700; }
    .sim-head button:hover { border-color:var(--adjusted); color:var(--adjusted); }
    .sim-card svg { display:block; width:100%; height:auto; }
    .sim-legend { display:flex; gap:14px; font-size:12px; color:var(--muted); margin-top:4px; }
    .sim-legend .lg { display:inline-flex; align-items:center; gap:5px; }
    .sim-legend .lg i { width:16px; height:3px; border-radius:2px; display:inline-block; }
    @media (max-width:1000px){ .similar-grid { grid-template-columns:1fr; } }
  
    /* ===== 模拟页 → 电网经营模拟入口 ===== */
    .sim-game-entry { display:flex; justify-content:center; padding:14px 0 6px; }
    .sim-game-btn { display:inline-flex; align-items:center; gap:8px; padding:9px 22px; border-radius:var(--radius-btn); border:1px solid var(--line); background:var(--surface); color:var(--ink); font-size:13px; font-weight:700; text-decoration:none; cursor:pointer; }
    .sim-game-btn:hover { border-color:var(--primary); color:var(--primary); box-shadow:var(--shadow-card); }
