/* TianjiLens design system v1 — tokens are also inlined by html.py for the local server. */
:root {
  color-scheme: light;
  --tj-brand:#315cf6; --tj-brand-strong:#2448d8; --tj-accent:#16b8a6;
  --tj-bg:#f6f8fc; --tj-surface:#fff; --tj-surface-2:#f8faff;
  --tj-ink:#101828; --tj-text:#344054; --tj-muted:#667085; --tj-faint:#98a2b3;
  --tj-line:#e4e7ec; --tj-line-soft:#eef1f5;
  --tj-up:#e04444; --tj-down:#159570; --tj-warning:#dc6803; --tj-danger:#d92d20;
  --tj-radius:14px; --tj-shadow:0 8px 24px rgba(16,24,40,.06);
}
[data-theme=dark] {
  color-scheme: dark;
  /* TradingView / Revolut style neutral charcoal surfaces. Keep the brand
     blue for interaction only; the shell itself should not read as a
     blue-purple gradient. */
  --tj-brand:#6f98ff; --tj-brand-strong:#8eacff; --tj-accent:#45d1bd;
  --tj-bg:#101216; --tj-surface:#17191e; --tj-surface-2:#1e2229;
  --tj-ink:#f4f5f7; --tj-text:#d3d7df; --tj-muted:#9aa1ad; --tj-faint:#707783;
  --tj-line:#30353d; --tj-line-soft:#252a31;
  --tj-up:#ff7777; --tj-down:#46d6a7; --tj-warning:#ffb547; --tj-danger:#ff8178;
  --tj-shadow:0 10px 30px rgba(0,0,0,.24);
}
html{background:var(--tj-bg)} body{background:var(--tj-bg);color:var(--tj-text);font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Noto Sans SC","Microsoft YaHei",sans-serif;overflow-x:hidden}
*,*:before,*:after{box-sizing:border-box}.tj-side-link:focus-visible,.tj-nav-toggle:focus-visible,.tj-theme-toggle:focus-visible,.tj-user-menu summary:focus-visible,.tj-logout button:focus-visible,.tj-table-control:focus-visible,.tj-data-table th[data-sort]:focus-visible{outline:3px solid color-mix(in srgb,var(--tj-brand) 38%,transparent);outline-offset:2px}.num,[data-number]{font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}
.tj-shell{min-height:100vh;max-width:100%;overflow-x:hidden}.tj-skip{position:absolute;left:-9999px}.tj-skip:focus{left:12px;top:12px;z-index:1000;background:var(--tj-surface);padding:8px 12px;border-radius:8px}
.tb{height:64px;background:color-mix(in srgb,var(--tj-surface) 92%,transparent);border-bottom:1px solid var(--tj-line);backdrop-filter:blur(18px);padding:0 24px;gap:8px;box-shadow:0 1px 0 rgba(16,24,40,.02);overflow:hidden}
.tb .brand{display:inline-flex;align-items:center;color:var(--tj-ink);font-size:16px;letter-spacing:.02em;margin-right:18px;min-width:0}.tb .brand i{display:none}.tj-brand-lockup{display:inline-flex;align-items:center;width:140px;height:46px;flex:0 0 140px;overflow:hidden}.tj-brand-lockup img{display:block;width:140px;height:46px;object-fit:contain}.tj-brand-lockup .tj-brand-dark,.tj-brand-lockup .tj-brand-mark{display:none}.tj-logo-mark{width:30px;height:30px;flex:0 0 auto}[data-theme=dark] .tj-brand-lockup .tj-brand-light{display:none}[data-theme=dark] .tj-brand-lockup .tj-brand-dark{display:block}[data-theme=dark] .tj-brand-lockup .tj-brand-mark-dark{display:none}.tb a.ni{color:var(--tj-muted);padding:9px 11px;border-radius:9px}.tb a.ni:hover{background:var(--tj-surface-2);color:var(--tj-ink)}.tb a.ni.on{color:var(--tj-brand);background:color-mix(in srgb,var(--tj-brand) 10%,transparent);font-weight:700}
.tb-legacy-links,.tb-legacy-admin{display:none!important}.tj-auth-login{display:inline-flex;align-items:center;min-height:34px;padding:0 11px;border:1px solid var(--tj-line);border-radius:9px;color:var(--tj-text);background:var(--tj-surface);font-size:12px;text-decoration:none}.tj-auth-login:hover{border-color:var(--tj-brand);color:var(--tj-brand)}.tj-user-menu{position:relative;margin-left:4px;color:var(--tj-text);font-size:12px}.tj-user-menu summary{list-style:none;display:inline-flex;align-items:center;min-height:34px;padding:0 10px;border:1px solid var(--tj-line);border-radius:9px;background:var(--tj-surface);cursor:pointer}.tj-user-menu summary::-webkit-details-marker{display:none}.tj-user-menu summary:after{content:"⌄";margin-left:6px;color:var(--tj-muted)}.tj-user-menu[open] summary{border-color:var(--tj-brand);color:var(--tj-brand)}.tj-user-popover{position:absolute;right:0;top:42px;z-index:70;display:grid;gap:2px;min-width:128px;padding:6px;background:var(--tj-surface);border:1px solid var(--tj-line);border-radius:10px;box-shadow:var(--tj-shadow)}.tj-user-popover a{padding:8px 10px;color:var(--tj-text);text-decoration:none;border-radius:7px;white-space:nowrap}.tj-user-popover a:hover{background:var(--tj-surface-2);color:var(--tj-brand)}.tj-logout{margin:0 0 0 2px}.tj-logout button{border:1px solid var(--tj-line);background:var(--tj-surface);color:var(--tj-muted);border-radius:9px;min-height:34px;padding:0 10px;cursor:pointer;font:inherit;font-size:12px}.tj-logout button:hover{border-color:var(--tj-brand);color:var(--tj-brand)}
.tj-search{display:flex;align-items:center;gap:7px;height:36px;max-width:220px;margin-left:auto;border:1px solid var(--tj-line);background:var(--tj-surface-2);border-radius:9px;padding:0 10px;color:var(--tj-muted)}.tj-search input{border:0;outline:0;background:transparent;color:var(--tj-ink);width:150px;font-size:13px}.tj-search kbd{font-size:10px;color:var(--tj-faint);border:1px solid var(--tj-line);border-radius:4px;padding:2px 4px}.tj-fresh{font-size:11px;color:var(--tj-down);white-space:nowrap;display:inline-flex;align-items:center;gap:5px}.tj-fresh:before{content:"";width:6px;height:6px;background:currentColor;border-radius:50%;box-shadow:0 0 0 3px color-mix(in srgb,currentColor 14%,transparent)}.tj-fresh.stale{color:var(--tj-warning)}.tj-fresh.failed{color:var(--tj-danger)}
.tj-theme-toggle{border:1px solid var(--tj-line);color:var(--tj-muted);background:var(--tj-surface);border-radius:9px;width:34px;height:34px;cursor:pointer}.tj-theme-toggle:hover{color:var(--tj-brand);border-color:var(--tj-brand)}.tj-theme-toggle:focus-visible,.tj-nav-toggle:focus-visible,.tj-table-control:focus-visible,.tj-search:focus-within{outline:3px solid color-mix(in srgb,var(--tj-brand) 32%,transparent);outline-offset:2px}
.wrap{max-width:1480px;margin:0 auto;padding:32px 32px 56px}.ph,.hd{margin-bottom:24px}.ph h1,.hd h1{font-size:24px;letter-spacing:-.02em;color:var(--tj-ink)}.ph .sub,.hd .why{color:var(--tj-muted);font-size:13px}.card{background:var(--tj-surface);border:1px solid var(--tj-line);border-radius:var(--tj-radius);box-shadow:var(--tj-shadow)}.card-header{border-bottom:1px solid var(--tj-line-soft);padding:16px 20px}.card-body{padding:20px}.card-title{color:var(--tj-ink);font-weight:700}.kpi .lbl,.stat .lbl{color:var(--tj-muted)}.kpi .val{color:var(--tj-ink);letter-spacing:-.03em}.kpi .foot{color:var(--tj-faint)}
.up{color:var(--tj-up)!important}.down{color:var(--tj-down)!important}.muted{color:var(--tj-muted)!important}.empty{padding:52px 20px;color:var(--tj-muted)}.empty:before{content:"◌";display:block;font-size:28px;line-height:1;color:var(--tj-brand);margin-bottom:10px}.tbl th{background:var(--tj-surface-2);color:var(--tj-muted);border-color:var(--tj-line-soft)}.tbl td{border-color:var(--tj-line-soft);color:var(--tj-text)}.tbl tr.rowlink:hover td{background:color-mix(in srgb,var(--tj-brand) 5%,var(--tj-surface))}
.tj-page-header{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:24px}.tj-page-header h1{margin:0;color:var(--tj-ink);font-size:26px;letter-spacing:-.025em}.tj-page-header p{margin:7px 0 0;color:var(--tj-muted);font-size:14px}.tj-breadcrumbs{display:flex;gap:8px;align-items:center;color:var(--tj-muted);font-size:12px;margin-bottom:8px}.tj-breadcrumbs a{color:inherit}.tj-actions{display:flex;gap:8px;flex-wrap:wrap}.tj-btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;border:1px solid var(--tj-line);border-radius:9px;padding:9px 13px;background:var(--tj-surface);color:var(--tj-text);font-size:13px;text-decoration:none;cursor:pointer}.tj-btn.primary{background:var(--tj-brand);border-color:var(--tj-brand);color:#fff}.tj-btn:hover{border-color:var(--tj-brand);color:var(--tj-brand)}.tj-btn.primary:hover{background:var(--tj-brand-strong);color:#fff}
.tj-status{display:inline-flex;align-items:center;gap:5px;border-radius:999px;padding:4px 9px;font-size:11px;font-weight:600;background:var(--tj-surface-2);color:var(--tj-muted)}.tj-status.success{background:color-mix(in srgb,var(--tj-down) 12%,transparent);color:var(--tj-down)}.tj-status.warning{background:color-mix(in srgb,var(--tj-warning) 14%,transparent);color:var(--tj-warning)}.tj-status.danger{background:color-mix(in srgb,var(--tj-danger) 12%,transparent);color:var(--tj-danger)}.tj-status.info{background:color-mix(in srgb,var(--tj-brand) 12%,transparent);color:var(--tj-brand)}
.tj-brief-card .tj-brief-body{position:relative;max-height:118px;overflow:hidden;transition:max-height .22s ease}.tj-brief-card .tj-brief-body:after{content:"";position:absolute;left:0;right:0;bottom:0;height:46px;background:linear-gradient(transparent,var(--tj-surface));pointer-events:none}.tj-brief-card.tj-brief-open .tj-brief-body{max-height:2400px}.tj-brief-card.tj-brief-open .tj-brief-body:after{display:none}.tj-brief-toggle{margin-left:auto;flex:0 0 auto}.tj-chart{position:relative;min-height:280px;border:1px solid var(--tj-line);border-radius:var(--tj-radius);background:var(--tj-surface);overflow:hidden}.tj-chart-head{display:flex;justify-content:space-between;align-items:center;padding:14px 16px;border-bottom:1px solid var(--tj-line-soft)}.tj-chart-title{font-size:14px;font-weight:700;color:var(--tj-ink)}.tj-chart-fresh{font-size:11px;color:var(--tj-muted)}.tj-chart-body{min-height:220px}.tj-chart-empty{display:grid;place-items:center;min-height:220px;color:var(--tj-muted);font-size:13px}.tj-table-wrap{overflow:hidden}.tj-table-tools{display:flex;align-items:center;gap:8px;min-height:56px;padding:10px 14px;border-bottom:1px solid var(--tj-line-soft)}.tj-table-search{display:block;min-width:180px;max-width:280px;flex:1}.tj-table-search input{width:100%;height:34px;border:1px solid var(--tj-line);border-radius:8px;background:var(--tj-surface-2);color:var(--tj-ink);padding:0 10px}.tj-table-search input:focus{outline:0;border-color:var(--tj-brand);box-shadow:0 0 0 3px color-mix(in srgb,var(--tj-brand) 14%,transparent)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.tj-column-menu{position:relative}.tj-column-menu summary{list-style:none}.tj-column-menu summary::-webkit-details-marker{display:none}.tj-table-control{display:inline-flex;align-items:center;justify-content:center;min-height:32px;border:1px solid var(--tj-line);border-radius:8px;padding:0 10px;background:var(--tj-surface);color:var(--tj-text);font-size:12px;cursor:pointer}.tj-table-control:hover{border-color:var(--tj-brand);color:var(--tj-brand)}.tj-column-options{position:absolute;right:0;top:38px;z-index:20;display:grid;gap:7px;min-width:150px;padding:10px;background:var(--tj-surface);border:1px solid var(--tj-line);border-radius:10px;box-shadow:var(--tj-shadow)}.tj-column-options label{display:flex;gap:7px;align-items:center;color:var(--tj-text);font-size:12px;white-space:nowrap}.tj-table-count{margin-left:auto;font-size:12px}.tj-table-wrap .table-responsive{overflow:auto;max-width:100%}.tj-data-table thead th{position:sticky;top:0;z-index:2;background:var(--tj-surface-2)}.tj-data-table td.tj-cell-number{text-align:right;font-variant-numeric:tabular-nums}.tj-data-table th[data-sort]{cursor:pointer;user-select:none}.tj-sort-indicator{display:inline-block;margin-left:5px;color:var(--tj-faint);font-size:11px}.tj-table-footer{display:flex;align-items:center;justify-content:center;gap:12px;padding:10px 14px;border-top:1px solid var(--tj-line-soft)}.tj-table-footer:empty{display:none}.tj-table-footer .tj-table-control:disabled{opacity:.45;cursor:default}
.tj-login-brand{background:linear-gradient(145deg,#0d1630 0%,#162957 50%,#315cf6 100%);color:#fff}.tj-grid-bg{background-image:linear-gradient(rgba(255,255,255,.075) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.075) 1px,transparent 1px);background-size:32px 32px}.tj-field:focus-within{border-color:var(--tj-brand);box-shadow:0 0 0 3px color-mix(in srgb,var(--tj-brand) 16%,transparent)}
@media(max-width:1100px){.tb .ni:nth-of-type(n+5){display:none}.tj-search{max-width:170px}.tj-search input{width:105px}}
@media(max-width:1600px){.tb .ro{display:none}}
@media(max-width:760px){.tb{height:auto;min-height:56px;width:100%;max-width:100vw;padding:8px 12px;overflow:visible;display:flex;flex-wrap:wrap;align-content:center;row-gap:6px}.tb .brand{margin-right:4px}.tj-brand-lockup{width:32px;height:32px;flex-basis:32px}.tj-brand-lockup img{width:30px;height:30px}.tj-brand-lockup .tj-brand-light,.tj-brand-lockup .tj-brand-dark{display:none!important}.tj-brand-lockup .tj-brand-mark{display:block!important}.tj-brand-lockup .tj-brand-mark-dark{display:none!important}[data-theme=dark] .tj-brand-lockup .tj-brand-mark-light{display:none!important}[data-theme=dark] .tj-brand-lockup .tj-brand-mark-dark{display:block!important}.tb .brand > .sr-only{display:none}.tb>.ni,.tb>.dd{display:none}.tb>.auth-link{display:inline-flex}.tb>form:not(.tj-search){display:none}.tb>form.tj-logout:not(.tj-search){display:flex;order:3;margin-left:0}.tb>form.tj-logout:not(.tj-search) button{min-height:32px;padding:0 8px}.tj-search{order:10;flex:1 1 100%;width:100%;min-width:0;max-width:none;margin:0}.tj-search input{width:auto;min-width:0;flex:1}.tj-search kbd{display:none}.tj-fresh{display:none}.tb .ro{display:none}.wrap{padding:20px 14px 40px}.tj-page-header{display:block}.tj-actions{margin-top:14px}.tj-page-header h1{font-size:21px}.tj-chart{min-height:240px}}@media(max-width:640px){.tj-table-tools{min-height:50px;padding:8px 10px}.tj-table-search{min-width:120px}.tj-table-wrap.tj-mobile-cards .table-responsive{overflow:visible}.tj-mobile-cards table,.tj-mobile-cards thead,.tj-mobile-cards tbody,.tj-mobile-cards tr,.tj-mobile-cards td{display:block}.tj-mobile-cards thead{position:absolute;overflow:hidden;width:1px;height:1px;clip:rect(0 0 0 0)}.tj-mobile-cards tr{padding:12px;border-bottom:1px solid var(--tj-line-soft)}.tj-mobile-cards td{display:flex;justify-content:space-between;gap:12px;border:0!important;padding:4px 0;white-space:normal;text-align:right}.tj-mobile-cards td:before{content:attr(data-label);color:var(--tj-muted);text-align:left;font-size:12px}.tj-mobile-cards td:first-child{font-weight:600;color:var(--tj-ink)}}

/* E2 professional shell: grouped, collapsible navigation. */
.tj-nav-toggle{display:inline-flex;align-items:center;justify-content:center;flex:0 0 34px;width:34px;height:34px;border:1px solid var(--tj-line);border-radius:9px;background:var(--tj-surface);color:var(--tj-muted);cursor:pointer;font-size:16px;line-height:1}
.tj-nav-toggle:hover{border-color:var(--tj-brand);color:var(--tj-brand)}
.tj-body-layout{display:flex;align-items:stretch;min-height:calc(100vh - 64px)}
.tj-sidebar{width:232px;flex:0 0 232px;display:flex;flex-direction:column;gap:20px;padding:22px 12px 18px;background:var(--tj-surface);border-right:1px solid var(--tj-line);transition:width .18s ease,flex-basis .18s ease,padding .18s ease;overflow:hidden}
.tj-side-group h2{margin:0 10px 8px;color:var(--tj-faint);font-size:10px;font-weight:700;letter-spacing:.12em;text-transform:uppercase}
.tj-side-link{display:flex;align-items:center;gap:11px;min-height:38px;padding:0 11px;border-radius:9px;color:var(--tj-muted);font-size:13px;text-decoration:none;white-space:nowrap}
.tj-side-link:hover{background:var(--tj-surface-2);color:var(--tj-ink)}
.tj-side-link.is-active{background:color-mix(in srgb,var(--tj-brand) 11%,transparent);color:var(--tj-brand);font-weight:700}
.tj-side-icon{display:inline-flex;align-items:center;justify-content:center;width:18px;color:currentColor;font-size:15px;flex:0 0 18px}.tj-side-text{overflow:hidden;text-overflow:ellipsis}
.tj-side-foot{margin-top:auto;padding:12px 10px;border-top:1px solid var(--tj-line-soft);color:var(--tj-muted);font-size:11px;line-height:1.7;white-space:nowrap}.tj-side-foot span{color:var(--tj-faint)}
.tj-main{min-width:0;flex:1}.tj-main>main{min-width:0}.tj-main>.subnav{display:none}
[data-nav-collapsed="true"] .tj-sidebar{width:72px;flex-basis:72px;padding-left:10px;padding-right:10px}
[data-nav-collapsed="true"] .tj-side-group h2,[data-nav-collapsed="true"] .tj-side-text,[data-nav-collapsed="true"] .tj-side-foot{display:none}
[data-nav-collapsed="true"] .tj-side-link{justify-content:center;padding-left:0;padding-right:0}.tj-sidebar .tj-side-link[title]{position:relative}
@media(max-width:1100px){.tj-sidebar{width:204px;flex-basis:204px}.tj-side-link{font-size:12px}.tj-search{margin-left:auto}}
.tj-nav-backdrop{display:none}
@media(max-width:760px){body.tj-nav-open{overflow:hidden}}
@media(max-width:760px){.tj-nav-toggle{order:-1;margin-right:2px}.tj-body-layout{display:block;min-height:0}.tj-sidebar{display:none}.tj-sidebar.is-open{display:flex;position:fixed;z-index:80;left:0;top:var(--tj-mobile-top,104px);bottom:0;width:min(84vw,280px);height:calc(100vh - var(--tj-mobile-top,104px));box-shadow:12px 0 30px rgba(16,24,40,.16)}.tj-main{width:100%}.tj-nav-backdrop.is-visible{display:block;position:fixed;z-index:79;left:0;right:0;top:var(--tj-mobile-top,104px);bottom:0;width:100%;border:0;background:rgba(16,24,40,.34);cursor:pointer}
[data-nav-collapsed="true"] .tj-sidebar{width:min(84vw,280px);flex-basis:auto;padding:22px 12px 18px}[data-nav-collapsed="true"] .tj-sidebar.is-open .tj-side-group h2,[data-nav-collapsed="true"] .tj-sidebar.is-open .tj-side-text,[data-nav-collapsed="true"] .tj-sidebar.is-open .tj-side-foot{display:block}[data-nav-collapsed="true"] .tj-sidebar.is-open .tj-side-link{justify-content:flex-start;padding-left:11px;padding-right:11px}.tj-nav-toggle[aria-expanded="false"]{color:var(--tj-muted)}
}

/* 首页首屏层级：结论、账户和日历先到，完整简报按需展开到下方。 */
.tj-home{display:flex;flex-direction:column;gap:0}
.tj-home>.ph{order:0}
.tj-home>#prov-alert,.tj-home>.alert{order:1}
.tj-home .tj-home-summary{order:1}
.tj-home .tj-home-alert,.tj-home>#today-actions{order:2}
.tj-home>.tj-home-decision-grid{order:3}
.tj-home>.tj-home-action-grid{order:4}
.tj-home>#account{order:4}
.tj-home>#calendar{order:5}
.tj-home>#list{order:6}
.tj-home>.g:has(#list){order:6}
.tj-home>#brief-fulltext{order:7}
.tj-home>.research{order:8}
.tj-home .tj-home-summary{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin:0 0 14px;padding:10px;border:1px solid var(--tj-line);border-radius:var(--tj-radius);background:var(--tj-surface);box-shadow:var(--tj-shadow)}
.tj-home .tj-summary-item{padding:12px 14px;border:1px solid var(--tj-line-soft);border-radius:10px;background:var(--tj-surface-2)}
.tj-home .tj-summary-item .tj-summary-label{display:block;font-size:12px;color:var(--tj-muted);margin-bottom:5px}
.tj-home .tj-summary-item strong{display:block;font-size:25px;line-height:1.1;color:var(--tj-ink);font-variant-numeric:tabular-nums}
.tj-home .tj-summary-item[data-tone="sell"] strong{color:var(--tj-up)}
.tj-home .tj-summary-item[data-tone="hold"] strong{color:var(--tj-brand)}
.tj-home .tj-brief-card .card-header{align-items:center}
.tj-home .tj-brief-card .card-title:before{content:"今日结论";display:inline-flex;align-items:center;margin-right:8px;padding:3px 7px;border-radius:999px;background:color-mix(in srgb,var(--tj-brand) 12%,transparent);color:var(--tj-brand);font-size:10px;letter-spacing:.04em;vertical-align:2px}
.tj-home .tj-brief-card .tj-brief-body{max-height:118px}
.tj-home .tj-home-alert{order:1;display:flex;align-items:center;gap:8px;margin:0 0 14px;padding:10px 14px;border:1px solid var(--tj-warning-line);border-radius:10px;background:var(--tj-warning-bg);color:var(--tj-warning-text);font-size:13px}
.tj-home .tj-home-alert:before{content:"!";display:inline-grid;place-items:center;width:20px;height:20px;border-radius:50%;background:var(--tj-warning);color:#fff;font-weight:800;font-size:12px}
@media(max-width:640px){.tj-home .tj-home-summary{gap:8px}.tj-home .tj-summary-item{padding:10px}.tj-home .tj-summary-item strong{font-size:21px}}

/* 黄色的“只跟踪/免责声明/待核”提示在两套主题都保持可读。 */
:root{--tj-warning-bg:#fff4d6;--tj-warning-line:#e5a11b;--tj-warning-text:#684400}
[data-theme=dark]{--tj-warning-bg:#4a2f0c;--tj-warning-line:#b87816;--tj-warning-text:#ffe7ad}
.note,.legacy .note,.alert-warning,.tj-disclaimer{background:var(--tj-warning-bg)!important;border-color:var(--tj-warning-line)!important;color:var(--tj-warning-text)!important}
.note b,.legacy .note b,.alert-warning b,.tj-disclaimer b{color:inherit}

/* 旧看板组件仍带有亮色默认值；暗色主题统一回收到设计令牌，避免
   日历卡和分组表头在深色页面上出现突兀的白色块。 */
[data-theme=dark] .cal .day{background:var(--tj-surface-2);border-color:var(--tj-line)}
[data-theme=dark] .cal .day.today{background:color-mix(in srgb,var(--tj-danger) 12%,var(--tj-surface-2));border-color:var(--tj-danger)}
[data-theme=dark] .cal .day.tmr{background:color-mix(in srgb,var(--tj-warning) 14%,var(--tj-surface-2));border-color:var(--tj-warning)}
[data-theme=dark] .cal .dh b,[data-theme=dark] .cal .ev{color:var(--tj-ink)}
[data-theme=dark] .cal .ev .t{color:var(--tj-muted)}
[data-theme=dark] .tbl tr.grp td{background:var(--tj-surface-2);color:var(--tj-text)}
[data-theme=dark] .tbl .nm a{color:var(--tj-ink)}
[data-theme=dark] .tbl .nm .cd{color:var(--tj-muted)}
[data-theme=dark] tr.rowlink.formal,
[data-theme=dark] tr.rowlink.formal > td{background:color-mix(in srgb,var(--tj-brand) 10%,var(--tj-surface))!important}
[data-theme=dark] tr.rowlink.formal:hover > td{background:color-mix(in srgb,var(--tj-brand) 16%,var(--tj-surface))!important}

/* 历史页面仍有少量 table/pre 由 html.py 直接输出；它们也必须使用同一
   组表面令牌，避免深色主题出现刺眼的白色块。专业版表格的固定表头
   仍由上面的 .tj-data-table 规则控制。 */
[data-theme=dark] table{background:var(--tj-surface);color:var(--tj-text)}
[data-theme=dark] table th{background:var(--tj-surface-2);color:var(--tj-muted);border-color:var(--tj-line)}
[data-theme=dark] table td{border-color:var(--tj-line-soft);color:var(--tj-text)}
[data-theme=dark] table tr:hover td{background:color-mix(in srgb,var(--tj-brand) 5%,var(--tj-surface))}
[data-theme=dark] pre{background:var(--tj-surface-2);color:var(--tj-text);border-color:var(--tj-line)}
[data-theme=dark] .legacy .note{background:var(--tj-warning-bg);border-color:var(--tj-warning-line);color:var(--tj-warning-text)}

/* V2 首页与规范页：首屏保持任务导向，完整股票表按需展开。 */
.tj-home-master-fold{order:5;margin:0 0 16px;border:1px solid var(--tj-line);border-radius:var(--tj-radius);background:var(--tj-surface);box-shadow:var(--tj-shadow)}
.tj-home-master-summary{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:56px;padding:10px 16px;cursor:pointer;list-style:none;color:var(--tj-ink)}
.tj-home-master-summary::-webkit-details-marker{display:none}.tj-home-master-summary>span:first-child{display:grid;gap:3px}.tj-home-master-summary strong{font-size:15px}.tj-home-master-summary small{font-size:12px;color:var(--tj-muted);font-weight:400}.tj-home-master-fold>#list{border:0;box-shadow:none;border-radius:0;margin:0}.tj-home-master-fold:not([open])>#list{display:none}
.tj-design-hero{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:24px;margin-bottom:16px}.tj-design-hero h2{margin:8px 0 6px;color:var(--tj-ink);font-size:22px}.tj-design-hero p{margin:0;color:var(--tj-muted);font-size:13px}.tj-eyebrow{color:var(--tj-brand);font-size:10px;font-weight:800;letter-spacing:.14em}.tj-design-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}.tj-design-token{display:flex;align-items:center;gap:11px;padding:16px;border:1px solid var(--tj-line);border-radius:12px;background:var(--tj-surface)}.tj-token-swatch{width:30px;height:30px;flex:0 0 auto;border-radius:9px;box-shadow:inset 0 0 0 1px rgba(16,24,40,.12)}.tj-design-token div{display:grid;gap:2px;min-width:0}.tj-design-token strong{color:var(--tj-ink);font-size:13px}.tj-design-token code,.tj-design-token small{color:var(--tj-muted);font-size:11px}.tj-design-rules{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px;margin:0 0 20px;padding:8px;border:1px solid var(--tj-line);border-radius:12px;background:var(--tj-surface)}.tj-design-rules span{display:flex;align-items:baseline;justify-content:center;gap:7px;min-width:0;padding:8px 10px;border-right:1px solid var(--tj-line-soft)}.tj-design-rules span:last-child{border-right:0}.tj-design-rules b{color:var(--tj-ink);font-size:14px;font-variant-numeric:tabular-nums;white-space:nowrap}.tj-design-rules small{color:var(--tj-muted);font-size:11px;white-space:nowrap}
.tj-design-section{margin:0 0 16px}.tj-design-section>h2{margin:0 0 10px;color:var(--tj-ink);font-size:16px}.tj-design-note{margin:0 0 10px;color:var(--tj-muted);font-size:13px}.tj-method{margin-top:12px;border-top:1px solid var(--tj-line-soft);padding-top:10px;color:var(--tj-muted);font-size:12px}.tj-method summary{cursor:pointer;color:var(--tj-text);font-weight:600}.tj-method p{margin:8px 0 0;line-height:1.6}.tj-design-type{padding:16px;border:1px solid var(--tj-line);border-radius:12px;background:var(--tj-surface)}.tj-design-type>div{display:flex;align-items:baseline;gap:24px;flex-wrap:wrap;color:var(--tj-text)}.tj-design-type strong{font-size:26px;color:var(--tj-ink)}.tj-design-type span{font-size:16px}.tj-design-type small{font-size:12px;color:var(--tj-muted)}
@media(max-width:760px){.tj-design-hero{align-items:flex-start;flex-direction:column;padding:18px}.tj-design-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.tj-design-token{padding:12px}.tj-design-rules{grid-template-columns:repeat(2,minmax(0,1fr));gap:0;padding:4px}.tj-design-rules span{justify-content:flex-start;padding:8px;border-right:0}.tj-design-rules span:nth-child(odd){border-right:1px solid var(--tj-line-soft)}.tj-design-type>div{display:grid;gap:10px}.tj-design-type strong{font-size:22px}}


/* V2 density pass: the home page is a decision surface. Account facts stay
   visible, while the chart remains a compact visual check instead of making
   a two-row holdings table fill the whole first screen. */
.tj-home #account{margin-bottom:16px}
.tj-home #account>.card-header{min-height:54px;padding:14px 20px}
.tj-home #account>.card-body{padding:16px 20px 18px}
.tj-home #account #acct-kpi{grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;margin-bottom:14px}
.tj-home #account #acct-kpi .card{min-width:0}
.tj-home #account #acct-kpi .kpi{padding:14px 15px}
.tj-home #account #acct-kpi .kpi .val{font-size:24px}
.tj-home #account .g-2-1{grid-template-columns:minmax(0,1.75fr) minmax(220px,.75fr);gap:18px;align-items:start}
.tj-home #account .chart{height:224px;min-height:224px}
.tj-home #account .chart canvas,.tj-home #account .chart svg{max-height:224px}
.tj-home #account .table-responsive{border:1px solid var(--tj-line-soft);border-radius:10px;overflow:auto}
.tj-home #account .tbl th{font-size:11px;letter-spacing:.02em;white-space:nowrap}
.tj-home #account .tbl td{padding-top:10px;padding-bottom:10px;white-space:nowrap}
.tj-home #account .tbl .nm a{font-weight:700;color:var(--tj-ink)}
.tj-home #account .tbl .cd{display:inline-block;margin-left:6px;color:var(--tj-muted);font-size:11px}
.tj-home #account .g-2-1>div:last-child{display:grid;place-items:center;align-content:start;gap:6px}
.tj-home #calendar{margin-bottom:16px}
.tj-home .research{margin-top:0}

/* Use the same neutral surfaces in the centered authentication visual when
   the shared design CSS is inlined by an auth page. */
.tj-login-brand{background:#141a24;color:#f4f5f7}

@media(max-width:1100px){
  .tj-home #account #acct-kpi{grid-template-columns:repeat(3,minmax(0,1fr))}
  .tj-home #account .g-2-1{grid-template-columns:1fr}
  .tj-home #account .g-2-1>div:last-child{justify-items:start}
}
@media(max-width:640px){
  .tj-home #account>.card-header{padding:12px 14px}
  .tj-home #account>.card-body{padding:12px 14px 14px}
  .tj-home #account #acct-kpi{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-bottom:12px}
  .tj-home #account #acct-kpi .kpi{padding:11px 12px}
  .tj-home #account #acct-kpi .kpi .val{font-size:21px}
  .tj-home #account .tbl td{white-space:normal}
  .tj-home #account .chart{height:208px;min-height:208px}
  .tj-home #account .chart canvas,.tj-home #account .chart svg{max-height:208px}
}

/* V2 information architecture: one disclaimer in the page footer; method details stay collapsed. */
.tj-site-footer{display:flex;align-items:center;gap:10px;max-width:1280px;margin:0 auto;padding:18px 28px 24px;color:var(--tj-faint);font-size:11px;line-height:1.5}.tj-site-footer details{display:inline-flex;gap:7px}.tj-site-footer summary{cursor:pointer;color:var(--tj-muted);font-weight:600}.tj-site-footer details span{color:var(--tj-muted)}
@media(max-width:760px){.tj-site-footer{display:block;padding:14px 14px 24px}.tj-site-footer details{margin-top:6px}}

/* 首页 v2 decision surface: concrete actions and risk work stay above folded detail. */
.tj-home-decision-grid,.tj-home-action-grid{grid-template-columns:minmax(0,1.75fr) minmax(280px,.75fr);gap:16px;margin-bottom:16px}.tj-home-decision-grid>.card,.tj-home-action-grid>.card{min-width:0}.tj-home-decision-table{overflow:auto}.tj-home-decision-table table{min-width:760px}.tj-home-decision-table th,.tj-home-decision-table td{white-space:nowrap}.tj-home-risk-card .card-body{display:grid;gap:10px}.tj-risk-group h4{margin:0;color:var(--tj-muted);font-size:11px;font-weight:700;letter-spacing:.04em}.tj-risk-group+.tj-risk-group{border-top:1px solid var(--tj-line-soft);padding-top:10px}.tj-risk-empty{margin:0;font-size:12px}.tj-risk-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid var(--tj-line-soft)}.tj-risk-row:last-child{border-bottom:0}.tj-risk-row small{display:block;color:var(--tj-muted);font-size:11px;margin-top:3px}.tj-risk-distance{color:var(--tj-warning-text);font-size:12px;white-space:nowrap}.tj-home-supervisor-card .card-body{padding-top:12px}.tj-decision-list{margin:0;padding-left:18px;color:var(--tj-text);font-size:13px;line-height:1.65}.tj-decision-list li+li{margin-top:8px}.tj-home-action-grid #account{margin:0}.tj-home-action-grid #supervisor-decision{height:100%}.tj-home-master-body{padding:0 0 1px}.tj-home-master-fold:not([open]) .tj-home-master-body{display:none}
@media(max-width:1100px){.tj-home-decision-grid,.tj-home-action-grid{grid-template-columns:1fr}}
@media(max-width:640px){.tj-home-decision-table table{min-width:760px}.tj-risk-row{align-items:flex-start;flex-direction:column;gap:5px}.tj-risk-distance{white-space:normal}.tj-home-decision-grid,.tj-home-action-grid{gap:10px}}

/* 首页 v2b：首屏密度、日期和手机结论卡。 */
.tj-date-stamp{margin-left:auto;font-size:12px;color:var(--tj-muted);white-space:nowrap}.tj-date-stale{color:var(--tj-danger);font-weight:700}
.tj-home-context-grid{grid-template-columns:minmax(0,1.45fr) minmax(280px,.8fr);margin-bottom:16px}.tj-home-context-grid>.card{min-width:0;height:100%}
.tj-home-macro-card .card-body{display:grid;gap:8px;align-content:center;min-height:80px}.tj-home-macro-card strong{font-size:15px;color:var(--tj-ink)}.tj-home-macro-card p{margin:0;font-size:12px;line-height:1.5}.tj-home-macro-card .tj-macro-evidence{color:var(--tj-muted);font-size:11px;line-height:1.5}.tj-card-link{font-size:12px;color:var(--tj-brand);text-decoration:none;white-space:nowrap}
.tj-home #account #acct-kpi{grid-template-columns:repeat(4,minmax(0,1fr))}.tj-home #account #acct-kpi .kpi .val{white-space:nowrap}.tj-home #account #acct-kpi .kpi .foot{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tj-home-decision-table{overflow:visible}.tj-home-decision-table table{min-width:0}
@media(max-width:1100px){.tj-home-context-grid{grid-template-columns:1fr}.tj-home #account #acct-kpi{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:640px){
  .tj-date-stamp{font-size:11px}.tj-home-context-grid{gap:10px}.tj-home #account #acct-kpi{grid-template-columns:repeat(2,minmax(0,1fr))}.tj-home #account #acct-kpi .kpi .val{font-size:20px}.tj-home #account #acct-kpi .kpi .foot{white-space:normal;line-height:1.35;min-height:30px}
  .tj-home-decision-table{overflow:visible}.tj-home-decision-table table,.tj-home-decision-table tbody,.tj-home-decision-table tr,.tj-home-decision-table td{display:block;width:100%}.tj-home-decision-table thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}.tj-home-decision-table tr{padding:12px 14px;border-bottom:1px solid var(--tj-line-soft);background:var(--tj-surface)}.tj-home-decision-table tr:first-child{border-top:0}.tj-home-decision-table td{display:flex;align-items:baseline;justify-content:space-between;gap:14px;padding:4px 0;border:0!important;white-space:normal;text-align:right}.tj-home-decision-table td:before{content:attr(data-label);flex:0 0 auto;color:var(--tj-muted);font-size:12px;text-align:left}.tj-home-decision-table td:first-child{display:block;text-align:left;font-weight:700;font-size:15px;padding-bottom:8px}.tj-home-decision-table td:first-child:before{display:none}.tj-home-decision-table td:nth-child(2){display:inline-flex;width:auto;margin-right:8px}.tj-home-decision-table td:nth-child(2):before{display:none}.tj-home-decision-table td:nth-child(7){display:none}
}
.tj-card-header-stack{align-items:baseline;gap:10px}.tj-card-subtitle{font-size:12px;white-space:nowrap}.tj-home-side-stack{display:grid;gap:16px;align-content:start;min-width:0}.tj-home-side-stack>.card{min-width:0}.tj-home-action-grid{grid-template-columns:1fr}
@media(max-width:640px){.tj-card-header-stack{display:block}.tj-card-subtitle{display:block;margin-top:5px}.tj-home-side-stack{gap:10px}}
.tj-home-context-stack{display:grid;gap:16px;align-content:start;min-width:0}.tj-home-context-stack>.card{min-width:0}
@media(max-width:640px){.tj-home-context-stack{gap:10px}}
.tj-home-context-grid{grid-template-columns:minmax(0,1.35fr) minmax(240px,.8fr) minmax(280px,.9fr)}
.tj-home-context-grid>.card{height:100%}
@media(max-width:1100px){.tj-home-context-grid{grid-template-columns:minmax(0,1fr) minmax(280px,.8fr)}.tj-home-context-grid>.tj-home-supervisor-card{grid-column:1/-1;height:auto}}
@media(max-width:640px){.tj-home-context-grid{grid-template-columns:1fr}.tj-home-context-grid>.tj-home-supervisor-card{grid-column:auto}}
@media(max-width:640px){.tj-home details.research>summary>span{display:block;margin-top:4px;line-height:1.45}}

/* 首页只保留一行系统健康入口；详细校验放在“系统”页。 */
.tj-home-system-hint{margin:-6px 0 14px;color:var(--tj-muted);font-size:12px}.tj-home-system-hint a{color:var(--tj-brand);text-decoration:none}.tj-home-system-hint a:hover{text-decoration:underline}
