/* Shared workbench theme. Loaded after page-local styles so every center follows one preference. */
@font-face{
  font-family:"Noto Sans SC";
  font-style:normal;
  font-weight:100 900;
  font-display:swap;
  src:url('/static/fonts/noto-sans-sc-ui.woff2') format('woff2');
}
:root{
  /* 全站普通界面文字使用参考站声明的 Noto Sans SC。字体文件随站点提供，
     避免 Windows 再回退到旧的微软雅黑字形；大小与既有粗细由组件继续决定。 */
  --cc-font-ui:"Noto Sans SC","Source Han Sans SC","Microsoft YaHei UI","PingFang SC",system-ui,sans-serif;
  font-family:var(--cc-font-ui);
}
html,body{font-family:var(--cc-font-ui)}
/* 原生表单控件只继承字体族；各页面既有字号和字重不变。 */
button,input,select,textarea{font-family:inherit}
:root[data-theme="light"]{
  color-scheme:light;
  --bg:#f1f4f8;
  --rail:#ffffff;
  --surface:#ffffff;
  --surface-2:#e9eef5;
  --surface2:#e9eef5;
  --panel:#ffffff;
  --panel2:#f5f7fa;
  --line:#aeb9c9;
  --line-soft:#d4dce7;
  --soft:#d4dce7;
  --text:#101828;
  --muted:#344054;
  --faint:#4b5b73;
  --amber:#704600;
  --amber-soft:#fff0c2;
  --red:#a90f32;
  --green:#006047;
  --cyan:#075d79;
  --blue:#174f9a;
  --violet:#5c3fa3;
  --srf:#ffffff;
  --card:#ffffff;
  --hover:#e7edf5;
  --bd:#aeb9c9;
  --bda:#75849a;
  --t1:#101828;
  --t2:#344054;
  --t3:#4b5b73;
  --acc:#704600;
  --grn:#006047;
}

:root[data-theme="light"] html,
:root[data-theme="light"] body{background:var(--bg)!important;color:var(--text)!important;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}
:root[data-theme="light"] body{font-weight:400}
:root[data-theme="light"] .rail,
:root[data-theme="light"] .brand-rail,
:root[data-theme="light"] .plate-rail,
:root[data-theme="light"] .pro-rail{background:#fff!important;border-color:var(--line-soft)!important}
:root[data-theme="light"] .top,
:root[data-theme="light"] .topbar,
:root[data-theme="light"] #top{background:#fff!important;border-color:var(--line)!important;color:var(--text)!important}
:root[data-theme="light"] main,
:root[data-theme="light"] .main,
:root[data-theme="light"] .workspace,
:root[data-theme="light"] .page,
:root[data-theme="light"] #content{background:var(--bg);color:var(--text)}
:root[data-theme="light"] input,
:root[data-theme="light"] select,
:root[data-theme="light"] textarea{background:#fff!important;color:var(--text)!important;border-color:var(--line)!important}
:root[data-theme="light"] input::placeholder,
:root[data-theme="light"] textarea::placeholder{color:#5b6980!important;opacity:1}
:root[data-theme="light"] .field>span,
:root[data-theme="light"] label>span,
:root[data-theme="light"] .field label{color:#243249!important;font-weight:650}
:root[data-theme="light"] th{background:#e6ecf3!important;color:#243249!important;border-color:var(--line)!important;font-weight:750!important}
:root[data-theme="light"] td{border-color:var(--line-soft)!important}
:root[data-theme="light"] tbody tr:hover{background:#e9eef5!important}
:root[data-theme="light"] ::-webkit-scrollbar-track{background:#edf1f6!important}
:root[data-theme="light"] ::-webkit-scrollbar-thumb{background:#8e9bae!important}

/* Strong semantic contrast for signals and market movement. */
:root[data-theme="light"] .price-up,
:root[data-theme="light"] .up,
:root[data-theme="light"] .red,
:root[data-theme="light"] .call,
:root[data-theme="light"] .research-direction.positive{color:var(--red)!important;font-weight:700}
:root[data-theme="light"] .price-dn,
:root[data-theme="light"] .down,
:root[data-theme="light"] .green,
:root[data-theme="light"] .put,
:root[data-theme="light"] .research-direction.negative{color:var(--green)!important;font-weight:700}
:root[data-theme="light"] .badge.C,
:root[data-theme="light"] .sig-buy,
:root[data-theme="light"] .tag.C{color:var(--red)!important;background:#fde1e7!important;border-color:#c92b4b!important;font-weight:850}
:root[data-theme="light"] .badge.P,
:root[data-theme="light"] .sig-sell,
:root[data-theme="light"] .tag.P{color:var(--green)!important;background:#d8f2e8!important;border-color:#087a5c!important;font-weight:850}
:root[data-theme="light"] .badge.release,
:root[data-theme="light"] .tag.release,
:root[data-theme="light"] .badge.warn,
:root[data-theme="light"] .status-warn{color:var(--amber)!important;background:#fff0c2!important;border-color:#9a6500!important;font-weight:750}
:root[data-theme="light"] .badge.D,
:root[data-theme="light"] .sig-neutral{color:#344054!important;background:#e3e8ef!important;border-color:#7d899c!important;font-weight:750}
:root[data-theme="light"] .holding-alerts{border-color:#c92b4b!important;background:linear-gradient(100deg,#fde1e7,#fff 62%)!important}
:root[data-theme="light"] .holding-alert-head b,
:root[data-theme="light"] .holding-alert-card strong{color:var(--red)!important;font-weight:800}
:root[data-theme="light"] .screener,
:root[data-theme="light"] .signal-list,
:root[data-theme="light"] .list-head{background:#fff!important;color:var(--text)!important;border-color:var(--line)!important}

/* Common hard-coded dark shells. Chart canvases opt into their own audited palette. */
:root[data-theme="light"] .context,
:root[data-theme="light"] .register,
:root[data-theme="light"] .login-panel,
:root[data-theme="light"] .auth-panel{background:#fff!important;color:var(--text)!important}
:root[data-theme="light"] .form-actions{background:rgba(241,244,248,.96)!important}
:root[data-theme="light"] .toast{background:#fff!important;color:var(--text)!important;border:1px solid var(--line);box-shadow:0 12px 30px rgba(16,24,40,.18)!important}
:root[data-theme="light"] .toast.error{background:#fde1e7!important;color:var(--red)!important;border-color:#c92b4b}
:root[data-theme="light"] .security-note,
:root[data-theme="light"] .notice{background:#fff0c2!important;color:#593900!important;border-color:#b98213!important}

/* Professional chart: lighten navigation and facts. */
:root[data-theme="light"] #app{background:var(--bg);color:var(--text)}
:root[data-theme="light"] #sidebar,
:root[data-theme="light"] #alertsPanel,
:root[data-theme="light"] #infoBar{background:#fff!important;color:var(--text)!important;border-color:var(--line)!important}
:root[data-theme="light"] #sidebar input,
:root[data-theme="light"] #searchList input{background:#fff!important;color:var(--text)!important;border-color:var(--line)!important}
:root[data-theme="light"] .stock-item .name,
:root[data-theme="light"] #infoBar .qv b{color:var(--text)!important}
:root[data-theme="light"] .stock-item:hover,
:root[data-theme="light"] .plate-item:hover,
:root[data-theme="light"] .search-item:hover,
:root[data-theme="light"] #alertsPanel .alert-item:hover{background:#e9eef5!important}
:root[data-theme="light"] .stock-item.active{background:#fff0c2!important}
:root[data-theme="light"] .pro-context{background:#f5f7fa!important;color:var(--muted)!important;border-color:var(--line)!important}
:root[data-theme="light"] .cc-chart-surface{border-color:var(--line)!important}

/* Light cards and tables used by the older centers. */
:root[data-theme="light"] .control-panel,
:root[data-theme="light"] .metric,
:root[data-theme="light"] .comparison-wrap,
:root[data-theme="light"] .panel,
:root[data-theme="light"] .section,
:root[data-theme="light"] .card{background:#fff!important;border-color:var(--line)!important;color:var(--text)!important}
:root[data-theme="light"] .comparison-table tbody tr.active{background:#fff0c2!important}
:root[data-theme="light"] .trade-log th{background:#e6ecf3!important}

@media (prefers-contrast:more){
  :root[data-theme="light"]{--muted:#243249;--faint:#344054;--line:#8996a9;--line-soft:#b9c3d1}
}

@media (max-width:820px){
  .app{grid-template-columns:minmax(0,1fr)!important;min-width:0}
  .app>.rail{width:100%!important;max-width:100vw;min-width:0;overflow-x:auto;overflow-y:hidden}
  .workspace,.profile-layout,.profile-aside,.profile-form{min-width:0;max-width:100vw}
  .profile-layout{grid-template-columns:minmax(0,1fr)!important}
}

/* Shared semantic layer. Page-local selectors may stay specific; new surfaces use
   the cc-* namespace so warn/item/summary/lead/controls cannot leak between pages. */
:root,
:root[data-theme="dark"]{
  --cc-bg:#090b11;--cc-rail:#0d1018;--cc-surface:#121722;--cc-surface-raised:#181e2a;
  --cc-line:#2b3444;--cc-line-soft:#202837;--cc-text:#f4f6fa;--cc-muted:#aab5c5;--cc-faint:#748198;
  --cc-accent:#d28a1f;--cc-accent-strong:#f0ab35;--cc-accent-soft:#2c2112;--cc-cta:#704600;
  --cc-nav-accent:#7eb4ff;--cc-nav-accent-soft:#14243a;
  --cc-buy:#ff7184;--cc-buy-soft:#3a1823;--cc-sell:#42d8ad;--cc-sell-soft:#11352d;
  --cc-neutral:#b7c1d0;--cc-neutral-soft:#252c38;--cc-info:#6eb7ff;--cc-danger:#ff7184;
  --cc-chart:#090c14;--cc-chart-paper:#090c14;--cc-chart-grid:#252d3a;--cc-chart-axis:#aeb8c8;
  --cc-chart-tooltip:#171c27;--cc-chart-tooltip-border:#394456;--cc-chart-tooltip-text:#eef2f7;
  --cc-shadow:0 18px 48px rgba(0,0,0,.28);
}
:root[data-theme="light"]{
  --cc-bg:#f3f6fa;--cc-rail:#ffffff;--cc-surface:#ffffff;--cc-surface-raised:#edf2f7;
  --cc-line:#aab7c8;--cc-line-soft:#d2dbe6;--cc-text:#101828;--cc-muted:#344054;--cc-faint:#52627a;
  --cc-accent:#86530b;--cc-accent-strong:#6f4300;--cc-accent-soft:#fff0c2;--cc-cta:#704600;
  --cc-nav-accent:#155eef;--cc-nav-accent-soft:#eaf2ff;
  --cc-buy:#a90f32;--cc-buy-soft:#fde1e7;--cc-sell:#006047;--cc-sell-soft:#d8f2e8;
  --cc-neutral:#344054;--cc-neutral-soft:#e3e8ef;--cc-info:#174f9a;--cc-danger:#a90f32;
  --cc-chart:#090c14;--cc-chart-paper:#ffffff;--cc-chart-grid:#dbe3ed;--cc-chart-axis:#52627a;
  --cc-chart-tooltip:#ffffff;--cc-chart-tooltip-border:#aab7c8;--cc-chart-tooltip-text:#101828;
  --cc-shadow:0 16px 38px rgba(16,24,40,.14);
}

/* Desktop-only authenticated workspace density. 13px is the closest stable
   CSS root to Chrome's former 80% view (16px × .8 = 12.8px), while rem-based
   panels keep their real layout and charts retain their own canvas geometry. */
@media(min-width:821px){
  html.cc-auth-workspace{
    font-size:13px;
    --cc-shell-width:212px;
    --cc-page-gutter:24px;
    /* 默认回到第一版紧凑侧栏；分组标题按参考站 12:14 比例校正为 11.15:13。 */
    --cc-sidebar-group-size:11.15px;
    --cc-sidebar-group-pad-y:6px;
    --cc-sidebar-link-size:13px;
    --cc-sidebar-link-height:33px;
    --cc-sidebar-link-gap:8.5px;
    --cc-sidebar-link-pad-y:7px;
    --cc-sidebar-link-pad-x:8.5px;
    --cc-sidebar-link-radius:8px;
    --cc-sidebar-icon-box:15.6px;
    --cc-sidebar-icon-size:15px;
  }
  html.cc-auth-workspace[data-cc-sidebar-size="large"]{
    --cc-sidebar-group-size:13.7px;
    --cc-sidebar-group-pad-y:8px;
    --cc-sidebar-link-size:16px;
    --cc-sidebar-link-height:41px;
    --cc-sidebar-link-gap:10px;
    --cc-sidebar-link-pad-y:9px;
    --cc-sidebar-link-pad-x:10px;
    --cc-sidebar-link-radius:10px;
    --cc-sidebar-icon-box:19px;
    --cc-sidebar-icon-size:18px;
  }
  html.cc-auth-workspace body.cc-design-system{font-size:13px}
}

.cc-page,
.cc-design-system{background:var(--cc-bg);color:var(--cc-text)}
.cc-design-system{
  font-family:var(--cc-font-ui);
  font-weight:400;
  line-height:1.45;
  font-synthesis:none;
  text-rendering:optimizeLegibility;
  -webkit-font-smoothing:antialiased;
}
.cc-design-system :is(.cc-metric-cell strong,.cc-review-fact strong,.cc-overview-card strong,.cc-status-value,.price,.pct,.number){font-family:"JetBrains Mono",var(--cc-font-ui),ui-monospace,"SFMono-Regular",Consolas,monospace;font-variant-numeric:tabular-nums}
.cc-design-system :is(button,input,select,textarea){font-family:inherit}
.cc-research-task,.cc-research-task :is(button,span,strong,small){font-family:var(--cc-font-ui)!important}
.cake-ai-panel,.cake-ai-panel :is(button,input,textarea,select,p,span,strong,small){font-family:var(--cc-font-ui)!important}
.cc-intraday-drawer,.cc-intraday-drawer :is(button,input,select,p,span,strong,small){font-family:var(--cc-font-ui)!important}
.cc-design-system :is(a,button){-webkit-tap-highlight-color:transparent}
.cc-btn{min-height:2.75rem;border:1px solid var(--cc-line);border-radius:.55rem;background:var(--cc-surface);color:var(--cc-text);padding:.55rem .85rem;cursor:pointer;transition:background .16s ease,border-color .16s ease,transform .08s ease}
.cc-btn:hover{border-color:var(--cc-accent);background:var(--cc-surface-raised)}
.cc-btn:active{transform:translateY(1px)}
.cc-btn-primary{background:var(--cc-cta);border-color:var(--cc-cta);color:#fff;font-weight:800}
.cc-btn-primary:hover{background:#5c3900;border-color:#5c3900;color:#fff}
.cc-btn-quiet{background:transparent;color:var(--cc-muted)}
.cc-stock-row{display:flex;align-items:center;gap:.65rem;min-height:3rem;padding:.55rem .7rem;border:1px solid transparent;border-radius:.55rem;color:var(--cc-text);text-decoration:none}
.cc-stock-row:hover,.cc-stock-row:focus-visible{background:var(--cc-surface-raised);border-color:var(--cc-line)}
.cc-stock-row__identity{min-width:0;flex:1}.cc-stock-row__name{display:block;font-weight:750;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cc-stock-row__code{display:block;color:var(--cc-faint);font-size:.72rem}.cc-stock-row__quote{text-align:right;font-variant-numeric:tabular-nums}.cc-stock-row__change{display:block;font-weight:800}.cc-signal{display:inline-flex;align-items:center;justify-content:center;min-width:2.25rem;min-height:1.65rem;padding:.15rem .42rem;border:1px solid var(--cc-line);border-radius:.4rem;font-size:.75rem;font-weight:850;letter-spacing:.02em}.cc-signal--buy{color:var(--cc-buy);background:var(--cc-buy-soft);border-color:currentColor}.cc-signal--sell{color:var(--cc-sell);background:var(--cc-sell-soft);border-color:currentColor}.cc-signal--neutral{color:var(--cc-neutral);background:var(--cc-neutral-soft);border-color:currentColor}.cc-status{display:inline-flex;align-items:center;gap:.35rem;color:var(--cc-muted);font-size:.78rem}.cc-status__dot{width:.48rem;height:.48rem;border-radius:50%;background:currentColor}.cc-status--ok{color:var(--cc-sell)}.cc-status--warn{color:var(--cc-accent-strong)}.cc-status--bad{color:var(--cc-danger)}
.cc-panel{border:1px solid var(--cc-line);border-radius:.75rem;background:var(--cc-surface);box-shadow:var(--cc-shadow)}.cc-panel__head{display:flex;align-items:flex-start;justify-content:space-between;gap:.8rem;padding:.9rem 1rem;border-bottom:1px solid var(--cc-line-soft)}.cc-panel__title{margin:0;font-size:.92rem;font-weight:800}.cc-panel__note{margin:.2rem 0 0;color:var(--cc-faint);font-size:.75rem}.cc-empty{padding:1.25rem 1rem;color:var(--cc-muted);font-size:.8rem;line-height:1.55}.cc-empty a{color:var(--cc-accent-strong);font-weight:750}.cc-segmented{display:inline-flex;align-items:center;gap:.15rem;padding:.18rem;border:1px solid var(--cc-line);border-radius:.6rem;background:var(--cc-surface)}.cc-segmented button{min-height:2.4rem;border:0;border-radius:.42rem;background:transparent;color:var(--cc-muted);padding:.45rem .7rem;cursor:pointer}.cc-segmented button[aria-pressed="true"]{background:var(--cc-accent-soft);color:var(--cc-accent-strong);font-weight:800}.cc-chart-surface{background:var(--cc-chart);color:#eef2f7;border:1px solid #293244;border-radius:.65rem}

.cc-shell-nav{position:relative;z-index:40;display:flex;flex-direction:column;align-items:center;gap:.45rem;min-width:var(--cc-shell-width,4.7rem);padding:.7rem .45rem;background:var(--cc-rail);border-right:1px solid var(--cc-line-soft);color:var(--cc-muted);font-family:var(--cc-font-ui)}
.cc-shell-nav [data-cc-shell-links]{display:flex;flex-direction:column;align-items:center;gap:.35rem;width:100%;min-height:0}.cc-shell-nav [data-cc-shell-link]{display:grid;place-items:center;gap:.1rem;width:100%;min-height:2.9rem;border-left:2px solid transparent;border-radius:.55rem;color:var(--cc-muted);font-size:.67rem;line-height:1.1;text-align:center;text-decoration:none}.cc-shell-nav [data-cc-shell-link] span:first-child{font-size:1.15rem}.cc-shell-nav [data-cc-shell-link]:hover,.cc-shell-nav [data-cc-shell-link]:focus-visible{background:var(--cc-surface-raised);color:var(--cc-text)}.cc-shell-nav [data-cc-shell-link][aria-current="page"]{background:var(--cc-nav-accent-soft);color:var(--cc-nav-accent);border-left-color:var(--cc-nav-accent);font-weight:650}.cc-shell-nav [data-cc-shell-theme]{min-width:2.75rem;min-height:2.75rem;border:1px solid var(--cc-line);border-radius:.5rem;background:transparent;color:var(--cc-muted);cursor:pointer}.cc-shell-nav [data-cc-shell-theme]:hover{color:var(--cc-text);border-color:var(--cc-nav-accent)}.cc-shell-nav [data-cc-shell-group]{width:100%;padding-top:.35rem;border-top:1px solid var(--cc-line-soft)}.cc-shell-nav [data-cc-shell-group]:first-child{border-top:0}.cc-shell-nav [data-cc-shell-group-label]{display:block;padding:.2rem 0 .25rem;color:var(--cc-faint);font-size:.56rem;font-weight:600;text-align:center;letter-spacing:.08em}.cc-shell-nav__avatar{width:2.75rem;height:2.75rem;display:block;border:1px solid var(--cc-nav-accent);border-radius:.7rem;overflow:hidden;margin-bottom:.25rem}.cc-shell-nav__avatar img{width:100%;height:100%;display:block;object-fit:cover}
.cc-shell-nav [data-cc-shell-pinned]{flex:0 0 auto;align-self:stretch;display:flex;flex-direction:column;background:var(--cc-rail)}.cc-shell-nav [data-cc-shell-pinned] [data-cc-shell-group]{padding-top:.4rem;border-top:1px solid var(--cc-line)}
.cc-shell-brand{display:none}

.cc-workbench-page{min-height:100vh;background:var(--cc-bg);color:var(--cc-text)}.cc-workbench-layout{display:grid;grid-template-columns:4.7rem minmax(0,1fr);min-height:100vh}.cc-workbench-main{min-width:0;padding:1.2rem clamp(1rem,2.4vw,2.4rem) 2.8rem}.cc-workbench-top{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;margin-bottom:1.1rem}.cc-workbench-kicker{margin:0 0 .25rem;color:var(--cc-accent-strong);font-size:.72rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.cc-workbench-title{margin:0;font-size:clamp(1.45rem,2.3vw,2.2rem);line-height:1.1}.cc-workbench-subtitle{max-width:60ch;margin:.45rem 0 0;color:var(--cc-muted);font-size:.84rem}.cc-workbench-top__actions{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;justify-content:flex-end}.cc-market-overview{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.65rem;margin-bottom:1rem}.cc-overview-card{padding:.8rem .9rem;border:1px solid var(--cc-line);border-radius:.65rem;background:var(--cc-surface)}.cc-overview-card span{display:block;color:var(--cc-faint);font-size:.7rem}.cc-overview-card strong{display:block;margin-top:.25rem;font-size:.95rem}.cc-workbench-grid{display:grid;grid-template-columns:minmax(13rem,.85fr) minmax(22rem,1.5fr) minmax(15rem,1fr);gap:.85rem;align-items:start}.cc-column{display:grid;gap:.85rem;min-width:0}.cc-current-card{min-height:17rem}.cc-current-facts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.55rem;padding:1rem}.cc-current-fact{padding:.65rem;border-radius:.5rem;background:var(--cc-surface-raised)}.cc-current-fact span{display:block;color:var(--cc-faint);font-size:.68rem}.cc-current-fact strong{display:block;margin-top:.2rem;font-size:.9rem}.cc-current-actions{display:flex;flex-wrap:wrap;gap:.5rem;padding:0 1rem 1rem}.cc-list{padding:.45rem}.cc-list-link{display:flex;align-items:center;justify-content:space-between;gap:.6rem;padding:.65rem .55rem;border-radius:.45rem;color:var(--cc-muted);font-size:.78rem}.cc-list-link:hover{background:var(--cc-surface-raised);color:var(--cc-text)}.cc-footer-note{margin-top:1rem;color:var(--cc-faint);font-size:.72rem}
.cc-design-system :is(.stock-item,.plate-item,.search-item,.alert-item):focus-visible{outline:2px solid var(--cc-accent-strong);outline-offset:-2px;background:var(--cc-surface-raised)}
.cc-design-system :is(.button.primary,.btn.primary,.action.primary,.submit){background:var(--cc-cta);border-color:var(--cc-cta);color:#fff!important;font-weight:800}
.cc-design-system :is(.button.primary,.btn.primary,.action.primary,.submit):hover{background:#5c3900;border-color:#5c3900;color:#fff!important}
[data-cc-shell-nav] [data-cc-shell-group-label]{display:block;padding:.2rem 0 .25rem;color:var(--cc-faint);font-size:.56rem;text-align:center;letter-spacing:.08em}
[data-cc-shell-nav] [data-cc-shell-theme]{min-width:2.75rem;min-height:2.75rem;border:1px solid var(--cc-line);border-radius:.5rem;background:transparent;color:var(--cc-muted);cursor:pointer}
[data-cc-shell-nav] [data-cc-shell-theme]:hover{color:var(--cc-text);border-color:var(--cc-accent)}
[data-cc-shell-nav] .cc-shell-generated-link{display:grid;place-items:center;gap:.1rem;min-height:2.9rem;min-width:3.25rem;padding:.2rem;color:var(--cc-muted);font-size:.67rem;line-height:1.1;text-align:center;text-decoration:none;border-radius:.55rem}
[data-cc-shell-nav] .cc-shell-generated-link:hover,[data-cc-shell-nav] .cc-shell-generated-link:focus-visible{background:var(--cc-surface-raised);color:var(--cc-text)}
@media(max-width:1050px){.cc-workbench-grid{grid-template-columns:minmax(12rem,.8fr) minmax(18rem,1.2fr)}.cc-column--right{grid-column:1/-1;grid-template-columns:repeat(3,minmax(0,1fr))}.cc-column--right>.cc-panel{min-width:0}}
@media(max-width:720px){.cc-workbench-layout{display:block}.cc-workbench-layout>.cc-shell-nav{width:100%;min-width:0;min-height:3.6rem;flex-direction:row;align-items:center;overflow-x:auto;overflow-y:hidden;padding:.4rem .55rem}.cc-workbench-layout>.cc-shell-nav [data-cc-shell-links]{flex-direction:row;align-items:center;overflow-x:auto}.cc-workbench-layout>.cc-shell-nav [data-cc-shell-pinned]{flex-direction:row;align-items:center;align-self:center}.cc-workbench-layout>.cc-shell-nav [data-cc-shell-pinned] [data-cc-shell-group],.cc-workbench-layout>.cc-shell-nav [data-cc-shell-group]{display:flex;align-items:center;gap:.3rem;width:auto;padding:0;border:0}.cc-workbench-layout>.cc-shell-nav [data-cc-shell-group-label]{display:none}.cc-workbench-layout>.cc-shell-nav [data-cc-shell-link]{min-width:3.6rem;min-height:2.8rem}.cc-workbench-layout>.cc-shell-nav .cc-shell-nav__avatar{flex:0 0 2.65rem;margin:0}.cc-workbench-main{padding:.9rem .75rem 2rem}.cc-workbench-top{display:block}.cc-workbench-top__actions{justify-content:flex-start;margin-top:.8rem}.cc-market-overview{grid-template-columns:repeat(2,minmax(0,1fr))}.cc-workbench-grid{grid-template-columns:minmax(0,1fr)}.cc-column--right{grid-column:auto;display:grid;grid-template-columns:minmax(0,1fr)}.cc-segmented{max-width:100%;overflow-x:auto}.cc-segmented button{white-space:nowrap}}

/* Legacy hosts keep their page layout while sharing the same grouped model.
   These rules restore the positioning that page-local CSS used before the
   host received the cc-shell-nav class. */
.cc-shell-nav.brand-rail{position:sticky;top:0;height:100vh;max-height:100vh}
.cc-shell-nav.rail,.cc-shell-nav.plate-rail,.cc-shell-nav.pro-rail{position:fixed;inset:0 auto 0 0}
body.cc-page-profile .cc-shell-nav.rail,
body.cc-page-membership .cc-shell-nav.rail{position:sticky;inset:auto;top:0;height:100vh}
body.cc-page-information .cc-shell-nav.rail{position:static;inset:auto;width:auto;min-width:0;height:auto;align-items:stretch;padding:1rem .75rem}
.cc-shell-nav [data-cc-shell-links]{flex:1 1 auto;align-self:stretch;min-width:0;min-height:0;max-height:none;overflow-x:hidden;overflow-y:auto;scrollbar-width:thin}
.cc-shell-nav [data-cc-shell-group]{width:100%;padding:.35rem 0 0;border-top:1px solid var(--cc-line-soft)}
.cc-shell-nav [data-cc-shell-group]:first-child{border-top:0}
.cc-shell-nav [data-cc-shell-group-label]{display:block;padding:.2rem .15rem .25rem;color:var(--cc-faint);font-size:.56rem;text-align:center;letter-spacing:.08em;white-space:nowrap}
.cc-shell-nav [data-cc-shell-link]{width:100%;min-width:0}
.cc-shell-nav>.brand{display:none}
.cc-shell-nav [data-cc-shell-links] + .rail-spacer,.cc-shell-nav [data-cc-shell-links] + .pro-spacer,.cc-shell-nav [data-cc-shell-links] + .plate-spacer,.cc-shell-nav [data-cc-shell-links] + .spacer{display:none}

/* Authenticated desktop geometry is a single contract.  Legacy pages used
   4.5rem, 4.7rem, 72px and 12rem rails, which made every centre appear to
   have a different browser zoom.  Keep the compact 13px workspace density,
   but give every shell the same physical rail and content origin. */
@media(min-width:821px){
  html.cc-auth-workspace .cc-shell-nav{
    width:var(--cc-shell-width);
    min-width:var(--cc-shell-width);
    height:100vh;
    max-height:100vh;
    align-items:stretch;
    gap:0;
    padding:0;
    overflow:hidden;
    background:var(--cc-rail);
  }
  html.cc-auth-workspace .cc-shell-nav>.cc-shell-nav__avatar,
  html.cc-auth-workspace .cc-shell-nav>.mark,
  html.cc-auth-workspace .cc-shell-nav>.pro-mark,
  html.cc-auth-workspace .cc-shell-nav>.plate-mark{
    display:none;
  }
  html.cc-auth-workspace .cc-shell-nav>.cc-shell-brand{
    display:flex;
    align-items:center;
    gap:11px;
    flex:0 0 64px;
    width:100%;
    height:64px;
    min-height:64px;
    padding:0 13px;
    box-sizing:border-box;
    border-bottom:1px solid var(--cc-line-soft);
    color:var(--cc-text);
    white-space:nowrap;
  }
  html.cc-auth-workspace .cc-shell-brand__mark{
    display:grid;
    place-items:center;
    flex:0 0 2.6rem;
    width:2.6rem;
    height:2.6rem;
    border:0;
    border-radius:.62rem;
    background:var(--cc-rail);
    overflow:hidden;
  }
  html.cc-auth-workspace .cc-shell-brand__mark img{display:block;width:100%;height:100%;object-fit:cover}
  html.cc-auth-workspace .cc-shell-brand__copy{display:grid;min-width:0;gap:5px;line-height:1}
  html.cc-auth-workspace .cc-shell-brand__copy strong{overflow:hidden;color:var(--cc-text)!important;font-family:var(--cc-font-ui)!important;font-size:17px!important;font-weight:800!important;line-height:1.05!important;letter-spacing:-.025em!important;text-overflow:ellipsis}
  /* 与公开首页品牌区的中文副标题完全同类：单色等宽小字，不再使用黑色粗体。 */
  html.cc-auth-workspace .cc-shell-brand__copy small{overflow:hidden;font-family:ui-monospace,var(--cc-font-ui),SFMono-Regular,Consolas,monospace!important;font-size:9px!important;font-weight:400!important;line-height:1!important;letter-spacing:.12em!important;text-overflow:ellipsis}
  html.cc-auth-workspace[data-theme="light"] .cc-shell-brand__copy small{color:#53677b!important}
  html.cc-auth-workspace[data-theme="dark"] .cc-shell-brand__copy small{color:#93a0b4!important}
  html.cc-auth-workspace .cc-shell-nav [data-cc-shell-links]{
    flex:1 1 auto;
    align-items:stretch;
    gap:0;
    overflow-x:hidden;
    overflow-y:auto;
    scrollbar-gutter:stable;
  }
  html.cc-auth-workspace .cc-shell-nav [data-cc-shell-group]{
    padding:.55rem 0 .25rem;
  }
  html.cc-auth-workspace .cc-shell-nav [data-cc-shell-group-label]{
    /* 两档只改变侧栏自身，分组与菜单始终保持参考站约 12:14 的层级比例。 */
    width:100%;
    padding:var(--cc-sidebar-group-pad-y) 32px var(--cc-sidebar-group-pad-y) 16px;
    border:0;
    border-radius:4px;
    background:transparent;
    color:#53677b;
    font-family:var(--cc-font-ui)!important;
    font-size:var(--cc-sidebar-group-size);
    font-weight:500!important;
    line-height:1.2;
    text-align:left;
    letter-spacing:.8px;
  }
  html.cc-auth-workspace .cc-shell-nav .cc-shell-custom-head{
    display:grid;
    grid-template-columns:minmax(0,1fr) 38px 22px;
    align-items:center;
    min-height:30px;
    padding:0 11px 0 16px;
    color:#53677b;
  }
  html.cc-auth-workspace .cc-shell-nav [data-cc-shell-custom-title]{
    overflow:hidden;
    font-family:var(--cc-font-ui);
    font-size:var(--cc-sidebar-group-size);
    font-weight:500;
    line-height:1.2;
    letter-spacing:.8px;
    text-overflow:ellipsis;
    white-space:nowrap;
  }
  html.cc-auth-workspace .cc-shell-nav :is([data-cc-shell-custom-collapse],[data-cc-shell-custom-add]){
    display:grid;
    place-items:center;
    width:25px;
    height:25px;
    padding:0;
    border:0;
    border-radius:5px;
    background:transparent;
    color:inherit;
    font-family:var(--cc-font-ui);
    cursor:pointer;
    opacity:.72;
  }
  html.cc-auth-workspace .cc-shell-nav [data-cc-shell-custom-collapse]{position:relative;width:22px;font-size:0}
  html.cc-auth-workspace .cc-shell-nav [data-cc-shell-custom-collapse]::before{
    content:"";
    width:6px;
    height:6px;
    border-right:1.5px solid currentColor;
    border-bottom:1.5px solid currentColor;
    transform:translateY(-2px) rotate(45deg);
    transition:transform .15s ease;
  }
  html.cc-auth-workspace .cc-shell-nav .cc-shell-group--folded>.cc-shell-custom-head [data-cc-shell-custom-collapse]::before{transform:translateX(-1px) rotate(-45deg)}
  html.cc-auth-workspace .cc-shell-nav [data-cc-shell-custom-add]{width:38px;color:#1769c2;font-size:11px;font-weight:600;line-height:1;opacity:1}
  html.cc-auth-workspace[data-theme="dark"] .cc-shell-nav [data-cc-shell-custom-add]{color:#75a7ff}
  html.cc-auth-workspace .cc-shell-nav :is([data-cc-shell-custom-collapse],[data-cc-shell-custom-add]):hover{
    background:var(--cc-accent-soft);
    color:var(--cc-accent-strong);
    opacity:1;
  }
  html.cc-auth-workspace .cc-shell-nav :is([data-cc-shell-custom-collapse],[data-cc-shell-custom-add]):focus-visible{
    outline:2px solid var(--cc-accent);
    outline-offset:-2px;
  }
  html.cc-auth-workspace .cc-shell-nav [data-cc-shell-custom-empty]{
    display:block;
    margin:0 16px 4px;
    color:var(--cc-faint);
    font-size:10.5px;
    line-height:1.45;
  }
  html.cc-auth-workspace .cc-shell-nav [data-cc-shell-custom-picker]{
    margin:2px 10px 6px;
  }
  html.cc-auth-workspace .cc-shell-nav [data-cc-shell-custom-picker][hidden]{display:none}
  html.cc-auth-workspace .cc-shell-nav [data-cc-shell-custom-picker] select{
    display:block;
    width:100%;
    min-height:32px;
    padding:5px 25px 5px 9px;
    border:1px solid var(--cc-line);
    border-radius:6px;
    background:var(--cc-surface);
    color:var(--cc-text);
    font:400 12px/1.35 var(--cc-font-ui);
  }
  html.cc-auth-workspace .cc-shell-nav .cc-shell-group--folded>[data-cc-shell-custom-empty],
  html.cc-auth-workspace .cc-shell-nav .cc-shell-group--folded>[data-cc-shell-custom-picker]{display:none!important}
  html.cc-auth-workspace[data-theme="dark"] .cc-shell-nav [data-cc-shell-group-label]{color:#93a0b4}
  html.cc-auth-workspace[data-theme="dark"] .cc-shell-nav .cc-shell-custom-head{color:#93a0b4}
  html.cc-auth-workspace .cc-shell-nav [data-cc-shell-link]{
    display:flex;
    align-items:center;
    justify-content:flex-start;
    gap:var(--cc-sidebar-link-gap);
    width:auto;
    min-width:0;
    min-height:var(--cc-sidebar-link-height);
    margin:1px 10px;
    padding:var(--cc-sidebar-link-pad-y) var(--cc-sidebar-link-pad-x);
    border-radius:var(--cc-sidebar-link-radius);
    color:var(--cc-muted);
    font-family:var(--cc-font-ui)!important;
    font-size:var(--cc-sidebar-link-size);
    font-weight:400;
    line-height:1.35;
    text-align:left;
  }
  html.cc-auth-workspace .cc-shell-nav [data-cc-shell-link]>span:first-child{
    display:grid;
    place-items:center;
    width:var(--cc-sidebar-icon-box);
    flex:0 0 var(--cc-sidebar-icon-box);
    font-size:var(--cc-sidebar-link-size);
    text-align:center;
  }
  html.cc-auth-workspace .cc-shell-link__icon svg{display:block;width:var(--cc-sidebar-icon-size);height:var(--cc-sidebar-icon-size)}
  html.cc-auth-workspace .cc-shell-nav [data-cc-shell-link][aria-current="page"]{
    background:#fff0ea;
    color:#d84c27;
    border-left-color:#e6532f;
    box-shadow:none;
    font-weight:600;
  }
  html.cc-auth-workspace[data-theme="dark"] .cc-shell-nav [data-cc-shell-link][aria-current="page"]{background:#322018;color:#f37a50;border-left-color:#f36a3d}
  html.cc-auth-workspace .cc-shell-nav [data-cc-shell-pinned]{
    background:var(--cc-rail);
  }
  html.cc-auth-workspace .cc-shell-nav [data-cc-shell-theme]{
    align-self:center;
    margin:.45rem 0 .6rem;
  }
  html.cc-auth-workspace .cc-workbench-layout{
    grid-template-columns:var(--cc-shell-width) minmax(0,1fr);
  }
  html.cc-auth-workspace .cc-workbench-main{
    padding-left:var(--cc-page-gutter);
    padding-right:var(--cc-page-gutter);
  }
  html.cc-auth-workspace body.cc-page-home .shell,
  html.cc-auth-workspace body.cc-page-robot .shell{
    grid-template-columns:var(--cc-shell-width) 15rem minmax(0,1fr);
  }
  html.cc-auth-workspace body.cc-page-home .shell:is(.simple-mode,.hide-market),
  html.cc-auth-workspace body.cc-page-robot .shell:is(.simple-mode,.hide-market){
    grid-template-columns:var(--cc-shell-width) 0 minmax(0,1fr);
  }
  html.cc-auth-workspace body.cc-page-information .shell{
    grid-template-columns:var(--cc-shell-width) minmax(0,1fr);
  }
  html.cc-auth-workspace body.cc-page-information .cc-shell-nav.rail{
    position:sticky;
    inset:auto;
    top:0;
    width:var(--cc-shell-width);
    min-width:var(--cc-shell-width);
    height:100vh;
    align-items:stretch;
    padding:0;
  }
  html.cc-auth-workspace body.cc-page-information .main{
    padding:1.7rem var(--cc-page-gutter) 3rem;
  }
  html.cc-auth-workspace body.cc-page-futures{
    padding-left:0;
  }
  html.cc-auth-workspace body:is(
    .cc-page-ai,.cc-page-alert-detail,.cc-page-alerts,.cc-page-paper,
    .cc-page-plates,.cc-page-providers,.cc-page-ranking,.cc-page-screener,
    .cc-page-research-lab
  ) > :is(.top,header,main){
    margin-left:var(--cc-shell-width);
  }
  html.cc-auth-workspace body:is(.cc-page-plates,.cc-page-ranking) > .top{
    width:calc(100% - var(--cc-shell-width));
  }
  html.cc-auth-workspace body:is(.cc-page-watchlist,.cc-page-backtest,.cc-page-quality){
    padding-left:var(--cc-shell-width);
  }
  html.cc-auth-workspace body:is(.cc-page-profile,.cc-page-membership,.cc-page-admin) .app{
    grid-template-columns:var(--cc-shell-width) minmax(0,1fr);
  }
}

/* Page-level light surfaces. The page class is added by shell.js, keeping
   generic names such as .item/.summary/.controls out of the global theme. */
:root[data-theme="light"] body.cc-design-system.cc-page-login :is(.shell,.visual,.login),
:root[data-theme="light"] body.cc-design-system.cc-page-register :is(.shell,.context,.register),
:root[data-theme="light"] body.cc-design-system.cc-page-logout .panel,
:root[data-theme="light"] body.cc-design-system.cc-page-plates :is(.top,main,.heading,.controls,.table-wrap,.flow-panel,.flow-restore,.flow-rank-detail,.flow-ranks,.flow-selection,.cons-box,.flow-rank-item),
:root[data-theme="light"] body.cc-design-system.cc-page-ranking :is(.top,main,.heading,.controls,.strategy-bar,.combo-bar,.table-wrap,.banner,.plate-pick,.sig-card),
:root[data-theme="light"] body.cc-design-system.cc-page-screener :is(header,main,.heading,.controls,.condition-builder,.natural,.results,.table-wrap,.progress,.stat,.pick,.screener,.tag),
:root[data-theme="light"] body.cc-design-system.cc-page-ai :is(.top,main,.heading,.controls,.composer,.result,.section,details.settings,.settings-body),
:root[data-theme="light"] body.cc-design-system.cc-page-alerts :is(.top,main,.heading,.controls,.period-board,.holding-alerts,.history,.history-shell,.signal-list,.detail-panel,.summary),
:root[data-theme="light"] body.cc-design-system.cc-page-watchlist :is(.topbar,.workspace,.panel,.watchlist-panel,.results,.table-wrap),
:root[data-theme="light"] body.cc-design-system.cc-page-futures :is(.topbar,.workspace,.left,.right,.toolbar,.safety-banner,.source-warning,.session-list,.audit,.summary),
:root[data-theme="light"] body.cc-design-system.cc-page-membership :is(.top,.content,.hero,.plans,.plan,.framework,.framework-item),
:root[data-theme="light"] body.cc-design-system.cc-page-paper :is(.top,main,.heading,.safety,.workspace,.ticket,.positions,.ledger,.section-head),
:root[data-theme="light"] body.cc-design-system.cc-page-providers :is(.top,main,.heading,.notice,.section,.chains,.cards,.matrix-wrap,.latest),
:root[data-theme="light"] body.cc-design-system.cc-page-backtest :is(#top,#content,.page-heading,.control-panel,.metrics-row,.metric,.comparison-wrap,.lower-grid,.trade-log,.chart-box:not(.cc-chart-surface)){
  background:var(--cc-surface)!important;color:var(--cc-text)!important;border-color:var(--cc-line)!important;
}
:root[data-theme="light"] body.cc-design-system.cc-page-login .visual,
:root[data-theme="light"] body.cc-design-system.cc-page-register .context{background:var(--cc-surface-raised)!important}
body.cc-design-system.cc-page-login .visual{color:#fff!important}
body.cc-design-system.cc-page-login .visual :is(h1,p,.brand,.brand small){color:#fff!important;text-shadow:0 1px 2px rgba(0,0,0,.72)}
:root[data-theme="light"] body.cc-design-system.cc-page-login .field>span,
:root[data-theme="light"] body.cc-design-system.cc-page-register .field>span{color:var(--cc-text)!important}
:root[data-theme="light"] body.cc-design-system.cc-page-login :is(.field input,.password-toggle),
:root[data-theme="light"] body.cc-design-system.cc-page-register :is(.control,.toggle){background:var(--cc-surface)!important;color:var(--cc-text)!important;border-color:var(--cc-line)!important}
:root[data-theme="light"] body.cc-design-system.cc-page-login .submit,
:root[data-theme="light"] body.cc-design-system.cc-page-register .submit,
:root[data-theme="light"] body.cc-design-system.cc-page-logout .primary{background:var(--cc-cta)!important;color:#fff!important}
:root[data-theme="light"] body.cc-design-system.cc-page-plates :is(.plate-table th,.flow-rank-table th,.cons-table th),
:root[data-theme="light"] body.cc-design-system.cc-page-ranking :is(.plate-table th,.rank-table th),
:root[data-theme="light"] body.cc-design-system.cc-page-paper .data-table th,
:root[data-theme="light"] body.cc-design-system.cc-page-providers .matrix th{background:var(--cc-surface-raised)!important;color:var(--cc-muted)!important;border-color:var(--cc-line)!important}
:root[data-theme="light"] body.cc-design-system.cc-page-plates :is(.plate-table tbody tr:hover,.flow-rank-table tr:hover,.cons-table tbody tr:hover),
:root[data-theme="light"] body.cc-design-system.cc-page-ranking .plate-table tbody tr:hover,
:root[data-theme="light"] body.cc-design-system.cc-page-paper .data-table tbody tr:hover{background:var(--cc-surface-raised)!important}
:root[data-theme="light"] body.cc-design-system.cc-page-membership .framework-item,
:root[data-theme="light"] body.cc-design-system.cc-page-providers :is(.chain,.card,.latest-item){background:var(--cc-surface-raised)!important;color:var(--cc-text)!important}
:root[data-theme="light"] body.cc-design-system.cc-page-futures :is(.summary-cell,.session,.audit-block),
:root[data-theme="light"] body.cc-design-system.cc-page-paper :is(.metric,.ticket-body,.preview),
:root[data-theme="light"] body.cc-design-system.cc-page-backtest :is(.metric,.strategy-bar,.control-row){background:var(--cc-surface-raised)!important}

/* A chart may remain dark only when its markup opts into this semantic class. */
:root[data-theme="light"] body.cc-design-system .cc-chart-surface{background:var(--cc-chart)!important;color:#eef2f7!important;border-color:#293244!important}
:root[data-theme="light"] body.cc-design-system .cc-chart-surface :is(.chart-head,.section-head,.indicator-toolbar,.legend){color:#eef2f7!important}

/* Robot and sector charts provide a complete light ECharts palette, so their
   surfaces should visually belong to the surrounding light workspace. */
:root[data-theme="light"] body.cc-design-system:is(.cc-page-home,.cc-page-robot,.cc-page-plates,.cc-page-backtest) .cc-chart-surface{
  background:var(--cc-chart-paper)!important;color:var(--cc-text)!important;border-color:var(--cc-line)!important;
}
:root[data-theme="light"] body.cc-design-system:is(.cc-page-home,.cc-page-robot,.cc-page-plates,.cc-page-backtest) .cc-chart-surface :is(.chart-head,.section-head,.indicator-toolbar,.legend){color:var(--cc-text)!important}

/* Header context is supporting copy, not a detached dark control. */
:root[data-theme="light"] body.cc-design-system:is(.cc-page-plates,.cc-page-ranking) .top-context{
  margin-left:0!important;padding:0!important;border:0!important;border-radius:0!important;
  background:transparent!important;color:var(--cc-faint)!important;
}

/* Light selection-control contract: legacy page buttons must not recreate
   dark islands inside the sector and ranking workspaces. */
:root[data-theme="light"] body.cc-design-system.cc-page-plates :is(.filter:not(.on),.flow-tab:not(.on),.scan-btn,.eye-btn,.flow-restore button),
:root[data-theme="light"] body.cc-design-system.cc-page-ranking :is(.filter:not(.on),.refresh){
  background:var(--cc-surface)!important;
  border:1px solid var(--cc-line)!important;
  color:var(--cc-text)!important;
}
:root[data-theme="light"] body.cc-design-system.cc-page-plates :is(.filter.on,.flow-tab.on),
:root[data-theme="light"] body.cc-design-system.cc-page-ranking .filter.on{
  background:var(--cc-accent-soft)!important;
  border:1px solid var(--cc-accent)!important;
  color:var(--cc-accent-strong)!important;
  font-weight:800;
}
:root[data-theme="light"] body.cc-design-system.cc-page-plates :is(.search-btn,.action.primary),
:root[data-theme="light"] body.cc-design-system.cc-page-ranking .action.primary{
  background:var(--cc-accent-soft)!important;
  border-color:var(--cc-accent)!important;
  color:var(--cc-accent-strong)!important;
  font-weight:800;
}
/* End light selection-control contract. */

@media(max-width:820px){
  .cc-shell-nav [data-cc-shell-group-label]{display:none}
  .cc-shell-nav :is(.cc-shell-custom-head,[data-cc-shell-custom-empty],[data-cc-shell-custom-picker]){display:none!important}
  /* 【回退标注】原值完全继承各页 --cc-nav-accent，导致价值投资页在手机
     变成蓝色选中态；移动侧栏现在与桌面统一为暖橙当前项。 */
  .cc-shell-nav [data-cc-shell-link][aria-current="page"]{background:#fff0ea;color:#d84c27;border-left-color:#e6532f;font-weight:650}
  html[data-theme="dark"] .cc-shell-nav [data-cc-shell-link][aria-current="page"]{background:#322018;color:#f37a50;border-left-color:#f36a3d}
  .cc-shell-nav.rail,.cc-shell-nav.plate-rail,.cc-shell-nav.pro-rail{min-width:3.5rem;width:3.5rem}
  .cc-shell-nav.brand-rail{min-width:3.5rem}
  body.cc-page-profile .cc-shell-nav.rail,body.cc-page-membership .cc-shell-nav.rail,body.cc-page-admin .cc-shell-nav.rail{position:relative;inset:auto;width:100%;min-width:0;height:56px;flex-direction:row;align-items:center;overflow-x:auto;overflow-y:hidden}
  body.cc-page-information .cc-shell-nav.rail{position:static;width:auto;min-width:0;flex-direction:row;overflow-x:auto;overflow-y:hidden}
  body.cc-page-profile .cc-shell-nav.rail [data-cc-shell-links],body.cc-page-membership .cc-shell-nav.rail [data-cc-shell-links],body.cc-page-admin .cc-shell-nav.rail [data-cc-shell-links],body.cc-page-information .cc-shell-nav.rail [data-cc-shell-links]{flex-direction:row;align-items:center;overflow-x:auto;overflow-y:hidden}
  body.cc-page-profile .cc-shell-nav.rail [data-cc-shell-pinned],body.cc-page-membership .cc-shell-nav.rail [data-cc-shell-pinned],body.cc-page-admin .cc-shell-nav.rail [data-cc-shell-pinned],body.cc-page-information .cc-shell-nav.rail [data-cc-shell-pinned]{flex-direction:row;align-items:center}
  body.cc-page-profile .cc-shell-nav.rail [data-cc-shell-group],body.cc-page-membership .cc-shell-nav.rail [data-cc-shell-group],body.cc-page-admin .cc-shell-nav.rail [data-cc-shell-group],body.cc-page-information .cc-shell-nav.rail [data-cc-shell-group]{display:flex;align-items:center;width:auto;padding:0;border:0}
  body.cc-page-profile .cc-shell-nav.rail [data-cc-shell-link],body.cc-page-membership .cc-shell-nav.rail [data-cc-shell-link],body.cc-page-admin .cc-shell-nav.rail [data-cc-shell-link],body.cc-page-information .cc-shell-nav.rail [data-cc-shell-link]{min-width:3.5rem}
}

@media(max-width:760px){
  .cc-shell-nav.rail,.cc-shell-nav.plate-rail,.cc-shell-nav.pro-rail{width:56px;min-width:56px}
  .cc-shell-nav.rail [data-cc-shell-links],.cc-shell-nav.plate-rail [data-cc-shell-links],.cc-shell-nav.pro-rail [data-cc-shell-links]{overflow-y:auto;overflow-x:hidden}
  .cc-shell-nav.rail [data-cc-shell-link] .cc-shell-link__label,
  .cc-shell-nav.plate-rail [data-cc-shell-link] .cc-shell-link__label,
  .cc-shell-nav.pro-rail [data-cc-shell-link] .cc-shell-link__label{font-size:9px;letter-spacing:-.02em;white-space:nowrap;overflow:hidden;max-width:100%}
  body:is(.cc-page-watchlist,.cc-page-backtest,.cc-page-quality) #top b{flex:0 0 auto;white-space:nowrap}
  body:is(.cc-page-watchlist,.cc-page-backtest,.cc-page-quality) #top small{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  body.cc-page-futures .cc-shell-nav.rail{inset:auto 0 0 0;width:auto;min-width:0;height:3.75rem;flex-direction:row;justify-content:flex-start;padding:.3rem .45rem;border-right:0;border-top:1px solid var(--line);overflow-x:auto}
  body.cc-page-futures .cc-shell-nav.rail [data-cc-shell-links]{flex-direction:row;overflow-x:auto;overflow-y:hidden}
  body.cc-page-futures .cc-shell-nav.rail [data-cc-shell-pinned]{flex-direction:row;align-items:center}
  body.cc-page-information .cc-shell-nav.rail{width:100%;height:auto}
}

/* Browser-QA hardening: every shared page uses border-box geometry, and the
   remaining legacy controls receive a page-scoped light surface. */
html,body.cc-design-system{margin:0}
body.cc-design-system,body.cc-design-system *{box-sizing:border-box}
.cc-desk-stock-row{width:100%;background:transparent;text-align:left;cursor:pointer;font:inherit}
.cc-desk-stock-row[aria-pressed="true"]{background:var(--cc-accent-soft);border-color:var(--cc-accent)}
.cc-workbench-layout>.cc-shell-nav{position:sticky;top:0;height:100vh;max-height:100vh;overflow:hidden}

:root[data-theme="light"] body.cc-design-system.cc-page-plates .plate-name,
:root[data-theme="light"] body.cc-design-system.cc-page-ranking .plate-name{color:var(--cc-text)!important}
:root[data-theme="light"] body.cc-design-system.cc-page-plates :is(.flow-tab:not(.on),.eye-btn,.flow-restore button),
:root[data-theme="light"] body.cc-design-system.cc-page-ranking :is(.combo-input,.combo-select,.plate-pick),
:root[data-theme="light"] body.cc-design-system.cc-page-screener :is(.controls select,.controls input,.condition-builder select,.condition-builder input,.natural textarea),
:root[data-theme="light"] body.cc-design-system.cc-page-ai :is(.composer textarea,.scan-select,.field,.relay-field input,.relay-field select),
:root[data-theme="light"] body.cc-design-system.cc-page-futures :is(.field select,.period:not(.active),.control:not(.active):not(.primary),.speed select,.session:not(.active)){
  background:var(--cc-surface)!important;color:var(--cc-text)!important;border-color:var(--cc-line)!important;
}
:root[data-theme="light"] body.cc-design-system.cc-page-screener :is(.tag,.natural-result .chip){background:var(--cc-surface-raised)!important;color:var(--cc-muted)!important}
:root[data-theme="light"] body.cc-design-system.cc-page-ai .primary{background:var(--cc-cta)!important;color:#fff!important;border-color:var(--cc-cta)!important}
:root[data-theme="light"] body.cc-design-system.cc-page-futures :is(.safety-banner,.source-warning){color:var(--cc-accent-strong)!important}
:root[data-theme="light"] body.cc-design-system.cc-page-futures .source-warning span{color:var(--cc-muted)!important}
@media(max-width:720px){
  .cc-workbench-layout>.cc-shell-nav{position:relative;top:auto;height:auto;max-height:none;overflow-x:auto;overflow-y:hidden}
}

/* Market desk. Density additions for /workbench: the desk went from empty-state
   placeholders to real breadth, flow and rotation panels, so it needs metric
   tiles, a strength bar list and chart frames.  Everything reuses the existing
   --cc-* tokens, including the A-share convention already encoded there
   (--cc-buy is red for up, --cc-sell green for down). */
.cc-desk-banner{display:flex;align-items:center;gap:.55rem;flex-wrap:wrap;margin:0 0 .85rem;padding:.6rem .75rem;border:1px solid var(--cc-line-soft);border-left:3px solid var(--cc-accent);border-radius:.55rem;background:var(--cc-surface);color:var(--cc-muted);font-size:.76rem}
.cc-desk-chip{display:inline-flex;align-items:center;gap:.3rem;padding:.16rem .5rem;border:1px solid var(--cc-line);border-radius:999px;background:var(--cc-surface-raised);color:var(--cc-text);font-size:.7rem;font-weight:700;white-space:nowrap}
.cc-desk-chip--open{border-color:var(--cc-buy);background:var(--cc-buy-soft);color:var(--cc-buy)}
.cc-desk-chip--closed{border-color:var(--cc-line);background:var(--cc-neutral-soft);color:var(--cc-muted)}
.cc-desk-chip--unknown{border-color:var(--cc-accent);background:var(--cc-accent-soft);color:var(--cc-accent-strong)}
.cc-metric-strip{display:grid;grid-template-columns:repeat(auto-fit,minmax(9.5rem,1fr));gap:.6rem;margin-bottom:.95rem}
.cc-metric{position:relative;overflow:hidden;padding:.7rem .8rem;border:1px solid var(--cc-line);border-radius:.65rem;background:linear-gradient(180deg,var(--cc-surface-raised),var(--cc-surface))}
.cc-metric__label{display:block;color:var(--cc-faint);font-size:.68rem;letter-spacing:.02em}
.cc-metric__value{display:block;margin-top:.28rem;font-size:1.15rem;font-weight:800;line-height:1.15;font-variant-numeric:tabular-nums}
.cc-metric__meta{display:block;margin-top:.2rem;color:var(--cc-muted);font-size:.66rem}
.cc-metric--up .cc-metric__value{color:var(--cc-buy)}
.cc-metric--down .cc-metric__value{color:var(--cc-sell)}
.cc-breadth-bar{display:flex;height:.3rem;margin-top:.4rem;border-radius:999px;overflow:hidden;background:var(--cc-neutral-soft)}
.cc-breadth-bar i{display:block;height:100%}
.cc-breadth-bar i:first-child{background:var(--cc-buy)}
.cc-breadth-bar i:last-child{background:var(--cc-sell)}
.cc-chart-frame{position:relative;width:100%;padding:.35rem .5rem .5rem}
.cc-chart-canvas{width:100%;height:14rem}
.cc-chart-canvas--tall{height:16.5rem}
.cc-strength-list{display:grid;gap:.3rem;padding:.45rem}
.cc-strength-row{display:grid;grid-template-columns:minmax(4.5rem,7rem) minmax(0,1fr) 4.2rem;align-items:center;gap:.5rem;padding:.3rem .45rem;border-radius:.4rem;font-size:.75rem}
.cc-strength-row:hover{background:var(--cc-surface-raised)}
.cc-strength-row__name{overflow:hidden;color:var(--cc-text);text-overflow:ellipsis;white-space:nowrap}
.cc-strength-row__track{position:relative;height:.5rem;border-radius:999px;background:var(--cc-neutral-soft)}
.cc-strength-row__fill{position:absolute;top:0;height:100%;border-radius:999px}
.cc-strength-row__value{color:var(--cc-text);font-variant-numeric:tabular-nums;font-weight:700;text-align:right}
.cc-strength-row--up .cc-strength-row__fill{background:var(--cc-buy)}
.cc-strength-row--up .cc-strength-row__value{color:var(--cc-buy)}
.cc-strength-row--down .cc-strength-row__fill{background:var(--cc-sell)}
.cc-strength-row--down .cc-strength-row__value{color:var(--cc-sell)}
.cc-panel__stamp{display:inline-block;margin-left:.4rem;padding:.08rem .38rem;border:1px solid var(--cc-line-soft);border-radius:.3rem;color:var(--cc-faint);font-size:.64rem;font-weight:600;font-variant-numeric:tabular-nums}
.cc-panel__stamp--stale{border-color:var(--cc-accent);color:var(--cc-accent-strong)}
@media(max-width:720px){.cc-chart-canvas{height:12rem}.cc-chart-canvas--tall{height:13.5rem}}

/* Market mood strip. */
.cc-mood{display:grid;grid-template-columns:minmax(9.5rem,11rem) 1fr;gap:1.1rem;align-items:center;margin-bottom:1rem;padding:1rem 1.15rem;border:1px solid var(--cc-line-soft);border-radius:.85rem;background:var(--cc-surface);box-shadow:0 1px 2px rgba(15,23,42,.04)}
.cc-mood__gauge{display:flex;flex-direction:column;align-items:center;gap:.45rem}
.cc-mood__dial{--cc-mood-pct:50;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;width:7.4rem;height:7.4rem;border-radius:50%;background:conic-gradient(var(--cc-mood-tint,var(--cc-faint)) calc(var(--cc-mood-pct)*1%),var(--cc-line-soft) 0)}
.cc-mood__dial::after{content:"";position:absolute;inset:.62rem;border-radius:50%;background:var(--cc-surface)}
.cc-mood__dial--warm{--cc-mood-tint:var(--cc-buy)}
.cc-mood__dial--cool{--cc-mood-tint:var(--cc-sell)}
.cc-mood__dial--even{--cc-mood-tint:var(--cc-accent,var(--cc-faint))}
.cc-mood__value{position:relative;z-index:1;color:var(--cc-text);font-size:1.85rem;font-weight:700;font-variant-numeric:tabular-nums;line-height:1}
.cc-mood__label{position:relative;z-index:1;margin-top:.15rem;color:var(--cc-muted);font-size:.72rem;font-weight:600}
.cc-mood__basis{margin:0;max-width:12rem;color:var(--cc-faint);font-size:.62rem;line-height:1.45;text-align:center}
.cc-mood__facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(9rem,1fr));gap:.7rem}
.cc-mood__fact{display:flex;flex-direction:column;gap:.12rem;padding:.6rem .7rem;border:1px solid var(--cc-line-soft);border-radius:.6rem;background:var(--cc-surface-raised)}
.cc-mood__fact span{color:var(--cc-faint);font-size:.64rem;font-weight:600}
.cc-mood__fact strong{color:var(--cc-text);font-size:1.05rem;font-weight:700;font-variant-numeric:tabular-nums}
.cc-mood__fact small{color:var(--cc-faint);font-size:.6rem;line-height:1.4}
.cc-mood__fact--up strong{color:var(--cc-buy)}
.cc-mood__fact--down strong{color:var(--cc-sell)}
.cc-mood__caveat{grid-column:1/-1;margin:0;color:var(--cc-faint);font-size:.62rem;line-height:1.5}
@media(max-width:720px){.cc-mood{grid-template-columns:1fr}}

/* Phase bar. */
.cc-phasebar{display:grid;grid-template-columns:repeat(auto-fit,minmax(8rem,1fr));gap:.5rem;margin-bottom:.6rem}
.cc-phasebar button{display:flex;flex-direction:column;gap:.15rem;padding:.6rem .75rem;border:1px solid var(--cc-line-soft);border-radius:.65rem;background:var(--cc-surface);color:var(--cc-muted);text-align:left;cursor:pointer;transition:border-color .15s,background .15s,color .15s}
.cc-phasebar button b{color:var(--cc-text);font-size:.9rem;font-weight:700}
.cc-phasebar button small{color:var(--cc-faint);font-size:.6rem;line-height:1.35}
.cc-phasebar button:hover{border-color:var(--cc-line)}
.cc-phasebar button[aria-pressed="true"]{border-color:var(--cc-accent,var(--cc-text));background:var(--cc-accent-soft);box-shadow:inset 0 0 0 1px var(--cc-accent,var(--cc-text))}
.cc-phasebar button[aria-pressed="true"] b{color:var(--cc-accent-strong,var(--cc-text))}
.cc-phasebar__help{margin:0 0 1rem;color:var(--cc-muted);font-size:.7rem;line-height:1.5}

/* Named data gap: says what is missing instead of drawing an empty chart. */
.cc-gap{display:flex;flex-direction:column;gap:.35rem;padding:.9rem;border:1px dashed var(--cc-line);border-radius:.6rem;background:var(--cc-surface-raised)}
.cc-gap strong{color:var(--cc-text);font-size:.82rem;font-weight:700}
.cc-gap p{margin:0;color:var(--cc-muted);font-size:.68rem;line-height:1.55}
.cc-gap__need{color:var(--cc-faint) !important;font-size:.62rem !important}
.cc-gap--inline{margin-bottom:.6rem;padding:.5rem .65rem;border-color:var(--cc-accent);background:var(--cc-accent-soft)}
.cc-gap--inline p{color:var(--cc-accent-strong);font-size:.66rem}
@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url('/static/fonts/inter-latin.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
.cc-shell-link__icon svg{display:block;width:1.15rem;height:1.15rem;flex-shrink:0}
@font-face{font-family:"JetBrains Mono";font-style:normal;font-weight:100 800;font-display:swap;src:url('/static/fonts/jetbrains-mono-latin.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}


/* ── 共享侧栏：大分组折叠（点分组标签收起/展开组内导航项） ─────────
   2026-09-12 站长要求与工作台面板折叠同款交互；状态存 localStorage
   （shell.js 的 cc-shell-group-fold）。仅展开态（有分组标签）可点。
   2026-09-13 站长发参考站截图定稿：折叠标注用细线 chevron（CSS border 画，
   非字符）——展开态 ⌄ 向下、折叠态 › 向右，随文字颜色、hover 加深。
   【回退标注】历史值：① 最初三角字符版 content:"▾"/"▸"；
   ② 破折号字符版 content:"—"/"+"。想回任一版，把 :after 整条换成
   content 对应字符即可（其余属性可删）。 */
[data-cc-shell-group-label]{cursor:pointer;position:relative;padding-right:1.6rem;font-family:inherit}
[data-cc-shell-group-label]:after{content:"";position:absolute;right:16px;top:50%;
  width:.42rem;height:.42rem;border-right:1.5px solid currentColor;
  border-bottom:1.5px solid currentColor;opacity:.4;
  transform:translateY(-65%) rotate(45deg);transition:transform .15s ease,opacity .15s ease}
@media(min-width:821px){.cc-shell-group--folded>[data-cc-shell-link]{display:none!important}}
.cc-shell-group--folded [data-cc-shell-group-label]{opacity:.8}
.cc-shell-group--folded [data-cc-shell-group-label]:after{
  transform:translateY(-50%) rotate(-45deg);opacity:.55}
[data-cc-shell-group-label]:hover{opacity:1}
[data-cc-shell-group-label]:hover:after{opacity:.85}
[data-cc-shell-group-label]:focus-visible{outline:2px solid var(--cc-accent);outline-offset:-2px}

/* Product membership is off until the server explicitly enables it. Also
   covers legacy cached shell scripts and independent local preview pages. */
html:not([data-cc-membership="on"]) [data-cc-membership],
html:not([data-cc-membership="on"]) a[href="/membership"],
html:not([data-cc-membership="on"]) a[href^="/membership?"],
html:not([data-cc-membership="on"]) a[href="/membership/"],
html:not([data-cc-membership="on"]) a[href="#membership"],
html:not([data-cc-membership="on"]) #membership.settings-section,
html:not([data-cc-membership="on"]) .us-nav-folder:has(a[href="/us/tools/membershiplevels"]),
html:not([data-cc-membership="on"]) a[href="/us/tools/membershiplevels"],
html:not([data-cc-membership="on"]) a[href="/us/tools/membership-plans-pro"],
html:not([data-cc-membership="on"]) a[href="/us/tools/subscription-success"],
html:not([data-cc-membership="on"]) a[href="/us/tools/sanhubaotips"]{display:none!important}
