/* legacy: style.4b0b467c.css */
*,::after,::before{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}html{max-width:100vw;overflow-x:hidden;box-sizing:border-box}*,::after,::before{box-sizing:inherit}body{margin:0;max-width:100vw;overflow-x:hidden;min-height:100vh;background:var(--bg);color:var(--ink-1);font:var(--fw-regular) var(--fs-md)/var(--lh-body) var(--font-sans);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}.num,.q-num,td.num,th.num{font-variant-numeric:tabular-nums;font-family:var(--font-num);text-align:right}.up{color:var(--up)}.down{color:var(--down)}.flat{color:var(--flat)}:focus-visible{outline:var(--focus-width) solid var(--focus-color);outline-offset:var(--focus-offset);border-radius:3px}#symTitle,.sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.skip{position:fixed;left:50%;top:-100px;transform:translateX(-50%);z-index:var(--z-top);background:var(--surface);color:var(--ink-1);border:1px solid var(--accent);border-radius:var(--r-2);padding:var(--sp-2) var(--sp-5);font-size:var(--fs-xs);text-decoration:none;box-shadow:var(--sh-3);transition:top .18s ease}.skip:focus{top:var(--sp-3)}.appbar{position:sticky;top:0;z-index:var(--z-sticky);background:color-mix(in srgb,var(--surface) 88%,transparent);backdrop-filter:saturate(180%) blur(14px);-webkit-backdrop-filter:saturate(180%) blur(14px);border-bottom:1px solid var(--border-1);transition:box-shadow .2s ease,border-color .2s ease}.appbar.is-stuck{box-shadow:var(--sh-2);border-bottom-color:transparent}.appbar-inner{max-width:var(--max-w);margin:0 auto;height:var(--appbar-h);display:flex;align-items:center;gap:var(--sp-4);padding:0 var(--pad-page-x)}.brand{display:inline-flex;align-items:center;gap:var(--sp-2);font-size:var(--fs-sm);font-weight:var(--fw-medium);letter-spacing:-.01em;background:var(--accent);color:var(--on-accent);padding:4px 12px;border-radius:var(--r-2);text-decoration:none;white-space:nowrap;flex:none}.brand .blogo{width:22px;height:22px;border-radius:6px;flex:none;display:inline-flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--on-accent) 20%,transparent);font-size:var(--fs-2xs);line-height:1;font-weight:var(--fw-semibold)}.pnav{display:flex;align-items:center;gap:2px;flex:none;padding:3px;border-radius:var(--r-full);background:var(--accent-tint);border:1px solid var(--accent-line)}.pn{display:inline-flex;align-items:center;justify-content:center;height:28px;padding:0 var(--sp-5);border-radius:var(--r-full);font-size:var(--fs-xs);font-weight:var(--fw-semibold);letter-spacing:.01em;color:var(--accent-ink);text-decoration:none;white-space:nowrap;transition:background-color .15s ease,color .15s ease}.pn:hover{background:var(--surface)}.pn[aria-current=page]{background:var(--accent);color:var(--on-accent);box-shadow:var(--sh-1)}.pn[aria-current=page]:hover{background:var(--accent-hover);color:var(--on-accent)}.nsep{width:1px;height:20px;background:var(--border-2);flex:none}.tablist{display:flex;gap:2px;align-items:center;flex:none;overflow-x:auto;scrollbar-width:none}.tablist::-webkit-scrollbar{display:none}.tab{position:relative;height:34px;padding:0 var(--sp-4);display:inline-flex;align-items:center;gap:var(--sp-2);background:0 0;border:0;border-radius:var(--r-1);color:var(--ink-3);font:inherit;font-size:var(--fs-xs);font-weight:var(--fw-medium);cursor:pointer;white-space:nowrap;transition:color .15s ease,background-color .15s ease}.tab:hover{color:var(--ink-1);background:var(--surface-hover)}.tab[aria-selected=true]{color:var(--accent-ink);font-weight:var(--fw-semibold)}.tab[aria-selected=true]::after{content:"";position:absolute;left:var(--sp-4);right:var(--sp-4);bottom:2px;height:2px;border-radius:1px;background:var(--accent)}.tab::before{content:"";width:15px;height:15px;flex:none;background-color:currentColor;opacity:.9;-webkit-mask:var(--ic) center/contain no-repeat;mask:var(--ic) center/contain no-repeat}.tab[data-tab=home]{--ic:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'><rect x='3' y='3' width='7.5' height='8.5' rx='1.6'/><rect x='13.5' y='3' width='7.5' height='5' rx='1.6'/><rect x='13.5' y='11.5' width='7.5' height='9.5' rx='1.6'/><rect x='3' y='15.5' width='7.5' height='5.5' rx='1.6'/></svg>")}.tab[data-tab=sector]{--ic:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'><path d='M4 6h16M4 12h10M4 18h6'/></svg>")}.tab[data-tab=global]{--ic:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'><circle cx='12' cy='12' r='9'/><path d='M3 12h18M12 3c2.6 2.8 2.6 15.2 0 18M12 3c-2.6 2.8-2.6 15.2 0 18'/></svg>")}.tab[data-tab=ratio]{--ic:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M4 9h13l-3.2-3.2M20 15H7l3.2 3.2'/></svg>")}.tab[data-tab=symbol]{--ic:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'><path d='M7 3v4M7 17v4'/><rect x='4' y='7' width='6' height='10' rx='1.4'/><path d='M17 3v3M17 16v5'/><rect x='14' y='6' width='6' height='10' rx='1.4'/></svg>")}.tab[data-tab=chain]{--ic:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71'/><path d='M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71'/></svg>")}.tab[data-tab=compare]{--ic:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><line x1='18' y1='20' x2='18' y2='10'/><line x1='12' y1='20' x2='12' y2='4'/><line x1='6' y1='20' x2='6' y2='14'/><path d='M4 7l4-4 4 4'/></svg>")}.appbar-actions{margin-left:auto;display:flex;align-items:center;gap:2px;flex:none}.appbar-inner>.brand{order:1}.appbar-inner>.pnav{order:2}.appbar-inner>.nsep{order:3}.appbar-inner>.tablist{order:4}.appbar-inner>#rtDot{order:5;margin-left:auto}.appbar-inner>.appbar-actions{order:6;margin-left:0}.xbtn{width:34px;height:34px;display:inline-flex;align-items:center;justify-content:center;background:0 0;border:1px solid transparent;border-radius:var(--r-1);color:var(--ink-3);font-size:var(--fs-md);cursor:pointer;line-height:1;transition:color .15s,background-color .15s,border-color .15s;white-space:nowrap;overflow:hidden}@media (pointer:coarse){.xbtn{padding:5px}.appmore>summary{min-height:44px;display:inline-flex;align-items:center}}.xbtn:hover{color:var(--ink-1);background:var(--surface-hover);border-color:var(--border-1)}.xbtn[data-mode=dark]{color:var(--accent-ink)}.xbtn>svg{width:17px;height:17px;flex:none;display:block}.cm-label{display:none}@media (min-width:1281px){.cm-label{display:inline}}.xbtn--txt{width:auto;gap:5px;padding:0 9px;font-size:var(--fs-2xs)}.xbtn--txt .xbtn-t{display:inline}.appmore{display:inline-flex;align-items:center;gap:2px}.appmore>summary{display:none}.appmore>summary::-webkit-details-marker{display:none}.appmore[open]>summary{color:var(--ink-1);background:var(--surface-hover)}#routeNotice{position:fixed;left:50%;bottom:calc(24px + env(safe-area-inset-bottom,0px));transform:translate(-50%,16px);z-index:var(--z-top);display:flex;align-items:center;gap:2px;max-width:calc(100vw - 32px);padding:9px 16px;background:var(--surface-elevated);color:var(--ink-2);border:1px solid var(--border-2);border-radius:var(--r-full);box-shadow:var(--sh-3);font-size:var(--fs-xs);opacity:0;pointer-events:none;transition:opacity .16s ease,transform .16s ease}#routeNotice.show{opacity:1;transform:translate(-50%,0)}#routeNotice .rn-name{color:var(--ink-1);font-weight:var(--fw-semibold);margin:0 2px}#helpOverlayF{position:fixed;inset:0;z-index:var(--z-top);display:flex;align-items:center;justify-content:center;padding:var(--sp-5) var(--sp-4);background:color-mix(in srgb,var(--bg-sunken) 72%,transparent);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}#helpOverlayF[hidden]{display:none}#helpOverlayF .help-box{width:min(920px,100%);max-height:min(86vh,760px);overflow:auto;background:var(--surface);border:1px solid var(--border-2);border-radius:var(--r-3);box-shadow:var(--sh-3);padding:var(--sp-6) var(--sp-7) var(--sp-7)}#helpOverlayF .help-hd{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-4);margin-bottom:var(--sp-5)}#helpOverlayF .help-hd b{font-size:var(--fs-lg);letter-spacing:-.01em}#helpOverlayF .help-cols{display:grid;grid-template-columns:1.05fr 1fr 1fr;gap:var(--sp-7)}#helpOverlayF h3{font-size:var(--fs-2xs);color:var(--ink-3);font-weight:var(--fw-semibold);letter-spacing:.06em;margin:0 0 var(--sp-3);text-transform:uppercase}#helpOverlayF .help-tb{border-collapse:collapse;width:100%}#helpOverlayF .help-tb td{padding:5px 0;vertical-align:top;font-size:var(--fs-xs);color:var(--ink-2);border-bottom:1px solid var(--border-1)}#helpOverlayF .help-tb tr:last-child td{border-bottom:0}#helpOverlayF .help-tb .hk{width:92px;padding-right:var(--sp-4);white-space:nowrap}#helpOverlayF .help-tb .hk b{display:inline-block;min-width:22px;padding:1px 7px;text-align:center;background:var(--bg-sunken);border:1px solid var(--border-2);border-bottom-width:2px;border-radius:var(--r-1);color:var(--ink-1);font-size:var(--fs-2xs);font-weight:var(--fw-medium)}#helpOverlayF .help-ul{margin:0;padding-left:1.1em}#helpOverlayF .help-ul li{font-size:var(--fs-xs);color:var(--ink-2);line-height:var(--lh-body);margin-bottom:var(--sp-3)}#helpOverlayF .help-ul a{color:var(--accent-ink)}@media (max-width:860px){#helpOverlayF .help-cols{grid-template-columns:1fr;gap:var(--sp-6)}#helpOverlayF .help-box{padding:var(--sp-5)}}@media (max-width:640px){#helpBtnF{display:none}}.scroll-progress{position:absolute;left:0;bottom:-1px;height:2px;width:0;background:linear-gradient(90deg,var(--accent),var(--viz-3));border-radius:0 2px 2px 0;transition:width .1s linear;pointer-events:none}.wrap{max-width:var(--max-w);margin:0 auto;padding:var(--sp-6) var(--pad-page-x) var(--sp-10);box-sizing:border-box;overflow-x:hidden}.panel{display:block;max-width:100%;min-width:0;box-sizing:border-box}.panel[hidden]{display:none}.blk{margin:0 0 var(--sp-9);max-width:100%;min-width:0;box-sizing:border-box}.blk>h2{display:flex;align-items:center;gap:var(--sp-3);margin:0 0 var(--sp-4);font-size:var(--fs-lg);font-weight:var(--fw-semibold);letter-spacing:-.01em;color:var(--ink-1);line-height:1.35}.blk>h2::before{content:"";width:3px;height:1em;border-radius:2px;background:var(--accent);flex:none}.blk>h2>.hint{font-weight:var(--fw-regular)}.blk .blk>h2{font-size:var(--fs-md)}.blk .blk>h2::before{height:.85em;opacity:.7}.blk:last-child{margin-bottom:0}.hint{font-size:var(--fs-2xs);color:var(--ink-3);font-weight:var(--fw-regular)}.kpi{margin:0 0 var(--sp-7)}.kpi-inner{display:grid;gap:var(--sp-3);grid-template-columns:repeat(auto-fit,minmax(148px,1fr))}.kpi-t{position:relative;overflow:hidden;background:var(--surface);border:1px solid var(--border-1);border-radius:var(--r-2);padding:var(--sp-4) var(--sp-5);box-shadow:var(--sh-1)}.kpi-t>em{display:block;font-style:normal;font-size:var(--fs-3xs);color:var(--ink-3);letter-spacing:.04em;margin-bottom:3px}.kpi-t>b{display:block;font-size:var(--fs-xl);font-weight:var(--fw-semibold);font-variant-numeric:tabular-nums;font-family:var(--font-num);line-height:1.15}.kpi-t>span{display:block;font-size:var(--fs-2xs);color:var(--ink-3);margin-top:3px}.kpi-bar{display:flex;height:5px;border-radius:3px;overflow:hidden;background:var(--bg-sunken);margin-top:var(--sp-3)}.kpi-bar i{display:block;height:100%}.kpi-bar i.u{background:var(--up)}.kpi-bar i.d{background:var(--down)}.kpi-bar i.f{background:var(--quant-mid)}.kpi-skel .kpi-t{min-height:92px;position:relative;overflow:hidden;background:var(--bg-sunken)}.kpi-skel .kpi-t::after,.skel-bar-top::after,.skel-card::after{content:"";position:absolute;inset:0;transform:translateX(-100%);background:linear-gradient(90deg,transparent 0,rgba(255,255,255,.5) 50%,transparent 100%);animation:pjShimmer 1.8s cubic-bezier(.4,0,.2,1) infinite}[data-theme=dark] .kpi-skel .kpi-t::after,[data-theme=dark] .skel-bar-top::after,[data-theme=dark] .skel-card::after{background:linear-gradient(90deg,transparent 0,rgba(255,255,255,.06) 50%,transparent 100%)}@keyframes pjShimmer{100%{transform:translateX(100%)}}@media (prefers-reduced-motion:reduce){.kpi-skel .kpi-t::after,.skel-bar-top::after,.skel-card::after{animation:none}}@media (max-width:640px){table.tbl td[data-pr],table.tbl th[data-pr]{display:none}}.keys-box{position:fixed;right:var(--sp-4);top:calc(var(--appbar-h) + var(--sp-4));z-index:140;width:min(340px,calc(100vw - 32px));background:var(--surface);border:1px solid var(--border-1);border-radius:var(--r-2);box-shadow:var(--sh-3);padding:var(--sp-5);font-size:var(--fs-xs)}.keys-box h3{margin:0 0 var(--sp-3);font-size:var(--fs-sm)}.keys-box dl{display:grid;grid-template-columns:74px 1fr;gap:6px var(--sp-3);margin:0}.keys-box dt{font-family:var(--font-num);font-weight:var(--fw-semibold);color:var(--ink-1);background:var(--bg-sunken);border-radius:var(--r-1);padding:1px 6px;text-align:center}.keys-box dd{margin:0;color:var(--ink-2);line-height:1.5}.keys-box .hint{margin:var(--sp-4) 0 0;color:var(--ink-3);font-size:var(--fs-3xs)}.skel-wrap{padding:var(--sp-2) 0}#view{min-height:calc(100vh - 120px)}.skel-bar-top{height:34px;width:280px;max-width:80%;border-radius:var(--r-2);background:var(--bg-sunken);margin-bottom:var(--sp-4);position:relative;overflow:hidden}.skel-card{min-height:108px;background:var(--surface);border:1px solid var(--border-1);border-radius:var(--r-2);position:relative;overflow:hidden;pointer-events:none}.live-pulse{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--up);margin-right:6px;vertical-align:middle;box-shadow:0 0 0 0 color-mix(in srgb,var(--up) 60%,transparent);animation:livePulse 2s infinite}@keyframes livePulse{0%{transform:scale(.95);box-shadow:0 0 0 0 color-mix(in srgb,var(--down) 70%,transparent)}70%{transform:scale(1);box-shadow:0 0 0 6px transparent}100%{transform:scale(.95);box-shadow:0 0 0 0 transparent}}.grid-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(158px,1fr));gap:var(--sp-3)}.card-item{position:relative;text-align:left;font:inherit;color:inherit;cursor:pointer;background:var(--surface);border:1px solid var(--border-1);border-radius:var(--r-2);padding:var(--sp-4) var(--sp-4) var(--sp-3);box-shadow:var(--sh-1);transition:border-color .15s ease,box-shadow .15s ease,transform .15s ease}.card-item:hover{border-color:var(--accent-line);box-shadow:var(--sh-2);transform:translateY(-1px)}.card-item:active{transform:translateY(0)}.card-item::before{content:"";position:absolute;left:0;top:var(--sp-4);bottom:var(--sp-4);width:3px;border-radius:0 2px 2px 0;background:var(--quant-mid);opacity:0}.card-item:has(.c.up)::before{background:var(--up);opacity:1}.card-item:has(.c.down)::before{background:var(--down);opacity:1}.card-item .nm{display:flex;align-items:baseline;justify-content:space-between;gap:var(--sp-2)}.card-item .nm b{font-size:var(--fs-sm);font-weight:var(--fw-semibold)}.card-item .nm i{font-style:normal;font-size:var(--fs-3xs);font-weight:var(--fw-medium);color:var(--ink-3);font-family:var(--font-num);letter-spacing:.03em;background:var(--surface-sunken);border:1px solid var(--border-1);padding:1px 5px;border-radius:var(--r-1)}.card-item .px{display:flex;align-items:baseline;justify-content:space-between;gap:var(--sp-2);margin-top:var(--sp-3)}.card-item .px .v{font-size:var(--fs-xl);font-weight:var(--fw-semibold);line-height:1.15;font-variant-numeric:tabular-nums;font-family:var(--font-num);letter-spacing:-.01em}.card-item .px .c{font-size:var(--fs-xs);font-weight:var(--fw-medium);font-variant-numeric:tabular-nums;font-family:var(--font-num)}.card-item .hint{display:block;margin-top:2px;font-size:var(--fs-3xs)}.chips{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-2);margin-bottom:var(--sp-5)}.chip{height:32px;padding:0 var(--sp-5);display:inline-flex;align-items:center;gap:var(--sp-2);border-radius:var(--r-full);background:var(--surface);border:1px solid var(--border-2);color:var(--ink-3);font:inherit;font-size:var(--fs-xs);font-weight:var(--fw-medium);cursor:pointer;white-space:nowrap;transition:color .15s,background-color .15s,border-color .15s}.chip:hover{color:var(--ink-1);border-color:var(--ink-4)}.chip[aria-pressed=true]{background:var(--accent-tint);border-color:var(--accent);color:var(--accent-ink);font-weight:var(--fw-semibold)}.chip[aria-pressed=true]::before{content:"✓";font-size:var(--fs-3xs)}.search{height:32px;min-width:168px;flex:1 1 168px;max-width:280px;padding:0 var(--sp-5) 0 30px;border-radius:var(--r-full);border:1px solid var(--border-2);background:var(--surface) url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='13' height='13' viewBox='0 0 24 24' fill='none' stroke='%2398a1b0' stroke-width='2.4' stroke-linecap='round'><circle cx='11' cy='11' r='7'/><path d='m20 20-3.5-3.5'/></svg>") no-repeat 10px center;color:var(--ink-1);font:inherit;font-size:var(--fs-xs);-webkit-appearance:none;appearance:none;transition:border-color .15s,box-shadow .15s}.search:focus{outline:0;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-tint)}.search::placeholder{color:var(--ink-4)}.search::-webkit-search-cancel-button{-webkit-appearance:none}.tbl-scroll{position:relative;overflow-x:auto;overflow-y:auto;max-height:72vh;overscroll-behavior-x:contain;border:1px solid var(--border-1);border-radius:var(--r-2);background:var(--surface);box-shadow:var(--sh-1);-webkit-overflow-scrolling:touch;max-width:100%;width:100%;box-sizing:border-box}.tbl-scroll.can-scroll::after,.tbl-scroll.can-scroll::before{content:"";position:absolute;top:0;bottom:0;width:26px;pointer-events:none;z-index:4}.tbl-scroll.can-scroll::after{right:0;background:linear-gradient(90deg,transparent,var(--surface))}.tbl-scroll.can-scroll::before{left:0;background:linear-gradient(270deg,transparent,var(--surface));opacity:0;transition:opacity .15s}.tbl-scroll.scrolled-x::before{opacity:1}table.tbl{width:100%;border-collapse:separate;border-spacing:0;font-size:var(--fs-xs)}table.tbl td,table.tbl th{padding:var(--cell-pad-y) var(--cell-pad-x);height:var(--row-h);border-bottom:1px solid var(--border-1);white-space:nowrap;text-align:left}table.tbl thead th{position:sticky;top:0;z-index:2;background:var(--surface-sunken);color:var(--ink-3);font-weight:var(--fw-semibold);font-size:var(--fs-2xs);letter-spacing:.02em;border-bottom:1px solid var(--border-2)}table.tbl tbody tr:nth-child(2n){background:var(--surface-sunken)}table.tbl tbody tr:hover{background:var(--surface-hover)}table.tbl tbody tr:last-child td{border-bottom:0}table.tbl td:first-child,table.tbl th:first-child{position:sticky;left:0;z-index:1;background:inherit;box-shadow:1px 0 0 var(--border-1)}table.tbl tbody tr:nth-child(2n) td:first-child{background:var(--surface-sunken)}table.tbl tbody tr:hover td:first-child{background:var(--surface-hover)}table.tbl thead th:first-child{z-index:3;background:var(--surface-sunken)}table.tbl td:first-child b{font-weight:var(--fw-semibold)}table.tbl td:first-child .hint{margin-left:var(--sp-2);font-size:var(--fs-3xs)}table.tbl th.sortable{cursor:pointer;user-select:none}table.tbl th.sortable:hover{color:var(--ink-1);background:var(--border-1)}table.tbl th.sortable::after{content:"⇅";margin-left:4px;opacity:.3;font-size:var(--fs-3xs)}table.tbl tbody tr.muted td{color:var(--ink-4)}table.tbl tbody tr.muted td:first-child b{font-weight:var(--fw-regular)}.quote{background:var(--surface);border:1px solid var(--border-1);border-radius:var(--r-3);padding:var(--sp-5) var(--sp-6);margin-bottom:var(--sp-6);box-shadow:var(--sh-2)}.q-name{display:flex;align-items:baseline;gap:var(--sp-3);margin-bottom:var(--sp-2);flex-wrap:wrap}.q-name b{font-size:var(--fs-lg);font-weight:var(--fw-semibold);letter-spacing:-.01em}.q-top{display:flex;align-items:baseline;gap:var(--sp-3);flex-wrap:wrap}.q-price{font-size:var(--fs-3xl);font-weight:var(--fw-bold);line-height:1.05;font-variant-numeric:tabular-nums;font-family:var(--font-num);letter-spacing:-.02em}.q-unit{font-size:var(--fs-xs);color:var(--ink-3)}.q-chg{font-size:var(--fs-lg);font-weight:var(--fw-semibold);font-variant-numeric:tabular-nums;font-family:var(--font-num);margin-top:var(--sp-2)}.q-meta{display:grid;grid-template-columns:repeat(auto-fit,minmax(88px,1fr));gap:var(--sp-3) var(--sp-5);margin-top:var(--sp-5);padding-top:var(--sp-4);border-top:1px solid var(--border-1)}.q-meta span{display:flex;flex-direction:column;gap:1px}.q-meta em{font-style:normal;font-size:var(--fs-3xs);color:var(--ink-3)}.q-meta b{font-size:var(--fs-sm);font-weight:var(--fw-medium);font-variant-numeric:tabular-nums;font-family:var(--font-num)}.kv{display:grid;grid-template-columns:repeat(auto-fit,minmax(124px,1fr));gap:var(--sp-2);margin-bottom:var(--sp-5)}.kv>div{padding:var(--sp-3) var(--sp-4);background:var(--surface);border:1px solid var(--border-1);border-radius:var(--r-1);box-shadow:var(--sh-1)}.kv em{display:block;font-style:normal;font-size:var(--fs-3xs);color:var(--ink-3);margin-bottom:2px}.kv b{font-size:var(--fs-sm);font-weight:var(--fw-semibold);font-variant-numeric:tabular-nums;font-family:var(--font-num)}.chart{position:relative;margin:var(--sp-4) 0}.chart canvas{display:block;width:100%}.ch-tip{position:absolute;z-index:5;pointer-events:none;background:var(--surface-elevated);border:1px solid var(--border-2);border-radius:var(--r-1);padding:var(--sp-2) var(--sp-3);font-size:var(--fs-2xs);color:var(--ink-2);box-shadow:var(--sh-3);max-width:260px}.ch-tip b{color:var(--ink-1)}.ch-tip span{display:block}.cols{display:grid;grid-template-columns:1fr;gap:var(--sp-5)}.cols h3{font-size:var(--fs-md);font-weight:var(--fw-semibold);margin:0 0 var(--sp-3);color:var(--ink-1)}@media (min-width:900px){.cols{grid-template-columns:repeat(2,minmax(0,1fr))}}.heat-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}.heat{display:grid;gap:2px;min-width:440px;font-size:var(--fs-3xs)}.heat-h{color:var(--ink-3);text-align:center;padding:3px 0;font-size:var(--fs-3xs);font-weight:var(--fw-medium)}.heat-row{text-align:right;padding-right:var(--sp-2)}.heat-c{display:flex;align-items:center;justify-content:center;height:28px;border-radius:var(--r-1);color:var(--heat-0-fg);font-variant-numeric:tabular-nums;font-family:var(--font-num);transition:outline-color .12s;outline:2px solid transparent;outline-offset:-2px}.heat-c:hover{outline-color:var(--ink-1)}.pctbar{display:inline-block;width:54px;height:6px;border-radius:3px;background:var(--quant-track);margin-right:6px;vertical-align:middle;overflow:hidden}.pctbar i{display:block;height:100%;background:var(--accent);border-radius:3px}.ext-hi{color:var(--up)}.ext-lo{color:var(--down)}.skel{padding:var(--sp-5)}.skel .bar{height:12px;border-radius:var(--r-1);background:var(--bg-sunken);margin-bottom:var(--sp-3);position:relative;overflow:hidden}.skel .bar::after{content:"";position:absolute;inset:0;transform:translateX(-100%);background:linear-gradient(90deg,transparent,var(--surface-hover),transparent);animation:skelSweep 1.25s ease-in-out infinite}.skel .bar.w40{width:40%}.skel .bar.w60{width:60%}.skel .bar.w80{width:80%}@keyframes skelSweep{to{transform:translateX(100%)}}.empty{padding:var(--sp-9) var(--sp-5);text-align:center;color:var(--ink-3);font-size:var(--fs-sm);line-height:1.85}.empty::before{content:"◎";display:block;font-size:var(--fs-2xl);color:var(--ink-4);margin-bottom:var(--sp-3)}.err{padding:var(--sp-3) var(--sp-5);background:var(--warn-tint);border-left:3px solid var(--warn);border-radius:0 var(--r-1) var(--r-1) 0;color:var(--warn-ink);font-size:var(--fs-xs);line-height:1.6}.rt-dot{display:inline-flex;align-items:center;gap:var(--sp-2);height:26px;padding:0 var(--sp-4);border-radius:var(--r-full);font-size:var(--fs-3xs);font-weight:var(--fw-semibold);letter-spacing:.02em;border:1px solid var(--border-2);background:var(--surface);color:var(--ink-3);white-space:nowrap;flex:none}.rt-dot::before{content:'';width:6px;height:6px;border-radius:50%;background:var(--flat);flex:none}.rt-dot[data-s=live]::before{background:var(--ok);animation:rtPulse 1.6s ease-in-out infinite}.rt-dot[data-s=live]{color:var(--ok-ink);border-color:var(--ok);background:var(--ok-tint)}.rt-dot[data-s=closed]::before{background:var(--ink-4)}.rt-dot[data-s=poll]::before{background:var(--warn)}.rt-dot[data-s=poll]{color:var(--warn-ink);border-color:var(--warn);background:var(--warn-tint)}.rt-dot[data-s=down]::before{background:var(--warn)}.rt-dot[data-s=down]{color:var(--warn-ink);border-color:var(--warn);background:var(--warn-tint)}@keyframes rtPulse{0%,100%{opacity:1}50%{opacity:.3}}@keyframes rtFlashUp{0%{background-color:var(--up-tint)}100%{background-color:transparent}}@keyframes rtFlashDown{0%{background-color:var(--down-tint)}100%{background-color:transparent}}.rt-up{animation:rtFlashUp 420ms ease-out 1}.rt-down{animation:rtFlashDown 420ms ease-out 1}.card-item .px .c,.card-item .px .v,.q-chg,.q-price,td.num{border-radius:var(--r-1)}.min-dot{position:absolute;width:8px;height:8px;border-radius:50%;margin:-4px 0 0 -4px;background:var(--viz-1);box-shadow:0 0 0 0 currentColor;pointer-events:none;z-index:var(--z-raised);transition:left 240ms linear,top 240ms linear;will-change:left,top}.min-dot::after{content:'';position:absolute;inset:-3px;border-radius:50%;border:1px solid currentColor;opacity:.55;animation:minPulse 1.8s ease-out infinite}.min-dot[data-d=up]{background:var(--up);color:var(--up)}.min-dot[data-d=down]{background:var(--down);color:var(--down)}.min-dot[data-d=flat]{background:var(--flat);color:var(--flat)}.min-dot[data-live="0"]{background:var(--ink-4);color:var(--ink-4)}.min-dot[data-live="0"]::after{animation:none;opacity:.25}@keyframes minPulse{0%{transform:scale(1);opacity:.55}100%,70%{transform:scale(2.6);opacity:0}}.symsel{margin-left:auto;font-size:var(--fs-xs);padding:4px var(--sp-3);border-radius:var(--r-1);border:1px solid var(--border-2);background:var(--surface);color:var(--ink-2);max-width:160px;cursor:pointer}.symsel:hover{border-color:var(--accent);color:var(--ink-1)}.sec-close{cursor:pointer}.sec-detail{margin-top:var(--sp-3)}.kbd{display:inline-block;min-width:17px;padding:1px 5px;font-family:var(--font-num);font-size:var(--fs-3xs);line-height:1.5;color:var(--ink-3);background:var(--surface-sunken);border:1px solid var(--border-1);border-bottom-width:2px;border-radius:var(--r-1)}.pgf{margin-top:var(--sp-10);border-top:1px solid var(--border-1);background:var(--surface);color:var(--ink-3)}.pgf-inner{max-width:var(--max-w);margin:0 auto;padding:var(--sp-6) var(--pad-page-x) var(--sp-5);display:grid;gap:var(--sp-7);grid-template-columns:1.5fr 1fr 1fr 1.2fr 1.2fr}.pgf-col>h3{margin:0 0 var(--sp-4);font-size:var(--fs-2xs);font-weight:var(--fw-semibold);color:var(--ink-2);letter-spacing:.06em;text-transform:uppercase}.pgf-col p{margin:0 0 var(--sp-2);font-size:var(--fs-3xs);line-height:1.6}.pgf-col ul{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:2px}.pgf-col li{font-size:var(--fs-3xs);line-height:1.4}.pgf-inner .pgf-col:nth-child(3) ul,.pgf-inner .pgf-col:nth-child(4) ul{display:grid;grid-template-columns:1fr 1fr;gap:2px var(--sp-4)}.pgf-col a{color:var(--ink-3);text-decoration:none}.pgf-col a:hover{color:var(--accent-ink);text-decoration:underline}.pgf-col .taglist{display:none}.pgf-col .taglist span{font-size:var(--fs-3xs);line-height:1.6;padding:1px 7px;border-radius:var(--r-full);background:var(--surface-sunken);border:1px solid var(--border-1);color:var(--ink-3)}.pgf-logo{display:inline-flex;align-items:center;gap:var(--sp-3);font-size:var(--fs-md);font-weight:var(--fw-semibold);color:var(--ink-1);margin-bottom:var(--sp-3)}.pgf-logo::before{content:"";width:20px;height:20px;border-radius:6px;flex:none;background:linear-gradient(145deg,var(--accent),var(--accent-hover))}.pgf-fresh{display:inline-flex;align-items:center;gap:var(--sp-2);margin-top:var(--sp-2);font-size:var(--fs-3xs);color:var(--pgf-ink);font-variant-numeric:tabular-nums}.pgf-fresh::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--ok);flex:none}.pgf-bar{max-width:var(--max-w);margin:0 auto;padding:var(--sp-3) var(--pad-page-x);border-top:1px solid var(--border-1);display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-3) var(--sp-6);font-size:var(--fs-3xs);color:var(--pgf-ink)}.pgf-bar .src{margin-left:auto}.pgf-bar .disclaimer{flex:1 1 100%;line-height:1.7}@media (max-width:1024px){.pgf-inner{grid-template-columns:1fr 1fr}}@media (max-width:640px){.pgf-inner{grid-template-columns:1fr;gap:var(--sp-7);padding-top:var(--sp-8)}.pgf-bar .src{margin-left:0}}.anomaly-modal,.dual-pane-modal{position:fixed;inset:0;z-index:10000;background:rgba(0,0,0,.7);display:flex;align-items:center;justify-content:center;backdrop-filter:blur(4px)}.anomaly-dialog{background:var(--surface);border:1px solid var(--border-1);border-radius:8px;width:min(640px,92vw);max-height:85vh;display:flex;flex-direction:column;box-shadow:0 20px 40px rgba(0,0,0,.4)}.ano-hd{padding:12px 16px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--border-1)}.ano-t{color:var(--accent-ink)}.ano-desc{font-size:var(--fs-2xs);color:var(--ink-2)}.dual-x{color:var(--ink-3);font-size:var(--fs-3xs)}.dual-load{background:var(--accent-tint);color:var(--accent);width:auto;padding:0 8px}.dual-close{background:var(--up);color:var(--on-accent);border:0;width:auto;padding:0 8px}.ano-item{padding:10px 12px;border-radius:6px;background:var(--bg-sunken,rgba(0,0,0,.2));margin-bottom:8px;border-left:3px solid var(--accent)}.ano-item.pulse-red{border-left-color:var(--up)}.ano-item.pulse-gold{border-left-color:var(--warn)}.ano-item.pulse-green{border-left-color:var(--down)}.ano-item.pulse-blue{border-left-color:var(--info)}body.is-embed #appbar,body.is-embed #bnav,body.is-embed .appbar,body.is-embed .bnav,body.is-embed .pgf,body.is-embed .wab-fab,html.is-embed #appbar,html.is-embed #bnav,html.is-embed .appbar,html.is-embed .bnav,html.is-embed .pgf,html.is-embed .wab-fab{display:none!important}body.is-embed #main,body.is-embed #view,body.is-embed main,html.is-embed #main,html.is-embed #view,html.is-embed main{padding-top:4px!important;padding-bottom:4px!important;margin-top:0!important;margin-bottom:0!important}.macro-strip-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:var(--sp-3,10px);margin-bottom:var(--sp-4,16px)}@media (max-width:640px){.macro-strip-grid{display:flex;overflow-x:auto;gap:8px;padding-bottom:6px;-webkit-overflow-scrolling:touch;scroll-snap-type:x mandatory}.macro-kpi-card{flex:0 0 145px;scroll-snap-align:start}.arbitrage-grid{display:flex;overflow-x:auto;gap:10px;padding-bottom:6px;-webkit-overflow-scrolling:touch;scroll-snap-type:x mandatory}.arbitrage-card{flex:0 0 250px;scroll-snap-align:start}}.macro-kpi-card{background:var(--surface);border:1px solid var(--border-1);border-radius:var(--r-2,8px);padding:10px 14px;display:flex;flex-direction:column;gap:4px;position:relative;box-shadow:0 1px 3px rgba(0,0,0,.05);transition:transform .15s ease,border-color .15s ease}.macro-kpi-card:hover{transform:translateY(-2px);border-color:var(--accent)}.macro-kpi-h{display:flex;justify-content:space-between;align-items:center;font-size:var(--fs-3xs);color:var(--ink-3)}.macro-kpi-sub{font-size:var(--fs-3xs);background:var(--bg-sunken);padding:1px 5px;border-radius:var(--r-1);color:var(--ink-2)}.macro-kpi-val{font-size:var(--fs-lg);font-weight:700;font-family:var(--font-num);color:var(--ink-1);display:flex;align-items:baseline;justify-content:space-between}.macro-kpi-chg{font-size:var(--fs-2xs);font-weight:600}.market-status-bar{display:flex;align-items:center;gap:12px;background:var(--surface-sunken);border:1px solid var(--border-1);border-radius:var(--r-1);padding:6px 12px;margin-bottom:14px;font-size:var(--fs-3xs);flex-wrap:wrap}.mkt-clock-item{display:flex;align-items:center;gap:6px;color:var(--ink-2)}.mkt-clock-dot{width:7px;height:7px;border-radius:50%;background:var(--ink-4)}.mkt-clock-dot.active{background:var(--ok);box-shadow:0 0 6px var(--ok)}.arbitrage-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:var(--sp-3,12px);margin-bottom:16px}.arbitrage-card{background:var(--surface);border:1px solid var(--border-1);border-radius:var(--r-2,8px);padding:12px 14px;display:flex;flex-direction:column;gap:6px;border-left:3px solid var(--accent)}.arbitrage-card-h{display:flex;justify-content:space-between;align-items:center;font-size:var(--fs-2xs);font-weight:600;color:var(--ink-1)}.arb-badge{font-size:var(--fs-3xs);padding:2px 6px;border-radius:var(--r-1);font-weight:700}.arb-badge.profit{background:var(--up-tint);color:var(--up-ink)}.arb-badge.loss{background:var(--down-tint);color:var(--down-ink)}.arb-badge.neutral{background:var(--accent-tint);color:var(--accent-ink)}.arb-metrics{display:flex;justify-content:space-between;font-size:var(--fs-3xs);color:var(--ink-2);margin-top:2px}.arb-metrics b{color:var(--ink-1);font-family:var(--font-num)}.gl-filter-pills{display:flex;gap:6px;margin-bottom:14px;overflow-x:auto;padding-bottom:4px;-webkit-overflow-scrolling:touch}.gl-pill-btn{background:var(--surface);border:1px solid var(--border-1);color:var(--ink-2);padding:4px 10px;border-radius:var(--r-full);font-size:var(--fs-2xs);cursor:pointer;white-space:nowrap;transition:all .15s ease}.gl-pill-btn.active,.gl-pill-btn:hover{background:var(--accent);color:var(--on-accent);border-color:var(--accent);font-weight:600}.gl-range-cell{display:flex;flex-direction:column;gap:2px;min-width:90px;max-width:120px}.gl-range-track{width:100%;height:5px;background:var(--bg-sunken);border-radius:3px;position:relative;overflow:hidden}.gl-range-fill{height:100%;background:var(--accent);border-radius:3px}.gl-range-labels{display:flex;justify-content:space-between;font-size:var(--fs-3xs);color:var(--ink-4);font-family:var(--font-num)}.gl-hedge-btn{background:var(--accent-tint);color:var(--accent);border:1px solid var(--border-1);padding:2px 7px;border-radius:var(--r-1);font-size:var(--fs-3xs);font-weight:600;cursor:pointer;white-space:nowrap;transition:all .12s ease}.gl-hedge-btn:hover{background:var(--accent);color:var(--on-accent)}.dual-pane-modal{position:fixed;inset:0;z-index:10000;background:rgba(0,0,0,.75);display:flex;align-items:center;justify-content:center;backdrop-filter:blur(5px)}.dual-pane-container{width:98vw;height:96vh;background:var(--bg);border:1px solid var(--border-1);border-radius:var(--r-2,8px);display:flex;flex-direction:column;overflow:hidden;box-shadow:0 25px 50px -12px rgba(0,0,0,.5)}.dual-pane-toolbar{min-height:46px;display:flex;align-items:center;justify-content:space-between;padding:6px 14px;background:var(--surface);border-bottom:1px solid var(--border-1);flex-wrap:wrap;gap:8px;z-index:10}.dual-tb-left{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.dual-tb-right{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-left:auto}.dual-title{color:var(--accent);font-weight:600;font-size:var(--fs-xs);display:flex;align-items:center;gap:4px}.dual-sel{background:var(--bg-sunken);color:var(--ink-1);border:1px solid var(--border-1);padding:4px 8px;border-radius:var(--r-1);font-size:var(--fs-2xs);max-width:260px}.dual-custom-box{display:flex;align-items:center;gap:4px}.dual-ipt{width:90px;padding:3px 6px;font-size:var(--fs-3xs);background:var(--bg-sunken);color:var(--ink-1);border:1px solid var(--border-1);border-radius:var(--r-1);text-transform:uppercase}.dual-pane-frames{flex:1;display:flex;width:100%;height:calc(100% - 46px);position:relative}.dual-pane-frames.dir-col{flex-direction:column}.dual-pane-frame-box{flex:1;height:100%;position:relative;min-width:120px;min-height:120px;overflow:hidden;display:flex;flex-direction:column}.dual-pane-frames.dir-col .dual-pane-frame-box{width:100%}.dual-pane-frame-box iframe{flex:1 1 auto;width:100%;height:auto;min-height:0;border:none;background:var(--bg);display:block}.pane-badge{flex:none;align-self:flex-start;margin:6px 0 0 8px;background:color-mix(in srgb,var(--surface) 88%,transparent);color:var(--ink-2);padding:2px 9px;border-radius:var(--r-full);font-size:var(--fs-3xs);pointer-events:none;z-index:5;border:1px solid var(--border-2);box-shadow:var(--sh-1);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.dual-pane-sep{width:6px;height:100%;background:var(--border-1);cursor:col-resize;transition:background .15s ease;position:relative;z-index:8;flex:none}.dual-pane-frames.dir-col .dual-pane-sep{width:100%;height:6px;cursor:row-resize}.dual-pane-sep.is-dragging,.dual-pane-sep:hover{background:var(--accent)}@media (max-width:768px){.dual-pane-container{width:100vw;height:100vh;border-radius:0}.dual-pane-toolbar{padding:4px 8px;gap:4px;min-height:60px;flex-direction:column;align-items:stretch}.dual-tb-left{width:100%;display:flex;justify-content:space-between;align-items:center;gap:6px}.dual-tb-right{width:100%;display:flex;justify-content:space-between;align-items:center;gap:4px;margin-left:0}.dual-sel{flex:1;max-width:none;font-size:var(--fs-3xs);padding:3px 6px}.dual-tb-right .cpbtn,.dual-tb-right .xbtn{padding:2px 6px!important;font-size:var(--fs-3xs)!important;flex:1;text-align:center}.dual-title{display:none}.dual-custom-box{display:none}.dual-pane-frames{flex-direction:column!important}.dual-pane-sep{width:100%!important;height:6px!important;cursor:row-resize!important}}@media (max-width:1280px){.appbar-inner{gap:var(--sp-2)}.live-pulse-text{display:none}.xbtn--txt{width:34px;padding:0}.xbtn--txt .xbtn-t{display:none}}@media (max-width:640px){.appbar .appmore{position:relative;display:block}.appbar .appmore>summary{display:inline-flex;width:34px;height:34px;align-items:center;justify-content:center;cursor:pointer;border-radius:var(--r-1);color:var(--ink-3)}.appbar .appmore>summary>svg{width:17px;height:17px}.appbar .appmore[open]>summary{color:var(--ink-1);background:var(--surface-hover)}.appbar .appmore>.xbtn{display:none;position:absolute;right:0;top:calc(100% + 6px);z-index:var(--z-dropdown);width:auto;min-width:132px;justify-content:flex-start;gap:8px;padding:0 12px;background:var(--surface-elevated);border:1px solid var(--border-2);border-radius:var(--r-2);box-shadow:var(--sh-3);color:var(--ink-2);font-size:var(--fs-xs);height:38px}.appbar .appmore>.xbtn .xbtn-t{display:inline}.appbar .appmore>.xbtn:first-of-type{top:calc(100% + 6px)}.appbar .appmore>.xbtn:last-of-type{top:calc(100% + 46px)}.appbar .appmore[open]>.xbtn{display:inline-flex}.appbar .live-pulse-container{display:none}.appbar .appbar-inner{gap:4px}.appbar .pnav .pn{padding:0 6px;font-size:var(--fs-2xs)}}@media (max-width:430px){.appbar .appbar-inner{padding:0 6px;gap:3px}.appbar-actions .xbtn{width:32px;height:32px}.appbar-actions .xbtn>svg{width:16px;height:16px}.appbar .brand{font-size:var(--fs-xs)}.appbar .pnav .pn{padding:0 5px;font-size:var(--fs-2xs)}.appbar .appmore>summary{width:32px;height:32px}}.bnav{display:none}@media (min-width:1600px){:root{--max-w:1560px}}@media (max-width:1024px){:root{--pad-page-x:16px}.pgf-inner{grid-template-columns:1fr 1fr}}@media (max-width:1100px){.tablist{display:none}.nsep{display:none}.wrap{padding-bottom:calc(64px + env(safe-area-inset-bottom))}}@media (max-width:640px){:root{--pad-page-x:12px}.appbar{max-width:100vw;overflow-x:clip}.appbar-inner{max-width:100vw;overflow-x:clip;gap:6px;padding:0 8px;justify-content:space-between}.appbar-actions{gap:4px}#helpBtn{display:none}.brand{font-size:var(--fs-md)}.wrap{padding-top:var(--sp-5);padding-bottom:calc(64px + env(safe-area-inset-bottom))}.blk{margin-bottom:var(--sp-7)}.blk>h2{font-size:var(--fs-md)}.kpi{margin-bottom:var(--sp-6)}.kpi-inner{display:flex;gap:var(--sp-2);overflow-x:auto;scroll-snap-type:x proximity;scrollbar-width:none;-webkit-overflow-scrolling:touch;margin:0 calc(-1 * var(--pad-page-x));padding:0 var(--pad-page-x) var(--sp-1)}.kpi-inner::-webkit-scrollbar{display:none}.kpi-t{flex:0 0 148px;scroll-snap-align:start;padding:var(--sp-3) var(--sp-4);box-shadow:none}.kpi-t>b{font-size:var(--fs-lg)}.kpi-t>em{font-size:var(--fs-3xs)}.kpi-skel .kpi-t{min-height:84px}.chips{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;margin:0 calc(-1 * var(--pad-page-x)) var(--sp-4);padding:0 var(--pad-page-x) var(--sp-1);-webkit-overflow-scrolling:touch}.chips::-webkit-scrollbar{display:none}.search{flex:none;width:100%;max-width:none;order:-1;margin-bottom:var(--sp-1)}.chips:has(.search){flex-wrap:wrap;overflow-x:visible}.chip,.search{height:44px}.xbtn{width:44px;height:44px}.pn{height:34px;padding:0 var(--sp-4)}.nsep{display:none}.rt-dot{height:24px;padding:0 var(--sp-2);font-size:0;gap:0}.rt-dot::before{width:7px;height:7px}.grid-cards{grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sp-2)}.card-item{padding:var(--sp-3) var(--sp-3) var(--sp-2);box-shadow:none}.card-item .px .v{font-size:var(--fs-lg)}.card-item .nm b{font-size:var(--fs-xs)}.card-item .nm i{font-size:var(--fs-3xs);padding:0 4px}.quote{padding:var(--sp-4);border-radius:var(--r-2)}.q-price{font-size:var(--fs-2xl)}.q-chg{font-size:var(--fs-md)}.q-meta{grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--sp-3)}.kv{grid-template-columns:repeat(2,minmax(0,1fr))}.tbl-scroll{max-height:none;box-shadow:none}:root[data-density=compact]{--row-h:34px}:root[data-density=standard]{--row-h:40px}:root[data-density=comfortable]{--row-h:48px}}@media (max-width:1100px){.bnav{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:var(--z-sticky);background:color-mix(in srgb,var(--surface) 94%,transparent);backdrop-filter:saturate(180%) blur(12px);-webkit-backdrop-filter:saturate(180%) blur(12px);border-top:1px solid var(--border-1);padding-bottom:env(safe-area-inset-bottom);overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}.bnav::-webkit-scrollbar{display:none}.bnav>*{flex:1 1 0;min-width:0;min-height:52px;padding:3px 1px;margin-left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;font-size:var(--fs-3xs);border-radius:0;white-space:nowrap}.bnav .tab{height:auto;color:var(--ink-3);border:0;background:0 0;box-shadow:none}.bnav .tab::before{width:19px;height:19px}.bnav .tab[aria-selected=true]{color:var(--accent-ink);background:0 0;font-weight:var(--fw-semibold)}.bnav .tab[aria-selected=true]::after{content:"";position:absolute;top:0;left:50%;transform:translateX(-50%);width:22px;height:2px;border-radius:0 0 2px 2px;background:var(--accent)}}@media (max-width:380px){.grid-cards{grid-template-columns:1fr 1fr}.q-meta{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (pointer:coarse){.chip,.search,.tab,.xbtn{min-height:44px}}@media (prefers-reduced-motion:reduce){.skel .bar::after{animation:none}.rt-down,.rt-up{animation:none}.rt-dot[data-s=live]::before{animation:none}.rt-up{box-shadow:inset 2px 0 0 var(--up)}.rt-down{box-shadow:inset 2px 0 0 var(--down)}.min-dot{transition:none}.min-dot::after{animation:none;opacity:.5}.card-item{transition:none}.card-item:hover{transform:none}#view.view-enter{animation:none!important}}#view.view-enter{animation:pjViewIn .16s ease-out both}@keyframes pjViewIn{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}@media print{.appbar,.bnav,.chips,.kpi{display:none!important}body{background:var(--surface)}.pgf{border-top:1px solid var(--border-1)}.tbl-scroll{max-height:none;overflow:visible;box-shadow:none}table.tbl thead th{position:static}.blk{break-inside:avoid}}.wab-fab{position:fixed;right:14px;bottom:74px;width:44px;height:44px;border-radius:50%;border:1px solid var(--border-1);background:var(--accent);color:var(--on-accent);display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:130;font-size:var(--fs-lg);box-shadow:var(--shadow-2);touch-action:none;-webkit-user-select:none;user-select:none;transition:left .18s ease,top .18s ease,background-color .18s ease,opacity .18s ease}.wab-fab.is-drag{transition:none;cursor:grabbing}.wab-fab.is-mini{background:0 0;border-color:transparent;box-shadow:none;font-size:0}.wab-fab.is-mini .wab-badge{display:none}@media(max-width:820px){.wab-fab.is-mini{width:14px}}.wab-fab.is-mini::after{content:"";position:absolute;top:50%;transform:translateY(-50%);width:10px;height:44px;border-radius:5px;background:var(--accent);opacity:.5;transition:opacity .15s ease}.wab-fab.is-mini[data-side=left]::after{left:0}.wab-fab.is-mini[data-side=right]::after{right:0}.wab-fab.is-mini:focus-visible::after,.wab-fab.is-mini:hover::after{opacity:.9}.wab-fab .wab-badge{position:absolute;top:-4px;right:-4px;min-width:17px;height:17px;border-radius:var(--r-2);background:var(--up);color:var(--on-accent);font-size:var(--fs-3xs);font-weight:700;display:flex;align-items:center;justify-content:center;padding:0 4px;border:1.5px solid var(--surface)}.wab-panel{position:fixed;right:var(--sp-3);bottom:calc(66px + env(safe-area-inset-bottom,0px) + 116px);width:min(370px,calc(100vw - 24px));max-height:min(72vh,580px);overflow:auto;background:var(--surface);border:1px solid var(--border-1);border-radius:var(--r-2);box-shadow:var(--sh-2);z-index:140;padding:var(--sp-3)}.wab-panel[hidden]{display:none}.wab-hd{display:flex;align-items:center;gap:6px;margin-bottom:var(--sp-2)}.wab-hd b{font-size:var(--fs-sm)}.wab-row{display:flex;align-items:center;gap:8px;padding:7px 4px;border-bottom:1px solid var(--border-1)}.wab-row:last-child{border-bottom:0}.wab-row .nm{font-size:var(--fs-xs);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wab-row .st{font-size:var(--fs-2xs);color:var(--ink-3);white-space:nowrap}.wab-empty{padding:var(--sp-3);text-align:center;color:var(--ink-3);font-size:var(--fs-xs)}.wab-form{display:grid;grid-template-columns:minmax(0,1fr) 84px auto auto;gap:6px;margin-top:var(--sp-2);align-items:center}.wab-form input{padding:6px 8px;border:1px solid var(--border-1);border-radius:var(--r-1);background:var(--bg-sunken);color:var(--ink-1);font-size:var(--fs-xs);min-width:0}.wab-form .dirs{display:flex;gap:4px}.wab-note{font-size:var(--fs-2xs);color:var(--ink-3);margin-top:var(--sp-2);line-height:1.5}.wab-toast{position:fixed;left:50%;transform:translateX(-50%);bottom:calc(66px + env(safe-area-inset-bottom,0px));z-index:150;background:var(--ink-1);color:var(--surface);padding:10px 16px;border-radius:var(--r-2);font-size:var(--fs-xs);box-shadow:var(--sh-3)}:root{--up-bg:var(--up-tint);--down-bg:var(--down-tint);--up-glow:color-mix(in srgb, var(--up) 25%, transparent);--down-glow:color-mix(in srgb, var(--down) 25%, transparent)}@media (prefers-color-scheme:dark){}.skeleton-shimmer{background:linear-gradient(90deg,rgba(255,255,255,.03) 25%,rgba(255,255,255,.09) 37%,rgba(255,255,255,.03) 63%);background-size:400% 100%;animation:skeletonShimmer 1.5s ease infinite}@keyframes skeletonShimmer{0%{background-position:100% 50%}100%{background-position:0 50%}}.live-pulse-container{display:inline-flex;align-items:center;gap:5px;padding:3px 8px;border-radius:var(--r-full);background:var(--ok-tint);border:1px solid var(--ok);font-size:var(--fs-3xs);font-family:var(--font-num);color:var(--ok-ink);user-select:none;cursor:default}.live-pulse-dot{width:6px;height:6px;border-radius:50%;background:var(--ok);position:relative;box-shadow:0 0 6px var(--ok)}.live-pulse-dot::after{content:'';position:absolute;inset:-3px;border-radius:50%;border:1px solid var(--ok);animation:livePulseRing 2s cubic-bezier(.24,0,.38,1) infinite}@keyframes livePulseRing{0%{transform:scale(.8);opacity:.9}100%{transform:scale(2.4);opacity:0}}.live-pulse-text{font-weight:700;letter-spacing:.5px}.ratio-cards-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:var(--sp-3);margin-bottom:var(--sp-4)}.ratio-card{background:var(--surface);border:1px solid var(--border-1);border-radius:var(--r-2);padding:14px 16px;display:flex;flex-direction:column;gap:10px;cursor:pointer;transition:transform .15s ease,border-color .15s ease,box-shadow .15s ease;text-decoration:none;color:inherit}.ratio-card:hover{transform:translateY(-2px);border-color:var(--accent);box-shadow:var(--sh-2)}.ratio-card-h{display:flex;justify-content:space-between;align-items:center}.ratio-card-h b{font-size:var(--fs-md);color:var(--ink-1)}.ratio-card-h .hint{font-size:var(--fs-3xs);color:var(--ink-3);margin-left:4px}.ratio-pill{font-size:var(--fs-3xs);font-weight:700;padding:2px 7px;border-radius:var(--r-full);text-transform:uppercase}.ratio-pill.pill-hi{background:var(--warn-tint);color:var(--warn);border:1px solid var(--warn)}.ratio-pill.pill-lo{background:var(--down-tint);color:var(--down);border:1px solid var(--down)}.ratio-pill.pill-mid{background:var(--surface-sunken);color:var(--ink-3);border:1px solid var(--border-1)}.ratio-card-body{display:flex;justify-content:space-between;align-items:baseline}.ratio-val{font-family:var(--font-num);font-size:var(--fs-xl);font-weight:700;color:var(--ink-1)}.ratio-val small{font-size:var(--fs-2xs);font-weight:400;color:var(--ink-3);margin-left:4px}.ratio-c20{font-size:var(--fs-2xs);font-weight:600}.ratio-pctile-row{display:flex;align-items:center;gap:8px;font-size:var(--fs-2xs);font-family:var(--font-num)}.ratio-pctile-row .pctbar{flex:1;height:7px}.ratio-pctile-tag{font-weight:600;min-width:42px;text-align:right}.ratio-card-footer{display:flex;justify-content:space-between;align-items:center;font-size:var(--fs-3xs);color:var(--ink-3);border-top:1px solid var(--border-1);padding-top:8px;margin-top:2px}.wl-drawer-overlay{position:fixed;inset:0;z-index:9999;display:flex;justify-content:flex-end}.wl-backdrop{position:absolute;inset:0;background:rgba(0,0,0,.5);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}.wl-panel{position:relative;width:360px;max-width:90vw;height:100%;background:var(--bg-card);border-left:1px solid var(--border);display:flex;flex-direction:column;box-shadow:-8px 0 24px rgba(0,0,0,.5);z-index:2;animation:slideDrawer .22s ease-out}@keyframes slideDrawer{from{transform:translateX(100%)}to{transform:translateX(0)}}.wl-header{padding:16px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--border)}.wl-header h3{margin:0;font-size:var(--fs-md);font-weight:600;display:flex;align-items:center;gap:6px}.wl-header-actions{display:flex;gap:8px}.wl-hint{font-size:var(--fs-3xs);color:var(--text-dim);padding:8px 16px;background:var(--surface);border-bottom:1px solid var(--border)}.wl-list{flex:1;overflow-y:auto;padding:8px}.wl-empty{padding:40px 16px;text-align:center;color:var(--text-dim)}.wl-empty p{font-size:var(--fs-md);margin-bottom:6px}.wl-empty span{font-size:var(--fs-2xs);opacity:.8}.wl-item{display:flex;align-items:center;padding:10px 12px;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-1);margin-bottom:6px;cursor:pointer;transition:background .15s,border-color .15s}.wl-item:hover{background:var(--surface-hover);border-color:var(--accent)}.wl-item.is-dragging{opacity:.4}.wl-item.is-over{border-top:2px solid var(--accent)}.wl-drag-handle{color:var(--text-dim);cursor:grab;padding-right:8px;user-select:none;font-size:var(--fs-md)}.wl-item-info{flex:1;display:flex;flex-direction:column}.wl-name{font-size:var(--fs-xs);color:var(--text-primary)}.wl-code{font-size:var(--fs-3xs);color:var(--text-dim);font-family:var(--font-num)}.wl-item-data{text-align:right;margin-right:8px}.wl-price{display:block;font-size:var(--fs-xs);font-weight:600;font-family:var(--font-num)}.wl-chg{font-size:var(--fs-3xs);font-family:var(--font-num)}.wl-del-btn{background:0 0;border:none;color:var(--text-dim);cursor:pointer;padding:4px;border-radius:var(--r-1);font-size:var(--fs-2xs)}.wl-del-btn:hover{color:var(--up);background:var(--up-tint)}.wl-count-badge{display:inline-flex;align-items:center;justify-content:center;min-width:16px;height:16px;padding:0 4px;font-size:var(--fs-3xs);font-weight:700;border-radius:var(--r-full);background:var(--accent);color:var(--on-accent);margin-left:2px;vertical-align:middle}.pj-modal-overlay{position:fixed;inset:0;z-index:10000;display:flex;align-items:center;justify-content:center;padding:16px}.pj-modal-backdrop{position:absolute;inset:0;background:rgba(0,0,0,.65);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.pj-modal-container{position:relative;width:880px;max-width:95vw;max-height:88vh;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--r-2);display:flex;flex-direction:column;box-shadow:var(--sh-3);z-index:2;overflow:hidden;animation:modalPop .2s ease-out}@keyframes modalPop{from{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}.pj-modal-header{padding:14px 18px;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center}.pj-modal-header h3{margin:0;font-size:var(--fs-md);font-weight:600;display:flex;align-items:center;gap:8px}.pj-modal-close{background:0 0;border:none;font-size:var(--fs-lg);color:var(--text-dim);cursor:pointer;padding:4px 8px;border-radius:var(--r-1)}.pj-modal-close:hover{color:var(--ink-1);background:var(--surface-hover)}.pj-modal-body{padding:16px;overflow-y:auto;flex:1}.chain-timeline{display:flex;flex-direction:column;gap:12px}.chain-node{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-2);padding:12px 14px}.chain-node-head{display:flex;align-items:center;gap:8px;margin-bottom:10px}.chain-node-head h4{margin:0;font-size:var(--fs-md);font-weight:600}.chain-node-icon{font-size:var(--fs-md)}.chain-node-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px}.chain-item-card{background:var(--surface-sunken);border:1px solid var(--border-1);border-radius:var(--r-1);padding:10px 12px}.ci-name{font-size:var(--fs-xs);font-weight:600;margin-bottom:4px}.ci-price{font-size:var(--fs-xs);font-family:var(--font-num);font-weight:700}.ci-note{font-size:var(--fs-3xs);color:var(--text-dim);margin-top:4px}.chain-margin-box{margin-top:10px;padding:8px 10px;border-radius:var(--r-1);background:var(--accent-tint);border:1px dashed var(--accent-line);font-size:var(--fs-2xs);color:var(--accent-ink)}.chain-arrow{text-align:center;font-size:var(--fs-3xs);color:var(--text-dim);letter-spacing:1px}.chain-page,.cmp-page{display:flex;flex-direction:column;gap:var(--sp-6,16px);animation:fadeIn .25s ease-out}@keyframes fadeIn{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.pan-header{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;padding:14px 18px;border-radius:var(--rad);background:var(--surface);border:1px solid var(--border-1)}.pan-title h2{margin:0;font-size:var(--fs-lg);font-weight:700;display:flex;align-items:center;gap:8px}.pan-title p{margin:4px 0 0 0;font-size:var(--fs-2xs);color:var(--ink-3)}.pan-controls{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.pan-kpi-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}@media (max-width:900px){.pan-kpi-grid{grid-template-columns:repeat(2,1fr)}}@media (max-width:480px){.pan-kpi-grid{grid-template-columns:1fr}}.pan-kpi-card{padding:14px 16px;border-radius:var(--rad);background:var(--surface);border:1px solid var(--border-1);display:flex;flex-direction:column;gap:4px;position:relative;overflow:hidden}.pan-kpi-card::before{content:"";position:absolute;top:0;left:0;right:0;height:2px;background:var(--border-1)}.pan-kpi-card.highlight::before{background:var(--accent)}.pan-kpi-card .k-label{font-size:var(--fs-2xs);color:var(--ink-3);display:flex;justify-content:space-between;align-items:center}.pan-kpi-card .k-val{font-size:var(--fs-xl);font-weight:700;font-family:var(--font-num);line-height:1.2;margin:4px 0}.pan-kpi-card .k-val small{font-size:var(--fs-2xs);font-weight:400;margin-left:4px;color:var(--ink-3)}.pan-kpi-card .k-sub{font-size:var(--fs-3xs);color:var(--ink-3);display:flex;align-items:center;gap:6px}.chain-flow-tree{display:flex;flex-direction:column;gap:14px}.chain-stage-blk{background:var(--surface);border:1px solid var(--border-1);border-radius:var(--rad);padding:16px;display:flex;flex-direction:column;gap:12px}.chain-stage-title{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--border-1);padding-bottom:10px}.chain-stage-title h3{margin:0;font-size:var(--fs-md);font-weight:700;display:flex;align-items:center;gap:8px}.chain-stage-title .s-badge{font-size:var(--fs-3xs);padding:2px 8px;border-radius:var(--r-1);background:var(--accent-tint);color:var(--accent-ink)}.chain-nodes-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px}.chain-node-box{background:color-mix(in srgb,var(--surface) 60%,transparent);border:1px solid var(--border-1);border-radius:var(--r-1);padding:12px 14px;display:flex;flex-direction:column;gap:8px;transition:transform .15s ease,border-color .15s ease}.chain-node-box:hover{transform:translateY(-2px);border-color:var(--accent)}.chain-nb-hd{display:flex;justify-content:space-between;align-items:center}.chain-nb-name{font-size:var(--fs-xs);font-weight:600;color:var(--ink-1)}.chain-nb-tag{font-size:var(--fs-3xs);padding:1px 6px;border-radius:3px;font-weight:500}.chain-nb-tag.tight{background:var(--up-tint);color:var(--up-ink)}.chain-nb-tag.stable{background:var(--down-tint);color:var(--down-ink)}.chain-nb-tag.ample{background:var(--accent-tint);color:var(--accent-ink)}.chain-nb-tag.bottom{background:var(--warn-tint);color:var(--warn-ink)}.chain-nb-body{display:flex;align-items:baseline;justify-content:space-between}.chain-nb-price{font-size:var(--fs-lg);font-weight:700;font-family:var(--font-num);color:var(--ink-1)}.chain-nb-unit{font-size:var(--fs-3xs);color:var(--ink-3);margin-left:2px}.chain-nb-chg{font-size:var(--fs-xs);font-family:var(--font-num);font-weight:600}.chain-nb-meta{display:grid;grid-template-columns:1fr 1fr;gap:6px;font-size:var(--fs-3xs);color:var(--ink-3);border-top:1px dashed var(--border-1);padding-top:8px}.chain-nb-meta div b{color:var(--ink-2);font-weight:500}.chain-nb-desc{font-size:var(--fs-3xs);color:var(--ink-3);line-height:1.4;margin-top:2px}.chain-stream-link{display:flex;align-items:center;justify-content:center;gap:8px;padding:6px;font-size:var(--fs-3xs);color:var(--ink-3);background:color-mix(in srgb,var(--surface) 30%,transparent);border-radius:var(--r-1);border:1px dashed var(--border-1)}.chain-insight-box{background:var(--surface);border:1px solid var(--border-1);border-radius:var(--rad);padding:16px;display:flex;flex-direction:column;gap:10px}.chain-insight-box h4{margin:0;font-size:var(--fs-md);font-weight:700;color:var(--ink-1)}.chain-insight-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px}.chain-insight-item{background:var(--surface-sunken);border:1px solid var(--border-1);border-radius:var(--r-1);padding:12px 14px;font-size:var(--fs-2xs);line-height:1.6;color:var(--ink-2)}.chain-insight-wide{grid-column:1/-1;border-top:1px dashed var(--border-2);padding-top:10px;margin-top:4px}.cmp-pairs-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px;background:var(--surface);border:1px solid var(--border-1);border-radius:var(--rad);padding:10px 14px}.cmp-pair-btn{background:0 0;border:1px solid var(--border-1);color:var(--ink-2);padding:6px 12px;border-radius:var(--r-1);font-size:var(--fs-2xs);cursor:pointer;display:flex;align-items:center;gap:6px;transition:all .15s ease}.cmp-pair-btn:hover{border-color:var(--accent);color:var(--on-accent)}.cmp-pair-btn.active{background:var(--accent);border-color:var(--accent);color:var(--on-accent);font-weight:600}.cmp-pair-btn .p-tag{font-size:var(--fs-3xs);opacity:.8;background:var(--surface-sunken);padding:1px 4px;border-radius:3px}.cmp-chart-panel{background:var(--surface);border:1px solid var(--border-1);border-radius:var(--rad);padding:16px;display:flex;flex-direction:column;gap:12px}.cmp-chart-hd{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px}.cmp-chart-legend{display:flex;align-items:center;gap:14px;font-size:var(--fs-2xs)}.cmp-chart-legend span{display:flex;align-items:center;gap:6px}.cmp-chart-legend i{width:12px;height:3px;border-radius:2px}.cmp-canvas-wrap{position:relative;width:100%;height:340px;touch-action:none}#cmpFullCanvas{width:100%;height:100%;display:block}.cmp-tooltip{position:absolute;display:none;pointer-events:none;background:var(--surface-elevated);border:1px solid var(--border-2);border-radius:var(--r-1);padding:8px 12px;font-size:var(--fs-3xs);box-shadow:var(--sh-3);z-index:10;backdrop-filter:blur(8px)}.cmp-tooltip .tt-date{font-weight:700;color:var(--ink-3);margin-bottom:4px;border-bottom:1px solid var(--border-1);padding-bottom:2px}.cmp-tooltip .tt-row{display:flex;justify-content:space-between;gap:12px;margin:2px 0}.cmp-tooltip .tt-fut,.leg-item .leg-fut{color:var(--viz-6)}.cmp-tooltip .tt-stk,.leg-item .leg-stk{color:var(--viz-1)}.cmp-tooltip .tt-spd,.leg-item .leg-spd{color:var(--warn)}.leg-item i.leg-fut{background:var(--viz-6)}.leg-item i.leg-stk{background:var(--viz-1)}.leg-item i.leg-spd{background:var(--warn)}.badge.up{background:var(--up-tint);color:var(--up-ink);border:1px solid var(--up)}.badge.down{background:var(--down-tint);color:var(--down-ink);border:1px solid var(--down)}.badge.flat{background:var(--surface-sunken);color:var(--ink-3);border:1px solid var(--border-1)}.badge{padding:2px 8px;border-radius:var(--r-1);font-size:var(--fs-3xs);font-weight:600;margin-left:8px}.wr-h{font-size:var(--fs-sm);margin:0 0 6px}.wr-h.up{color:var(--up-ink)}.wr-h.down{color:var(--down-ink)}.cmp-table-panel{background:var(--surface);border:1px solid var(--border-1);border-radius:var(--rad);padding:16px;display:flex;flex-direction:column;gap:10px}.cmp-table-panel h4{margin:0;font-size:var(--fs-md);font-weight:700}.cmp-custom{margin:8px 0;padding:10px 14px;border:1px solid var(--border-1);border-radius:var(--r-1);background:var(--surface-sunken)}.cmp-custom-t{font-size:var(--fs-2xs);font-weight:600;color:var(--ink-3)}.cmp-custom-x{color:var(--ink-4)}.cmp-custom-in{background:var(--surface);color:var(--ink-1);border:1px solid var(--border-2);border-radius:var(--r-1);padding:3px 6px;font-size:var(--fs-2xs)}.cmp-custom-code{width:130px;padding:3px 8px;font-family:var(--font-num)}#btnRunCustomCmp{padding:3px 12px;font-size:var(--fs-2xs)}.ratio-card.active,tr[data-rk].active{border-color:var(--accent)!important;box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 40%,transparent)!important}tr[data-rk]{cursor:pointer;transition:background .15s ease}tr[data-rk]:hover{background:color-mix(in srgb,var(--surface) 80%,#fff 5%)}.ratio-card{cursor:pointer}#rChartPanel{margin-top:14px;background:var(--surface);border:1px solid var(--border-1);border-radius:var(--rad);padding:16px}#rChart{min-height:250px}@media (max-width:768px){#dualPaneBtn,#dualPaneBtnF{display:none!important}#alarmBtn,#alarmBtnF{padding:0 4px!important;font-size:var(--fs-3xs)!important;width:auto!important}}table.tbl.tbl-ratio td.col-pctile,table.tbl.tbl-ratio th.col-pctile{display:table-cell!important;white-space:nowrap}@media (max-width:640px){.ratio-cards-grid{display:flex!important;overflow-x:auto!important;scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch;gap:8px!important;padding-bottom:6px!important;margin-right:-12px!important;margin-left:-12px!important;padding-left:12px!important;padding-right:12px!important}.ratio-cards-grid::-webkit-scrollbar{display:none}.ratio-cards-grid>.ratio-card{flex:0 0 250px!important;scroll-snap-align:start;padding:10px!important}table.tbl.tbl-ratio{min-width:360px}table.tbl.tbl-ratio td.col-pctile,table.tbl.tbl-ratio th.col-pctile{display:table-cell!important;white-space:nowrap!important;min-width:110px}table.tbl.tbl-ratio .pctbar{width:48px!important;display:inline-block!important;vertical-align:middle}table.tbl.tbl-ratio td[data-pr="4"],table.tbl.tbl-ratio td[data-pr="5"],table.tbl.tbl-ratio th[data-pr="4"],table.tbl.tbl-ratio th[data-pr="5"]{display:none}table.tbl.tbl-ratio td[data-pr="3"],table.tbl.tbl-ratio th[data-pr="3"]{display:table-cell!important}.appbar-inner{padding:0 8px!important;gap:4px!important}.appbar-actions{gap:0!important;flex-shrink:0!important}.appbar-actions .xbtn{padding:4px 5px!important}.pnav .pnav-item{padding:4px 8px!important;font-size:var(--fs-2xs)!important}.kpi-inner{display:grid!important;grid-template-columns:repeat(3,minmax(0,1fr))!important;gap:6px!important;padding:0!important;margin:0!important;overflow-x:visible!important}.kpi-t{flex:none!important;padding:8px 6px!important;border-radius:var(--r-1)!important;min-width:0!important}.kpi-t>b{font-size:var(--fs-md)!important;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important}.kpi-t>em{font-size:var(--fs-3xs)!important;white-space:nowrap!important}.kpi-t>span{font-size:var(--fs-3xs)!important;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important}.bnav{display:flex!important;width:100vw!important;max-width:100vw!important;overflow-x:auto!important;-webkit-overflow-scrolling:touch!important;scrollbar-width:none!important;padding-left:4px!important;padding-right:4px!important;box-sizing:border-box!important}.bnav::-webkit-scrollbar{display:none!important}.bnav>.tab{flex:1 1 0%!important;min-width:48px!important;max-width:none!important;padding:4px 2px!important;font-size:var(--fs-3xs)!important;font-weight:500!important;gap:1px!important;text-align:center!important;white-space:nowrap!important}.bnav .tab::before{width:16px!important;height:16px!important}@media (max-width:820px){.wab-fab:not(.is-mini){opacity:.78}.wab-fab:not(.is-mini):active,.wab-fab:not(.is-mini):focus{opacity:1}}}.wab-fab,.wab-panel{display:none!important}

/* mive content */
/* ============================================================================
   期货工作台 · 内容层（mive 审美）
   只处理 app.js 渲染出的业务组件；外壳见 shell.css。
   ========================================================================== */

/* ---------- 面板内容排布 ---------- */
.blk > .chart,
.blk > .chain-insight-box,
.blk > .chain-insight-item,
.blk > .macro-strip-grid,
.blk > .arbitrage-grid,
.blk > .ratio-cards-grid,
.blk > .market-status-bar,
.blk > .heat-wrap,
.blk > .pan-chart-card,
.blk > .grid-cards,
.blk > .skel-wrap,
.blk > .tbl-tools {
  margin-left: 0;
  margin-right: 0;
}
.blk > .chart,
.blk > .chain-insight-box,
.blk > .macro-strip-grid,
.blk > .arbitrage-grid,
.blk > .ratio-cards-grid,
.blk > .heat-wrap,
.blk > .pan-chart-card,
.blk > .skel-wrap {
  padding: 12px;
  box-sizing: border-box;
}
.blk > .chart {
  border: 0;
  border-radius: 0;
  background: transparent;
}
.blk > .kv,
.blk > .cols,
.blk > .tt-row {
  padding: 10px 12px;
}
.blk > .tbl-scroll {
  margin: 0;
}

/* ---------- 品种详情页头 ---------- */
.q-top {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
  padding: 14px 12px 10px;
  border-bottom: 1px solid var(--border-1);
}
.q-name {
  margin: 0;
  font-size: var(--fs-xl);
  font-weight: var(--fw-semibold);
  letter-spacing: -.015em;
  color: var(--ink-1);
}
.q-price {
  font-family: var(--font-num);
  font-size: 26px;
  font-weight: var(--fw-semibold);
  letter-spacing: -.02em;
  line-height: 1.15;
  color: var(--ink-1);
}
.q-unit {
  margin-left: 6px;
  font-size: var(--fs-2xs);
  font-weight: var(--fw-regular);
  color: var(--ink-3);
}
.q-chg {
  font-family: var(--font-num);
  font-size: var(--fs-xs);
  font-weight: var(--fw-medium);
}
.q-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 18px;
  padding: 8px 12px;
  border-bottom: 1px solid var(--border-1);
  color: var(--ink-3);
  font-size: var(--fs-2xs);
}
.q-meta span {
  display: inline-flex;
  align-items: baseline;
  gap: 5px;
}
.q-meta em {
  font-style: normal;
  color: var(--ink-4);
}
.q-meta b {
  font-family: var(--font-num);
  font-weight: var(--fw-medium);
  color: var(--ink-1);
}

/* ---------- pan（品种页分区） ---------- */
.pan-header {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 7px 12px;
  min-height: 34px;
  border-bottom: 1px solid var(--border-1);
  background: transparent;
}
.pan-title {
  margin: 0;
  font-size: var(--fs-xs);
  font-weight: var(--fw-semibold);
  color: var(--ink-1);
}
.pan-controls {
  margin-left: auto;
  display: flex;
  align-items: center;
  gap: 6px;
}
.pane-badge {
  padding: 0 6px;
  border-radius: var(--r-full);
  background: var(--surface-sunken);
  border: 1px solid var(--border-1);
  color: var(--ink-3);
  font-family: var(--font-num);
  font-size: 11px;
  line-height: 17px;
}
.pan-kpi-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
  gap: 1px;
  background: var(--border-1);
  border-top: 1px solid var(--border-1);
  border-bottom: 1px solid var(--border-1);
}
.pan-kpi-card {
  background: var(--surface);
  border: 0;
  border-radius: 0;
  padding: 9px 12px;
  min-width: 0;
}
.pan-kpi-card .k-label {
  display: block;
  font-size: 11px;
  color: var(--ink-3);
  line-height: 1.45;
}
.pan-kpi-card .k-val {
  display: block;
  margin-top: 2px;
  font-family: var(--font-num);
  font-size: 15px;
  font-weight: var(--fw-semibold);
  color: var(--ink-1);
  font-variant-numeric: tabular-nums;
}
.pan-kpi-card .k-sub {
  display: block;
  margin-top: 1px;
  font-size: 11px;
  color: var(--ink-4);
}
.pan-chart-card {
  padding: 10px 12px;
  border-top: 1px solid var(--border-1);
}
.pcc-hd {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 8px;
  color: var(--ink-3);
  font-size: var(--fs-2xs);
}
.legend-row {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin-left: auto;
  color: var(--ink-3);
  font-size: 11px;
}
.legend-row .leg-item {
  display: inline-flex;
  align-items: center;
  gap: 5px;
}
.pcc-body {
  min-height: 220px;
}

/* ---------- 键值 / 行 ---------- */
.kv {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
  gap: 1px;
  background: var(--border-1);
  border-top: 1px solid var(--border-1);
}
.kv > div {
  background: var(--surface);
  padding: 8px 12px;
  min-width: 0;
}
.kv > div > b,
.kv > div > .k-val {
  font-family: var(--font-num);
  font-weight: var(--fw-semibold);
  color: var(--ink-1);
}
.kv > div > span,
.kv > div > .k-label {
  display: block;
  color: var(--ink-3);
  font-size: 11px;
}
.cols {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 12px;
}
.tt-row {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 7px 12px !important;
  border-bottom: 1px solid var(--border-1);
  font-size: var(--fs-2xs);
}
.tt-row:last-child {
  border-bottom: 0;
}
.tt-row .tt-date {
  color: var(--ink-3);
  font-family: var(--font-num);
}
.tt-row .tt-fut,
.tt-row .tt-stk,
.tt-row .tt-spd {
  margin-left: auto;
  font-family: var(--font-num);
  color: var(--ink-1);
}

/* ---------- 产业链 ---------- */
.chain-page .chain-flow-tree {
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.chain-stage-blk {
  background: var(--surface);
  border: 1px solid var(--border-1);
  border-radius: var(--r-2);
  overflow: hidden;
}
.chain-stage-title {
  margin: 0;
  padding: 7px 12px;
  border-bottom: 1px solid var(--border-1);
  background: var(--surface-sunken);
  color: var(--ink-2);
  font-size: 11px;
  font-weight: var(--fw-semibold);
  letter-spacing: .04em;
}
.chain-nodes-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
  gap: 1px;
  background: var(--border-1);
}
.chain-node-box {
  background: var(--surface);
  padding: 10px 12px;
  min-width: 0;
  transition: background-color var(--dur-1) var(--ease-std);
}
.chain-node-box:hover {
  background: var(--surface-hover);
}
.chain-nb-hd {
  display: flex;
  align-items: center;
  gap: 6px;
}
.chain-nb-name {
  font-size: var(--fs-2xs);
  font-weight: var(--fw-medium);
  color: var(--ink-1);
}
.chain-nb-tag,
.s-badge {
  margin-left: auto;
  padding: 0 5px;
  border-radius: var(--r-1);
  background: var(--surface-sunken);
  border: 1px solid var(--border-1);
  color: var(--ink-3);
  font-size: 11px;
  line-height: 16px;
}
.chain-nb-price {
  margin-top: 4px;
  font-family: var(--font-num);
  font-size: 15px;
  font-weight: var(--fw-semibold);
  color: var(--ink-1);
}
.chain-nb-unit {
  margin-left: 3px;
  font-size: 11px;
  color: var(--ink-4);
}
.chain-nb-chg {
  font-family: var(--font-num);
  font-size: 11px;
}
.chain-nb-meta,
.chain-nb-desc {
  margin-top: 3px;
  color: var(--ink-3);
  font-size: 11px;
  line-height: 1.5;
}
.chain-stream-link {
  height: 1px;
  background: var(--border-1);
}
.chain-insight-box,
.chain-insight-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 1px;
  background: var(--border-1);
  border: 1px solid var(--border-1);
  border-radius: var(--r-2);
  overflow: hidden;
}
.chain-insight-item {
  background: var(--surface);
  padding: 10px 12px;
  font-size: var(--fs-2xs);
  line-height: 1.6;
  color: var(--ink-2);
}
.chain-insight-wide {
  grid-column: 1 / -1;
}
.chain-insight-item b,
.chain-insight-item .highlight {
  color: var(--accent-ink);
  font-weight: var(--fw-semibold);
}

/* ---------- 比价 / 跨品种 ---------- */
.ratio-cards-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 10px;
}
.ratio-card {
  background: var(--surface);
  border: 1px solid var(--border-1);
  border-radius: var(--r-2);
  overflow: hidden;
}
.ratio-card-h {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 7px 12px;
  border-bottom: 1px solid var(--border-1);
  font-size: var(--fs-2xs);
  font-weight: var(--fw-semibold);
  color: var(--ink-1);
}
.ratio-card-body {
  padding: 10px 12px;
}
.ratio-val {
  font-family: var(--font-num);
  font-size: 20px;
  font-weight: var(--fw-semibold);
  letter-spacing: -.02em;
  color: var(--ink-1);
}
.ratio-c20 {
  margin-left: 6px;
  font-family: var(--font-num);
  font-size: 11px;
  color: var(--ink-3);
}
.ratio-pill {
  display: inline-flex;
  align-items: center;
  padding: 0 6px;
  border-radius: var(--r-full);
  font-family: var(--font-num);
  font-size: 11px;
  line-height: 17px;
  border: 1px solid var(--border-1);
  background: var(--surface-sunken);
  color: var(--ink-3);
}
.ratio-pill.pill-hi {
  background: var(--up-tint);
  border-color: color-mix(in srgb, var(--up) 45%, transparent);
  color: var(--up-ink);
}
.ratio-pill.pill-lo {
  background: var(--down-tint);
  border-color: color-mix(in srgb, var(--down) 45%, transparent);
  color: var(--down-ink);
}
.ratio-pctile-row {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-top: 8px;
  font-size: 11px;
  color: var(--ink-3);
}
.pctbar {
  flex: 1;
  height: 4px;
  border-radius: var(--r-full);
  background: var(--surface-sunken);
  overflow: hidden;
}
.pctbar i {
  display: block;
  height: 100%;
  background: var(--accent);
}
.ratio-card-footer {
  padding: 7px 12px;
  border-top: 1px solid var(--border-1);
  color: var(--ink-3);
  font-size: 11px;
}

/* ---------- 期股联动 / 自定义比价 ---------- */
.compare-page .cmp-pairs-row,
.cmp-custom,
.cmp-custom-t {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px;
}
.cmp-pair-btn {
  height: 28px;
  padding: 0 10px;
  border-radius: var(--r-2);
  border: 1px solid var(--border-1);
  background: var(--surface-sunken);
  color: var(--ink-2);
  font-size: var(--fs-2xs);
}
.cmp-pair-btn:hover {
  border-color: var(--border-2);
  color: var(--ink-1);
}
.cmp-pair-btn.active {
  background: var(--accent-tint);
  border-color: var(--accent-line);
  color: var(--accent-ink);
}
.cmp-custom {
  padding: 10px 12px;
  border-top: 1px solid var(--border-1);
}
.cmp-custom-in,
.dual-ipt {
  height: 30px;
  padding: 0 10px;
  border-radius: var(--r-2);
  border: 1px solid var(--border-1);
  background: var(--surface-sunken);
  color: var(--ink-1);
  font-size: var(--fs-2xs);
}
.cmp-custom-t {
  color: var(--ink-3);
  font-size: var(--fs-2xs);
}
.p-tag {
  padding: 0 6px;
  border-radius: var(--r-1);
  background: var(--accent-tint);
  color: var(--accent-ink);
  font-family: var(--font-num);
  font-size: 11px;
}
.dual-pane-frame-box {
  border: 1px solid var(--border-1);
  border-radius: var(--r-2);
  overflow: hidden;
  background: var(--surface);
}

/* ---------- 外盘 / 宏观条 / 套利 ---------- */
.macro-strip-grid,
.arbitrage-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
  gap: 1px;
  background: var(--border-1);
  border: 1px solid var(--border-1);
  border-radius: var(--r-2);
  overflow: hidden;
}
.macro-kpi-card,
.arbitrage-card {
  background: var(--surface);
  padding: 10px 12px;
  min-width: 0;
}
.macro-kpi-h,
.arbitrage-card-h {
  display: flex;
  align-items: center;
  gap: 6px;
  color: var(--ink-3);
  font-size: 11px;
}
.macro-kpi-val {
  display: block;
  margin-top: 3px;
  font-family: var(--font-num);
  font-size: 17px;
  font-weight: var(--fw-semibold);
  color: var(--ink-1);
}
.macro-kpi-chg {
  font-family: var(--font-num);
  font-size: 11px;
}
.macro-kpi-sub {
  display: block;
  margin-top: 2px;
  color: var(--ink-4);
  font-size: 11px;
}
.arb-badge {
  margin-left: auto;
  padding: 0 5px;
  border-radius: var(--r-1);
  border: 1px solid var(--border-1);
  background: var(--surface-sunken);
  color: var(--ink-3);
  font-size: 11px;
  line-height: 16px;
}
.arb-metrics {
  margin-top: 6px;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 4px 10px;
  font-size: 11px;
  color: var(--ink-3);
}
.arb-metrics b {
  font-family: var(--font-num);
  color: var(--ink-1);
}
.market-status-bar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px 16px;
  padding: 8px 12px;
  border: 1px solid var(--border-1);
  border-radius: var(--r-2);
  background: var(--surface-sunken);
  color: var(--ink-3);
  font-size: var(--fs-2xs);
}
.mkt-clock-item {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.mkt-clock-dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--ok);
}
.gl-filter-pills {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  padding: 10px 12px;
  border-bottom: 1px solid var(--border-1);
}
.gl-pill-btn,
.gl-hedge-btn {
  height: 28px;
  padding: 0 10px;
  border-radius: var(--r-2);
  border: 1px solid var(--border-1);
  background: var(--surface-sunken);
  color: var(--ink-2);
  font-size: var(--fs-2xs);
}
.gl-pill-btn.active,
.gl-hedge-btn.active {
  background: var(--accent-tint);
  border-color: var(--accent-line);
  color: var(--accent-ink);
}
.gl-range-cell {
  /* 撑满单元格：legacy 层写死了 max-width:120px，而这一列实际有 199px，
     右侧 79px 空着、轨道只有 96px，两个 6 位数值（各 39.75px）中间只剩 16px。
     位数一变长就挤在一起，看起来像「数字在跳」。这里覆盖为撑满。 */
  display: flex;
  flex-direction: column;
  width: 100%;
  max-width: none;
  min-width: 0;
  /* 不要 gap：见 .gl-range-labels 的说明 */
  gap: 0;
  padding: 6px 12px;
  border-top: 1px solid var(--border-1);
}
.gl-range-track {
  height: 4px;
  border-radius: var(--r-full);
  background: var(--surface-sunken);
  overflow: hidden;
}
.gl-range-fill {
  height: 100%;
  background: var(--accent);
  /* 宽度变化只在容器内重绘，不参与任何过渡，避免视觉上「爬」 */
  transition: none;
}
.gl-range-labels {
  display: flex;
  justify-content: space-between;
  /* 用固定高度 + 行高锁定文字基线。
     原来同时存在 gap:2px（来自 legacy 的 .gl-range-cell）和 margin-top:3px，
     再叠 11px 文字的行高 15.4px，实测行高定格在 50.05px 这种带小数的值；
     浏览器在不同 tick 里对亚像素取整方式不一致，整行就会出现上下微抖。
     现在：gap 归零、margin 用固定值、line-height 锁定整数。 */
  margin-top: 4px;
  height: 15px;
  line-height: 15px;
  font-family: var(--font-num);
  font-size: 11px;
  color: var(--ink-4);
  /* 两端对齐时两端标签各占一半，中间自然留出空隙 */
  gap: 8px;
}
.gl-range-labels > span {
  /* 阻止标签被压扁：位数变多时优先压缩中间空隙，而不是挤字 */
  flex: 0 0 auto;
  /* 数字等宽，位数变化不改变标签自身宽度以外的东西 */
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

/* ---------- 热力 ---------- */
.heat-wrap,
.heat {
  overflow-x: auto;
}
.heat-row {
  display: flex;
  gap: 2px;
  margin-bottom: 2px;
}
.heat-c {
  width: 34px;
  height: 26px;
  border-radius: var(--r-0);
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--font-num);
  font-size: 11px;
  color: var(--ink-1);
}
.heat-h {
  font-size: 11px;
  color: var(--ink-3);
  font-weight: var(--fw-medium);
}

/* ---------- 自选浮层 ---------- */
.wl-backdrop {
  position: fixed;
  inset: 0;
  z-index: var(--z-modal);
  background: rgba(0, 0, 0, .58);
  -webkit-backdrop-filter: blur(3px);
  backdrop-filter: blur(3px);
}
.wl-panel {
  background: var(--surface);
  border: 1px solid var(--border-1);
  border-radius: var(--r-2);
  box-shadow: var(--sh-3);
  color: var(--ink-1);
  overflow: hidden;
}
.wl-header {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 12px;
  border-bottom: 1px solid var(--border-1);
  font-size: var(--fs-sm);
  font-weight: var(--fw-semibold);
}
.wl-header-actions {
  margin-left: auto;
  display: flex;
  gap: 6px;
}
.wl-hint {
  padding: 8px 12px;
  color: var(--ink-3);
  font-size: 11px;
  border-bottom: 1px solid var(--border-1);
}
.wl-list {
  display: flex;
  flex-direction: column;
}
.wl-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 12px;
  border-bottom: 1px solid var(--border-1);
  background: transparent;
}
.wl-item:hover {
  background: var(--surface-hover);
}
.wl-item:last-child {
  border-bottom: 0;
}
.wl-name {
  font-size: var(--fs-2xs);
  font-weight: var(--fw-medium);
  color: var(--ink-1);
}
.wl-code {
  font-family: var(--font-num);
  font-size: 11px;
  color: var(--ink-4);
}
.wl-price,
.wl-chg {
  font-family: var(--font-num);
  font-size: var(--fs-2xs);
  text-align: right;
}
.wl-item-data {
  margin-left: auto;
  display: flex;
  align-items: baseline;
  gap: 10px;
}
.wl-del-btn {
  width: 22px;
  height: 22px;
  border: 0;
  border-radius: var(--r-1);
  background: transparent;
  color: var(--ink-4);
}
.wl-del-btn:hover {
  background: var(--up-tint);
  color: var(--up-ink);
}
.wl-empty {
  padding: 26px 16px;
  text-align: center;
  color: var(--ink-3);
  font-size: var(--fs-2xs);
}

/* ---------- 骨架 ---------- */
.skel-wrap {
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.skel-grid {
  background: transparent;
}
.skel-card {
  min-height: 76px;
  background: var(--surface-sunken);
  border: 0;
  border-radius: var(--r-2);
}
.skel-bar-top {
  height: 30px;
  border-radius: var(--r-2);
  background: var(--surface-sunken);
  animation: wsSkel var(--dur-skel) ease-in-out infinite;
}

/* ---------- 图表提示 ---------- */
.chart-tooltip {
  background: var(--surface-elevated);
  border: 1px solid var(--border-2);
  border-radius: var(--r-2);
  box-shadow: var(--sh-2);
  color: var(--ink-1);
  font-size: 11px;
}

/* ---------- 二级页签（app.js 在侧栏外可能生成的旧 tab 样式兜底） ---------- */
.tablist:not(.ws-sidebar .tablist) .tab {
  height: 30px;
  padding: 0 10px;
  border-radius: var(--r-2);
  font-size: var(--fs-2xs);
  font-weight: var(--fw-medium);
  color: var(--ink-2);
}
.tablist:not(.ws-sidebar .tablist) .tab[aria-selected=true] {
  background: var(--surface-hover);
  color: var(--ink-1);
}

/* ---------- 小屏补排 ---------- */
@media (max-width: 640px) {
  .q-top {
    padding: 12px 10px 8px;
    flex-direction: column;
    gap: 4px;
  }
  .q-price {
    font-size: 22px;
  }
  .pan-kpi-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .macro-strip-grid,
  .arbitrage-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .chain-nodes-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .ratio-cards-grid {
    grid-template-columns: 1fr;
  }
  .kv {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .blk > .chart,
  .blk > .chain-insight-box,
  .blk > .macro-strip-grid,
  .blk > .arbitrage-grid,
  .blk > .ratio-cards-grid,
  .blk > .heat-wrap,
  .blk > .pan-chart-card,
  .blk > .skel-wrap {
    padding: 10px;
  }
}

/* 产业链 / 期股联动：整页一个玻璃面板，内部区块用分隔线，不再套娃 */
.chain-page,
.compare-page {
  background: var(--surface);
  border: 1px solid var(--border-1);
  border-radius: var(--r-3);
  padding: 12px;
  margin: 0 0 10px;
  overflow: hidden;
}
.chain-page .pan-header,
.compare-page .pan-header {
  padding: 0 0 8px;
  border-bottom: 1px solid var(--border-1);
  border-radius: 0;
  background: transparent;
}
.chain-page .pan-kpi-grid,
.compare-page .pan-kpi-grid {
  border-left: 0;
  border-right: 0;
  border-radius: 0;
  margin: 10px 0;
}
.chain-page .chain-flow-tree {
  gap: 0;
}
.chain-page .chain-stage-blk {
  border: 0;
  border-radius: 0;
  border-bottom: 1px solid var(--border-1);
  padding: 10px 0;
}
.chain-page .chain-stage-blk:last-child {
  border-bottom: 0;
}
.chain-page .chain-stream-link {
  display: none;
}
.chain-page .chain-insight-box,
.compare-page .chain-insight-box {
  border: 0;
  border-top: 1px solid var(--border-1);
  border-radius: 0;
  margin-top: 10px;
  padding: 10px 0 0;
}
.compare-page .cmp-pairs-row,
.compare-page .blk.cmp-custom {
  border: 0;
  border-radius: 0;
  background: transparent;
  margin: 0;
  padding: 8px 0;
  border-bottom: 1px solid var(--border-1);
}
.compare-page .pan-chart-card {
  padding: 10px 0;
}


/* shared shell */
/* ============================================================================
   盘鉴工作台 · 表现层样式（2026-11-04 重构）
   ----------------------------------------------------------------------------
   ## 这次做了什么

   1. **同选择器同属性去重**：旧版 3,845 行里同一 (选择器, 属性) 被写了多次，
      共 216 组重复、114 组值不相同。这些值没有对错，只能靠文件顺序决胜负，
      导致谁都不敢删。折叠后每组只留最后一次赋值 —— 这正是浏览器原本的结论。
   2. **补文档与纪律**（见文件末尾「维护约定」）。
   3. **统一圆角**：8 种裸 px 收敛到 5 档令牌。
   4. **移除误导**：删掉 75 个自动生成的分节标题 —— 九层补丁是交织的，
      按语义分层拆分只会得到 74 次层切换，比不拆更难读。

   ## 为什么没有按「基础/布局/组件」拆成多个文件

   试过，并量化了：按语义给每条规则打标签后，整份文件层切换 74 次。
   而 CSS 的顺序会影响同特异性选择器的胜负（实测 5 对），
   重排顺序就无法再证明「与旧版等价」。**可证明的等价 > 好看的目录结构**。
   语义通过选择器命名与注释表达，不通过文件划分。

   ## 可验证的等价性

   改动前后用两个脚本证明没有行为变化：
     python3 audit/verify-css-equivalence.py   # 每选择器最终属性集逐一比对
     node audit/style-fingerprint.cjs compare   # 真机计算样式（48 个组合）
   前者对 614 个「媒体上下文 × 选择器」组合比对通过，0 差异。
   ========================================================================== */

html {
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
}
html, body {
  max-width: 100vw;
  overflow-x: hidden;
}
body {
  margin: 0;
  min-height: 100dvh;
  background: var(--bg);
  color: var(--ink-1);
  font: var(--fw-regular) var(--fs-sm) / var(--lh-body) var(--font-sans);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
::selection {
  background: var(--accent-tint);
  color: var(--ink-1);
}

a {
  color: var(--accent-ink);
  text-decoration: none;
}
a:hover {
  color: var(--accent);
}
:focus-visible {
  outline: var(--focus-width) solid var(--focus-color);
  outline-offset: var(--focus-offset);
  border-radius: var(--r-1);
}
button, input, select, textarea {
  font: inherit;
  color: inherit;
}
button {
  cursor: pointer;
}
hr {
  border: 0;
  border-top: 1px solid var(--border-1);
  margin: 12px 0;
}

.sr-only, .vh {
  position: absolute !important;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
  border: 0;
}
.skip, .skiplink {
  position: fixed;
  top: -100px;
  left: 16px;
  z-index: var(--z-skiplink);
  padding: 8px 14px;
  border-radius: var(--r-2);
  background: var(--surface);
  border: 1px solid var(--border-1);
  color: var(--ink-1);
  font-size: var(--fs-xs);
}
.skip:focus, .skiplink:focus {
  top: 10px;
}
::-webkit-scrollbar {
  width: 10px;
  height: 10px;
}

::-webkit-scrollbar-track {
  background: transparent;
}
::-webkit-scrollbar-thumb {
  background: var(--border-2);
  border-radius: var(--r-full);
  border: 3px solid var(--bg);
}
::-webkit-scrollbar-thumb:hover {
  background: var(--ink-4);
}
.ws {
  display: flex;
  align-items: stretch;
  min-height: 100dvh;
}

/* 圆角体系（2026-11-04 统一）
   ----------------------------------------------------------------------------
   原来 8 种圆角并存（2/3/4/5/6/7/14/999），其中 6px 用得最多却没有令牌，
   同一界面里标签 4、按钮 5、tab 6、品牌 7 并排，说不出哪里不对但不整齐。
   现收敛为 5 档，全部走令牌：
     --r-0    3px   极小装饰件、滚动条
     --r-1    5px   小标签、小按钮、进度条
     --r-2    8px   面板与控件（主力档）
     --r-3   10px   大面板、浮层、抽屉
     --r-full 999px 胶囊
   新增元素请选最接近的一档，不要再写裸 px。 */

.ws-sidebar {
  position: fixed;
  inset: 0 auto 0 0;
  z-index: 60;
  width: var(--ws-sidebar-w);
  display: flex;
  flex-direction: column;
  background: var(--surface);
  border-right: 1px solid var(--border-1);
  color: var(--ink-1);
}
.ws-main {
  flex: 1 1 auto;
  min-width: 0;
  margin-left: var(--ws-sidebar-w);
  display: flex;
  flex-direction: column;
  min-height: 100dvh;
}
.ws-brandrow {
  display: flex;
  flex-direction: column;
  gap: 3px;
  padding: 14px 16px 8px;
}
.ws .brand, .ws-sidebar .brand {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  padding: 0;
  background: none !important;
  color: var(--ink-1) !important;
  border-radius: 0;
  font-size: 15px;
  font-weight: var(--fw-semibold);
  letter-spacing: -.01em;
  line-height: 24px;
  text-decoration: none;
  white-space: nowrap;
}
.ws .brand:hover {
  color: var(--ink-1);
}
.ws .brand .bname {
  color: var(--ink-1) !important;
}
.ws .brand .blogo, .ws-logo {
  width: 24px;
  height: 24px;
  flex: 0 0 24px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--r-2);
  background: var(--accent);
  color: var(--on-accent);
  font-size: 13px;
  font-weight: var(--fw-semibold);
  line-height: 1;
}
.ws-brand-sub {
  padding-left: 33px;
  font-size: var(--fs-3xs);
  line-height: 1.45;
  color: var(--ink-3);
  letter-spacing: .01em;
}
.ws-brand-sub b {
  color: var(--ink-2);
  font-weight: var(--fw-medium);
}
.ws-sidebar .pnav {
  order: 0;
  margin: 6px 12px 4px;
  padding: 3px;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 3px;
  border: 1px solid var(--border-1);
  border-radius: var(--r-2);
  background: var(--surface-sunken);
}
.ws-sidebar .pnav .pn {
  height: 28px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--r-2);
  color: var(--ink-2);
  font-size: var(--fs-xs);
  font-weight: var(--fw-semibold);
  letter-spacing: .01em;
  transition: background-color var(--dur-1) var(--ease-std), color var(--dur-1) var(--ease-std);
}
.ws-sidebar .pnav .pn:hover {
  background: var(--surface-hover);
  color: var(--ink-1);
}
.ws-sidebar .pnav .pn[aria-current=page] {
  background: var(--accent);
  color: var(--on-accent);
  box-shadow: none;
}
.ws-navlabel {
  padding: 10px 16px 5px;
  font-family: var(--font-num);
  font-size: 11px;
  line-height: 1.2;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--ink-4);
}
.ws-sidebar .tablist {
  position: static;
  order: 0;
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: 1px;
  flex: 1 1 auto;
  min-height: 0;
  height: auto;
  padding: 2px 8px 10px;
  overflow-y: auto;
  overflow-x: hidden;
  scrollbar-width: thin;
  border: 0;
  background: transparent;
}
.ws-sidebar .tablist::after, .ws-sidebar .tablist::before {
  display: none;
}
.ws-sidebar .tab {
  position: relative;
  width: 100%;
  height: 32px;
  min-height: 32px;
  padding: 0 10px;
  display: flex;
  align-items: center;
  justify-content: flex-start;
  gap: 10px;
  border: 0;
  border-radius: var(--r-2);
  background: transparent;
  color: var(--ink-2);
  font-size: var(--fs-sm);
  font-weight: var(--fw-medium);
  letter-spacing: 0;
  text-align: left;
  transition: background-color var(--dur-1) var(--ease-std), color var(--dur-1) var(--ease-std);
}
.ws-sidebar .tab:hover {
  background: var(--surface-hover);
  color: var(--ink-1);
}
.ws-sidebar .tab[aria-selected=true] {
  background: var(--surface-hover);
  color: var(--ink-1);
  box-shadow: inset 2px 0 var(--accent);
}
.ws-sidebar .tab::after {
  display: none;
}
.ws-sidebar .tab .ic, .ws-sidebar .tab > svg {
  width: 16px;
  height: 16px;
  flex: 0 0 16px;
  color: var(--ink-3);
  opacity: .95;
}
.ws-sidebar .tab:hover .ic, .ws-sidebar .tab:hover > svg {
  color: var(--ink-2);
}
.ws-sidebar .tab[aria-selected=true] .ic, .ws-sidebar .tab[aria-selected=true] > svg {
  color: var(--accent);
}
.ws-sidebar .tab .tab-count {
  margin-left: auto;
  font-family: var(--font-num);
  font-size: 11px;
  color: var(--ink-3);
}
.ws-sidebar .tablist > button {
  position: relative;
  width: 100%;
  height: 32px;
  min-height: 32px;
  max-height: 32px;
  padding: 0 10px;
  display: flex;
  align-items: center;
  justify-content: flex-start;
  gap: 10px;
  border: 0;
  border-radius: var(--r-2);
  background: transparent;
  color: var(--ink-2);
  font-family: var(--font-sans);
  font-size: var(--fs-sm);
  font-weight: var(--fw-medium);
  line-height: 1.2;
  text-align: left;
  white-space: nowrap;
  transition: background-color var(--dur-1) var(--ease-std), color var(--dur-1) var(--ease-std);
}
.ws-sidebar .tablist > button:hover {
  background: var(--surface-hover);
  color: var(--ink-1);
}
.ws-sidebar .tablist > button[aria-selected=true] {
  background: var(--surface-hover);
  color: var(--ink-1);
  box-shadow: inset 2px 0 var(--accent);
}
.ws-sidebar .tablist > button::after {
  display: none;
}
.ws-sidebar .tablist > button .ic, .ws-sidebar .tablist > button > svg {
  width: 16px;
  height: 16px;
  flex: 0 0 16px;
  color: var(--ink-3);
}
.ws-sidebar .tablist > button[aria-selected=true] .ic, .ws-sidebar .tablist > button[aria-selected=true] > svg {
  color: var(--accent);
}
.ws-sidefoot {
  margin-top: auto;
  padding: 12px 16px 14px;
  border-top: 1px solid var(--border-1);
  display: flex;
  flex-direction: column;
  gap: 8px;
  font-size: var(--fs-3xs);
  color: var(--ink-3);
}
.ws-sidefoot .ws-live {
  display: flex;
  align-items: center;
  gap: 7px;
}
.ws-sidefoot .ws-sidehint {
  line-height: 1.5;
  color: var(--ink-4);
}
.ws-sidefoot a {
  color: var(--ink-3);
}
.ws-sidefoot a:hover {
  color: var(--accent-ink);
}
.ws-main > .appbar, .ws-main .appbar {
  position: sticky;
  top: 0;
  z-index: var(--z-sticky);
  height: var(--appbar-h);
  min-height: var(--appbar-h);
  padding: 0;
  display: block;
  flex-wrap: nowrap;
  background: color-mix(in srgb, var(--bg) 92%, transparent);
  -webkit-backdrop-filter: saturate(160%) blur(12px);
  backdrop-filter: saturate(160%) blur(12px);
  border-bottom: 1px solid var(--border-1);
  box-shadow: none;
}
.ws-main > .appbar.is-stuck {
  box-shadow: none;
  border-bottom-color: var(--border-1);
}
.ws .appbar-inner {
  max-width: none;
  width: 100%;
  height: var(--appbar-h);
  min-height: var(--appbar-h);
  margin: 0;
  padding: 0 18px;
  display: flex;
  align-items: center;
  gap: 12px;
}
.ws-crumb {
  display: flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
  font-size: var(--fs-xs);
  color: var(--ink-3);
  white-space: nowrap;
}
.ws-crumb .sep {
  color: var(--ink-4);
}
.ws-crumb b {
  color: var(--ink-1);
  font-weight: var(--fw-medium);
  overflow: hidden;
  text-overflow: ellipsis;
}
.ws-menu {
  display: none;
  width: 28px;
  height: 28px;
  padding: 0;
  align-items: center;
  justify-content: center;
  border: 0;
  border-radius: var(--r-2);
  background: transparent;
  color: var(--ink-2);
}
.ws-menu:hover {
  background: var(--surface-hover);
  color: var(--ink-1);
}
.ws-menu svg {
  width: 18px;
  height: 18px;
}
.ws .appbar-inner > * {
  order: 0 !important;
}
.ws .appbar-actions {
  margin-left: auto;
  display: flex;
  align-items: center;
  gap: 2px;
}
.ws .gsearch {
  margin-left: auto;
}
.ws .xbtn {
  width: 28px;
  height: 28px;
  padding: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid transparent;
  border-radius: var(--r-2);
  background: transparent;
  color: var(--ink-3);
  font-size: var(--fs-xs);
  line-height: 1;
  transition: background-color var(--dur-1) var(--ease-std), color var(--dur-1) var(--ease-std), border-color var(--dur-1) var(--ease-std);
}
.ws .xbtn:hover {
  background: var(--surface-hover);
  border-color: var(--border-1);
  color: var(--ink-1);
}
.ws .xbtn svg {
  width: 16px;
  height: 16px;
}
.ws .xbtn--txt {
  width: auto;
  padding: 0 8px;
  gap: 5px;
  font-size: var(--fs-2xs);
}
.ws .xbtn-t {
  display: inline;
}
.ws .appmore {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: 2px;
}
.ws .appmore > summary {
  list-style: none;
  cursor: pointer;
}
.ws .appmore > summary::-webkit-details-marker {
  display: none;
}
.ws .appmore .amore-sum {
  display: none;
  width: 28px;
  height: 28px;
  align-items: center;
  justify-content: center;
  border-radius: var(--r-2);
  color: var(--ink-3);
}
.ws .appmore .amore-sum:hover {
  background: var(--surface-hover);
  color: var(--ink-1);
}
.ws .appmore .amore-sum svg {
  width: 16px;
  height: 16px;
}
.ws .live-pulse-container {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 0 8px;
  height: 24px;
  border: 1px solid var(--border-1);
  border-radius: var(--r-full);
  background: var(--surface-sunken);
  color: var(--ink-3);
  font-family: var(--font-num);
  font-size: 11px;
  letter-spacing: .08em;
  white-space: nowrap;
}
.ws .live-pulse-dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--ok);
  flex: 0 0 6px;
}
.ws .live-pulse-text {
  color: var(--ink-3);
}
.ws .live-pulse-container.is-offline .live-pulse-dot {
  background: var(--ink-4);
}
.ws .rt-dot {
  margin-left: 0 !important;
}
.ws .scroll-progress {
  height: 2px;
  background: var(--accent);
}
.ws .wl-count-badge {
  position: absolute;
  top: 2px;
  right: 1px;
  min-width: 13px;
  height: 13px;
  padding: 0 3px;
  border-radius: var(--r-full);
  background: var(--accent);
  color: var(--on-accent);
  font-family: var(--font-num);
  font-size: 11px;
  line-height: 13px;
  text-align: center;
}
.ws .wrap, .ws .page-main {
  width: 100%;
  max-width: var(--max-w);
  margin: 0 auto;
  padding: 14px 18px 24px;
  box-sizing: border-box;
  min-width: 0;
}
.ws .wrap > h1, .ws .page-main > h1 {
  margin: 0;
}
.ws-pagehead {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 12px;
  margin: 0 0 10px;
  padding: 0 2px;
}
.ws-pagehead .ws-kicker {
  font-family: var(--font-num);
  font-size: 11px;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--accent-ink);
}
.ws-pagehead h1 {
  margin: 2px 0 0;
  font-size: var(--fs-xl);
  font-weight: var(--fw-semibold);
  letter-spacing: -.015em;
  line-height: 1.25;
  color: var(--ink-1);
}
.ws-pagehead p {
  margin: 3px 0 0;
  font-size: var(--fs-xs);
  color: var(--ink-3);
}
.ws-pagehead .ws-headmeta {
  font-family: var(--font-num);
  font-size: var(--fs-2xs);
  color: var(--ink-3);
  white-space: nowrap;
}

.glass, .blk, .card {
  background: var(--surface);
  border: 1px solid var(--border-1);
  border-radius: var(--r-3);
  box-shadow: none;
  margin: 0 0 10px;
  overflow: hidden;
}
.blk > h2, .card > h2 {
  position: relative;
  display: flex;
  align-items: center;
  gap: 8px;
  min-height: var(--panel-head-h);
  margin: 0;
  padding: 0 14px;
  border: 0;
  border-bottom: 1px solid var(--border-1);
  background: transparent;
  color: var(--ink-1);
  font-family: var(--font-sans);
  font-size: var(--fs-sm);
  font-weight: var(--fw-semibold);
  line-height: var(--panel-head-h);
  letter-spacing: 0;
  text-transform: none;
}
.blk > h2::before, .card > h2::before {
  content: none !important;
  display: none !important;
}
.blk > h2 .hint, .card > h2 .hint {
  color: var(--ink-3);
  font-weight: var(--fw-regular);
  font-size: var(--fs-2xs);
}
.blk > h2 .tag, .card > h2 .tag {
  margin-left: auto;
  font-family: var(--font-num);
  font-size: 11px;
  color: var(--ink-3);
  font-weight: var(--fw-regular);
  white-space: nowrap;
}

.ws-panel-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  min-height: 34px;
  padding: 6px 12px;
  border-bottom: 1px solid var(--border-1);
  color: var(--ink-1);
  font-size: var(--fs-xs);
  font-weight: var(--fw-semibold);
  line-height: 18px;
}
.ws-panel-head .ws-panel-sub {
  margin-left: auto;
  font-family: var(--font-num);
  font-size: 11px;
  font-weight: var(--fw-regular);
  color: var(--ink-3);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.ws-panel-body {
  padding: 12px;
}

.tbl-scroll {
  position: relative;
  max-width: 100%;
  border: 0;
  border-radius: 0;
  background: transparent;
  box-shadow: none;
  overflow: auto;
}
.blk > .tbl-scroll, .card > .tbl-scroll {
  border-top: 0;
}
.tbl {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--fs-xs);
  font-variant-numeric: tabular-nums;
  background: transparent;
}
.tbl th, .tbl thead th {
  position: sticky;
  top: 0;
  z-index: var(--z-tblhead);
  padding: 6px 12px;
  background: var(--surface-sunken);
  border: 0;
  border-bottom: 1px solid var(--border-1);
  color: var(--ink-3);
  font-size: 11px;
  font-weight: var(--fw-medium);
  text-align: left;
  white-space: nowrap;
  letter-spacing: 0;
}
.tbl td {
  padding: 6px 12px;
  border: 0;
  border-bottom: 1px solid var(--border-1);
  color: var(--ink-1);
  font-size: var(--fs-xs);
  vertical-align: middle;
  background: transparent;
}
.tbl tbody tr:last-child td {
  border-bottom: 0;
}
.tbl tbody tr:hover td {
  background: color-mix(in srgb, var(--surface-hover) 70%, transparent);
}
.tbl td.num, .tbl th.num, .tbl .num {
  font-family: var(--font-num);
  font-variant-numeric: tabular-nums;
  text-align: right;
}
.tbl td.up, .tbl .up {
  color: var(--up) !important;
}
.tbl td.down, .tbl .down {
  color: var(--down) !important;
}
.tbl td.flat, .tbl .flat {
  color: var(--flat) !important;
}
.tbl tr[data-sym]:hover td:first-child {
  color: var(--accent-ink);
}
.chips {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--sp-2);
  margin: 0 0 10px;
}
.blk > .chips, .card > .chips {
  padding: 10px 12px 0;
  margin: 0;
}
.chip {
  height: 28px;
  padding: 0 10px;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  border-radius: var(--r-2);
  background: var(--surface-sunken);
  border: 1px solid var(--border-1);
  color: var(--ink-2);
  font: inherit;
  font-size: var(--fs-2xs);
  font-weight: var(--fw-medium);
  white-space: nowrap;
  transition: background-color var(--dur-1) var(--ease-std), border-color var(--dur-1) var(--ease-std), color var(--dur-1) var(--ease-std);
}
.chip:hover {
  border-color: var(--border-2);
  color: var(--ink-1);
}
.chip.active, .chip[aria-pressed=true], .chip.on, .chip.is-on {
  background: var(--accent-tint);
  border-color: var(--accent-line);
  color: var(--accent-ink);
}
.chip .badge {
  height: 16px;
  min-width: 16px;
  padding: 0 4px;
  font-size: 11px;
  line-height: 16px;
}
.badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 17px;
  padding: 0 6px;
  border-radius: var(--r-full);
  font-family: var(--font-num);
  font-size: 11px;
  font-weight: var(--fw-medium);
  line-height: 17px;
  white-space: nowrap;
}
.badge.up {
  background: var(--up-tint);
  color: var(--up-ink);
  border: 1px solid color-mix(in srgb, var(--up) 45%, transparent);
}
.badge.down {
  background: var(--down-tint);
  color: var(--down-ink);
  border: 1px solid color-mix(in srgb, var(--down) 45%, transparent);
}
.badge.flat {
  background: var(--surface-sunken);
  color: var(--ink-3);
  border: 1px solid var(--border-1);
}
.pill {
  display: inline-flex;
  align-items: center;
  padding: 1px 7px;
  border-radius: var(--r-full);
  font-size: 11px;
  font-weight: var(--fw-medium);
  line-height: 17px;
}
.pill.ok {
  background: var(--ok-tint);
  color: var(--ok-ink);
}
.pill.err {
  background: var(--up-tint);
  color: var(--up-ink);
}
.pill.warn {
  background: var(--warn-tint);
  color: var(--warn-ink);
}
.pill.info {
  background: var(--info-tint);
  color: var(--info-ink);
}
.btn {
  min-height: 30px;
  padding: 4px 11px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  border-radius: var(--r-2);
  border: 1px solid var(--border-1);
  background: var(--surface-sunken);
  color: var(--ink-2);
  font-size: var(--fs-2xs);
  font-weight: var(--fw-medium);
  line-height: 1.3;
  transition: background-color var(--dur-1) var(--ease-std), border-color var(--dur-1) var(--ease-std), color var(--dur-1) var(--ease-std);
}
.btn:hover {
  background: var(--surface-hover);
  border-color: var(--border-2);
  color: var(--ink-1);
}
.btn.pri {
  background: var(--accent);
  border-color: var(--accent);
  color: var(--on-accent);
}
.btn.pri:hover {
  background: var(--accent-hover);
  border-color: var(--accent-hover);
  color: var(--on-accent);
}
.search, .gsearch input {
  height: 30px;
  padding: 0 11px 0 30px;
  border-radius: var(--r-2);
  border: 1px solid var(--border-1);
  background-color: var(--surface-sunken);
  color: var(--ink-1);
  font-size: var(--fs-xs);
  outline: 0;
  transition: border-color var(--dur-1) var(--ease-std), background-color var(--dur-1) var(--ease-std);
}
.search::placeholder, .gsearch input::placeholder {
  color: var(--ink-4);
}
.search:focus, .gsearch input:focus {
  border-color: var(--accent);
  background-color: var(--surface);
  box-shadow: 0 0 0 3px var(--accent-tint);
}
select.btn, select {
  background-color: var(--surface-sunken);
  color: var(--ink-1);
  border: 1px solid var(--border-1);
  border-radius: var(--r-2);
}
.hint {
  color: var(--ink-3);
  font-size: var(--fs-2xs);
  line-height: 1.55;
}
.blk > p.hint, .card > p.hint {
  padding: 10px 12px;
  margin: 0;
}
.empty {
  padding: 36px 16px;
  text-align: center;
  color: var(--ink-3);
  font-size: var(--fs-xs);
  line-height: 1.8;
}
.empty::before {
  display: block;
  margin-bottom: 6px;
  color: var(--ink-4);
  font-size: 22px;
  content: "◎";
}
.err {
  padding: 10px 12px;
  border-left: 2px solid var(--up);
  background: var(--up-tint);
  color: var(--up-ink);
  font-size: var(--fs-xs);
  border-radius: 0 var(--r-1) var(--r-1) 0;
}
.bar, .skel .bar {
  height: 12px;
  border-radius: var(--r-1);
  background: linear-gradient(90deg, var(--surface-sunken), var(--surface-hover), var(--surface-sunken));
  background-size: 200% 100%;
  animation: wsSkel var(--dur-skel) ease-in-out infinite;
}

@keyframes wsSkel {
0% {
  background-position: 100% 0;
}
100% {
  background-position: -100% 0;
}
}

.spin {
  display: inline-block;
  width: 14px;
  height: 14px;
  border: 2px solid var(--border-2);
  border-top-color: var(--accent);
  border-radius: 50%;
  animation: wsSpin .8s linear infinite;
}

@keyframes wsSpin {
to {
  transform: rotate(360deg);
}
}

.kpi {
  margin: 0 0 10px;
  background: var(--surface);
  border: 1px solid var(--border-1);
  border-radius: var(--r-2);
  overflow: hidden;
}
.kpi-inner {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr)) 148px;
  gap: 1px;
  background: var(--border-1);
  padding: 0;
  margin: 0;
  overflow: visible;
}
.kpi-t {
  position: relative;
  overflow: hidden;
  min-height: 72px;
  padding: 10px 14px;
  background: var(--surface);
  border: 0;
  border-radius: 0;
  box-shadow: none;
}
.kpi-t em {
  display: block;
  font-family: var(--font-sans);
  font-size: 11px;
  font-style: normal;
  font-weight: var(--fw-regular);
  line-height: 1.4;
  color: var(--ink-3);
}
.kpi-t b {
  display: block;
  margin-top: 2px;
  font-family: var(--font-sans);
  font-size: 22px;
  font-weight: var(--fw-semibold);
  line-height: 26px;
  letter-spacing: -.02em;
  font-variant-numeric: tabular-nums;
  color: var(--ink-0);
}
.kpi-t b.up {
  color: var(--up);
}
.kpi-t b.down {
  color: var(--down);
}
.kpi-t > span {
  display: block;
  margin-top: 1px;
  font-size: 11px;
  line-height: 1.45;
  color: var(--ink-4);
}
.kpi-t b span {
  display: inline;
  margin: 0;
  font-size: inherit;
  line-height: inherit;
  color: inherit;
}
.kpi-bar {
  margin-top: 7px;
  height: 3px;
  border-radius: var(--r-full);
  overflow: hidden;
  background: var(--surface-sunken);
  display: flex;
}
.kpi-bar i {
  display: block;
  height: 100%;
}
.kpi-bar .u {
  background: var(--up);
}
.kpi-bar .f {
  background: var(--ink-4);
}
.kpi-bar .d {
  background: var(--down);
}
.grid-cards {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 1px;
  padding: 0;
  margin: 0;
  background: var(--border-1);
}
.card-item {
  position: relative;
  min-width: 0;
  text-align: left;
  font: inherit;
  color: inherit;
  cursor: pointer;
  background: var(--surface);
  border: 0;
  border-radius: 0;
  box-shadow: none;
  padding: 12px 14px;
  transition: background-color var(--dur-1) var(--ease-std);
}
.card-item:hover {
  background: var(--surface-hover);
  transform: none !important;
  box-shadow: none !important;
}
.card-item:active {
  transform: none !important;
}
.card-item .nm {
  display: flex;
  align-items: center;
  gap: 5px;
  min-width: 0;
}
.card-item .nm b {
  font-size: var(--fs-xs);
  font-weight: var(--fw-medium);
  color: var(--ink-1);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.card-item .nm i {
  margin-left: auto;
  font-family: var(--font-num);
  font-size: 11px;
  font-style: normal;
  color: var(--ink-4);
  flex: none;
}
.card-item .px {
  display: flex;
  align-items: baseline;
  gap: 6px;
  margin-top: 4px;
  min-width: 0;
}
.card-item .px .v {
  font-family: var(--font-sans);
  font-size: 18px;
  font-weight: var(--fw-semibold);
  line-height: 1.2;
  letter-spacing: -.02em;
  color: var(--ink-0);
  font-variant-numeric: tabular-nums;
}

.card-item .px .v.up, .ws .card-item .px .v.up {
  color: var(--up);
}
.card-item .px .v.down, .ws .card-item .px .v.down {
  color: var(--down);
}
.card-item .px .v.flat, .ws .card-item .px .v.flat {
  color: var(--flat);
}
.ws .card-item-cta .px .v.up {
  color: var(--up);
}
.ws .card-item-cta .px .v.down {
  color: var(--down);
}
.ws .card-item-cta .px .v.flat {
  color: var(--flat);
}

.card-item .px .c {
  font-family: var(--font-num);
  font-size: 11px;
  font-weight: var(--fw-medium);
  white-space: nowrap;
}
.card-item .px .c.up {
  color: var(--up);
}
.card-item .px .c.down {
  color: var(--down);
}
.card-item .px .c.flat {
  color: var(--flat);
}
.card-item .hint {
  display: block;
  margin-top: 2px;
  font-size: 11px;
  color: var(--ink-4);
  line-height: 1.4;
}
.card-item .min-dot {
  position: absolute;
  top: 8px;
  right: 8px;
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--accent);
}

.pgf {
  margin: 24px 0 0;
  border-top: 1px solid var(--border-1);
  background: transparent;
  color: var(--ink-3);
  font-size: var(--fs-2xs);
}
.pgf-inner {
  max-width: var(--max-w);
  margin: 0 auto;
  padding: 18px 18px 16px;
  display: grid;
  gap: 18px;
  grid-template-columns: 1.5fr 1fr 1fr 1.3fr 1.2fr;
}
.pgf-col > h3, .pgf-col > h4 {
  margin: 0 0 8px;
  font-size: 11px;
  font-weight: var(--fw-semibold);
  color: var(--ink-2);
  letter-spacing: .06em;
  text-transform: uppercase;
}
.pgf-logo {
  font-size: var(--fs-md);
  font-weight: var(--fw-semibold);
  color: var(--ink-1);
  margin-bottom: 6px;
  letter-spacing: -.01em;
}
.pgf p {
  margin: 0 0 7px;
  line-height: 1.65;
  color: var(--ink-3);
}
.pgf ul {
  margin: 0;
  padding: 0;
  list-style: none;
  display: flex;
  flex-direction: column;
  gap: 5px;
}
.pgf li, .pgf a {
  color: var(--ink-3);
  font-size: var(--fs-2xs);
}
.pgf a:hover {
  color: var(--accent-ink);
}
.pgf-fresh {
  display: flex;
  align-items: center;
  gap: 6px;
  margin-top: 7px;
  font-family: var(--font-num);
  font-size: 11px;
  color: var(--ink-3);
}
.pgf-fresh .live-pulse {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--ok);
  flex: 0 0 6px;
}

.taglist {
  display: flex;
  flex-wrap: wrap;
  gap: 5px;
  margin-top: 8px;
}
.taglist span {
  padding: 1px 6px;
  border: 1px solid var(--border-1);
  border-radius: var(--r-1);
  font-size: 11px;
  color: var(--ink-3);
  background: var(--surface-sunken);
}

.pgf-bar {
  max-width: var(--max-w);
  margin: 0 auto;
  padding: 10px 18px 16px;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 10px;
  border-top: 1px solid var(--border-1);
  color: var(--ink-4);
  font-size: 11px;
  line-height: 1.55;
}
.pgf-bar .src, .pgf-bar .disclaimer {
  color: var(--ink-4);
}
.pgf-bar .disclaimer {
  flex-basis: 100%;
}
.pgf-bar a {
  color: var(--ink-3);
}
.bnav, .bottomnav {
  display: none;
}
.ws-scrim {
  display: none;
}

.chart {
  background: var(--surface);
  border: 1px solid var(--border-1);
  border-radius: var(--r-2);
}
.q-meta, .kv, .tt-row {
  border-color: var(--border-1);
}
.q-name {
  font-size: var(--fs-lg);
  font-weight: var(--fw-semibold);
}
.q-price {
  font-family: var(--font-num);
  font-variant-numeric: tabular-nums;
}
.q-chg.up, .up {
  color: var(--up);
}
.q-chg.down, .down {
  color: var(--down);
}
.flat {
  color: var(--flat);
}
span.up, b.up, em.up, td.up {
  color: var(--up);
}
span.down, b.down, em.down, td.down {
  color: var(--down);
}
.pan-header, .pan-kpi-card, .pan-controls {
  border-color: var(--border-1);
}
.pan-title {
  font-size: var(--fs-sm);
  font-weight: var(--fw-semibold);
}
.pan-kpi-card {
  background: var(--surface-sunken);
  border: 1px solid var(--border-1);
  border-radius: var(--r-2);
}

@media (max-width: 1280px) {
.ws .xbtn-t {
  display: none;
}
.pgf-inner {
  grid-template-columns: 1.4fr 1fr 1fr 1.3fr;
}
}
@media (max-width: 1024px) {
:root {
  --ws-sidebar-w: 208px;
}
.kpi-inner {
  grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
}
.kpi-t:nth-child(4), .kpi-t:nth-child(5) {
  grid-column: auto;
}
.grid-cards {
  grid-template-columns: repeat(auto-fill, minmax(146px, 1fr));
}
}
@media (max-width: 900px) {
.ws-sidebar {
  transform: translateX(-100%);
  transition: transform var(--dur-2) var(--ease-out);
  box-shadow: none;
  width: 248px;
}
.ws-sidebar.is-open {
  transform: translateX(0);
  box-shadow: 0 18px 48px rgba(0, 0, 0, .5);
}
.ws-main {
  margin-left: 0;
}
.ws-menu {
  display: inline-flex;
}
.ws-scrim {
  display: block;
  position: fixed;
  inset: 0;
  z-index: 55;
  background: rgba(0, 0, 0, .56);
  opacity: 0;
  pointer-events: none;
  transition: opacity var(--dur-2) var(--ease-std);
}
.ws-scrim.is-open {
  opacity: 1;
  pointer-events: auto;
}
.ws .appbar-inner {
  padding: 0 12px;
}
.ws .wrap, .ws .page-main {
  padding: 12px 12px 20px;
}
.pgf-inner {
  grid-template-columns: 1fr 1fr;
  padding: 16px 12px 14px;
}
.pgf-bar {
  padding: 10px 12px 14px;
}
.bnav, .bottomnav {
  display: flex;
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: var(--z-bottomnav);
  height: calc(52px + env(safe-area-inset-bottom, 0px));
  padding: 0 4px env(safe-area-inset-bottom, 0px);
  background: color-mix(in srgb, var(--surface) 96%, transparent);
  -webkit-backdrop-filter: saturate(160%) blur(12px);
  backdrop-filter: saturate(160%) blur(12px);
  border-top: 1px solid var(--border-1);
  overflow-x: auto;
  scrollbar-width: none;
}
.bnav::-webkit-scrollbar, .bottomnav::-webkit-scrollbar {
  display: none;
}
.bnav .tab, .bottomnav button {
  flex: 1 0 auto;
  min-width: 54px;
  height: 52px;
  padding: 5px 6px 4px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 3px;
  border: 0;
  background: transparent;
  color: var(--ink-3);
  font-size: 11px;
  font-weight: var(--fw-medium);
  line-height: 1.2;
}
.bnav .tab .ic, .bottomnav button .ic {
  width: 18px;
  height: 18px;
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--ink-3);
  background: none !important;
  -webkit-mask: none !important;
  mask: none !important;
}
.bnav .tab .ic svg, .bottomnav button .ic svg {
  width: 18px;
  height: 18px;
}
.bnav .tab[aria-selected=true], .bottomnav button[aria-selected=true] {
  color: var(--accent-ink);
}
.bnav .tab[aria-selected=true] .ic, .bottomnav button[aria-selected=true] .ic, .bnav .tab[aria-selected=true] .ic svg, .bottomnav button[aria-selected=true] .ic svg {
  color: var(--accent);
}
.bnav .tab::after, .bottomnav button::after {
  display: none;
}
body {
  padding-bottom: calc(56px + env(safe-area-inset-bottom, 0px));
}
.ws .pgf {
  margin-top: 12px;
}
}
@media (max-width: 640px) {
.ws .appbar-actions {
  gap: 0;
}
.ws .xbtn#colorModeBtn, .ws .xbtn#densityBtn, .ws .appmore {
  display: none;
}
.ws .live-pulse-text {
  display: none;
}
.ws .live-pulse-container {
  padding: 0 6px;
}
.ws-crumb {
  max-width: 42vw;
  overflow: hidden;
  text-overflow: ellipsis;
}
.ws-pagehead {
  align-items: flex-start;
  flex-direction: column;
  gap: 4px;
}
.kpi-inner {
  grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
}
.kpi-t {
  min-height: 70px;
  padding: 8px 10px !important;
}
.kpi-t b {
  font-size: 16px !important;
}
.grid-cards {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}
.pgf-inner {
  grid-template-columns: 1fr;
  gap: 14px;
}
.tbl th, .tbl td {
  padding: 6px 9px;
}
.blk > .chips, .card > .chips {
  padding: 8px 10px 0;
}
.blk > h2, .card > h2 {
  padding: 6px 10px !important;
}
}
@media (max-width: 420px) {
.kpi-inner {
  grid-template-columns: 1fr 1fr !important;
}
.kpi-t:nth-child(5) {
  grid-column: 1 / -1;
}
.bnav .tab, .bottomnav button {
  min-width: 40px;
  padding-left: 2px;
  padding-right: 2px;
  font-size: 11px;
}
.bottomnav button {
  min-width: 40px;
}
.ws-crumb .ws-crumb-path {
  display: none;
}
}
@media print {
.ws-sidebar, .appbar, .bnav, .bottomnav, .ws-scrim, .pgf {
  display: none !important;
}
.ws-main {
  margin-left: 0;
}
}

body {
  font-size: var(--fs-sm);
  font-variant-numeric: tabular-nums;
}

.ws .wrap, .ws .page-main {
  padding: 16px 20px 28px;
}
.ws .appbar-inner {
  padding: 0 20px;
}
.ws-main > .appbar, .ws-main .appbar, .ws .appbar-inner {
  height: var(--appbar-h);
  min-height: var(--appbar-h);
}
.ws .kpi-t b, .ws .card-item .px .v, .ws .ratio-val, .ws .q-price {
  font-family: var(--font-sans);
  font-variant-numeric: tabular-nums;
  letter-spacing: -.02em;
}
.ws-sidebar {
  width: var(--ws-sidebar-w);
  background: var(--surface);
}
.ws-brandrow {
  padding: 12px 14px 6px;
  gap: 2px;
}
.ws .brand, .ws-sidebar .brand {
  font-size: 14px;
  gap: 8px;
}
.ws .brand .blogo, .ws-logo {
  width: 22px;
  height: 22px;
  flex: 0 0 22px;
  border-radius: var(--r-2);
  font-size: 12px;
}
.ws-brand-sub {
  padding-left: 30px;
  font-size: 11px;
  color: var(--ink-4);
}
.ws-sidebar .pnav {
  margin: 8px 10px 2px;
  padding: 2px;
  gap: 2px;
  border-radius: var(--r-1);
}
.ws-sidebar .pnav .pn {
  height: 26px;
  border-radius: var(--r-1);
  font-size: var(--fs-xs);
}
.ws-navlabel {
  padding: 12px 14px 4px;
  font-family: var(--font-sans);
  font-size: 11px;
  font-weight: var(--fw-semibold);
  letter-spacing: .08em;
  color: var(--ink-4);
}
.ws-sidebar .tablist {
  padding: 2px 8px 8px;
  gap: 2px;
}
.ws-sidebar .tab, .ws-sidebar .tablist > button {
  height: 30px;
  min-height: 30px;
  max-height: 30px;
  padding: 0 9px;
  gap: 9px;
  border-radius: var(--r-1);
  font-size: var(--fs-sm);
  font-weight: var(--fw-medium);
}
.ws-sidebar .tab[aria-selected=true], .ws-sidebar .tablist > button[aria-selected=true] {
  background: var(--surface-hover);
  color: var(--ink-1);
  box-shadow: inset 2px 0 var(--accent);
}
.ws-sidebar .tab .ic, .ws-sidebar .tab > svg, .ws-sidebar .tablist > button .ic, .ws-sidebar .tablist > button > svg {
  width: 16px;
  height: 16px;
  flex: 0 0 16px;
  stroke-width: 1.8;
  color: var(--ink-3);
}
.ws-sidebar .tab[aria-selected=true] .ic, .ws-sidebar .tab[aria-selected=true] > svg, .ws-sidebar .tablist > button[aria-selected=true] .ic, .ws-sidebar .tablist > button[aria-selected=true] > svg {
  color: var(--ink-2);
}
.ws-pulse {
  margin: 6px 10px 4px;
  padding: 9px 10px 8px;
  border: 1px solid var(--border-1);
  border-radius: var(--r-1);
  background: var(--surface-sunken);
}
.ws-pulse[hidden] {
  display: none;
}
.ws-pulse-t {
  margin-bottom: 6px;
  font-size: 11px;
  font-weight: var(--fw-semibold);
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--ink-4);
}
.ws-pulse-row {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 8px;
  padding: 2.5px 0;
  font-size: 11px;
  color: var(--ink-3);
  white-space: nowrap;
}
.ws-pulse-row b {
  font-weight: var(--fw-medium);
  color: var(--ink-1);
  font-variant-numeric: tabular-nums;
  overflow: hidden;
  text-overflow: ellipsis;
}
.ws-pulse-row b.up {
  color: var(--up);
}
.ws-pulse-row b.down {
  color: var(--down);
}
.ws-pulse-row b.ai {
  color: var(--ai-ink);
}
.ws-sidefoot {
  padding: 10px 14px 12px;
  gap: 6px;
}
.ws-sidefoot .ws-live {
  gap: 6px;
}
.ws .live-pulse-container {
  height: 20px;
  padding: 0 7px;
  border: 0;
  background: transparent;
  font-size: 11px;
  color: var(--ink-4);
}
.ws .live-pulse-dot {
  width: 5px;
  height: 5px;
  flex: 0 0 5px;
}
.ws-sidefoot .ws-sidehint {
  font-size: 11px;
  line-height: 1.5;
  color: var(--ink-4);
}
.ws-crumb {
  gap: 8px;
  font-size: var(--fs-sm);
}
.ws-crumb .ws-crumb-path, .ws-crumb .sep {
  display: none;
}
.ws-crumb b {
  font-size: var(--fs-sm);
  font-weight: var(--fw-semibold);
  color: var(--ink-1);
}
.ws-crumb-date {
  font-family: var(--font-sans);
  font-size: 11px;
  font-variant-numeric: tabular-nums;
  color: var(--ink-4);
  white-space: nowrap;
}
.ws .appbar-actions {
  gap: 0;
}
.ws-agroup {
  display: flex;
  align-items: center;
  gap: 2px;
  padding: 0 7px;
  border-right: 1px solid var(--border-1);
}
.ws-agroup:last-child {
  border-right: 0;
  padding-right: 0;
}
.ws .xbtn {
  width: 28px;
  height: 28px;
  border-radius: var(--r-1);
  color: var(--ink-3);
}
.ws .xbtn:hover {
  background: var(--surface-hover);
  color: var(--ink-1);
}
.ws .xbtn-t {
  display: none;
}

@media (min-width: 1440px) {
.ws .xbtn--txt .xbtn-t {
  display: inline;
  font-size: 11px;
  color: inherit;
}
}

.ws .rt-dot {
  border: 0;
  background: transparent;
  padding: 0 4px;
  height: 20px;
  font-size: 11px;
  font-weight: var(--fw-medium);
  color: var(--ink-4);
  gap: 6px;
}
.ws .rt-dot::before {
  content: "";
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--ink-4);
  display: inline-block;
  flex: none;
}
.ws .rt-dot[data-s=open]::before, .ws .rt-dot[data-s=trading]::before {
  background: var(--ok);
}
.ws .scroll-progress {
  height: 2px;
  background: var(--accent);
  opacity: .8;
}
.ws .glass, .ws .blk, .ws .card {
  border-radius: var(--r-3);
  border-color: var(--border-1);
  background: var(--surface);
  margin-bottom: 10px;
}
.ws .blk > h2, .ws .card > h2 {
  min-height: var(--panel-head-h);
  padding: 0 14px;
  font-size: var(--fs-sm);
  font-weight: var(--fw-semibold);
  line-height: var(--panel-head-h);
  border-bottom-color: var(--border-1);
}

.blk > h2 .hint, .card > h2 .hint {
  font-size: 11px;
  font-weight: var(--fw-regular);
  color: var(--ink-4);
}
.blk > h2 .tag, .card > h2 .tag {
  font-size: 11px;
  color: var(--ink-4);
}

.ws-panel-head {
  min-height: var(--panel-head-h);
  padding: 0 14px;
  font-size: var(--fs-sm);
}
.ws .blk .blk, .ws .card .blk {
  background: transparent;
  border: 0;
  border-radius: 0;
  margin: 0;
  box-shadow: none;
  overflow: visible;
}
.ws .blk .blk > h2 {
  position: static;
  top: auto;
  min-height: var(--group-row-h);
  padding: 0 14px;
  background: var(--surface-sunken);
  font-size: 11.5px;
  font-weight: var(--fw-semibold);
  line-height: var(--group-row-h);
  color: var(--ink-2);
  border-bottom: 1px solid var(--border-1);
}
.ws .blk .blk > h2 .hint {
  margin-left: 6px;
  padding: 1px 6px;
  border-radius: var(--r-1);
  background: var(--surface-hover);
  color: var(--ink-3);
  font-size: 11px;
  line-height: 16px;
  font-weight: var(--fw-medium);
}

.grp-toggle {
  margin-left: auto;
  width: 22px;
  height: 22px;
  padding: 0;
  border: 0;
  border-radius: var(--r-1);
  background: transparent;
  color: var(--ink-4);
  font-size: 11px;
  line-height: 1;
}
.grp-toggle:hover {
  background: var(--surface-hover);
  color: var(--ink-1);
}
.blk.is-collapsed > *:not(h2) {
  display: none;
}
.blk.is-collapsed > h2 {
  border-bottom-color: transparent;
}

.ws-pagehead {
  align-items: flex-end;
  gap: 16px;
  margin: 0 0 12px;
  padding: 2px 2px 0;
}
.ws-kicker {
  font-family: var(--font-sans);
  font-size: 11px;
  font-weight: var(--fw-semibold);
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--accent-ink);
}
.ws-page-title {
  margin: 2px 0 0;
  font-size: 22px;
  font-weight: var(--fw-semibold);
  line-height: 1.25;
  letter-spacing: -.02em;
  color: var(--ink-0);
}
.ws-page-sub {
  margin: 3px 0 0;
  font-size: 11.5px;
  line-height: 1.5;
  color: var(--ink-3);
}
.ws-pagehead-actions {
  gap: 10px;
  padding-bottom: 2px;
}
.ws-data-status {
  font-family: var(--font-sans);
  font-size: 11px;
  font-variant-numeric: tabular-nums;
  color: var(--ink-4);
}
.ws-export {
  height: 28px;
  padding: 0 10px;
  border-radius: var(--r-1);
  border: 1px solid var(--border-1);
  background: var(--surface-sunken);
  color: var(--ink-2);
  font-size: 11.5px;
  font-weight: var(--fw-medium);
}
.ws-export:hover {
  background: var(--surface-hover);
  border-color: var(--border-2);
  color: var(--ink-1);
}
.ws-hide {
  display: none !important;
}
.ws-col-hide {
  display: none !important;
}
.ws .tbl th, .ws .tbl thead th {
  height: var(--tbl-head-h);
  min-height: var(--tbl-head-h);
  padding: 0 12px;
  background: var(--surface-sunken);
  color: var(--ink-3);
  font-size: 11px;
  font-weight: var(--fw-medium);
  letter-spacing: .02em;
}
.ws .tbl th::after {
  content: none;
  display: none;
}
.ws .tbl td {
  padding: var(--cell-pad-y) 12px;
  font-size: var(--fs-sm);
  height: var(--row-h-tbl);
}
.ws .tbl td.num, .ws .tbl th.num {
  padding-right: 12px;
}
.ws .tbl tbody tr:hover td {
  background: var(--surface-hover);
}
.ws .tbl tbody tr:hover td:first-child {
  box-shadow: inset 2px 0 var(--accent);
}
.ws .tbl tr[data-sym]:hover td:first-child {
  color: var(--ink-1);
}
.ws .tbl td.col-ai {
  color: var(--ai-ink);
  font-variant-numeric: tabular-nums;
}
.ws .tbl td.col-ai * {
  color: inherit;
}
.ws .tbl td.col-ai span {
  display: none;
}
.ws .tbl td.col-ai::before {
  content: "";
  display: inline-block;
  width: 5px;
  height: 5px;
  margin-right: 6px;
  border-radius: 50%;
  background: var(--ai);
  vertical-align: 2px;
}
.ws .tbl td.col-ai.ai-zero, .ws .tbl td.col-ai[data-sign=zero] {
  color: var(--ink-3);
}
.ws .tbl td.col-ai.ai-zero::before, .ws .tbl td.col-ai[data-sign=zero]::before {
  background: var(--ink-4);
}
.ws .tbl td.col-tech {
  color: var(--ink-2);
}
.ws .tbl td.chg-cell {
  position: relative;
}
.ws .tbl td.chg-cell::after {
  content: "";
  position: absolute;
  right: 12px;
  bottom: 4px;
  height: 2px;
  width: calc(var(--mag, 0) * 84px);
  border-radius: var(--r-0);
  background: currentColor;
  opacity: .2;
  pointer-events: none;
}
.ws-table-legend {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 18px;
  padding: 7px 14px;
  border-bottom: 1px solid var(--border-1);
  background: var(--surface);
  color: var(--ink-4);
  font-size: 11px;
  line-height: 1.4;
}
.ws-table-legend b {
  color: var(--ink-3);
  font-weight: var(--fw-medium);
}
.ws-table-legend span:first-child b {
  color: var(--ai-ink);
}
.ws .tw, .ws .tbl-scroll, .ws-table-scroll {
  position: relative;
  max-width: 100%;
  overflow-x: auto;
  scrollbar-width: thin;
  scrollbar-color: var(--border-2) transparent;
}
.ws-table-scroll {
  overflow-y: hidden;
  padding-bottom: 2px;
}
.ws-table-scroll > table {
  min-width: 100%;
}
.ws .tw::-webkit-scrollbar, .ws .tbl-scroll::-webkit-scrollbar, .ws-table-scroll::-webkit-scrollbar {
  height: 6px;
}
.ws .tw::-webkit-scrollbar-track, .ws .tbl-scroll::-webkit-scrollbar-track, .ws-table-scroll::-webkit-scrollbar-track {
  background: transparent;
}
.ws .tw::-webkit-scrollbar-thumb, .ws .tbl-scroll::-webkit-scrollbar-thumb, .ws-table-scroll::-webkit-scrollbar-thumb {
  background: var(--border-2);
  border-radius: var(--r-0);
}

.tw::after {
  content: "";
  position: sticky;
  right: 0;
  top: 0;
  float: right;
  width: 24px;
  height: 100%;
  pointer-events: none;
  background: linear-gradient(90deg, transparent, var(--surface));
}

.ws-pager {
  position: static;
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 8px;
  min-height: 40px;
  padding: 6px 12px;
  background: var(--surface);
  border-top: 1px solid var(--border-1);
}
.card:has(.ws-pager) .bd {
  padding-bottom: 8px;
}

.empty {
  padding: 20px 16px;
  text-align: center;
  color: var(--ink-3);
  font-size: var(--fs-xs);
  line-height: 1.7;
}
.empty::before {
  display: block;
  width: 26px;
  height: 26px;
  margin: 0 auto 8px;
  border: 1px dashed var(--border-2);
  border-radius: 50%;
  color: transparent;
  font-size: 0;
  content: "";
}

.ws-empty-panel {
  max-height: 132px;
  min-height: var(--empty-h);
  overflow: hidden;
  position: relative;
}
.ws-empty-panel > *:not(h2) {
  display: none;
}
.ws-empty-panel::before {
  content: "";
  display: block;
  width: 24px;
  height: 24px;
  margin: 16px auto 0;
  border: 1px dashed var(--border-2);
  border-radius: 50%;
}
.ws-empty-panel::after {
  content: "暂无数据 · 数据源稍后重试";
  display: block;
  padding: 7px 16px 16px;
  text-align: center;
  font-size: 11px;
  color: var(--ink-4);
}
.ws-loading-compact {
  max-height: 132px;
  overflow: hidden;
}
.ws-loading-compact > *:not(h2) {
  display: none;
}
.ws-loading-compact::before {
  content: "";
  display: block;
  width: 56%;
  height: 10px;
  margin: 22px auto 0;
  border-radius: var(--r-1);
  background: linear-gradient(90deg, var(--skel-base), var(--skel-sheen), var(--skel-base));
  background-size: 200% 100%;
  animation: wsSkel var(--dur-skel) ease-in-out infinite;
}
.ws-loading-compact::after {
  content: "取数中 · 可先浏览其他模块";
  display: block;
  padding: 9px 16px 16px;
  text-align: center;
  font-size: 11px;
  color: var(--ink-4);
}

.bar, .skel .bar {
  height: 10px;
  border-radius: var(--r-1);
  background: linear-gradient(90deg, var(--skel-base), var(--skel-sheen), var(--skel-base));
  background-size: 200% 100%;
  animation: wsSkel var(--dur-skel) ease-in-out infinite;
}
.rt-up, .rt-down {
  animation: none;
}
.tbl .rt-up, .tbl .rt-down, .tbl tr.rt-up, .tbl tr.rt-down, .tbl td.rt-up, .tbl td.rt-down, .card-item .rt-up, .card-item .rt-down {
  background-color: transparent;
}

.ws .kpi {
  border-radius: var(--r-3);
  margin-bottom: 10px;
}
.ws .kpi-inner {
  grid-template-columns: repeat(4, minmax(0, 1fr)) 148px;
}
.ws .kpi-t {
  min-height: 72px;
  padding: 10px 14px;
}
.ws .kpi-t em {
  font-size: 11px;
  color: var(--ink-3);
}
.ws .kpi-t b {
  font-size: 22px;
  line-height: 26px;
  font-weight: var(--fw-semibold);
  /* 这里原写 color: var(--ink-0)，特异性 0,2,1，压过了更早的
     .kpi-t b.up / .kpi-t b.down —— 结果 KPI 卡里的涨跌数字（领涨板块、
     涨跌家数、涨跌幅）全部渲染成正文色，红涨绿跌在首屏失效。
     保留 var(--ink-0) 作为「无 up/down 类时」的默认色，
     涨跌色由下面两条更高特异性的规则接管。 */
  color: var(--ink-0);
}
/* 与基础层的 .kpi-t b.up/.down 对齐，但特异性（0,3,1）足以赢过上面的
   .ws .kpi-t b { color: var(--ink-0) }（0,2,1）。
   不加 !important：这是正常的层内覆盖，加感叹号只会掩盖真正的问题。 */
.ws .kpi-t b.up,
.ws .kpi-t span.up { color: var(--up); }
.ws .kpi-t b.down,
.ws .kpi-t span.down { color: var(--down); }
.ws .kpi-t > span {
  font-size: 11px;
  color: var(--ink-4);
}
.ws .kpi-t:last-child {
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 1px;
  background: var(--surface-sunken);
}
.ws .kpi-t:last-child b {
  font-size: 15px;
  line-height: 20px;
  color: var(--ink-1);
}
.ws .kpi-bar {
  width: 100%;
  height: 2px;
  margin-top: 8px;
  border-radius: var(--r-full);
  background: var(--border-1);
}
.ws .kpi-t::after {
  display: none;
  content: none;
}
.ws .grid-cards {
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 0;
  background: var(--surface);
}
.ws .grid-cards > .card-item:last-child:nth-child(4n+1) {
  grid-column: span 4;
}
.ws .grid-cards > .card-item:last-child:nth-child(4n+2) {
  grid-column: span 3;
}
.ws .grid-cards > .card-item:last-child:nth-child(4n+3) {
  grid-column: span 2;
}
.ws .card-item {
  padding: 12px 14px;
  background: var(--surface);
  box-shadow: inset -1px 0 0 var(--border-1), inset 0 -1px 0 var(--border-1);
}
.ws .card-item::before {
  content: none;
  display: none;
}
.ws .card-item:hover {
  background: var(--surface-hover);
  transform: none;
}
.ws .card-item .nm b {
  font-size: 11.5px;
  font-weight: var(--fw-medium);
  color: var(--ink-2);
}
.ws .card-item .nm i {
  font-size: 11px;
  color: var(--ink-4);
}
.ws .card-item .px {
  margin-top: 5px;
}
.ws .card-item .px .v {
  font-size: 19px;
  line-height: 1.25;
}
.ws .card-item .px .c {
  font-size: 11px;
}
.ws .card-item .hint {
  font-size: 11px;
  color: var(--ink-4);
}
.ws .card-item-cta {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  justify-content: center;
  gap: 3px;
  background: var(--surface);
  border: 0;
  box-shadow: inset -1px 0 0 var(--border-1), inset 0 -1px 0 var(--border-1);
  cursor: pointer;
}
.ws .card-item-cta:hover {
  background: var(--accent-tint);
}
.ws .card-item-cta .nm b {
  color: var(--ink-2);
}
.ws .card-item-cta .px .v {
  color: var(--accent-ink);
  font-size: 19px;
}
.ws .card-item-cta .hint {
  color: var(--ink-4);
}
.ws .card-item-cta:hover .hint {
  color: var(--accent-ink);
}
.ws .chip {
  height: var(--chip-h);
  padding: 0 9px;
  border-radius: var(--r-1);
  background: var(--surface-sunken);
  border-color: var(--border-1);
  color: var(--ink-2);
  font-size: 11.5px;
  font-weight: var(--fw-medium);
}
.ws .chip:hover {
  border-color: var(--border-2);
  color: var(--ink-1);
}
.ws .chip.active, .ws .chip[aria-pressed=true], .ws .chip.on, .ws .chip.is-on {
  background: var(--accent-tint);
  border-color: var(--accent-line);
  color: var(--accent-ink);
}
.ws .btn {
  min-height: 28px;
  padding: 3px 10px;
  border-radius: var(--r-1);
  font-size: 11.5px;
}

.badge {
  min-height: 16px;
  font-size: 11px;
  line-height: 16px;
}

.ws .pgf-inner {
  display: none;
}
.ws .pgf {
  margin-top: 16px;
  background: transparent;
}
.ws .pgf-bar {
  padding: 10px 20px 14px;
  border-top: 1px solid var(--border-1);
  gap: 10px;
  font-size: 11px;
}
.ws .pgf-bar .disclaimer {
  display: none;
}
.ws-toolbar {
  position: static;
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 8px 14px;
  background: var(--surface);
  border-bottom: 1px solid var(--border-1);
  overflow-x: auto;
  scrollbar-width: none;
}
.ws-toolbar::-webkit-scrollbar {
  display: none;
}
.ws-toolbar .chips {
  margin: 0;
  padding: 0;
  border: 0;
  flex-wrap: nowrap;
  gap: 6px;
  overflow: visible;
}
.ws-toolbar .chips + .chips {
  margin-left: auto;
}
.ws-toolbar .search {
  flex: 0 0 220px;
}
.ws-heat-legend {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 8px 0 0;
  font-size: 11px;
  color: var(--ink-4);
}
.ws-heat-legend .ws-heat-scale {
  display: block;
  width: 110px;
  height: 5px;
  border-radius: var(--r-0);
  background: linear-gradient(90deg, var(--down) 0%, var(--surface-hover) 50%, var(--up) 100%);
}
.ws-heat-legend .ws-heat-note {
  margin-left: auto;
  color: var(--ink-4);
}

.heat-c {
  height: 32px;
  font-size: 11px;
}
.chain-nodes-grid {
  grid-template-columns: repeat(3, minmax(0, 1fr));
  align-items: stretch;
}

.ws .chain-insight-box {
  display: block;
  padding: 12px 0 0;
  border: 0;
  border-top: 1px solid var(--border-1);
  border-radius: 0;
  background: transparent;
}
.ws .chain-insight-box > h4 {
  display: block;
  margin: 0 0 8px;
  font-size: 12.5px;
  font-weight: var(--fw-semibold);
  color: var(--ink-1);
}
.ws .chain-insight-box .chain-insight-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 8px;
  border: 0;
  border-radius: 0;
  background: transparent;
}
.ws .chain-insight-box .chain-insight-item {
  background: var(--surface-sunken);
  border: 1px solid var(--border-1);
  border-radius: var(--r-1);
  padding: 10px 12px;
}

.compare-page .cmp-pairs-row {
  display: flex;
  flex-wrap: nowrap;
  align-items: center;
  gap: 6px;
  max-height: 44px;
  padding: 6px 12px;
  overflow-x: auto;
  overflow-y: hidden;
  background: var(--surface-sunken);
  border-top: 1px solid var(--border-1);
  border-bottom: 1px solid var(--border-1);
  scrollbar-width: none;
}
.compare-page .cmp-pairs-row::-webkit-scrollbar {
  display: none;
}
.compare-page .chips {
  align-items: center;
}
.compare-page .chips::before {
  content: "联动窗口";
  margin-right: auto;
  font-size: 11px;
  letter-spacing: .02em;
  color: var(--ink-4);
}

.ws-period {
  color: var(--ink-2);
}
.ws-range {
  height: 24px;
  font-size: 11px;
  color: var(--ink-3);
  background: transparent;
  border-color: transparent;
}
.ws-range.active, .ws-range[aria-pressed=true] {
  background: var(--surface-hover);
  border-color: var(--border-1);
  color: var(--ink-1);
}
.ws-range-first {
  margin-left: 12px;
}
.ws .page-main {
  padding: 14px 18px 24px;
}
.ws #app .card {
  margin-bottom: 8px;
}
.ws #app .card > h2 {
  min-height: 34px;
  padding: 0 12px;
  line-height: 34px;
}
.ws-metric-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 8px;
  margin-bottom: 8px;
}
.ws-metric-grid > .card {
  margin: 0;
  height: 100%;
}
.ws-loading-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
  margin-bottom: 8px;
}
.ws-loading-grid > .card {
  margin: 0;
}
.ws-loading-grid > :last-child:nth-child(2n+1) {
  grid-column: 1 / -1;
}
.ws-compact-card {
  padding: 0;
}
.ws-compact-card > h2 {
  display: none;
}
.ws-compact-card > .bd {
  padding: 8px 12px;
}
.ws-compact-card .toolbar {
  min-height: 0;
  padding: 0;
  gap: 8px;
}
.ws-compact-filters {
  padding: 0;
}
.ws-compact-filters > h2 {
  min-height: 34px;
  padding: 0 12px;
  line-height: 34px;
}
.ws-compact-filters > .bd, .ws-compact-filters .bd {
  padding: 8px 12px;
}
.ws-compact-filters .chips {
  flex-wrap: nowrap;
  overflow-x: auto;
  padding-bottom: 2px;
  scrollbar-width: none;
}

.ratio-card-cta {
  display: flex;
  flex-direction: column;
  text-align: left;
  background: var(--surface-sunken);
  border: 1px solid var(--border-1);
  cursor: pointer;
  padding: 0;
}
.ratio-card-cta:hover {
  border-color: var(--accent-line);
  background: var(--accent-tint);
}
.ratio-card-cta .ratio-card-h {
  color: var(--ink-2);
}
.ratio-card-cta-t {
  font-size: 12.5px;
  font-weight: var(--fw-semibold);
  color: var(--ink-1);
}
.ratio-card-cta-s {
  margin-top: 4px;
  font-size: 11px;
  color: var(--accent-ink);
}
.ratio-card-lio {
  position: relative;
}
.ratio-card-lio .ratio-card-body {
  padding: 0;
}
.ratio-card-lio .ratio-val {
  font-size: inherit;
}
.ratio-card-lio .ratio-lio-spark {
  display: none;
}
.ratio-card-lio .ratio-card-footer {
  cursor: pointer;
}
.ratio-card-lio.is-loading {
  opacity: .75;
}
.ratio-card-lio .ratio-lio-chg {
  display: none;
}
.ratio-card-lio .ratio-lio-range {
  display: none;
}

.ws-modal {
  position: fixed;
  inset: 0;
  z-index: var(--z-modal);
  display: none;
  align-items: center;
  justify-content: center;
  padding: 20px;
  background: rgba(0, 0, 0, .58);
}
.ws-modal.is-open {
  display: flex;
}
.ws-modal-panel {
  width: min(760px, 100%);
  max-height: 80dvh;
  overflow: auto;
  background: var(--surface);
  border: 1px solid var(--border-1);
  border-radius: var(--r-3);
  box-shadow: var(--sh-3);
}
.ws-modal-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 10px 16px;
  border-bottom: 1px solid var(--border-1);
  font-size: 13px;
  font-weight: var(--fw-semibold);
}
.ws-modal-close {
  width: 26px;
  height: 26px;
  border: 0;
  border-radius: var(--r-2);
  background: transparent;
  color: var(--ink-3);
  font-size: 17px;
}
.ws-modal-body {
  padding: 14px 16px 16px;
}
.ws-modal-body canvas {
  display: block;
  width: 100%;
  height: 300px;
}
.ws-modal-stats {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 18px;
  margin-top: 10px;
  font-family: var(--font-sans);
  font-size: 11px;
  font-variant-numeric: tabular-nums;
  color: var(--ink-3);
}
.ws-sheet {
  position: fixed;
  inset: 0;
  z-index: var(--z-modal);
  display: none;
}
.ws-sheet.is-open {
  display: block;
}
.ws-sheet-backdrop {
  position: absolute;
  inset: 0;
  background: rgba(0, 0, 0, .58);
}
.ws-sheet-panel {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  max-height: 78dvh;
  overflow: auto;
  padding: 12px 12px calc(16px + env(safe-area-inset-bottom, 0px));
  background: var(--surface);
  border-top: 1px solid var(--border-1);
  border-radius: 14px 14px 0 0;
  box-shadow: 0 -18px 48px rgba(0, 0, 0, .55);
}
.ws-sheet-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 4px 6px 10px;
  color: var(--ink-1);
  font-size: 13px;
  font-weight: var(--fw-semibold);
}
.ws-sheet-close {
  width: 26px;
  height: 26px;
  border: 0;
  border-radius: var(--r-2);
  background: transparent;
  color: var(--ink-3);
  font-size: 17px;
}
.ws-sheet-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 6px;
}
.ws-sheet-item {
  display: flex;
  align-items: center;
  gap: 10px;
  height: 44px;
  padding: 0 12px;
  border-radius: var(--r-1);
  border: 1px solid var(--border-1);
  background: var(--surface-sunken);
  color: var(--ink-2);
  font-size: 12.5px;
  font-weight: var(--fw-medium);
  text-align: left;
}
.ws-sheet-item.is-active {
  background: var(--accent-tint);
  border-color: var(--accent-line);
  color: var(--accent-ink);
}
.ws-sheet-item .ic {
  width: 16px;
  height: 16px;
  flex: 0 0 16px;
}

@media (min-width: 901px) and (max-width: 1280px) {
:root {
  --ws-sidebar-w: var(--rail-w);
}
.ws-brandrow {
  align-items: center;
  padding: 12px 0 8px;
}
.ws-brand-sub, .ws-navlabel, .ws-pulse, .ws-sidefoot .ws-sidehint {
  display: none;
}
.ws .brand {
  justify-content: center;
}
.ws-sidebar .pnav {
  grid-template-columns: 1fr;
  margin: 6px 8px 2px;
}
.ws-sidebar .pnav .pn {
  font-size: 11px;
  padding: 0;
}
.ws-sidebar .tablist {
  padding: 2px 6px 8px;
}
.ws-sidebar .tab, .ws-sidebar .tablist > button {
  justify-content: center;
  padding: 0;
  gap: 0;
}
.ws-sidebar .tab .tab-label, .ws-sidebar .tablist > button .tab-label, .ws-sidebar .tab .tab-count, .ws-sidebar .tablist > button .tab-count {
  display: none;
}
.ws-sidefoot {
  padding: 8px 6px;
  align-items: center;
}
.ws .grid-cards {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}
.ws .grid-cards > .card-item:last-child:nth-child(3n+1) {
  grid-column: span 3;
}
.ws .grid-cards > .card-item:last-child:nth-child(3n+2) {
  grid-column: span 2;
}
.ws .kpi-inner {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}
.ws .kpi-t:last-child {
  grid-column: 1 / -1;
  flex-direction: row;
  align-items: baseline;
  gap: 8px;
}
}
@media (max-width: 1024px) {
.pgf-inner {
  grid-template-columns: 1fr 1fr;
}
}
@media (max-width: 900px) {
:root {
  --ws-sidebar-w: 248px;
}
.ws-sidebar {
  transform: translateX(-100%);
  transition: transform var(--dur-2) var(--ease-out);
}
.ws-sidebar.is-open {
  transform: translateX(0);
  box-shadow: 0 18px 48px rgba(0, 0, 0, .5);
}
.ws-brand-sub, .ws-navlabel, .ws-pulse, .ws-sidefoot .ws-sidehint {
  display: block;
}
.ws .brand {
  justify-content: flex-start;
}
.ws-sidebar .pnav {
  grid-template-columns: 1fr 1fr;
}
.ws-sidebar .tab, .ws-sidebar .tablist > button {
  justify-content: flex-start;
  padding: 0 10px;
  gap: 10px;
}
.ws-sidebar .tab .tab-label, .ws-sidebar .tablist > button .tab-label, .ws-sidebar .tab .tab-count, .ws-sidebar .tablist > button .tab-count {
  display: inline;
}
.ws-main {
  margin-left: 0;
}
.ws-menu {
  display: inline-flex;
}
.ws-scrim {
  display: block;
  position: fixed;
  inset: 0;
  z-index: 55;
  background: rgba(0, 0, 0, .56);
  opacity: 0;
  pointer-events: none;
  transition: opacity var(--dur-2) var(--ease-std);
}
.ws-scrim.is-open {
  opacity: 1;
  pointer-events: auto;
}
.ws .appbar-inner {
  padding: 0 12px;
}
.ws .wrap, .ws .page-main {
  padding: 14px 14px calc(96px + env(safe-area-inset-bottom, 0px));
}
body {
  padding-bottom: 0;
}
.ws-crumb b {
  font-size: 14px;
}
.ws-crumb-date {
  display: none;
}
.ws-pagehead {
  align-items: flex-start;
  flex-direction: column;
  gap: 4px;
  margin: 0 0 10px;
  padding: 0;
}
.ws-page-title {
  font-size: 19px;
}
.ws-page-sub {
  font-size: 11px;
}
.ws-pagehead-actions {
  display: none;
}
.ws-toolbar {
  padding: 6px 12px;
  gap: 8px;
}
.ws-toolbar .search {
  flex: 0 0 170px;
}
.ws .kpi-inner {
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 1px;
}
.ws .kpi-t {
  min-height: 66px;
  padding: 9px 12px;
}
.ws .kpi-t b {
  font-size: 18px;
  line-height: 22px;
}
.ws .kpi-t:last-child {
  grid-column: 1 / -1;
  flex-direction: row;
  align-items: baseline;
  gap: 8px;
}
.ws .grid-cards {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}
.ws .grid-cards > .card-item:last-child:nth-child(2n+1) {
  grid-column: span 2;
}
.ws .grid-cards > .card-item {
  padding: 11px 12px;
  min-height: 76px;
}
.ws .grid-cards > .card-item .px .v {
  font-size: 17px;
}
.ws .grid-cards > .card-item .hint {
  display: inline;
  margin-left: 4px;
}
.blk > h2, .card > h2 {
  min-height: 34px;
  padding: 0 12px;
  line-height: 34px;
  font-size: 12.5px;
}
.ws .blk .blk > h2 {
  padding: 0 12px;
  font-size: 11px;
}
.ws .tbl th, .ws .tbl td {
  padding-left: 9px;
  padding-right: 9px;
}
.ws .tbl td.chg-cell::after {
  width: calc(var(--mag, 0) * 48px);
  right: 9px;
}
.blk > .chips, .card > .chips {
  padding: 8px 10px 0;
}
.ws-metric-grid {
  grid-template-columns: 1fr 1fr;
}
.ws-loading-grid {
  grid-template-columns: 1fr;
}
.chain-nodes-grid {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}
.pgf-inner {
  grid-template-columns: 1fr 1fr;
  padding: 16px 12px 14px;
}
.pgf-bar {
  padding: 10px 12px 14px;
}
.ws .pgf {
  margin-top: 12px;
}
.bnav, .bottomnav {
  display: flex;
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: var(--z-bottomnav);
  height: calc(54px + env(safe-area-inset-bottom, 0px));
  padding: 0 4px env(safe-area-inset-bottom, 0px);
  background: var(--surface);
  border-top: 1px solid var(--border-1);
  overflow-x: auto;
  scrollbar-width: none;
}
.bnav::-webkit-scrollbar, .bottomnav::-webkit-scrollbar {
  display: none;
}
.bnav .tab, .bottomnav button {
  height: 54px;
  min-width: 0;
  flex: 1 1 0;
  padding: 4px 2px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 3px;
  border: 0;
  background: transparent;
  color: var(--ink-3);
  font-size: 11px;
  font-weight: var(--fw-medium);
  line-height: 1.2;
  position: relative;
}
.bnav .tab .ic, .bottomnav button .ic {
  width: 20px;
  height: 20px;
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--ink-3);
  background: none;
  -webkit-mask: none;
  mask: none;
}
.bnav .tab .ic svg, .bottomnav button .ic svg {
  width: 20px;
  height: 20px;
}
.bnav .tab[aria-selected=true], .bottomnav button[aria-selected=true] {
  color: var(--accent-ink);
}
.bnav .tab[aria-selected=true] .ic, .bottomnav button[aria-selected=true] .ic, .bnav .tab[aria-selected=true] .ic svg, .bottomnav button[aria-selected=true] .ic svg {
  color: var(--accent);
}
.bnav .tab[aria-selected=true]::before, .bottomnav button[aria-selected=true]::before {
  content: "";
  position: absolute;
  top: 0;
  left: 26%;
  right: 26%;
  height: 2px;
  border-radius: 0 0 2px 2px;
  background: var(--accent);
}
.bnav .tab.bn-hide, .bottomnav button.bn-hide {
  display: none;
}
.bnav .tab.bn-more, .bottomnav button.bn-more {
  display: flex;
}
}
@media (max-width: 640px) {
.ws .appbar-actions {
  gap: 0;
}
.ws .xbtn#colorModeBtn, .ws .xbtn#densityBtn, .ws .appmore {
  display: none;
}
.ws-agroup {
  padding: 0 4px;
}
.ws .live-pulse-text {
  display: none;
}
.ws .live-pulse-container {
  padding: 0 5px;
}
.chain-nodes-grid {
  grid-template-columns: 1fr;
}
}
@media (max-width: 420px) {
.ws .kpi-inner {
  grid-template-columns: 1fr 1fr;
}
.bnav .tab, .bottomnav button {
  min-width: 40px;
  padding-left: 2px;
  padding-right: 2px;
  font-size: 11px;
}
}
@media print {
.ws-sidebar, .appbar, .bnav, .bottomnav, .ws-scrim, .pgf {
  display: none !important;
}
.ws-main {
  margin-left: 0;
}
}

.ws-sidebar .tab::before, .ws-sidebar .pn::before, .bnav .tab::before, .bottomnav button::before {
  content: none !important;
  display: none !important;
  width: 0 !important;
  height: 0 !important;
  -webkit-mask: none !important;
  mask: none !important;
}
.ws-sidebar .tab, .ws-sidebar .pn, .bnav .tab, .bottomnav button {
  padding-left: 10px;
}
.ws-pulse {
  margin: 10px 10px 4px;
  padding: 8px 10px;
  border: 1px solid var(--border-1);
  border-radius: var(--r-1);
  background: var(--surface-sunken);
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.ws-pulse-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  font-size: 11px;
  line-height: 1.2;
}
.ws-pulse-k {
  color: var(--ink-3);
  letter-spacing: .06em;
}
.ws-pulse-v {
  color: var(--ink-2);
  font-variant-numeric: tabular-nums;
  display: inline-flex;
  align-items: center;
  gap: 5px;
  max-width: 70%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.ws-pulse-v b {
  font-weight: var(--fw-semibold);
}
.ws-pulse-v .is-up, .ws-pulse-v.is-up, .ws-pulse-v b.is-up {
  color: var(--up);
}
.ws-pulse-v .is-down, .ws-pulse-v.is-down, .ws-pulse-v b.is-down {
  color: var(--down);
}
.ws-pulse-dot {
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--up);
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--up) 22%, transparent);
  flex: none;
}

.tbl .rt-up, .tbl .rt-down, .tbl tr.rt-up, .tbl tr.rt-down, .tbl td.rt-up, .tbl td.rt-down, .tbl span.rt-up, .tbl span.rt-down, .card-item .rt-up, .card-item .rt-down {
  animation: none !important;
  background: transparent !important;
  background-color: transparent !important;
  border-radius: 0 !important;
}

.ws-sidebar .tablist {
  flex: 0 0 auto;
  overflow: visible;
}
.ws-sidebar {
  overflow-y: auto;
  scrollbar-width: thin;
}

.verdict {
  grid-template-columns: minmax(0, 1fr) minmax(280px, 340px);
  align-items: stretch;
  gap: 14px;
  padding: 14px 16px;
}
.verdict .headline {
  font-size: 26px;
  line-height: 1.2;
}
.verdict .vh-breadth {
  align-self: end;
  margin-top: 10px;
}
.verdict .evi {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
  align-content: start;
}
.verdict .evi > * {
  min-height: 0;
  padding: 10px 12px;
}
.cond-list {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 6px 18px;
  margin: 0;
  padding: 0;
  list-style: none;
}
.cond-list li {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 10px;
  min-height: 30px;
  padding: 4px 10px;
  border-radius: var(--r-1);
  background: var(--surface-sunken);
  font-size: 11.5px;
}
.idx {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 8px;
}
.idx .it {
  min-width: 0;
  padding: 8px 10px;
  border-radius: var(--r-1);
  background: var(--surface-sunken);
  border-left: 2px solid var(--border-2);
}
.idx .it.up {
  border-left-color: var(--up);
}
.idx .it.down {
  border-left-color: var(--down);
}

@media (max-width: 900px) {
.verdict {
  grid-template-columns: 1fr;
}
.cond-list {
  grid-template-columns: 1fr;
}
.idx {
  grid-template-columns: 1fr 1fr;
}
}

body[data-ws-page=home] .kpi-t:last-child {
  border-left: 1px solid var(--border-1);
}
body[data-ws-page=home] .grid-cards .card-item {
  min-height: 84px;
  display: flex;
  flex-direction: column;
  justify-content: center;
}
body[data-ws-page=ratio] .ratio-card {
  display: flex;
  flex-direction: column;
  gap: 6px;
  min-height: 148px;
  padding: 12px 14px;
}
body[data-ws-page=ratio] .ratio-card.is-active, body[data-ws-page=ratio] .ratio-card[aria-pressed=true] {
  border: 1px solid var(--accent-line);
  box-shadow: inset 3px 0 0 var(--accent);
  outline: none;
}
body[data-ws-page=ratio] .ratio-card-footer {
  margin-top: auto;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  font-size: 11px;
  color: var(--ink-4);
}

.verdict .evi {
  display: grid;
  grid-template-columns: 1fr 1fr !important;
  gap: 8px !important;
  align-content: start;
  align-self: start;
}
.verdict .evi > * {
  min-height: 0;
  padding: 10px 12px;
  border-radius: var(--r-1);
  background: var(--surface-sunken);
  border: 1px solid var(--border-1);
}
.verdict .evi .evi-grade {
  grid-column: 1 / -1;
}
.verdict .vh-breadth {
  align-self: start;
  margin-top: 8px;
}
.verdict {
  align-items: start;
}

.ws-load-rows {
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding: 4px 2px 0;
}
.ws-load-rows .bar {
  height: 10px;
  border-radius: var(--r-1);
}
.ws-load-rows .bar:nth-child(2) {
  width: 82%;
}
.ws-load-rows .bar:nth-child(3) {
  width: 64%;
}
.ws-load-cap {
  margin: 8px 0 2px;
  font-size: 11px;
  color: var(--ink-4);
}
.ws .blk, .ws .card {
  margin-bottom: 8px;
}
.ws .wrap, .ws .page-main {
  padding: 14px 18px 24px;
}
.ws-pagehead {
  margin-bottom: 10px;
}

.chain-page .pan-header {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
}
.chain-page .pan-header .chips {
  flex-basis: 100%;
  justify-content: flex-start;
  margin: 2px 0 0;
}
.chain-page .pan-kpi-grid {
  gap: 8px;
  margin: 8px 0;
}
.chain-flow-tree > * + * {
  margin-top: 8px;
}

.ws-pager {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 8px;
  min-height: 38px;
  padding: 6px 12px;
  border-top: 1px solid var(--border-1);
  background: var(--surface);
  font-size: 11.5px;
  color: var(--ink-3);
}
.ws-pager button, .ws-pager a {
  min-height: 26px;
  padding: 0 10px;
  border: 1px solid var(--border-1);
  border-radius: var(--r-1);
  background: var(--surface-sunken);
  color: var(--ink-2);
  font-size: 11.5px;
}
.ws-pager button:hover, .ws-pager a:hover {
  background: var(--surface-hover);
  color: var(--ink-1);
}
.tw > table, .tbl-scroll > table, .ws-table-scroll > table {
  width: 100%;
}

.verdict .cond, .card > .bd > .cond, .cond {
  background: transparent !important;
  border: 0 !important;
  padding: 0 !important;
  border-radius: 0 !important;
}
.cond-list li {
  border-left: 2px solid var(--ink-4);
}
.cond-list li.is-approach, .cond-list li[data-s=approach] {
  border-left-color: var(--warn);
}
.cond-list li.is-triggered, .cond-list li[data-s=triggered] {
  border-left-color: var(--warn-ink);
}
.ratio-card.active, .ratio-card.is-active, .ratio-card[aria-pressed=true] {
  border: 1px solid var(--accent-line) !important;
  box-shadow: inset 3px 0 0 var(--accent) !important;
  outline: none !important;
}
.heat {
  gap: 4px 6px;
  align-items: center;
}
.heat .heat-h {
  font-size: 11px;
  color: var(--ink-3);
  text-align: center;
  white-space: nowrap;
}
.heat .heat-c {
  width: 100%;
  min-width: 0;
  height: 30px;
  font-size: 11px;
  border-radius: var(--r-0);
}
.heat-wrap {
  overflow-x: auto;
}
.ratio-card-footer {
  flex-wrap: nowrap;
  min-width: 0;
}
.ratio-card-footer > span:first-child {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.ratio-card-footer > .hint {
  flex: none;
  white-space: nowrap;
}

.ws-stub-note {
  color: var(--warn-ink) !important;
  background: var(--warn-tint);
  border-radius: var(--r-0);
  padding: 1px 6px;
}
.ws-stub-banner {
  display: block;
  margin: 8px 0;
  padding: 8px 12px;
  border-left: 2px solid var(--warn);
  font-size: 11.5px;
  line-height: 1.6;
}
.ws-export, #wsExport, .export-afloat, .export-bar {
  display: none !important;
}

@media (min-width: 901px) and (max-width: 1280px) {
.ws .kpi-inner {
  grid-template-columns: repeat(5, minmax(0, 1fr)) !important;
}
.ws .kpi-t:last-child {
  grid-column: auto !important;
  flex-direction: column !important;
  align-items: stretch !important;
  gap: 0 !important;
  background: var(--surface) !important;
  border-left: 1px solid var(--border-1);
}
.ws .grid-cards {
  grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
}
.ws .grid-cards > .card-item:last-child:nth-child(4n+1) {
  grid-column: span 4;
}
.ws .grid-cards > .card-item:last-child:nth-child(4n+2) {
  grid-column: span 3;
}
.ws .grid-cards > .card-item:last-child:nth-child(4n+3) {
  grid-column: span 2;
}
}
@media (min-width: 641px) and (max-width: 900px) {
.ws .kpi-inner {
  grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
}
.ws .kpi-t:last-child {
  grid-column: 1 / -1 !important;
}
}

.ws .xbtn .cm-label, .ws .cm-label {
  display: none !important;
}
.ws .grid-cards > .card-item:last-child:nth-child(4n+1), .ws .grid-cards > .card-item:last-child:nth-child(4n+2), .ws .grid-cards > .card-item:last-child:nth-child(4n+3), .ws .grid-cards > .card-item:last-child:nth-child(3n+1), .ws .grid-cards > .card-item:last-child:nth-child(3n+2), .ws .grid-cards > .card-item:last-child:nth-child(2n+1) {
  grid-column: auto !important;
}

.cond-row.void, .cond-row[data-s=void], .cond-list li.void, [class*=cond][class*=void] {
  background-image: none !important;
  background-color: var(--surface-sunken) !important;
}

.ws .kpi-t:last-child {
  min-height: 72px !important;
}
.ws .kpi-t:last-child b {
  font-size: 14px !important;
  line-height: 18px !important;
  white-space: nowrap;
}
.ws .kpi-t:last-child > span {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.xpair-blk .xpair-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 8px;
  padding: 10px 12px 12px;
}
.xpair-card {
  display: flex;
  flex-direction: column;
  gap: 6px;
  padding: 10px 12px;
  border: 1px solid var(--border-1);
  border-radius: var(--r-1);
  background: var(--surface-sunken);
  min-width: 0;
}
.xpair-h {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 11.5px;
  color: var(--ink-2);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.xpair-h b {
  color: var(--ink-1);
  font-weight: var(--fw-semibold);
}
.xpair-z {
  margin-left: auto;
  padding: 1px 6px;
  border-radius: var(--r-full);
  font-size: 11px;
  font-variant-numeric: tabular-nums;
  background: var(--surface-hover);
  color: var(--ink-2);
  flex: none;
}
.xpair-z.is-hi {
  background: var(--up-tint);
  color: var(--up-ink);
}
.xpair-z.is-lo {
  background: var(--down-tint);
  color: var(--down-ink);
}
.xpair-canvas {
  display: block;
  width: 100%;
  height: 96px;
}
.xpair-meta {
  display: flex;
  justify-content: space-between;
  gap: 8px;
  font-size: 11px;
  color: var(--ink-4);
  font-variant-numeric: tabular-nums;
}

@media (max-width: 1200px) {
.xpair-blk .xpair-grid {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
@media (max-width: 700px) {
.xpair-blk .xpair-grid {
  grid-template-columns: 1fr;
}
}

.verdict .cond {
  padding: 10px 12px 12px !important;
}
.cond-list {
  display: grid !important;
  grid-template-columns: 1fr 1fr;
  gap: 8px !important;
  margin: 0 !important;
  padding: 0 !important;
  list-style: none !important;
}
.cond-row {
  display: grid !important;
  grid-template-columns: minmax(0, 1fr) auto auto auto;
  align-items: center;
  gap: 8px;
  min-height: 38px;
  padding: 8px 10px 8px 12px !important;
  border: 1px solid var(--border-1) !important;
  border-left: 3px solid var(--ink-4) !important;
  border-radius: var(--r-1) !important;
  background: var(--surface-sunken) !important;
}
.cond-row .ic, .cond-row .cbar {
  display: none !important;
}
.cond-row .pred {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: var(--fs-xs);
  color: var(--ink-1);
}
.cond-row .st {
  flex: none;
  padding: 1px 7px;
  border-radius: var(--r-full);
  background: var(--surface-hover);
  color: var(--ink-3);
  font-size: 11px;
  line-height: 16px;
  white-space: nowrap;
}
.cond-row .cur {
  font-variant-numeric: tabular-nums;
  font-size: var(--fs-sm);
  font-weight: var(--fw-semibold);
  color: var(--ink-0);
  white-space: nowrap;
}
.cond-row .gap {
  font-variant-numeric: tabular-nums;
  font-size: 11px;
  color: var(--ink-4);
  white-space: nowrap;
}
.cond-row.approach {
  border-left-color: var(--warn) !important;
}
.cond-row.approach .st {
  background: var(--warn-tint);
  color: var(--warn-ink);
}
.cond-row.triggered {
  border-left-color: var(--up) !important;
  background: color-mix(in srgb, var(--up-tint) 55%, var(--surface-sunken)) !important;
}
.cond-row.triggered .st {
  background: var(--up-tint);
  color: var(--up-ink);
}
.cond-row.void {
  border-left-style: dashed !important;
  border-left-color: var(--border-2) !important;
  opacity: .82;
}

@media (max-width: 760px) {
.cond-list {
  grid-template-columns: 1fr;
}
}

.cond-list {
  grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
}
.cond-row {
  display: flex !important;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 4px 6px;
  min-height: 74px;
  padding: 10px 12px !important;
  position: relative;
}
.cond-row .pred {
  flex: 0 0 100%;
  padding-right: 54px;
  font-size: 11px;
  color: var(--ink-2);
  line-height: 1.4;
  white-space: normal;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
}
.cond-row .st {
  position: absolute;
  top: 8px;
  right: 8px;
}
.cond-row .cur {
  order: 3;
  font-size: 19px;
  line-height: 1.15;
}
.cond-row .gap {
  order: 4;
  align-self: center;
}

@media (max-width: 1280px) {
.cond-list {
  grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
}
}
@media (max-width: 700px) {
.cond-list {
  grid-template-columns: 1fr !important;
}
}

.cond-row .st {
  display: inline-block !important;
}
.ratio-card-footer {
  align-items: flex-start;
}
.ratio-card-footer > span:first-child {
  white-space: normal !important;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  line-height: 1.4;
}
.kpi-t > span {
  white-space: normal !important;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  line-height: 1.35;
}

.ws .kpi-t:last-child > span {
  display: block !important;
  -webkit-line-clamp: initial;
  white-space: nowrap !important;
}

.card:has(> .bd > .grid.g4 > .kpi.tap) .bd {
  padding: 9px 12px !important;
}
.card:has(> .bd > .grid.g4 > .kpi.tap) .grid.g4 {
  display: flex !important;
  align-items: baseline;
  gap: 14px;
  grid-template-columns: none !important;
}
.card:has(> .bd > .grid.g4 > .kpi.tap) .kpi.tap {
  display: flex;
  align-items: baseline;
  gap: 10px;
  padding: 0 !important;
  border: 0 !important;
  background: transparent !important;
  min-height: 0 !important;
}
.card:has(> .bd > .grid.g4 > .kpi.tap) .kpi.tap .k {
  font-size: 11.5px;
  color: var(--ink-3);
  white-space: nowrap;
}
.card:has(> .bd > .grid.g4 > .kpi.tap) .kpi.tap .v {
  font-size: 24px;
  line-height: 1;
  letter-spacing: -.02em;
}
.card:has(> .bd > .grid.g4 > .kpi.tap) .kpi.tap .kk {
  font-size: 11px;
  color: var(--ink-4);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 46ch;
}
table th.th-right, .tbl th.th-right {
  text-align: right !important;
}

@media (max-width: 640px) {
table.tbl td[data-pr], table.tbl th[data-pr] {
  display: table-cell;
}
table.tbl.tbl-ratio td[data-pr="4"], table.tbl.tbl-ratio th[data-pr="4"], table.tbl.tbl-ratio td[data-pr="5"], table.tbl.tbl-ratio th[data-pr="5"] {
  display: table-cell;
}
.tbl-scroll > table.tbl, .ws-table-scroll > table.tbl {
  min-width: 620px;
}
.tbl-scroll > table.tbl.tbl-ratio, .ws-table-scroll > table.tbl.tbl-ratio {
  min-width: 760px;
}
.tbl td.num, .tbl th.num {
  white-space: nowrap;
}
.tbl td, .tbl th {
  white-space: nowrap;
}
.tbl-scroll > table.tbl > thead > tr > th:first-child, .ws-table-scroll > table.tbl > thead > tr > th:first-child {
  position: sticky;
  left: 0;
  z-index: 2;
  background: var(--surface-sunken);
  box-shadow: inset -1px 0 0 var(--border-1);
}
.tbl-scroll > table.tbl > tbody > tr > td:first-child, .ws-table-scroll > table.tbl > tbody > tr > td:first-child {
  position: sticky;
  left: 0;
  z-index: 1;
  background: var(--surface);
  box-shadow: inset -1px 0 0 var(--border-1);
}
}

.ws-demo-banner {
  display: flex;
  align-items: baseline;
  gap: 8px;
  margin: 0 0 10px;
  padding: 9px 12px;
  border: 1px solid var(--warn);
  border-left-width: 3px;
  border-radius: var(--r-1);
  background: var(--warn-tint);
  color: var(--warn-ink);
  font-size: var(--fs-xs);
  line-height: 1.55;
}
.ws-demo-banner b {
  flex: none;
  font-weight: var(--fw-semibold);
  letter-spacing: .02em;
}
.ws-demo-banner span {
  min-width: 0;
}

@media (max-width: 640px) {
.ws-demo-banner {
  flex-direction: column;
  gap: 2px;
  padding: 8px 10px;
}
}

#app [style*="font-size:10px"], #view [style*="font-size:10px"], #app [style*="font-size: 10px"], #view [style*="font-size: 10px"], #app [style*="font-size:9.5px"], #view [style*="font-size:9.5px"] {
  font-size: 11px !important;
}
#view span.hint[style*="--border-2"] {
  color: var(--ink-4) !important;
}
#view span.hint[style*="--border-2"], #app span.hint[style*="--border-2"] {
  color: var(--ink-4) !important;
}
.tbl tbody tr[data-kb="1"]:focus-visible {
  outline: 2px solid var(--focus-color, var(--accent));
  outline-offset: -2px;
}
.tbl tbody tr[data-kb="1"] {
  cursor: pointer;
}

.ws-search-empty {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 6px;
  margin: 12px 0 0;
  padding: 16px;
  border: 1px dashed var(--border-2);
  border-radius: var(--r-2, 8px);
  background: var(--surface-sunken);
}
.ws-search-empty p {
  margin: 0;
  color: var(--ink-1);
  font-size: var(--fs-sm);
}
.ws-search-empty-hint {
  color: var(--ink-3) !important;
  font-size: var(--fs-xs) !important;
}
.ws-search-empty .btn.xs {
  margin-top: 4px;
}

.tbl {
  table-layout: fixed;
}
.tbl td, .tbl th {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

@media (min-width: 641px) {
table.tbl td:first-child, table.tbl th:first-child, .ws table.tbl td:first-child, .ws table.tbl th:first-child {
  position: static;
  box-shadow: none;
}
}

.tbl td.num, .tbl th.num, .tbl .q-price, .tbl .q-chg {
  border-radius: 0 !important;
}
.tbl > colgroup > col:first-child {
  min-width: 96px;
}


/* ============================================================================
   V14 · 视觉与可用性改进（2026-11-04）
   ----------------------------------------------------------------------------
   三条依据都来自线上真机实测，不是审美偏好：

   1) 可点击目标 < 24px（WCAG 2.5.8 建议下限）
      实测：grp-toggle 22×22、股票站 card-fold-btn 48×22、页脚链接高 17px。
      用「外扩热区」而不是放大图标：图标视觉尺寸不变，只把 padding 撑到 24，
      并对负 margin 做补偿，避免撑开布局。
   2) 首屏同一句「数据日期 … 生成于 …」出现 3 次（页头右 / KPI 第 5 格 / 页脚）。
      页头那句与 KPI 格完全重复 —— 隐藏页头那句，信息不丢（KPI 与页脚仍有）。
   3) 页脚链接行高过小，点不中；同时缺少 hover 反馈。
   ========================================================================== */

/* ---- 1. 可点击目标：视觉不变，热区补到 24×24 ---- */

/* 分组折叠按钮（首页/品种页的板块标题右侧） */
.grp-toggle {
  position: relative;
  min-width: 24px;
  min-height: 24px;
}

/* 分组折叠按钮的点击热区向外扩，不改变图标位置 */
.grp-toggle::after {
  content: "";
  position: absolute;
  inset: -1px;
  /* 只扩热区，不参与渲染 */
  pointer-events: auto;
}

/* 股票站的卡片折叠按钮（「收起 ▾」） */
.card-fold-btn {
  min-height: 24px;
  padding-top: 2px;
  padding-bottom: 2px;
}

/* 页脚与功能性链接：补垂直内边距，让热区达到 24 */
.pgf a,
.pgf-bar a {
  display: inline-block;
  /* 13px 文本 + 上下各 4px = 24px 热区（实测 23 差 1px，补到 4px） */
  padding: 4px 2px;
  min-height: 24px;
  /* 「支持」这类两字链接宽度只有 22px，补到 24 */
  min-width: 24px;
  line-height: 1.55;
}

/* 侧栏与底栏的图标按钮（28px 已达标，这里只统一最小尺寸，防回退） */
.ws .xbtn {
  min-width: 28px;
  min-height: 28px;
}

/* ---- 2. 信息去重：隐藏页头右侧与 KPI 完全重复的数据日期 ---- */

/* 页头右上角的 #wsDataStatus 与页脚 #fresh 文本完全相同（实测都是
   「数据日期 2026-11-03 · 生成于 11-03 19:28」），而 KPI 第 5 格又单独
   显示了「数据日期 / 2026-11-03 / 生成于 …」三段。三处重复。
   保留 KPI（信息最完整）+ 页脚（随页面到底可见），隐藏页头这一条。 */
#wsDataStatus.ws-data-status {
  display: none;
}

/* ---- 3. 页脚链接可见反馈 ---- */

.pgf a:hover,
.pgf-bar a:hover {
  color: var(--accent);
  text-decoration: underline;
}

/* ---- 4. 表格内的按钮与徽标：保证热区 ---- */

.chip,
.ws .chip {
  min-height: 24px;
}

/* 6) 移动端底部导航：命中区本来就大，只保证不被压扁 */
@media (max-width: 640px) {
  .bnav .tab,
  .bottomnav button {
    min-height: 44px;
  }
}

/* ============================================================================
   维护约定（新增样式前请读）
   ----------------------------------------------------------------------------
   1. 同一选择器同一属性只写一次。要改就改原处，不要在文件末尾追加补丁段。
      历史教训：九层补丁里 114 组属性被写了不同值，最后没人敢删。
   2. 特异性上限 30（约 3 个类）。超过说明选择器在替结构擦屁股，
      应该加语义类或改结构。
   3. !important 只允许两种用途：压过业务 bundle 的内联样式（bundle 改不动）、
      以及 .sr-only 这类必须赢的工具类。其余一律不加。
   4. 颜色/间距/字号/圆角一律走 tokens.css 的令牌，不写裸值。
      圆角只允许 --r-0 / --r-1 / --r-2 / --r-3 / --r-full 五档。
   5. 改完必须跑：
        python3 audit/verify-css-equivalence.py     # 静态等价（改动前先备份）
        node audit/live/live-regression.cjs         # 真机对比度/字号/溢出
   ========================================================================== */


/* tokens (last so they win) */
/* ============================================================================
   盘鉴 · 统一设计令牌 —— V5「深色终端精修」
   深色为基座；浅色为可选覆盖。所有旧变量名保持不变，只改取值，
   避免 app.js / astock 业务脚本里对 CSS 变量的硬依赖失效。

   V5 三条原则：
   1) 一屏一主角：首屏只允许一个视觉主角，其余降级。
   2) 密度即专业：行高 30px、正文 12.5px、tabular-nums，取消宽字距等宽。
   3) 色彩纪律：仅 accent（交互）/ up·down（数据方向）/ ai（AI 列）三类发声色，
      其余全部中性灰阶；涨跌色降饱和去霓虹感。
   ========================================================================== */
:root,
:root[data-theme=dark] {
  color-scheme: dark;

  /* 底色与面：四级面阶，层级靠「面阶 + 1px 边」表达，不靠阴影 */
  --bg-sunken: #07080A;
  --bg: #0A0C0F;
  --surface: #101317;
  --surface-elevated: #151920;
  --surface-hover: #1A1F26;
  --surface-sunken: #14181D;

  /* 文字：四级灰阶，四级全部 ≥ 4.5:1（2026-11-04 修：ink-4 原 #6E7784
     在 surface #101317 上仅 3.93:1，单位/脚注/图例全不达标，上调到 #7C8694 = 4.83:1） */
  --ink-0: #F7F8FA;
  --ink-1: #E8EAEE;
  --ink-2: #A8B0BC;
  --ink-3: #8B94A1;
  --ink-4: #7C8694;

  /* 线 */
  --border-1: rgba(255, 255, 255, .06);
  --border-2: rgba(255, 255, 255, .11);
  --grid-line: rgba(255, 255, 255, .045);
  --axis-line: rgba(255, 255, 255, .12);

  /* 量化刻度 */
  --quant-track: #2E3238;
  --quant-mid: #4E545E;
  --quant-marker: #E8EAEE;

  /* 涨跌：全站固定「红涨绿跌」，不再提供其它色彩模式。
     深色值原为 #E5484D / #2FA36B：红在 #0E0F11 上只有 4.9:1，勉强及格，
     且与浅色原值（#B42323/#087443）相差过大，切换主题时观感跳变。
     统一为 #F0736A(6.73:1) / #45C98A(9.11:1)。 */
  --up: #F0736A;
  --up-tint: rgba(240, 115, 106, .14);
  --up-ink: #FF9E9E;
  --down: #45C98A;
  --down-tint: rgba(69, 201, 138, .14);
  --down-ink: #7ADCA8;
  --flat: #8A909B;

  /* 语义色 */
  --warn: #E3920A;
  --warn-tint: rgba(227, 146, 10, .12);
  --warn-ink: #F2BC60;
  --info: #4C8DFF;
  --info-tint: rgba(76, 141, 255, .13);
  --info-ink: #9DBEFF;
  --ok: #2FA36B;
  --ok-tint: rgba(47, 163, 107, .12);
  --ok-ink: #7ADCA8;

  /* 品牌 / 交互主色：仅用于交互与品牌时刻 */
  --accent: #FF5A1F;
  --accent-hover: #FF7A45;
  --accent-tint: rgba(255, 90, 31, .12);
  --accent-ink: #FFA37A;
  --accent-line: rgba(255, 90, 31, .30);
  --on-accent: #0A0C0F;

  /* AI 语义色：与涨跌方向解耦 */
  --ai: #8B5CF6;
  --ai-tint: rgba(139, 92, 246, .13);
  --ai-ink: #B4A3FF;

  /* 图表序列 */
  --viz-1: #FF6B35;
  --viz-2: #4C8DFF;
  --viz-3: #2FA36B;
  --viz-4: #8B5CF6;
  --viz-5: #E3920A;
  --viz-6: #22B8CF;
  --viz-7: #E85D75;

  /* 热力（橙红温度阶） */
  --heat-0: #241511;
  --heat-1: #432115;
  --heat-2: #6E2F18;
  --heat-3: #B4441C;
  --heat-4: #FF5A1F;
  --heat-0-fg: #E8EAEE;
  --heat-1-fg: #F3D9CE;
  --heat-2-fg: #FBE6DD;
  --heat-3-fg: #FFFFFF;
  --heat-4-fg: #141417;

  /* 字体：正文系统无衬线 + tabular-nums；仅 KPI 大数字用等宽 */
  --font-sans: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", "Segoe UI", system-ui, sans-serif;
  --font-num: SFMono-Regular, "JetBrains Mono", Consolas, ui-monospace, Menlo, monospace;
  --font-mono: var(--font-num);

  /* 字号 / 字重：V5 正文 12.5，表格 12.5，标签 10.5 */
  --fs-3xs: 11px;
  --fs-2xs: 11px;
  --fs-xs: 11.5px;
  --fs-sm: 12.5px;
  --fs-md: 13.5px;
  --fs-lg: 15px;
  --fs-xl: 19px;
  --fs-2xl: 24px;
  --fs-3xl: 30px;
  --fw-regular: 400;
  --fw-medium: 500;
  --fw-semibold: 600;
  --fw-bold: 700;
  --lh-tight: 1.25;
  --lh-snug: 1.42;
  --lh-body: 1.55;
  --lh-loose: 1.7;

  /* 间距 */
  --sp-1: 4px;
  --sp-2: 6px;
  --sp-3: 8px;
  --sp-4: 10px;
  --sp-5: 12px;
  --sp-6: 16px;
  --sp-7: 20px;
  --sp-8: 24px;
  --sp-9: 28px;
  --sp-10: 36px;
  --sp-half: 2px;
  --sp-2h: 7px;
  --sp-3h: 9px;

  /* 圆角：面板 10 / 控件 7 / 小标签 4 */
  --r-0: 3px;
  --r-1: 5px;
  --r-2: 8px;
  --r-3: 10px;
  --r-full: 999px;
  --rad: var(--r-2);

  /* 阴影：极克制，仅浮层用 */
  --sh-1: 0 1px 2px rgba(0, 0, 0, .28);
  --sh-2: 0 6px 18px -8px rgba(0, 0, 0, .55);
  --sh-3: 0 18px 48px -12px rgba(0, 0, 0, .72);
  --shadow-1: var(--sh-1);
  --shadow-2: var(--sh-2);
  --shadow-3: var(--sh-3);
  --shadow-up: 0 -1px 3px rgba(0, 0, 0, .4);

  /* 别名（旧代码直接引用） */
  --text-1: var(--ink-1);
  --text-2: var(--ink-2);
  --text-3: var(--ink-3);
  --text-dim: var(--ink-3);
  --text-primary: var(--ink-1);
  --surface-2: var(--surface-sunken);
  --bg-card: var(--surface);
  --border: var(--border-1);
  --grade-on: var(--accent);
  --grade-off: var(--border-2);
  --evi-neutral-bg: var(--bg-sunken);
  --evi-alert-bg: var(--warn-tint);
  --evi-alert-ink: var(--warn-ink);
  --cond-idle: var(--ink-3);
  --cond-approach: var(--warn);
  --cond-triggered: var(--warn-ink);
  --cond-void: var(--ink-4);
  --acc-key: var(--accent-ink);
  --fs-lead: 28px;
  --fs-lead-r: var(--fs-lead);
  --fs-num-main: var(--fs-lg);
  --fs-num-big: var(--fs-xl);

  /* 布局：V5 侧栏 232 / 窄屏图标轨 64 / 行高 30 */
  --row-h: 30px;
  --row-h-list: 40px;
  --row-h-tbl: 30px;
  --row-h-cond: 30px;
  --cell-pad-x: 12px;
  --cell-pad-y: 5px;
  --card-pad: 12px;
  --sec-gap: 10px;
  --max-w: 1680px;
  --pad-page-x: 24px;
  --appbar-h: 46px;
  --ws-sidebar-w: 232px;

  /* V5 新增令牌 */
  --rail-w: 64px;
  --panel-head-h: 36px;
  --tbl-head-h: 30px;
  --group-row-h: 30px;
  --btn-h: 28px;
  --chip-h: 26px;
  --empty-h: 96px;
  --hero-num: 30px;
  --gap-grid: 10px;
  --skel-base: var(--surface-sunken);
  --skel-sheen: rgba(255, 255, 255, .05);

  /* 动效 */
  --dur-1: 120ms;
  --dur-2: 160ms;
  --dur-3: 240ms;
  --dur-flash: 700ms;
  --dur-skel: 1.25s;
  --ease-std: cubic-bezier(.25, .1, .25, 1);
  --ease-out: cubic-bezier(.2, .7, .3, 1);
  --ease-in: cubic-bezier(.4, 0, 1, 1);
  --ease-flash: ease-out;

  /* 聚焦与层级 */
  --focus-width: 2px;
  --focus-offset: 2px;
  --focus-color: var(--accent);
  --z-tblhead: 2;
  --z-pill: 6;
  --z-raised: 10;
  --z-sticky: 100;
  --z-bottomnav: 120;
  --z-dropdown: 200;
  --z-modal: 300;
  --z-top: 400;
  --z-skiplink: 500;

  /* 图标 */
  --icon-sm: 14px;
  --icon-md: 16px;
  --icon-lg: 18px;
  --bw-1: 1px;
  --ls-tight: -.01em;
  --lh-num: 1.05;
}

/* 密度：V5 标准 30 / 紧凑 26 / 舒适 38 */
:root[data-density=compact] {
  --row-h: 26px;
  --row-h-tbl: 26px;
  --cell-pad-y: 3px;
  --cell-pad-x: 10px;
}
:root[data-density=standard] {
  --row-h: 30px;
  --row-h-tbl: 30px;
  --cell-pad-y: 5px;
  --cell-pad-x: 12px;
}
:root[data-density=comfortable] {
  --row-h: 38px;
  --row-h-tbl: 38px;
  --cell-pad-y: 9px;
  --cell-pad-x: 14px;
}

/* 显式浅色：V5 对比度真修（正文 ≥ 4.5:1） */
:root[data-theme=light] {
  color-scheme: light;
  --bg-sunken: #ECEEF1;
  --bg: #F5F6F8;
  --surface: #FFFFFF;
  --surface-elevated: #FFFFFF;
  --surface-hover: #F2F4F6;
  --surface-sunken: #F6F7F9;

  /* 浅色文字阶：四级全部 ≥ 4.5:1（白 / #F6F7F9 / #F5F6F8 / #ECEEF1 四种面都已验算）
     ink-4 原 #94A3B8 在白底只有 2.56:1 —— 单位、脚注、图例、副标题全用它，实测 249 处不达标。 */
  --ink-0: #0B0C0E;
  --ink-1: #16181B;
  --ink-2: #4B5563;
  --ink-3: #4E5967;
  --ink-4: #5F6979;

  --border-1: rgba(15, 23, 42, .10);
  --border-2: rgba(15, 23, 42, .16);
  --grid-line: rgba(15, 23, 42, .06);
  --axis-line: rgba(15, 23, 42, .16);

  --quant-track: #E2E4E8;
  --quant-mid: #C2C6CD;
  --quant-marker: #18181B;

  --up: #B42323;
  --up-tint: #FCEAEA;
  --up-ink: #8F1B1B;
  --down: #087443;
  --down-tint: #E5F4EC;
  --down-ink: #065C36;
  --flat: #5F6979;

  --warn: #8A5A06;
  --warn-tint: #FCF3E1;
  --warn-ink: #6F4905;
  --info: #1A5FD0;
  --info-tint: #E9F1FE;
  --info-ink: #14509F;
  --ok: #08744A;
  --ok-tint: #E2F2EA;
  --ok-ink: #065C3B;

  --accent: #B93A08;
  --accent-hover: #96300A;
  --accent-tint: #FCEEE7;
  --accent-ink: #8A2C06;
  --accent-line: #F0CDBB;
  --on-accent: #FFFFFF;

  /* AI 语义色：浅色缺这组会继承深色的 #B4A3FF —— 白底上只有 2.18:1，
     AI 方向分整列不可读（2026-11-04 实测）。改深紫 #6D28D9 = 7.1:1。 */
  --ai: #6D28D9;
  --ai-tint: #F1EAFE;
  --ai-ink: #6D28D9;

  --viz-1: #B93A08;
  --viz-2: #1A5FD0;
  --viz-3: #087443;
  --viz-4: #6D4AC7;
  --viz-5: #8A5A06;
  --viz-6: #0A7276;
  --viz-7: #B83B55;

  --heat-0: #FFF3EC;
  --heat-1: #FDDCCC;
  --heat-2: #F9B694;
  --heat-3: #F27C4A;
  --heat-4: #B93A08;
  --heat-0-fg: #18181B;
  --heat-1-fg: #18181B;
  --heat-2-fg: #18181B;
  --heat-3-fg: #FFFFFF;
  --heat-4-fg: #FFFFFF;

  --skel-base: var(--surface-sunken);
  --skel-sheen: rgba(15, 23, 42, .05);

  --sh-1: 0 1px 2px rgba(24, 24, 27, .05);
  --sh-2: 0 6px 18px -8px rgba(24, 24, 27, .16);
  --sh-3: 0 18px 48px -12px rgba(24, 24, 27, .22);
  --shadow-1: var(--sh-1);
  --shadow-2: var(--sh-2);
  --shadow-3: var(--sh-3);
  --shadow-up: 0 -1px 3px rgba(24, 24, 27, .05);
}
