:root{font-family:Inter,PingFang SC,Microsoft YaHei,sans-serif;color:#172033;background:#f4f7fb;font-synthesis:none;text-rendering:optimizeLegibility;--bg: #f4f7fb;--surface: #ffffff;--surface-muted: #f8fafc;--border: #d9e2ec;--border-strong: #c4d0de;--text: #172033;--muted: #5d6c80;--subtle: #65758a;--brand: #19558f;--brand-dark: #153e66;--brand-soft: #eaf2fa;--rise: #e53935;--rise-soft: #fff0ef;--fall: #159a62;--fall-soft: #eaf8f2;--warning: #d97706;--warning-soft: #fff7e6;--info: #2563eb;--purple: #7656c9;--shadow: 0 2px 8px rgba(20, 42, 74, .08)}*{box-sizing:border-box}html,body,#root{width:100%;max-width:none;margin:0;min-width:320px;min-height:100%}body{min-height:100vh;overflow-x:hidden}button,input,select,textarea{font:inherit;letter-spacing:0}button{color:inherit}button,a{-webkit-tap-highlight-color:transparent}button:focus-visible,input:focus-visible,select:focus-visible,a:focus-visible{outline:2px solid rgba(37,99,235,.55);outline-offset:2px}button:disabled{cursor:not-allowed;opacity:.48}code,.last-price,.quote-metrics dd,.candidate-quote,.candidate-score,.metric-card strong,td,.run-metadata{font-variant-numeric:tabular-nums}.app-shell{width:100%;max-width:none;min-height:100vh;padding-bottom:34px;background:var(--bg)}.rise{color:var(--rise)!important}.fall{color:var(--fall)!important}.flat{color:var(--text)!important}.warning-text{color:var(--warning)!important}.spin{animation:spin .9s linear infinite}.rotate-90{transform:rotate(90deg)}@keyframes spin{to{transform:rotate(360deg)}}.app-header{height:60px;display:grid;grid-template-columns:minmax(250px,330px) minmax(300px,560px) minmax(360px,1fr);align-items:center;gap:18px;padding:0 18px;color:#fff;background:var(--brand-dark);border-bottom:1px solid rgba(255,255,255,.13);position:sticky;top:0;z-index:70}.brand{height:52px;display:flex;align-items:center;gap:10px;border:0;background:transparent;color:#fff;padding:0;cursor:pointer;text-align:left}.brand-mark{width:36px;height:36px;border-radius:6px;background:#ef433d;display:flex;align-items:center;justify-content:center;gap:3px;box-shadow:inset 0 0 0 1px #ffffff2e}.brand-mark i{width:3px;display:block;background:#fff;border-radius:1px;position:relative}.brand-mark i:before{content:"";width:1px;height:22px;background:#ffffffd9;position:absolute;left:1px;top:50%;transform:translateY(-50%)}.brand-mark i:nth-child(1){height:8px}.brand-mark i:nth-child(2){height:16px}.brand-mark i:nth-child(3){height:11px}.brand-copy{display:flex;flex-direction:column;line-height:1.05;min-width:0}.brand-copy strong{font-size:19px;font-weight:700;white-space:nowrap}.brand-copy small{margin-top:5px;font-size:11px;color:#a8c3df;line-height:1.3}.market-badge{margin-left:2px;padding:3px 6px;border:1px solid rgba(255,255,255,.22);border-radius:4px;font-size:10px;color:#cfe0f1;white-space:nowrap}.stock-search{position:relative;height:38px;display:flex;align-items:center;gap:9px;padding:0 10px;border-radius:6px;color:var(--muted);background:#fff;border:1px solid rgba(255,255,255,.35)}.stock-search input{min-width:0;flex:1;height:32px;border:0;outline:0;background:transparent;color:var(--text);font-size:14px}.stock-search input::placeholder{color:#98a5b6}.stock-search kbd{font-family:inherit;font-size:10px;color:#8492a6;background:#f2f5f8;border:1px solid #e1e7ef;border-radius:3px;padding:2px 5px;white-space:nowrap}.search-results{position:absolute;left:0;right:0;top:calc(100% + 8px);max-height:min(600px,calc(100vh - 78px));overflow-y:auto;padding:6px;border:1px solid var(--border);border-radius:6px;background:#fff;box-shadow:0 12px 30px #122a462e;z-index:100}.search-results button{width:100%;min-height:52px;display:flex;align-items:center;justify-content:space-between;border:0;border-radius:4px;background:#fff;padding:7px 10px;cursor:pointer;text-align:left}.search-results button:hover,.search-results button.selected{background:#eef5fb}.search-results button>span:first-child{display:flex;flex-direction:column;gap:3px}.search-results strong{font-size:14px}.search-results small{color:var(--muted);font-size:11px}.search-empty{margin:12px;color:var(--muted);font-size:13px;text-align:center}.search-spinner{flex:none;color:var(--brand)}.search-no-quote{color:var(--subtle);font-size:10px}.search-source{min-height:34px;display:flex;align-items:center;gap:6px;margin:4px -1px -1px;padding:6px 10px;border-top:1px solid #e7edf3;color:var(--muted);background:#f8fafc;font-size:11px;line-height:1.4}.search-source.is-error,.search-source.is-stale{color:#8a641b;background:#fffaf0}.search-source svg{flex:none}.source-dot{width:7px;height:7px;flex:none;border-radius:50%;background:var(--fall)}.search-source.is-stale .source-dot{background:var(--warning)}.header-actions{min-width:0;display:flex;align-items:center;justify-content:flex-end;gap:8px}.market-state{display:flex;align-items:center;gap:9px;padding-right:12px;margin-right:3px;border-right:1px solid rgba(255,255,255,.15)}.market-state>span{width:8px;height:8px;flex:none;border-radius:50%;background:#f59e0b;box-shadow:0 0 0 3px #f59e0b24}.market-state.mode-live>span{background:#32d58a;box-shadow:0 0 0 3px #32d58a24}.market-state.mode-cached>span{background:#63a9ea;box-shadow:0 0 0 3px #63a9ea24}.market-state div{display:flex;flex-direction:column;line-height:1.2}.market-state strong{font-size:12px;font-weight:600}.market-state small{margin-top:3px;max-width:230px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px;color:#abc0d6}.icon-button{width:38px;height:38px;flex:none;display:inline-flex;align-items:center;justify-content:center;padding:0;border-radius:6px;border:1px solid var(--border);color:#4f6077;background:#fff;cursor:pointer}.app-header .icon-button{color:#d8e5f2;border-color:#ffffff38;background:#ffffff12}.icon-button:hover{background:#eef4fa;color:var(--brand)}.app-header .icon-button:hover{background:#ffffff24;color:#fff}.icon-button.small{width:32px;height:32px;border-radius:5px}.icon-button.danger:hover{color:var(--rise);background:var(--rise-soft);border-color:#f1b8b5}.primary-nav{height:43px;display:flex;align-items:stretch;justify-content:space-between;padding:0 18px;background:#fff;border-bottom:1px solid var(--border);position:sticky;top:60px;z-index:60}.nav-scroll{display:flex;align-items:stretch;min-width:0;overflow-x:auto;scrollbar-width:none}.nav-scroll::-webkit-scrollbar{display:none}.nav-scroll button,.method-link{height:43px;display:flex;align-items:center;justify-content:center;gap:7px;padding:0 18px;border:0;border-bottom:2px solid transparent;background:transparent;color:var(--muted);cursor:pointer;white-space:nowrap;font-size:13px}.nav-scroll button:hover{color:var(--brand);background:#f8fbfe}.nav-scroll button.active{color:var(--brand);border-bottom-color:var(--brand);background:#f6f9fc;font-weight:600}.nav-scroll .mobile-method-link{display:none}.method-link{padding-right:2px;color:#718198}.global-error{min-height:44px;display:flex;align-items:center;justify-content:center;gap:10px;padding:7px 16px;color:#8b3b12;background:#fff4e6;border-bottom:1px solid #f3d0aa;font-size:12px}.global-error span{display:flex;gap:8px}.global-error button{border:1px solid #e9ae6a;border-radius:4px;padding:4px 10px;background:#fff;color:#8b3b12;cursor:pointer}.quote-strip{min-height:118px;display:grid;grid-template-columns:minmax(350px,1.45fr) minmax(190px,.8fr) minmax(650px,3.8fr);align-items:center;gap:16px;padding:10px 20px;border-bottom:1px solid var(--border);background:#fff;position:relative}.quote-identity{min-width:0;align-self:stretch;display:flex;flex-direction:column;justify-content:center;gap:7px;padding-right:14px;border-right:1px solid #e5ebf2}.quote-current{min-width:0;display:flex;align-items:center;justify-content:space-between;gap:10px}.quote-current-name{min-width:0;display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto;align-items:baseline;column-gap:8px}.quote-identity h1{margin:3px 0 0;font-size:19px;line-height:1.2;grid-column:1}.quote-identity code{color:var(--muted);font-family:inherit;font-size:12px;grid-column:2}.exchange-symbol{grid-column:1 / -1;display:flex;align-items:center;gap:4px;color:var(--brand);font-size:10px;font-weight:600}.stock-tags{display:flex;gap:4px;flex-wrap:wrap;justify-content:flex-end}.stock-tags span{padding:3px 6px;border:1px solid #cad7e5;border-radius:4px;background:#f7fafd;color:#567089;font-size:10px;white-space:nowrap}.quote-hot-select{min-width:0;padding-top:6px;border-top:1px solid #e7edf3}.quote-hot-heading{min-width:0;display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:5px}.quote-hot-heading strong{display:inline-flex;align-items:center;gap:4px;color:var(--brand);font-size:11px;white-space:nowrap}.quote-hot-heading strong svg{color:var(--rise)}.quote-hot-heading small{min-width:0;overflow:hidden;color:var(--muted);font-size:9px;text-overflow:ellipsis;white-space:nowrap}.quote-hot-list{min-width:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:5px}.quote-hot-list button{min-width:0;height:27px;display:grid;grid-template-columns:13px minmax(0,1fr) auto;align-items:center;gap:3px;padding:0 5px;border:1px solid #d7e1ec;border-radius:4px;background:#f8fbfe;color:var(--text);cursor:pointer;text-align:left}.quote-hot-list button:hover,.quote-hot-list button.active{border-color:#8fb3d4;background:#edf5fc}.quote-hot-list button>span{color:var(--warning);font-size:9px;font-weight:700}.quote-hot-list button strong{min-width:0;overflow:hidden;font-size:10px;text-overflow:ellipsis;white-space:nowrap}.quote-hot-list button small{font-size:10px;white-space:nowrap}.quote-hot-empty{color:var(--muted);font-size:10px}.last-price{display:flex;align-items:baseline;gap:12px;padding-right:14px;border-right:1px solid #e5ebf2}.last-price strong{font-size:28px;line-height:1}.last-price span{font-size:12px;font-weight:600;white-space:nowrap}.quote-metrics{margin:0;display:grid;grid-template-columns:repeat(7,minmax(76px,1fr));gap:12px}.quote-metrics div{min-width:0}.quote-metrics dt{margin-bottom:5px;color:var(--subtle);font-size:11px;white-space:nowrap}.quote-metrics dd{margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#26364a;font-size:13px}.quote-warning{position:absolute;right:15px;top:7px;display:flex;align-items:center;gap:4px;color:var(--warning);font-size:10px}.quote-source-state{position:absolute;right:15px;bottom:5px;display:inline-flex;align-items:center;gap:5px;color:#577087;font-size:10px;white-space:nowrap}.quote-source-state i{width:6px;height:6px;border-radius:50%;background:var(--fall)}.quote-source-state.stale{color:#92651a}.quote-source-state.stale i{background:var(--warning)}.skeleton-block{min-height:84px;background:#f4f7fa;animation:pulse-bg 1.3s ease-in-out infinite}@keyframes pulse-bg{50%{background:#eaf0f6}}.panel{background:var(--surface);border:1px solid var(--border);border-radius:6px;box-shadow:var(--shadow)}.workbench{height:calc(100vh - 250px);min-height:570px;display:grid;grid-template-columns:clamp(255px,18vw,300px) minmax(540px,1fr) clamp(310px,23vw,360px);gap:10px;padding:10px;overflow:hidden}.panel-header{min-height:53px;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:9px 12px;border-bottom:1px solid var(--border);background:#f8fafc;border-radius:6px 6px 0 0}.panel-header>div{display:flex;flex-direction:column;gap:4px;min-width:0}.panel-header small{color:var(--muted);font-size:11px;line-height:1.35;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.eyebrow{display:flex;align-items:center;gap:6px;color:var(--brand);font-size:12px;font-weight:700}.dot{width:7px;height:7px;display:inline-block;border-radius:50%}.dot-red{background:var(--rise)}.compact-button{min-height:30px;display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:0 9px;border:1px solid #cbd7e4;border-radius:5px;background:#fff;color:#53667c;cursor:pointer;font-size:11px;white-space:nowrap}.compact-button:hover{color:var(--brand);border-color:#99b8d6;background:#f4f8fc}.candidates-panel{min-width:0;min-height:0;display:flex;flex-direction:column;overflow:hidden}.candidate-scroll{min-height:0;flex:1;display:flex;flex-direction:column;overflow-y:auto;scrollbar-width:thin;scrollbar-color:#becbd9 transparent}.candidate-scroll .candidate-list{flex:none;overflow:visible}.candidate-section-title{min-height:42px;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 11px;border-top:1px solid #d8e2ec;border-bottom:1px solid #e7edf3;background:#f5f8fb}.candidate-section-title strong{display:inline-flex;align-items:center;gap:6px;color:var(--text);font-size:13px}.candidate-section-title strong svg{color:var(--rise)}.candidate-section-title small{min-width:0;overflow:hidden;color:var(--muted);font-size:11px;text-overflow:ellipsis;white-space:nowrap}.candidate-tools{display:flex;align-items:center;justify-content:space-between;gap:7px;padding:8px;border-bottom:1px solid #e7edf3}.segmented{display:inline-flex;align-items:center;padding:2px;border:1px solid var(--border);border-radius:5px;background:#f3f6f9}.segmented button{min-height:29px;padding:0 10px;border:0;border-radius:3px;background:transparent;color:var(--muted);cursor:pointer;font-size:11px;white-space:nowrap}.segmented button.active{background:#fff;color:var(--brand);box-shadow:0 1px 3px #162e4c1f;font-weight:600}.segmented button:disabled{cursor:not-allowed}.segmented.small{flex:1;justify-content:space-between}.segmented.small button{min-width:40px;padding:0 7px}.sort-select{min-width:32px;height:32px;display:flex;align-items:center;gap:3px;border:1px solid var(--border);border-radius:5px;padding:0 4px;color:var(--muted);background:#fff}.sort-select select{max-width:67px;height:29px;border:0;outline:0;background:transparent;color:var(--muted);font-size:10px;cursor:pointer}.candidate-list{min-height:0;flex:1;overflow-y:auto;scrollbar-width:thin;scrollbar-color:#becbd9 transparent}.candidate-item{width:100%;min-height:77px;display:grid;grid-template-columns:25px minmax(0,1fr) 64px;align-items:center;gap:7px;padding:8px;border:0;border-bottom:1px solid #edf1f5;border-left:3px solid transparent;background:#fff;cursor:pointer;text-align:left}.candidate-item:hover{background:#f8fbfe}.candidate-item.active{background:#edf4fb;border-left-color:var(--brand)}.candidate-rank{align-self:start;padding-top:3px;color:#9aa7b7;font-size:10px;font-weight:700}.candidate-item:nth-child(-n+3) .candidate-rank{color:var(--warning)}.candidate-main{min-width:0;display:flex;flex-direction:column;gap:4px}.candidate-name{display:flex;align-items:baseline;gap:7px;min-width:0}.candidate-name strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px}.candidate-name code{color:#64748b;font-family:inherit;font-size:11px}.candidate-meta{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-size:11px;line-height:1.35}.candidate-quote{display:flex;align-items:baseline;gap:7px}.candidate-quote b{font-size:13px}.candidate-quote small{font-size:10px}.candidate-score{display:grid;grid-template-columns:1fr auto;align-items:center;justify-items:end;gap:2px 4px}.candidate-score strong{font-size:17px;color:#26364a}.candidate-score small{grid-column:2;color:var(--subtle);font-size:10px}.signal-chip{display:inline-flex;align-items:center;justify-content:center;min-height:23px;height:auto;padding:2px 6px;border-radius:4px;border:1px solid;font-size:11px;line-height:1.2;white-space:nowrap}.candidate-score .signal-chip{grid-column:1 / -1}.signal-triggered{color:#c53330;border-color:#efb1ae;background:var(--rise-soft)}.signal-near{color:#a66005;border-color:#efca8d;background:var(--warning-soft)}.signal-watch{color:#2563a6;border-color:#b9d1e9;background:#eef6fd}.signal-risk{color:#7c3f83;border-color:#d5b7d9;background:#f8eff9}.panel-footnote{padding:8px 10px;border-top:1px solid #e5ebf1;background:#fffbf2;color:#8a681f;font-size:11px;line-height:1.5}.empty-state{min-height:190px;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:24px;color:#8b99aa;text-align:center}.empty-state strong,.empty-state h2{margin:10px 0 0;color:var(--text)}.empty-state p{max-width:420px;margin:7px 0 0;font-size:12px;line-height:1.65}.compact-empty{min-height:220px}.chart-panel{min-width:0;min-height:0;display:flex;flex-direction:column;overflow:hidden;position:relative}.chart-toolbar{min-height:44px;display:flex;align-items:center;gap:8px;padding:6px 9px;border-bottom:1px solid var(--border);background:#fbfcfe;overflow-x:auto;scrollbar-width:none}.chart-toolbar::-webkit-scrollbar{display:none}.toolbar-divider{width:1px;height:22px;flex:none;background:var(--border)}.chart-legend{margin-left:auto;display:flex;align-items:center;gap:5px;white-space:nowrap}.chart-legend button{height:27px;display:flex;align-items:center;gap:4px;border:0;background:transparent;color:#9aa6b5;padding:0 3px;cursor:pointer;font-size:10px}.chart-legend button.enabled{color:#485a71}.chart-legend i{width:11px;height:2px;border-radius:1px}.trade-signal-legend{display:flex;align-items:center;gap:6px;margin-left:4px;padding-left:7px;border-left:1px solid var(--border);color:#5d6d80;font-size:10px;white-space:nowrap}.trade-signal{display:inline-flex;align-items:center;gap:3px}.trade-signal b,.trade-signal-status b{font-size:10px;font-weight:500}.trade-signal i{width:17px;height:17px;display:inline-flex;align-items:center;justify-content:center;border:1px solid;border-radius:3px;font-style:normal;font-size:10px;font-weight:700;line-height:1}.trade-signal-buy i{border-color:#9ad0b8;color:#197b52;background:#edf9f2}.trade-signal-sell i{border-color:#e7aaa7;color:#b52e2b;background:#fff1f0}.trade-signal-current{padding:2px 5px 2px 3px;border:1px solid;border-radius:4px}.trade-signal-current.signal-intraday{border-color:#e7c381;color:#8c5a0a;background:#fff8e8}.trade-signal-current.signal-intraday i{border-color:#dbb464;color:#8c5a0a;background:#fff3d6}.trade-signal-current.signal-close{border-color:#afc9e9;color:#265f9c;background:#eef6ff}.trade-signal-current.signal-close i{border-color:#96b9e2;color:#265f9c;background:#e2effe}.trade-signal-status{display:inline-flex;align-items:center;gap:4px;color:#617287}.trade-signal-status i{width:17px;height:17px;display:inline-flex;align-items:center;justify-content:center;border:1px solid #cbd5e0;border-radius:3px;color:#718196;background:#f5f7fa;font-style:normal;font-size:9px;font-weight:700;line-height:1}.trade-signal-legend.loading{color:#315f87}.trade-signal-legend.error .trade-signal-status,.trade-signal-legend.error .trade-signal-status i{color:#96611a}.trade-signal-legend.error .trade-signal-status i{border-color:#e3c58d;background:#fff8e9}.chart-actions{display:flex;gap:4px;margin-left:5px}.adjustment-segment button{min-width:51px}.live-feed-state{min-height:32px;margin-left:auto;display:inline-flex;align-items:center;gap:6px;padding:0 8px;border:1px solid #b9d8c9;border-radius:5px;color:#237656;background:#f0faf5;font-size:11px;white-space:nowrap}.live-feed-state.state-connecting,.live-feed-state.state-polling{color:#315f87;border-color:#bed2e4;background:#f1f7fc}.live-feed-state.state-error{color:#976318;border-color:#ead09f;background:#fff9ed}.chart-context{min-height:39px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:5px 12px;border-bottom:1px solid #edf1f5}.chart-context>div{display:flex;align-items:baseline;gap:9px;min-width:0}.chart-context>div{overflow:hidden}.chart-context strong{min-width:0;overflow:hidden;font-size:12px;text-overflow:ellipsis;white-space:nowrap}.chart-context span{min-width:0;overflow:hidden;color:var(--muted);font-size:11px;line-height:1.35;text-overflow:ellipsis;white-space:nowrap}.chart-note{display:flex;align-items:center;gap:4px}.chart-note.pending{color:var(--subtle)}.data-source-state{min-width:0;max-width:48%;overflow:hidden;text-overflow:ellipsis}.data-source-state i{width:7px;height:7px;flex:none;border-radius:50%;background:var(--fall)}.data-source-state.fallback i{background:var(--info)}.data-source-state.stale{color:#956415}.data-source-state.stale i{background:var(--warning)}.chart-inline-warning{min-height:30px;display:flex;align-items:center;gap:5px;padding:5px 10px;border-bottom:1px solid #ecd3a4;color:#8b611d;background:#fffaf0;font-size:11px;line-height:1.35}.chart-stage{min-height:0;flex:1;position:relative;background:#fff}.dividend-marker-layer{position:absolute;inset:0;z-index:6;overflow:hidden;pointer-events:none}.dividend-marker-layer button{width:16px;min-width:16px;height:16px;position:absolute;bottom:25px;transform:translate(-50%);padding:0;border:1px solid #d83b45;border-radius:2px;background:#fff7f7fa;box-shadow:0 1px 2px #6b1e271a;color:#b62c38;pointer-events:auto;cursor:pointer;font-family:Arial,sans-serif;font-size:10px;font-weight:700;line-height:14px;text-align:center;white-space:nowrap}.dividend-marker-layer button:hover,.dividend-marker-layer button:focus-visible{z-index:2;color:#fff;background:#c9323e;outline:none}.dividend-marker-layer button:after{width:max-content;max-width:220px;content:attr(data-summary);display:none;position:absolute;left:50%;bottom:calc(100% + 6px);transform:translate(-50%);padding:6px 8px;border:1px solid #dfb7bb;border-radius:4px;background:#fffffffa;box-shadow:0 4px 12px #1f2c3a26;color:#5b3540;font-size:11px;font-weight:500;line-height:1.45;white-space:normal}.dividend-marker-layer button:hover:after,.dividend-marker-layer button:focus-visible:after{display:block}.dividend-marker-layer.has-selection button:after{display:none}.chart-tooltip{display:none;position:absolute;z-index:5;top:9px;left:10px;min-height:34px;align-items:center;gap:8px;padding:7px 9px;border:1px solid var(--border);border-radius:4px;background:#fffffff0;box-shadow:0 2px 7px #142a4a17;color:var(--muted);pointer-events:none;font-size:11px}.chart-tooltip.visible{display:flex}.chart-tooltip b{color:var(--text)}.dividend-event-popover{--dividend-anchor-x: 50%;width:min(330px,calc(100% - 16px));max-height:calc(100% - 20px);position:absolute;z-index:7;top:10px;left:clamp(173px,var(--dividend-anchor-x),calc(100% - 173px));transform:translate(-50%);overflow:auto;border:1px solid #e3aeb3;border-radius:5px;background:#fffffffa;box-shadow:0 7px 20px #26313f2e}.dividend-event-popover>header{min-height:50px;display:grid;grid-template-columns:32px minmax(0,1fr) 30px;align-items:center;gap:7px;padding:7px 9px;border-bottom:1px solid #f0d9dc;background:#fff7f7}.dividend-event-icon{width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;color:#bb2d39;background:#fbe6e8;border-radius:4px}.dividend-event-popover>header div{min-width:0;display:flex;flex-direction:column;gap:2px}.dividend-event-popover>header small{color:#8c5c63;font-size:10px;line-height:1.3}.dividend-event-popover>header strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#78212a;font-size:13px}.dividend-event-popover>header button{width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:4px;background:transparent;color:#7f6065;cursor:pointer}.dividend-event-popover>header button:hover{background:#f4dfe2;color:#7b1f28}.dividend-event-list article{padding:10px}.dividend-event-list article+article{border-top:1px solid #edf0f3}.dividend-event-list article>strong{display:block;color:var(--text);font-size:12px;line-height:1.5}.dividend-event-list dl{margin:8px 0 0;display:grid;grid-template-columns:1fr 1fr;gap:7px 10px}.dividend-event-list dl div{min-width:0;display:flex;flex-direction:column;gap:2px}.dividend-event-list dt{color:var(--subtle);font-size:10px;line-height:1.3}.dividend-event-list dd{margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#3b4b5f;font-size:11px;line-height:1.4}.dividend-event-list footer{margin-top:8px;display:flex;justify-content:space-between;gap:8px;color:#7a8797;font-size:10px;line-height:1.35}.chart-loading{position:absolute;inset:0;z-index:8;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#fff;color:var(--muted)}.chart-loading strong{margin-top:12px;color:var(--text);font-size:13px}.chart-loading small{margin-top:5px;font-size:10px}.chart-loading small{max-width:min(470px,88%);line-height:1.55;text-align:center}.chart-loading .compact-button{margin-top:12px}.loading-bars{height:34px;display:flex;align-items:flex-end;gap:4px}.loading-bars i{width:5px;background:var(--brand);animation:loading-bars 1s ease-in-out infinite}.loading-bars i:nth-child(1){height:15px}.loading-bars i:nth-child(2){height:27px;animation-delay:.12s}.loading-bars i:nth-child(3){height:20px;animation-delay:.24s}.loading-bars i:nth-child(4){height:31px;animation-delay:.36s}@keyframes loading-bars{50%{height:9px;opacity:.45}}.chart-footer{min-height:32px;display:flex;align-items:center;gap:14px;padding:0 12px;border-top:1px solid #edf1f5;color:var(--muted);font-size:11px;line-height:1.35}.chart-footer span{display:inline-flex;align-items:center;gap:4px;white-space:nowrap}.chart-footer-dividend{min-height:26px;display:inline-flex;align-items:center;gap:4px;padding:0 3px;border:0;border-radius:3px;background:transparent;color:#a52e38;font:inherit;white-space:nowrap;cursor:pointer}.chart-footer-dividend:hover:not(:disabled){background:#fff1f2;color:#811f29}.chart-footer-dividend:disabled{color:var(--subtle);cursor:default}.legend-signal,.legend-execute{width:7px;height:7px;display:inline-block;border-radius:50%}.legend-signal{background:var(--warning)}.legend-execute{background:var(--info)}.legend-dividend{width:7px;height:7px;display:inline-block;border-radius:50%;background:#d83b45}.chart-fullscreen{position:fixed;inset:10px;z-index:200;box-shadow:0 0 0 100vmax #0d1b2d80}.analysis-panel{min-width:0;min-height:0;display:flex;flex-direction:column;overflow:hidden}.analysis-tabs{min-height:49px;display:grid;grid-template-columns:repeat(2,1fr);align-items:stretch;border-bottom:1px solid var(--border);background:#f8fafc}.analysis-tabs button{position:relative;display:flex;align-items:center;justify-content:center;gap:5px;padding:0;border:0;border-bottom:2px solid transparent;background:transparent;color:var(--muted);cursor:pointer;font-size:11px}.analysis-tabs button.active{color:var(--brand);border-bottom-color:var(--brand);background:#fff;font-weight:600}.analysis-tabs button span{min-width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center;border-radius:3px;background:#e9eef4;font-size:10px}.analysis-scroll{min-height:0;flex:1;overflow-y:auto;scrollbar-width:thin;scrollbar-color:#becbd9 transparent}.analysis-loading{min-height:0;flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--muted)}.analysis-loading strong{margin-top:14px;color:var(--text);font-size:13px}.analysis-loading small{margin-top:5px;font-size:11px;line-height:1.45}.analysis-pulse{width:27px;height:27px;border:3px solid #bdd1e5;border-top-color:var(--brand);border-radius:50%;animation:spin .8s linear infinite}.signal-summary{--decision-color: var(--warning);--decision-soft: var(--warning-soft);padding:13px;background:#fff;border-bottom:1px solid var(--border)}.signal-summary.decision-positive{--decision-color: var(--rise);--decision-soft: var(--rise-soft)}.signal-summary.decision-negative{--decision-color: var(--fall);--decision-soft: var(--fall-soft)}.signal-heading{display:grid;grid-template-columns:32px minmax(0,1fr) 64px;align-items:center;gap:9px}.signal-icon{width:31px;height:31px;display:flex;align-items:center;justify-content:center;border-radius:5px;color:var(--decision-color);background:var(--decision-soft)}.signal-heading small{color:var(--muted);font-size:11px;line-height:1.35}.decision-line{min-width:0;display:flex;align-items:baseline;gap:7px;margin-top:2px}.signal-heading h2{margin:0;color:var(--decision-color);font-size:22px;line-height:1.1}.decision-line span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#53657a;font-size:10px}.score-gauge{--score: 0deg;width:58px;height:58px;display:grid;place-items:center;border-radius:50%;background:conic-gradient(var(--decision-color) var(--score),#e4eaf1 0);position:relative}.score-gauge:after{content:"";position:absolute;inset:5px;border-radius:50%;background:#fff}.score-gauge span{z-index:1;display:flex;flex-direction:column;align-items:center;line-height:1}.score-gauge strong{font-size:16px}.score-gauge small{margin-top:3px;font-size:10px}.signal-summary>p{margin:10px 0 0;color:#41536a;font-size:11px;line-height:1.6}.decision-basis{margin-top:9px;padding:8px 0 0;border-top:1px solid #e5ebf1}.decision-basis>strong{color:var(--text);font-size:11px}.decision-basis ul{margin:5px 0 0;padding-left:16px;color:#41536a;font-size:10px;line-height:1.55}.decision-basis li::marker{color:var(--decision-color)}.asof-line{display:flex;align-items:center;gap:5px;margin-top:8px;color:#687990;font-size:10px;line-height:1.35}.analysis-section{padding:12px 13px;border-bottom:1px solid #e7edf3}.section-title{display:flex;align-items:center;justify-content:space-between;gap:8px}.section-title h3{margin:0;display:flex;align-items:center;gap:6px;font-size:12px}.section-title small{color:var(--subtle);font-size:10px;line-height:1.35}.factor-list{margin-top:10px;display:flex;flex-direction:column;gap:9px}.factor-row>div:first-child{display:flex;align-items:center;justify-content:space-between;font-size:10px}.factor-row strong{color:var(--brand)}.factor-track{height:4px;margin-top:4px;border-radius:2px;background:#e8edf3;overflow:hidden}.factor-track i{height:100%;display:block;background:var(--brand);border-radius:2px}.factor-row:nth-child(2) .factor-track i{background:var(--fall)}.factor-row:nth-child(3) .factor-track i{background:var(--warning)}.factor-row:nth-child(4) .factor-track i{background:var(--purple)}.factor-row p{margin:4px 0 0;color:var(--muted);font-size:10px;line-height:1.5}.level-section dl{margin:8px 0 0}.level-section dl div{min-height:29px;display:flex;align-items:center;justify-content:space-between;gap:10px;border-bottom:1px dashed #e1e7ee}.level-section dl div:last-child{border-bottom:0}.level-section dt{color:var(--muted);font-size:10px}.level-section dd{margin:0;font-size:10px;font-weight:600}.engine-badge{padding:3px 5px;border-radius:3px;color:#6b4ca8;background:#f0ebfa;font-size:10px}.evidence-list{margin-top:9px;display:flex;flex-direction:column;gap:6px}.evidence-list p{margin:0;display:flex;align-items:flex-start;gap:6px;color:#41536a;font-size:10px;line-height:1.55}.evidence-list svg{flex:none;margin-top:1px;color:var(--fall)}.next-condition{margin-top:9px;display:flex;align-items:flex-start;gap:7px;padding:8px;border-left:3px solid var(--info);background:#f2f6ff;color:var(--info)}.next-condition svg{flex:none;margin-top:2px}.next-condition small{font-size:10px}.next-condition p{margin:2px 0 0;color:#395271;font-size:10px;line-height:1.5}.risk-section{background:#fffdf8}.risk-section p{margin:8px 0 0;display:flex;align-items:flex-start;gap:6px;color:#72501c;font-size:10px;line-height:1.5}.risk-section p svg{flex:none;margin-top:1px;color:var(--warning)}.analysis-actions{min-height:54px;display:grid;grid-template-columns:.85fr 1.15fr;gap:6px;padding:7px;border-top:1px solid var(--border);background:#f8fafc}.analysis-actions button{min-width:0;display:flex;align-items:center;justify-content:center;gap:5px;border:1px solid #c5d2df;border-radius:5px;background:#fff;color:#53667c;cursor:pointer;font-size:11px;line-height:1.25;white-space:nowrap}.analysis-actions button.primary{border-color:var(--brand);background:var(--brand);color:#fff}.analysis-actions button.watched{color:var(--warning);border-color:#e7bd7c;background:#fff9ec}.history-audit-note{margin:11px;padding:9px;display:flex;align-items:center;gap:6px;border:1px solid #c9d8e7;border-radius:5px;background:#f4f8fc;color:#48647e;font-size:10px;line-height:1.4}.history-entry{display:grid;grid-template-columns:12px minmax(0,1fr) auto;gap:8px;padding:11px 13px;border-bottom:1px solid #e9eef3}.history-dot{width:7px;height:7px;margin-top:5px;border-radius:50%;background:#8fa1b6}.history-dot.success{background:var(--rise)}.history-dot.failed{background:var(--fall)}.history-entry div{display:flex;flex-direction:column;gap:3px}.history-entry time{color:var(--subtle);font-size:10px}.history-entry strong{font-size:10px}.history-entry p{margin:0;color:var(--muted);font-size:10px;line-height:1.5}.history-entry>b{align-self:center;font-size:11px}.history-disclaimer{margin:12px;color:var(--muted);font-size:10px;line-height:1.55}.action-source-state{min-height:43px;display:flex;align-items:center;gap:8px;padding:8px 11px;border-bottom:1px solid #dfe9e4;color:#47715f;background:#f3faf7}.action-source-state.stale{color:#8b641f;background:#fffaf0;border-bottom-color:#ead4ab}.action-source-state svg{flex:none}.action-source-state span{min-width:0;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px}.action-source-state strong{margin-right:5px;font-size:11px}.dividend-yield-summary{min-height:50px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:9px 12px;border-bottom:1px solid #dce5ee;background:#f8fafc;cursor:help}.dividend-yield-summary span{min-width:0;color:#43566c;font-size:12px;font-weight:600;line-height:1.4}.dividend-yield-summary strong{flex:none;color:#b73731;font-size:19px;line-height:1.2;font-variant-numeric:tabular-nums}.dividend-yield-summary.unavailable strong{color:var(--subtle)}.action-inline-error{display:flex;align-items:center;gap:5px;padding:8px 10px;color:#8b611d;background:#fffaf0;border-bottom:1px solid #ead4ab;font-size:10px;line-height:1.35}.dividend-entry{display:grid;grid-template-columns:88px minmax(0,1fr);gap:10px;padding:12px;border-bottom:1px solid #e7edf3}.dividend-date{display:flex;flex-direction:column;gap:5px;padding-right:9px;border-right:1px solid #e4eaf0}.dividend-date small{color:var(--subtle);font-size:10px}.dividend-date strong{font-size:11px}.dividend-plan{min-width:0}.dividend-plan>div{display:flex;align-items:flex-start;justify-content:space-between;gap:6px}.dividend-plan>div>strong{min-width:0;font-size:11px;line-height:1.5}.action-status{flex:none;padding:3px 5px;border-radius:3px;color:#537087;background:#edf3f7;font-size:10px;line-height:1.2}.dividend-plan dl{margin:8px 0 0;display:grid;grid-template-columns:repeat(3,1fr);gap:5px}.dividend-plan dl div{display:flex;flex-direction:column;gap:3px}.dividend-plan dt{color:var(--subtle);font-size:10px}.dividend-plan dd{margin:0;color:#4d6075;font-size:10px}.analysis-loading.action-error .compact-button{margin-top:12px}.status-bar{height:34px;display:flex;align-items:center;justify-content:space-between;gap:14px;padding:0 13px;position:fixed;left:0;right:0;bottom:0;z-index:80;border-top:1px solid #c8d3df;background:#edf2f7;color:#5d6c80;font-size:11px;line-height:1.35}.status-bar>div{min-width:0;display:flex;align-items:center;gap:7px;white-space:nowrap}.status-dot{width:7px;height:7px;border-radius:50%;background:var(--warning)}.status-dot.mode-live{background:var(--fall)}.status-dot.mode-cached{background:var(--info)}.status-divider{width:1px;height:14px;background:#c9d3de}.research-notice{display:flex;align-items:center;gap:4px;color:#8a641b}.page-shell{min-height:calc(100vh - 132px);padding:22px 24px 38px}.page-heading{max-width:1500px;margin:0 auto 16px;display:flex;align-items:flex-end;justify-content:space-between;gap:24px}.page-heading h1{margin:6px 0 0;font-size:25px}.page-heading p{margin:7px 0 0;color:var(--muted);font-size:12px}.heading-stats{display:flex;align-items:center;gap:0;border:1px solid var(--border);border-radius:6px;background:#fff;box-shadow:var(--shadow)}.heading-stats div{min-width:105px;display:flex;flex-direction:column;gap:4px;padding:10px 16px;border-right:1px solid var(--border)}.heading-stats div:last-child{border-right:0}.heading-stats small{color:var(--muted);font-size:11px}.heading-stats strong{font-size:17px}.universe-banner{max-width:1500px;min-height:49px;margin:0 auto 12px;display:flex;align-items:center;gap:10px;padding:8px 13px;border:1px solid #bdd5ca;border-radius:6px;background:#f1faf6;color:#217553}.universe-banner>div{min-width:0;flex:1;display:flex;align-items:baseline;gap:10px}.universe-banner strong{font-size:12px;white-space:nowrap}.universe-banner span{color:#547566;font-size:11px;line-height:1.4}.universe-banner button{min-height:32px;display:flex;align-items:center;gap:5px;border:1px solid #9ec7b5;border-radius:4px;background:#fff;color:#217553;cursor:pointer;font-size:11px}.leader-table-panel,.watch-table-panel{max-width:1500px;margin:0 auto;overflow:hidden}.leader-toolbar{min-height:52px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:9px 12px;border-bottom:1px solid var(--border)}.toolbar-title{display:flex;align-items:center;gap:8px;color:var(--brand)}.toolbar-title strong{color:var(--text);font-size:13px}.toolbar-title span{color:var(--muted);font-size:11px}.toolbar-controls{display:flex;gap:7px}.toolbar-controls label{min-height:30px;display:flex;align-items:center;gap:5px;padding:0 7px;border:1px solid var(--border);border-radius:5px;color:var(--muted)}.toolbar-controls select{height:28px;border:0;background:transparent;color:var(--text);font-size:11px}.leader-table-wrap,.trades-table-wrap{overflow-x:auto}.data-table{width:100%;border-collapse:collapse}.data-table th{height:42px;padding:0 10px;border-bottom:1px solid var(--border);background:#f7f9fc;color:#5f6f84;font-size:11px;font-weight:600;text-align:left;white-space:nowrap}.data-table td{height:57px;padding:7px 10px;border-bottom:1px solid #e9eef3;color:#3d4d62;font-size:11px;white-space:nowrap}.data-table tbody>tr:not(.score-detail-row):hover{background:#f8fbfe}.leader-table>tbody>tr:not(.score-detail-row){cursor:pointer}.leader-table>tbody>tr.expanded{background:#f4f8fc}.leader-table td:first-child{display:flex;align-items:center;gap:9px}.rank-badge{width:25px;height:25px;display:inline-flex;align-items:center;justify-content:center;border-radius:4px;background:#edf1f5;color:#617287;font-size:10px;font-weight:700}.rank-1{color:#a85400;background:#fff1d8}.rank-2{color:#4f6073;background:#e9edf2}.rank-3{color:#8f4c2e;background:#f7e7de}.table-stock{display:inline-flex;flex-direction:column;gap:3px}.table-stock strong{color:var(--text);font-size:11px}.table-stock small{color:var(--subtle);font-size:10px}.industry-pill{padding:4px 6px;border-radius:4px;background:#edf3f8;color:#536b82;font-size:10px}.table-score{display:flex;align-items:center;gap:7px}.table-score strong{color:var(--brand);font-size:12px}.table-score i{width:45px;height:4px;display:block;border-radius:2px;background:#e5ebf1;overflow:hidden}.table-score b{height:100%;display:block;background:var(--brand)}.score-detail-row td{height:auto;padding:0;background:#f8fafc}.score-detail{display:grid;grid-template-columns:minmax(500px,2fr) minmax(260px,1fr);gap:30px;padding:16px 22px 18px 56px;border-bottom:1px solid #d5dee8}.score-detail-bars{display:grid;grid-template-columns:repeat(3,1fr);gap:12px 20px}.score-detail-bars>div{display:grid;grid-template-columns:90px minmax(60px,1fr) 25px;align-items:center;gap:8px}.score-detail-bars span{display:flex;flex-direction:column;gap:2px;color:var(--text);font-size:10px}.score-detail-bars span small{color:var(--subtle);font-size:10px}.score-detail-bars i{height:5px;border-radius:3px;background:#e4eaf0;overflow:hidden}.score-detail-bars b{height:100%;display:block;background:var(--brand)}.score-detail-bars strong{font-size:10px}.score-explanation{padding-left:20px;border-left:1px solid var(--border)}.score-explanation>strong{font-size:10px}.score-explanation p{margin:5px 0 8px;color:var(--muted);font-size:10px;line-height:1.6;white-space:normal}.score-explanation button{display:flex;align-items:center;gap:3px;padding:0;border:0;background:transparent;color:var(--brand);cursor:pointer;font-size:10px}.run-metadata{max-width:520px;display:flex;flex-wrap:wrap;justify-content:flex-end;gap:5px}.run-metadata span{padding:5px 6px;border:1px solid var(--border);border-radius:4px;background:#fff;color:var(--muted);font-size:10px;line-height:1.25}.backtest-layout{max-width:1500px;margin:0 auto;display:grid;grid-template-columns:310px minmax(0,1fr);align-items:start;gap:12px}.config-panel{max-height:calc(100vh - 156px);display:flex;flex-direction:column;position:sticky;top:115px;overflow:hidden}.config-scroll{min-height:0;overflow-y:auto;padding:0 12px}.config-group{padding:13px 0;border-bottom:1px solid #e7edf3}.config-group h3{margin:0 0 10px;font-size:12px}.config-group label{display:flex;flex-direction:column;gap:5px;margin-bottom:9px;color:var(--muted);font-size:11px;line-height:1.35}.config-group label:last-child{margin-bottom:0}.config-group input,.config-group select{width:100%;height:34px;border:1px solid #cbd6e2;border-radius:5px;background:#fff;color:var(--text);padding:0 8px;font-size:11px}.config-group input:disabled{background:#f2f5f8;color:#718096;cursor:not-allowed}.config-group .fee-mode{width:100%}.config-group .fee-mode button{flex:1;min-width:0}.config-group .field-help{color:#617287;font-size:10px;line-height:1.5}.config-group .field-help.field-error{color:#a33c39}.backtest-date-fields label{margin-bottom:0}.strategy-options{display:grid;grid-template-columns:repeat(3,1fr);gap:5px}.strategy-options button{min-height:66px;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:4px;padding:7px;border:1px solid var(--border);border-radius:5px;background:#fff;color:var(--muted);cursor:pointer;text-align:left}.strategy-options button.active{border-color:var(--brand);background:var(--brand-soft);color:var(--brand)}.strategy-options strong{font-size:11px}.strategy-options small{font-size:10px;line-height:1.35}.field-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 7px}.input-suffix,.input-prefix{display:flex;align-items:center;border:1px solid #cbd6e2;border-radius:5px;background:#fff;overflow:hidden}.input-suffix input,.input-prefix input{min-width:0;border:0;border-radius:0}.input-suffix span,.input-prefix span{flex:none;padding:0 7px;color:#65758a;font-size:10px}.input-prefix span{order:-1}.model-rules{margin:12px 0;padding:8px;border:1px solid #c9ddcf;border-radius:5px;background:#f3faf6}.model-rules p{margin:0 0 5px;display:flex;align-items:center;gap:5px;color:#397259;font-size:10px;line-height:1.4}.model-rules p:last-child{margin-bottom:0}.run-button{min-height:43px;margin:8px;display:flex;align-items:center;justify-content:center;gap:7px;border:0;border-radius:5px;background:var(--brand);color:#fff;cursor:pointer;font-size:11px;font-weight:600}.backtest-results{min-width:0;display:flex;flex-direction:column;gap:10px}.backtest-empty{min-height:480px;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:30px;text-align:center}.empty-flask,.empty-star{width:64px;height:64px;display:flex;align-items:center;justify-content:center;border-radius:50%;color:var(--brand);background:var(--brand-soft)}.backtest-empty h2{margin:15px 0 0;font-size:17px}.backtest-empty p{max-width:550px;margin:8px 0 0;color:var(--muted);font-size:11px;line-height:1.65}.backtest-empty>div{margin-top:18px;display:flex;gap:20px;color:#46725d;font-size:10px;line-height:1.4}.backtest-empty>div span{display:flex;align-items:center;gap:5px}.metric-grid{display:grid;grid-template-columns:repeat(8,1fr);gap:7px}.metric-card{min-height:82px;display:flex;flex-direction:column;justify-content:center;padding:10px;border:1px solid var(--border);border-radius:6px;background:#fff;box-shadow:var(--shadow)}.metric-card small{color:var(--muted);font-size:10px;line-height:1.35}.metric-card strong{margin-top:5px;color:var(--text);font-size:16px}.metric-card span{margin-top:4px;color:var(--subtle);font-size:10px;line-height:1.35}.result-chart-panel,.split-panel,.checks-panel,.trades-panel{overflow:hidden}.result-section-head{min-height:54px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 13px;border-bottom:1px solid var(--border)}.result-section-head h2{margin:0;font-size:12px}.result-section-head p{margin:4px 0 0;color:var(--muted);font-size:10px;line-height:1.45}.oos-marker{padding:5px 7px;border-radius:4px;background:#edf3f8;color:#526b82;font-size:10px}.equity-chart{width:100%;height:310px}.validation-grid{display:grid;grid-template-columns:1.1fr .9fr;gap:10px}.split-comparison{min-height:115px;display:grid;grid-template-columns:1fr 120px 1fr;align-items:center;gap:15px;padding:12px 20px}.split-comparison>div{display:flex;flex-direction:column;gap:5px}.split-comparison small{color:var(--muted);font-size:10px}.split-comparison strong{font-size:18px}.split-comparison span{color:var(--subtle);font-size:10px}.split-comparison>i{height:7px;border-radius:4px;background:#dfe6ed;overflow:hidden}.split-comparison>i span{height:100%;display:block;background:var(--brand)}.checks-panel{padding-bottom:7px}.check-row{display:flex;align-items:flex-start;gap:7px;padding:7px 12px}.check-row svg{flex:none}.check-pass{color:var(--fall)}.check-warn{color:var(--warning)}.check-row span{display:flex;flex-direction:column;gap:2px}.check-row strong{font-size:10px}.check-row small{color:var(--muted);font-size:10px;line-height:1.4}.warning-banner,.error-banner{display:flex;align-items:flex-start;gap:8px;padding:10px 12px;border:1px solid #efcb8f;border-radius:6px;background:var(--warning-soft);color:#7e5617}.warning-banner>svg,.error-banner>svg{flex:none}.warning-banner strong{font-size:11px}.warning-banner p{margin:3px 0 0;font-size:10px;line-height:1.45}.error-banner{border-color:#efb5b2;background:var(--rise-soft);color:#a33c39;font-size:11px;line-height:1.4}.trades-table td,.trades-table th{font-size:10px}.sample-tag{padding:3px 5px;border-radius:3px;color:#557086;background:#edf2f6}.sample-tag.out{color:#6748a5;background:#f0ebf9}.sample-tag.cross{color:#9a5b08;background:#fff3dc}.table-method-note{min-height:38px;display:flex;align-items:center;gap:5px;padding:5px 12px;color:var(--muted);background:#f8fafc;font-size:10px;line-height:1.4}.watch-table-panel{margin-top:4px}.watch-table td{height:66px}.watch-table td:first-child{min-width:150px}.row-actions{display:flex;gap:5px}.watch-empty{max-width:1500px;min-height:430px;margin:0 auto}.watch-empty h2{font-size:16px}.hot-ranking-page{padding-bottom:48px}.hot-ranking-banner{background:#f1faf6}.hot-ranking-banner .compact-button{flex:none}.hot-table-panel{max-width:1500px;margin:0 auto;overflow:hidden}.hot-table{min-width:1080px}.hot-table th:first-child,.hot-table td:first-child{width:58px;text-align:center}.hot-table td{height:64px}.hot-ranking-row{cursor:pointer;transition:background .15s ease}.hot-ranking-row:hover,.hot-ranking-row:focus-visible{background:#f4f8fc;outline:none}.hot-ranking-row:focus-visible{box-shadow:inset 0 0 0 2px #2563eb59}.hot-ranking-row>td:first-child{display:table-cell}.hot-change-value{display:inline-flex;align-items:center;gap:2px}.hot-score{min-width:72px;display:inline-flex;align-items:center;gap:7px}.hot-score strong{min-width:25px;color:var(--brand);font-size:12px}.hot-score i{width:42px;height:5px;display:block;border-radius:3px;background:#e5ebf1;overflow:hidden}.hot-score b{height:100%;display:block;background:var(--brand)}.hot-reasons{max-width:260px;display:flex;align-items:center;flex-wrap:wrap;gap:4px;white-space:normal}.hot-reasons span{padding:3px 5px;border:1px solid #d3e1ed;border-radius:3px;color:#526b82;background:#f5f9fc;font-size:10px;line-height:1.2}.hot-updated{color:var(--muted);font-size:11px;white-space:nowrap}.hot-ranking-loading{min-height:330px;display:flex;align-items:center;justify-content:center;color:var(--muted);font-size:13px}.hot-ranking-empty{min-height:330px}.hot-ranking-error{max-width:1500px;margin:0 auto 12px;display:flex;align-items:center;gap:10px;padding:10px 13px;border-color:#efb5b2;color:#a33c39;background:var(--rise-soft);font-size:11px}.hot-ranking-error span{flex:1;color:#7e4c4a}.dialog-backdrop{position:fixed;inset:0;z-index:300;display:flex;align-items:center;justify-content:center;padding:18px;background:#0c1b2d7a}.info-dialog{width:min(620px,100%);max-height:min(760px,calc(100vh - 36px));display:flex;flex-direction:column;overflow:hidden;border:1px solid #b9c7d5;border-radius:7px;background:#fff;box-shadow:0 24px 60px #0a1e3447}.info-dialog>header{min-height:72px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:13px 16px;border-bottom:1px solid var(--border);background:#f8fafc}.info-dialog>header h2{margin:5px 0 0;font-size:17px}.dialog-content{min-height:0;overflow-y:auto;padding:6px 18px}.dialog-content>section{display:grid;grid-template-columns:35px minmax(0,1fr);gap:11px;padding:15px 0;border-bottom:1px solid #e6ecf2}.dialog-content>section:last-child{border-bottom:0}.dialog-icon{width:34px;height:34px;display:flex;align-items:center;justify-content:center;border-radius:5px;color:var(--brand);background:var(--brand-soft)}.dialog-content h3{margin:0;font-size:12px}.dialog-content p{margin:6px 0 0;color:var(--muted);font-size:11px;line-height:1.7}.data-dialog-content{padding-top:14px;padding-bottom:14px}.data-status-row{min-height:43px;display:flex;align-items:center;justify-content:space-between;gap:12px;border-bottom:1px solid #e6ecf2}.data-status-row span{color:var(--muted);font-size:11px}.data-status-row strong{font-size:12px}.data-callout{margin-top:14px;display:flex;align-items:flex-start;gap:9px;padding:11px;border:1px solid #bad9c8;border-radius:5px;color:var(--fall);background:#f1faf6}.data-callout svg{flex:none}.data-callout strong{font-size:11px}.data-callout p{margin-top:3px;color:#4f7564;font-size:10px;line-height:1.45}.dialog-note{padding:0 2px}.info-dialog>footer{min-height:58px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 16px;border-top:1px solid var(--border);background:#f8fafc}.info-dialog>footer span{color:var(--muted);font-size:10px;line-height:1.4}.info-dialog>footer code{color:#40556d}.info-dialog>footer button{min-height:34px;padding:0 14px;border:1px solid var(--brand);border-radius:5px;background:var(--brand);color:#fff;cursor:pointer;font-size:11px}.workbench.without-candidates{grid-template-columns:minmax(540px,1fr) clamp(310px,23vw,360px)}.workbench.without-analysis{grid-template-columns:clamp(255px,18vw,300px) minmax(540px,1fr)}.workbench.without-candidates.without-analysis{grid-template-columns:minmax(0,1fr)}.dialog-tabs{min-height:45px;display:flex;align-items:stretch;gap:2px;padding:4px 12px 0;border-bottom:1px solid var(--border);background:#fff}.dialog-tabs button{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:40px;padding:0 13px;border:0;border-bottom:2px solid transparent;background:transparent;color:var(--muted);cursor:pointer;font-size:12px;white-space:nowrap}.dialog-tabs button:hover{color:var(--brand);background:#f5f9fd}.dialog-tabs button.active{color:var(--brand);border-bottom-color:var(--brand);font-weight:700}.settings-content{padding:16px 18px 18px}.settings-intro{display:flex;align-items:flex-start;gap:10px;padding:12px;border:1px solid #c8dcec;border-radius:6px;color:var(--brand);background:var(--brand-soft)}.settings-intro svg{flex:none;margin-top:1px}.settings-intro strong{font-size:13px}.settings-intro p{margin:4px 0 0;color:#4f6780;font-size:11px;line-height:1.55}.settings-list{margin-top:13px;border:1px solid var(--border);border-radius:6px;overflow:hidden}.setting-row{min-height:66px;display:grid;grid-template-columns:31px minmax(0,1fr) 46px;align-items:center;gap:10px;padding:10px 12px;border-bottom:1px solid #e7edf3;cursor:pointer}.setting-row:last-child{border-bottom:0}.setting-row:hover{background:#f8fbfe}.setting-icon{width:29px;height:29px;display:flex;align-items:center;justify-content:center;border-radius:5px;color:var(--brand);background:var(--brand-soft)}.setting-copy{min-width:0;display:flex;flex-direction:column;gap:3px}.setting-copy strong{color:var(--text);font-size:12px}.setting-copy small{color:var(--muted);font-size:10px;line-height:1.4}.setting-row input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}.toggle-track{width:42px;height:24px;position:relative;display:block;border-radius:12px;background:#c5d0dc;transition:background .16s ease}.toggle-track i{width:18px;height:18px;position:absolute;top:3px;left:3px;border-radius:50%;background:#fff;box-shadow:0 1px 3px #142a4a38;transition:transform .16s ease}.setting-row input:checked+.toggle-track{background:var(--brand)}.setting-row input:checked+.toggle-track i{transform:translate(18px)}.setting-row input:focus-visible+.toggle-track{outline:2px solid rgba(37,99,235,.55);outline-offset:2px}.settings-reset{min-height:34px;margin-top:13px;display:inline-flex;align-items:center;gap:6px;padding:0 11px;border:1px solid var(--border-strong);border-radius:5px;background:#fff;color:var(--muted);cursor:pointer;font-size:11px}.settings-reset:hover{color:var(--brand);border-color:#99b8d6;background:#f4f8fc}.app-shell .search-source,.app-shell .panel-header small,.app-shell .candidate-meta,.app-shell .candidate-name code,.app-shell .candidate-quote small,.app-shell .quote-source-state,.app-shell .chart-context span,.app-shell .chart-inline-warning,.app-shell .chart-tooltip,.app-shell .chart-footer,.app-shell .signal-heading small,.app-shell .signal-summary>p,.app-shell .asof-line,.app-shell .factor-row>div:first-child,.app-shell .factor-row p,.app-shell .level-section dt,.app-shell .level-section dd,.app-shell .engine-badge,.app-shell .evidence-list p,.app-shell .next-condition small,.app-shell .next-condition p,.app-shell .risk-section p,.app-shell .history-audit-note,.app-shell .history-entry time,.app-shell .history-entry p,.app-shell .history-disclaimer,.app-shell .action-source-state span,.app-shell .action-inline-error,.app-shell .dividend-date small,.app-shell .dividend-plan>div>strong,.app-shell .dividend-plan dt,.app-shell .dividend-plan dd,.app-shell .dividend-event-popover>header small,.app-shell .dividend-event-list dt,.app-shell .dividend-event-list footer,.app-shell .status-bar,.app-shell .page-heading p,.app-shell .universe-banner span,.app-shell .toolbar-title span,.app-shell .toolbar-controls select,.app-shell .data-table th,.app-shell .data-table td,.app-shell .table-stock small,.app-shell .industry-pill,.app-shell .score-detail-bars span,.app-shell .score-detail-bars span small,.app-shell .score-detail-bars strong,.app-shell .score-explanation>strong,.app-shell .score-explanation p,.app-shell .score-explanation button,.app-shell .run-metadata span,.app-shell .config-group label,.app-shell .config-group input,.app-shell .config-group select,.app-shell .config-group .field-help,.app-shell .strategy-options strong,.app-shell .strategy-options small,.app-shell .input-suffix span,.app-shell .input-prefix span,.app-shell .model-rules p,.app-shell .backtest-empty p,.app-shell .backtest-empty>div,.app-shell .metric-card small,.app-shell .metric-card span,.app-shell .result-section-head p,.app-shell .oos-marker,.app-shell .split-comparison small,.app-shell .split-comparison span,.app-shell .check-row strong,.app-shell .check-row small,.app-shell .warning-banner strong,.app-shell .warning-banner p,.app-shell .error-banner,.app-shell .trades-table td,.app-shell .trades-table th,.app-shell .table-method-note,.app-shell .dialog-content h3,.app-shell .dialog-content p,.app-shell .data-status-row span,.app-shell .data-status-row strong,.app-shell .data-callout strong,.app-shell .data-callout p,.app-shell .info-dialog>footer span,.app-shell .info-dialog>footer button{font-size:11px}.app-shell .eyebrow,.app-shell .compact-button,.app-shell .segmented button,.app-shell .analysis-tabs button,.app-shell .analysis-actions button,.app-shell .nav-scroll button,.app-shell .method-link,.app-shell .universe-banner button,.app-shell .run-button,.app-shell .app-header .market-state strong{font-size:13px}.app-shell .app-header .market-state small{font-size:11px}.app-shell.large-text .settings-content,.app-shell.large-text .dialog-content{font-size:15px}.app-shell.large-text .setting-copy strong{font-size:14px}.app-shell.large-text .setting-copy small,.app-shell.large-text .settings-intro p{font-size:12px}.app-shell.large-text .data-table th,.app-shell.large-text .data-table td,.app-shell.large-text .metric-card small,.app-shell.large-text .metric-card span,.app-shell.large-text .dividend-yield-summary span,.app-shell.large-text .dividend-event-list dt,.app-shell.large-text .dividend-event-list dd,.app-shell.large-text .dividend-event-list footer{font-size:12px}.app-shell.large-text .dividend-yield-summary strong{font-size:21px}.app-shell.reduce-motion *,.app-shell.reduce-motion *:before,.app-shell.reduce-motion *:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}@media(max-width:1399px){.app-header{grid-template-columns:260px minmax(280px,480px) minmax(300px,1fr);gap:12px}.market-badge{display:none}.market-state small{max-width:150px}.quote-strip{grid-template-columns:minmax(330px,1.35fr) minmax(175px,.75fr) minmax(500px,2.8fr);gap:12px;padding-left:14px;padding-right:14px}.quote-metrics{grid-template-columns:repeat(5,minmax(70px,1fr))}.quote-metrics div:nth-last-child(-n+2){display:none}.workbench{grid-template-columns:248px minmax(500px,1fr) 300px}.candidate-item{grid-template-columns:21px minmax(0,1fr) 57px;padding-left:6px;padding-right:6px}.chart-note{display:none!important}.metric-grid{grid-template-columns:repeat(4,1fr)}}@media(max-width:1160px){.app-header{grid-template-columns:230px minmax(260px,1fr) auto}.brand-copy small,.market-state{display:none}.primary-nav{padding-right:10px}.method-link{display:none}.quote-strip{grid-template-columns:minmax(290px,1fr) 165px minmax(350px,1.5fr)}.quote-metrics{grid-template-columns:repeat(4,minmax(72px,1fr))}.quote-metrics div:nth-last-child(3){display:none}.workbench{height:auto;min-height:calc(100vh - 216px);grid-template-columns:245px minmax(0,1fr);overflow:visible}.workbench.without-candidates{grid-template-columns:minmax(0,1fr)}.workbench.without-analysis{grid-template-columns:245px minmax(0,1fr)}.workbench.without-candidates.without-analysis{grid-template-columns:minmax(0,1fr)}.candidates-panel,.chart-panel{height:650px}.analysis-panel{grid-column:1 / -1;height:560px}.analysis-scroll{display:grid;grid-template-columns:1fr 1fr;align-content:start}.signal-summary{grid-column:1 / -1}.analysis-section{min-height:0}.analysis-actions{grid-template-columns:1fr 1fr}.signal-history{display:block}.score-detail{grid-template-columns:1fr}.score-explanation{padding:12px 0 0;border-left:0;border-top:1px solid var(--border)}.score-detail-bars{grid-template-columns:repeat(2,1fr)}.backtest-layout{grid-template-columns:280px minmax(0,1fr)}.validation-grid{grid-template-columns:1fr}}@media(max-width:820px){.app-shell{padding-bottom:47px}.app-header{height:56px;grid-template-columns:auto minmax(170px,1fr) auto;padding:0 10px;gap:9px}.brand{height:48px}.brand-mark{width:32px;height:32px}.brand-copy strong{font-size:15px}.stock-search{height:36px}.stock-search kbd,.header-actions .icon-button:not(:first-of-type){display:none}.header-actions .icon-button{width:36px;height:36px}.primary-nav{top:56px;height:43px;padding:0}.nav-scroll{width:100%;justify-content:space-around}.nav-scroll button{flex:1;min-width:78px;padding:0 8px}.nav-scroll .mobile-method-link{display:flex}.quote-strip{min-height:118px;grid-template-columns:1fr auto;grid-template-rows:auto auto;padding:9px 12px;gap:8px 12px}.quote-identity{border-right:0}.last-price{padding-right:0;border-right:0;justify-content:flex-end}.last-price strong{font-size:24px}.last-price span{font-size:10px}.quote-metrics{grid-column:1 / -1;grid-template-columns:repeat(5,1fr);gap:8px;padding-top:7px;border-top:1px solid #e7edf3}.quote-metrics div:nth-child(-n+5){display:block}.quote-metrics div:nth-child(n+6){display:none}.quote-metrics dt{margin-bottom:3px;font-size:10px}.quote-metrics dd{font-size:11px}.workbench{display:flex;flex-direction:column;min-height:0;padding:8px}.chart-panel{order:1;width:100%;height:min(70vh,620px);min-height:440px}.candidates-panel{order:2;width:100%;height:500px}.analysis-panel{order:3;width:100%;height:650px}.analysis-scroll{display:block}.chart-legend{display:none}.chart-toolbar{gap:5px}.adjustment-segment button{min-width:47px;padding:0 7px}.data-source-state{max-width:52%}.chart-stage{min-height:340px}.status-bar{height:47px;flex-direction:column;align-items:flex-start;justify-content:center;gap:2px;padding:4px 10px}.status-bar>div:first-child span:nth-of-type(n+3),.status-bar>div:first-child svg,.status-bar>div:last-child>*:not(.research-notice){display:none}.page-shell{min-height:calc(100vh - 142px);padding:17px 12px 56px}.page-heading{align-items:flex-start;flex-direction:column;gap:14px}.page-heading h1{font-size:22px}.heading-stats{width:100%}.heading-stats div{min-width:0;flex:1}.universe-banner{align-items:flex-start}.universe-banner>div{flex-direction:column;gap:3px}.universe-banner button{display:none}.leader-toolbar{align-items:flex-start;flex-direction:column}.toolbar-controls{width:100%}.toolbar-controls label{flex:1}.toolbar-controls select{width:100%}.score-detail{padding:14px}.score-detail-bars{grid-template-columns:1fr}.backtest-layout{display:flex;flex-direction:column}.config-panel{width:100%;max-height:none;position:static}.config-scroll{max-height:none}.backtest-results{width:100%}.metric-grid{grid-template-columns:repeat(4,1fr)}}@media(max-width:560px){.app-header{grid-template-columns:38px minmax(0,1fr) 38px;gap:7px}.brand-copy{display:none}.stock-search{padding:0 8px}.stock-search input{font-size:12px}.app-shell .nav-scroll button{min-width:60px;flex-direction:column;gap:2px;padding:3px 5px 2px;font-size:11px;line-height:1.15}.nav-scroll button svg{width:15px;height:15px}.quote-strip{min-height:132px}.quote-identity h1{font-size:16px}.quote-identity code{font-size:10px}.stock-tags{display:none}.last-price{flex-direction:column;align-items:flex-end;gap:3px}.quote-metrics{grid-template-columns:repeat(4,1fr)}.quote-metrics div:nth-child(5){display:none}.workbench{padding:6px;gap:7px}.chart-panel{height:480px;min-height:430px}.chart-toolbar{padding-left:6px;padding-right:6px}.app-shell .chart-toolbar .segmented button{min-height:30px;padding:0 7px;font-size:11px}.adjustment-segment button{min-width:43px;padding:0 5px!important}.live-feed-state{margin-left:auto;padding:0 6px}.chart-context{padding:5px 8px}.chart-context>div{flex-direction:column;gap:2px}.data-source-state{max-width:44%}.quote-source-state{display:none}.chart-footer{gap:8px;overflow-x:auto}.dividend-event-popover{width:calc(100% - 16px);left:50%}.candidates-panel{height:470px}.candidate-item{min-height:82px}.analysis-panel{height:650px}.app-shell .analysis-tabs button{min-height:52px;flex-direction:column;gap:2px;font-size:10px;line-height:1.15}.analysis-tabs button svg{width:14px;height:14px}.analysis-tabs button span{position:absolute;margin:-16px 0 0 31px}.dividend-entry{grid-template-columns:76px minmax(0,1fr);padding:10px 9px;gap:8px}.dividend-plan dl{grid-template-columns:1fr 1fr}.page-heading p{line-height:1.6}.heading-stats div{padding:9px}.heading-stats strong{font-size:15px}.universe-banner span{line-height:1.5}.leader-table{min-width:900px}.metric-grid{grid-template-columns:repeat(2,1fr)}.metric-card{min-height:82px}.equity-chart{height:250px}.split-comparison{grid-template-columns:1fr;gap:8px}.split-comparison>i{width:100%}.field-grid{grid-template-columns:1fr 1fr}.backtest-empty{min-height:360px;padding:20px}.backtest-empty>div{gap:8px;flex-wrap:wrap;justify-content:center}.run-metadata{justify-content:flex-start}.watch-table{min-width:850px}.dialog-backdrop{padding:9px}.info-dialog>header{min-height:65px;padding:11px 12px}.info-dialog>header h2{font-size:15px}.dialog-content{padding-left:13px;padding-right:13px}.info-dialog>footer{align-items:flex-start;flex-direction:column}.info-dialog>footer button{width:100%}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.app-header.app-header-compact{height:64px;grid-template-columns:minmax(260px,1fr) auto;gap:18px;padding:0 20px}.app-header-compact .header-actions{gap:10px}.header-text-button{min-height:36px;display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:0 10px;border:1px solid rgba(255,255,255,.22);border-radius:5px;color:#d8e5f2;background:#ffffff12;cursor:pointer;font-size:12px;white-space:nowrap}.header-text-button:hover{color:#fff;background:#ffffff24}.quote-strip.quote-strip-compact{min-height:106px;grid-template-columns:minmax(220px,260px) minmax(170px,220px) minmax(0,1fr);gap:16px;padding:10px 20px}.quote-strip-compact .quote-identity{padding-right:16px}.quote-strip-compact .quote-identity h1{font-size:21px}.quote-strip-compact .quote-metrics{grid-template-columns:repeat(7,minmax(68px,1fr));gap:14px}.quote-strip-compact .quote-metrics div{display:block}.quote-strip-compact .quote-metrics dt{font-size:12px}.quote-strip-compact .quote-metrics dd{font-size:14px}.quote-strip-compact .last-price strong{font-size:30px}.quote-strip-compact .last-price span{font-size:13px}.candidate-search{z-index:20;min-height:42px;margin:10px 10px 0;border-color:#c7d6e5;box-shadow:0 1px 2px #1837570d}.candidate-search input{height:36px;font-size:14px}.candidate-search-results{top:calc(100% + 6px);max-height:min(500px,calc(100vh - 180px))}.candidate-search-results button{min-height:58px;padding:9px 11px}.candidate-search-results strong{font-size:14px}.candidate-search-results small{font-size:12px}.candidates-panel .panel-header{min-height:59px;padding:10px 13px}.candidates-panel .panel-header small{font-size:12px}.candidates-panel .candidate-tools{padding:9px 10px}.candidates-panel .segmented.small button{min-height:32px;font-size:12px}.candidates-panel .sort-select select{max-width:86px;font-size:12px}.candidates-panel .candidate-item{min-height:82px;grid-template-columns:28px minmax(0,1fr) 72px;gap:8px;padding:10px}.candidates-panel .candidate-name strong{font-size:14px}.candidates-panel .candidate-name code,.candidates-panel .candidate-meta{font-size:12px}.candidates-panel .candidate-quote b{font-size:14px}.candidates-panel .candidate-quote small{font-size:12px}.candidates-panel .candidate-score strong{font-size:18px}.candidates-panel .candidate-score small{font-size:11px}.candidates-panel .signal-chip{min-height:25px;font-size:12px}.candidates-panel .panel-footnote{padding:9px 11px;font-size:12px}.strategy-backtest-panel{min-width:0;min-height:0;height:auto;display:flex;flex-direction:column;overflow:hidden}.strategy-backtest-head{min-height:76px;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:11px 13px;border-bottom:1px solid var(--border);background:#f8fafc}.strategy-backtest-head>div{min-width:0;display:flex;flex-direction:column;gap:4px}.strategy-backtest-head .eyebrow{font-size:12px}.strategy-backtest-head strong{overflow:hidden;color:var(--text);font-size:15px;text-overflow:ellipsis;white-space:nowrap}.strategy-backtest-head small{overflow:hidden;color:var(--muted);font-size:11px;line-height:1.35;text-overflow:ellipsis;white-space:nowrap}.strategy-backtest-controls{display:flex;align-items:flex-end;justify-content:space-between;gap:8px;padding:10px 12px;border-bottom:1px solid #e7edf3;background:#fff}.strategy-backtest-controls label{min-width:0;display:flex;flex-direction:column;gap:4px;color:var(--muted);font-size:11px}.strategy-backtest-controls select{width:150px;height:34px;border:1px solid #c7d4e1;border-radius:5px;padding:0 8px;color:var(--text);background:#fff;font-size:12px}.strategy-fixed-badge{min-height:28px;display:inline-flex;align-items:center;gap:5px;padding:0 7px;border:1px solid #bcd8c8;border-radius:4px;color:#397259;background:#f1faf5;font-size:11px;white-space:nowrap}.strategy-date-fields{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:9px 12px;border-bottom:1px solid #e7edf3;background:#fbfcfe}.strategy-date-fields label{min-width:0;display:flex;flex-direction:column;gap:4px;color:var(--muted);font-size:11px}.strategy-date-fields input{width:100%;height:32px;border:1px solid #c7d4e1;border-radius:5px;padding:0 7px;color:var(--text);background:#fff;font-size:12px}.strategy-backtest-scroll{min-height:0;flex:1;overflow-y:auto;padding:10px 11px 12px;scrollbar-width:thin;scrollbar-color:#becbd9 transparent}.strategy-benchmark{margin:-10px -11px 10px;padding:9px 11px;border-bottom:1px solid #d8e3ec;background:#f3f8fc}.strategy-benchmark>div{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.strategy-benchmark span{color:#4b6076;font-size:11px;font-weight:600}.strategy-benchmark strong{color:#197b52;font-size:19px;line-height:1;font-variant-numeric:tabular-nums}.strategy-benchmark small{display:block;margin-top:4px;color:#65778b;font-size:10px;line-height:1.35}.strategy-benchmark p{margin:4px 0 0;color:#738397;font-size:10px;line-height:1.4}.strategy-rule-summary{margin-bottom:10px;padding:9px 10px;border:1px solid #d7e4ee;border-radius:5px;background:#f7fafc}.strategy-rule-summary p{margin:0;display:flex;align-items:flex-start;gap:6px;color:#50647b;font-size:11px;line-height:1.45}.strategy-rule-summary p+p{margin-top:5px}.strategy-rule-summary i{width:6px;height:6px;flex:none;margin-top:5px;border-radius:50%;background:var(--brand)}.strategy-current-signal{margin-bottom:10px;padding:10px;border:1px solid;border-radius:5px}.strategy-current-signal.signal-intraday{border-color:#e4c27e;color:#76501a;background:#fff9eb}.strategy-current-signal.signal-close{border-color:#aac7e8;color:#285f96;background:#f0f7ff}.strategy-current-signal>header{display:flex;align-items:center;justify-content:space-between;gap:8px}.strategy-current-signal>header strong{color:inherit;font-size:13px}.strategy-current-signal>header time{color:inherit;font-size:10px;font-variant-numeric:tabular-nums;opacity:.82}.strategy-current-signal p{margin:6px 0;color:var(--text);font-size:11px;line-height:1.45}.strategy-current-signal>div{display:flex;flex-wrap:wrap;gap:5px 10px;font-size:10px;font-variant-numeric:tabular-nums}.strategy-current-signal>small{display:block;margin-top:6px;color:inherit;font-size:10px;line-height:1.45;opacity:.88}.strategy-state{min-height:140px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;padding:18px 12px;color:var(--muted);text-align:center}.strategy-state strong{color:var(--text);font-size:13px}.strategy-state span{font-size:11px;line-height:1.45}.strategy-state svg{flex:none;color:var(--warning)}.strategy-state-error{color:#8d5b19;background:#fffaf0;border:1px solid #efd19b;border-radius:5px}.strategy-state-error strong{color:#875318}.strategy-state .compact-button{margin-top:4px;font-size:12px}.strategy-backtest-panel .analysis-pulse{width:25px;height:25px;display:block;flex:none}.strategy-metrics{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;margin-bottom:10px}.strategy-metrics article{min-width:0;min-height:74px;display:flex;flex-direction:column;justify-content:center;padding:9px 10px;border:1px solid var(--border);border-radius:5px;background:#fff}.strategy-metrics article>span{color:var(--muted);font-size:11px}.strategy-metrics article strong{margin-top:4px;font-size:20px;line-height:1}.strategy-metrics article small{margin-top:5px;overflow:hidden;color:var(--subtle);font-size:10px;text-overflow:ellipsis;white-space:nowrap}.strategy-equity-section,.strategy-trades-section{margin-bottom:10px;border:1px solid var(--border);border-radius:5px;background:#fff;overflow:hidden}.strategy-equity-section>header,.strategy-trades-section>header{min-height:38px;display:flex;align-items:center;justify-content:space-between;gap:7px;padding:7px 10px;border-bottom:1px solid #e8edf3;background:#f8fafc}.strategy-equity-section>header strong,.strategy-trades-section>header strong{color:var(--text);font-size:12px}.strategy-equity-section>header span,.strategy-trades-section>header span{min-width:0;overflow:hidden;color:var(--muted);font-size:10px;text-overflow:ellipsis;white-space:nowrap}.strategy-backtest-panel .equity-chart{width:100%;height:142px}.strategy-trades-section article{min-height:52px;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:7px 10px;border-bottom:1px solid #edf1f5}.strategy-trades-section article:last-of-type{border-bottom:0}.strategy-trades-section article>div{min-width:0;display:flex;flex-direction:column;gap:3px}.strategy-trades-section article>div:last-child{align-items:flex-end}.strategy-trades-section article strong{color:var(--text);font-size:11px;white-space:nowrap}.strategy-trades-section article strong b{margin-left:3px;font-weight:600}.strategy-trades-section article span{max-width:150px;overflow:hidden;color:var(--muted);font-size:10px;text-overflow:ellipsis;white-space:nowrap}.strategy-no-trades{display:flex;flex-direction:column;gap:5px;padding:16px 10px;color:var(--muted);text-align:center}.strategy-no-trades strong{color:var(--text);font-size:12px}.strategy-no-trades span{font-size:10px;line-height:1.45}.strategy-run-meta{display:flex;flex-wrap:wrap;gap:5px;padding:0 1px 2px;color:var(--subtle);font-size:10px;line-height:1.35}.strategy-run-meta span:first-child{color:#4e6680;font-variant-numeric:tabular-nums}@media(min-width:1161px){.workbench.desktop-workbench{height:calc(100vh - 213px);min-height:560px;grid-template-columns:340px minmax(520px,1fr) 370px;gap:12px;padding:12px;overflow:hidden}.workbench.desktop-workbench>.panel{min-height:0;height:100%}}@media(min-width:1161px)and (max-width:1299px){.workbench.desktop-workbench{grid-template-columns:300px minmax(460px,1fr) 330px;gap:10px;padding:10px}.candidates-panel .candidate-item{grid-template-columns:24px minmax(0,1fr) 64px;gap:6px;padding-left:8px;padding-right:8px}.strategy-backtest-controls select{width:130px}}@media(max-width:820px){.app-header.app-header-compact{height:56px;grid-template-columns:auto 1fr;padding:0 10px;gap:9px}.app-header-compact .header-text-button{display:none}.quote-strip.quote-strip-compact{min-height:118px;grid-template-columns:1fr auto;grid-template-rows:auto auto;padding:9px 12px;gap:8px 12px}.quote-strip-compact .quote-metrics{grid-column:1 / -1}.quote-strip-compact .quote-identity h1{font-size:16px}.quote-strip-compact .last-price strong{font-size:24px}}.market-layout{min-width:0;display:grid;grid-template-columns:minmax(0,1fr);grid-template-areas:"chart" "search" "hot" "signals" "backtest";align-items:stretch;gap:16px;padding:16px}.stock-search-panel{grid-area:search}.hot-ranking-panel{grid-area:hot}.market-center{grid-area:chart;min-width:0;min-height:0;height:100%;display:flex;flex-direction:column;gap:16px;align-self:stretch}.signal-screener-panel{grid-area:signals}.strategy-backtest-panel{grid-area:backtest}.module-panel{min-width:0;min-height:0;display:flex;flex-direction:column;overflow:hidden}.module-panel-header{height:64px;min-height:64px;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:9px 10px;border-bottom:1px solid var(--border);background:#f8fafc;border-radius:6px 6px 0 0}.module-panel-header>div{min-width:0;display:flex;flex-direction:column;gap:4px}.module-panel-header .eyebrow{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.module-panel-header small{overflow:hidden;color:var(--muted);font-size:11px;text-overflow:ellipsis;white-space:nowrap}.module-panel-header .icon-button{width:31px;height:31px}.module-search{min-height:40px;margin:10px;z-index:40}.module-search input{height:34px;font-size:13px}.module-search kbd{display:none}.watch-search-results{top:calc(100% + 6px);padding:5px}.watch-search-results .search-result-row{min-height:54px;display:grid;grid-template-columns:minmax(0,1fr) 34px;align-items:stretch;border-radius:4px}.watch-search-results .search-result-row:hover,.watch-search-results .search-result-row.selected{background:#eef5fb}.watch-search-results .search-result-main{min-width:0;min-height:54px;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:7px 6px 7px 9px;border:0;background:transparent;cursor:pointer;text-align:left}.watch-search-results .search-result-main>span{min-width:0;display:flex;flex-direction:column;gap:3px}.watch-search-results .search-result-main strong,.watch-search-results .search-result-main small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.watch-search-results .search-result-main strong{font-size:13px}.watch-search-results .search-result-main small{color:var(--muted);font-size:11px}.watch-search-results .search-result-main b{flex:none;font-size:11px}.watch-search-results .search-favorite-button{width:32px;min-height:32px;align-self:center;display:inline-flex;align-items:center;justify-content:center;padding:0;border:0;border-radius:4px;color:#8391a3;background:transparent;cursor:pointer}.watch-search-results .search-favorite-button:hover,.watch-search-results .search-favorite-button.active{color:#bf7b08;background:#fff7e8}.module-section-heading{height:39px;min-height:39px;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0 11px;border-top:1px solid #e7edf3;border-bottom:1px solid #e7edf3;background:#f5f8fb}.module-section-heading strong{min-width:0;display:inline-flex;align-items:center;gap:6px;font-size:12px}.module-section-heading strong svg{color:#bf7b08}.module-section-heading span{color:var(--muted);font-size:11px;white-space:nowrap}.watchlist-scroll,.hot-ranking-scroll,.signal-list-scroll{min-height:0;flex:1;overflow-y:auto;scrollbar-width:thin;scrollbar-color:#becbd9 transparent}.watchlist-row{min-height:58px;display:grid;grid-template-columns:minmax(0,1fr) 34px;align-items:center;border-bottom:1px solid #edf1f5;border-left:3px solid transparent}.watchlist-row:hover{background:#f8fbfe}.watchlist-row.active{border-left-color:var(--brand);background:#edf4fb}.watchlist-main{min-width:0;min-height:57px;display:flex;align-items:center;justify-content:space-between;gap:7px;padding:7px 4px 7px 9px;border:0;background:transparent;cursor:pointer;text-align:left}.watchlist-main>span{min-width:0;display:flex;align-items:baseline;gap:6px}.watchlist-main strong{overflow:hidden;font-size:13px;text-overflow:ellipsis;white-space:nowrap}.watchlist-main code{color:var(--muted);font-family:inherit;font-size:10px}.watchlist-main small{flex:none;color:var(--muted);font-size:10px;white-space:nowrap}.row-icon-button{width:29px;height:29px;display:inline-flex;align-items:center;justify-content:center;padding:0;border:0;border-radius:4px;color:#8a98a9;background:transparent;cursor:pointer}.row-icon-button:hover{color:var(--rise);background:var(--rise-soft)}.hot-ranking-item{width:100%;min-height:82px;display:grid;grid-template-columns:22px minmax(0,1fr) 42px;align-items:center;gap:6px;padding:8px;border:0;border-bottom:1px solid #edf1f5;border-left:3px solid transparent;background:#fff;cursor:pointer;text-align:left}.hot-ranking-item:hover{background:#f8fbfe}.hot-ranking-item.active{border-left-color:var(--brand);background:#edf4fb}.hot-rank{align-self:start;padding-top:3px;color:#9aa7b7;font-size:10px;font-weight:700}.hot-ranking-item:nth-child(-n+3) .hot-rank{color:var(--warning)}.hot-main{min-width:0;max-width:100%;display:flex;flex-direction:column;gap:4px;overflow:hidden}.hot-main>span:first-child{min-width:0;max-width:100%;display:flex;align-items:baseline;gap:6px;overflow:hidden}.hot-main strong{min-width:0;overflow:hidden;font-size:13px;text-overflow:ellipsis;white-space:nowrap}.hot-main code{min-width:0;overflow:hidden;color:var(--muted);font-family:inherit;font-size:10px;text-overflow:ellipsis;white-space:nowrap}.hot-main>small{overflow:hidden;color:var(--muted);font-size:10px;text-overflow:ellipsis;white-space:nowrap}.hot-values{min-width:0;max-width:100%;display:flex;align-items:baseline;gap:6px;overflow:hidden;white-space:nowrap}.hot-values b{font-size:13px}.hot-values em{font-size:10px;font-style:normal}.hot-values small{min-width:0;overflow:hidden;color:var(--muted);font-size:10px;text-overflow:ellipsis}.hot-score{min-width:0;width:42px;display:flex;flex-direction:column;align-items:flex-end;gap:3px;overflow:hidden}.hot-score small{color:var(--muted);font-size:10px}.hot-score strong{color:#314258;font-size:18px}.module-footnote{min-height:44px;display:flex;align-items:center;padding:7px 9px;border-top:1px solid #e5ebf1;color:#68788b;background:#f8fafc;font-size:10px;line-height:1.4}.signal-panel-header{background:#f5f9fd}.screener-button{min-width:68px;height:34px;display:inline-flex;align-items:center;justify-content:center;gap:5px;padding:0 10px;border:1px solid var(--brand);border-radius:5px;color:#fff;background:var(--brand);cursor:pointer;font-size:12px;font-weight:600;white-space:nowrap}.screener-button:hover{background:#124878}.screener-button:disabled{cursor:wait;opacity:.72}.signal-session-banner{min-height:52px;display:flex;align-items:center;gap:8px;padding:8px 10px;border-bottom:1px solid #d8e7f5;color:#1b5b91;background:#edf6ff}.signal-session-banner>svg{flex:none}.signal-session-banner>span{min-width:0;display:flex;flex-direction:column;gap:2px}.signal-session-banner strong{font-size:11px;line-height:1.25}.signal-session-banner small{overflow:hidden;color:#55728e;font-size:10px;line-height:1.3;text-overflow:ellipsis;white-space:nowrap}.signal-list-scroll.has-session-banner .module-empty{min-height:calc(100% - 52px)}.signal-stock-row{min-height:118px;display:grid;grid-template-columns:minmax(0,1fr) 34px;align-items:start;border-bottom:1px solid #e8edf3;border-left:3px solid transparent;background:#fff}.signal-stock-row:hover{background:#f8fbfe}.signal-stock-row.active{border-left-color:var(--brand);background:#edf4fb}.signal-stock-main{min-width:0;min-height:117px;display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:auto auto auto;gap:5px 7px;padding:10px 3px 9px 9px;border:0;background:transparent;cursor:pointer;text-align:left}.signal-stock-title{min-width:0;display:flex;align-items:center;gap:5px}.signal-stock-title strong{overflow:hidden;font-size:13px;text-overflow:ellipsis;white-space:nowrap}.signal-stock-title code{flex:none;color:var(--muted);font-family:inherit;font-size:10px}.signal-confirmation-badge{flex:none;padding:1px 4px;border:1px solid #9bc4e8;border-radius:3px;color:#155a90;background:#edf6ff;font-size:10px;font-weight:600;line-height:1.35}.signal-stock-quote{display:flex;align-items:baseline;gap:5px;white-space:nowrap}.signal-stock-quote b{font-size:13px}.signal-stock-quote em{font-size:10px;font-style:normal}.signal-stock-reason{grid-column:1 / -1;display:-webkit-box;overflow:hidden;color:#53667b;font-size:10px;line-height:1.45;-webkit-box-orient:vertical;-webkit-line-clamp:2}.signal-stock-main time{grid-column:1 / -1;display:inline-flex;align-items:center;gap:4px;color:#718196;font-size:10px;white-space:nowrap}.signal-favorite-button{width:29px;height:29px;margin-top:8px;display:inline-flex;align-items:center;justify-content:center;padding:0;border:0;border-radius:4px;color:#8391a3;background:transparent;cursor:pointer}.signal-favorite-button:hover,.signal-favorite-button.active{color:#bf7b08;background:#fff7e8}.module-empty{min-height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px 14px;color:#8b99aa;text-align:center}.module-empty.compact{min-height:170px}.module-empty strong{margin-top:9px;color:var(--text);font-size:12px}.module-empty p{margin:5px 0 0;color:var(--muted);font-size:10px;line-height:1.5}.module-empty.error{color:var(--warning)}.module-empty .compact-button{margin-top:10px}.quote-strip.quote-strip-dense{width:100%;height:64px;min-height:64px;max-height:64px;display:flex;flex-direction:column;gap:3px;padding:6px 10px 5px;overflow:hidden;border:1px solid var(--border);border-radius:6px;background:#fff;box-shadow:var(--shadow)}.quote-primary-line{min-width:0;height:28px;display:grid;grid-template-columns:minmax(120px,1fr) auto auto;align-items:center;gap:12px}.quote-identity-inline{min-width:0;display:flex;align-items:baseline;gap:6px;overflow:hidden;white-space:nowrap}.quote-identity-inline .exchange-symbol{flex:none;display:inline-flex;align-items:center;gap:3px;font-size:10px}.quote-identity-inline h1{min-width:0;margin:0;overflow:hidden;font-size:15px;line-height:1.2;text-overflow:ellipsis;white-space:nowrap}.quote-identity-inline code{flex:none;color:var(--muted);font-family:inherit;font-size:10px}.quote-strip-dense .last-price{min-width:0;display:flex;align-items:baseline;gap:7px;padding:0;border:0;white-space:nowrap}.quote-strip-dense .last-price strong{font-size:20px;line-height:1}.quote-strip-dense .last-price span{font-size:10px;font-weight:600}.quote-primary-amount{display:flex;align-items:baseline;gap:5px;white-space:nowrap}.quote-primary-amount span{color:var(--muted);font-size:10px}.quote-primary-amount strong{color:var(--text);font-size:11px;font-variant-numeric:tabular-nums}.quote-secondary-line{min-width:0;height:20px;display:flex;align-items:center;gap:6px;overflow:hidden}.quote-secondary-line dl{min-width:0;flex:1;margin:0;display:grid;grid-template-columns:repeat(5,minmax(0,1fr)) minmax(92px,1.45fr);gap:5px}.quote-secondary-line dl div{min-width:0;display:flex;align-items:baseline;gap:3px;overflow:hidden;white-space:nowrap}.quote-secondary-line dt{flex:none;color:var(--subtle);font-size:10px}.quote-secondary-line dd{min-width:0;margin:0;overflow:hidden;color:#415268;font-size:10px;font-variant-numeric:tabular-nums;text-overflow:ellipsis;white-space:nowrap}.quote-strip-dense .quote-source-state{position:static;flex:none;max-width:62px;overflow:hidden;font-size:10px;text-overflow:ellipsis;white-space:nowrap}.market-center>.chart-panel{width:100%;height:auto;min-height:320px;flex:0 0 auto}.market-center .chart-stage{min-height:210px}.toast-region{position:fixed;top:72px;right:16px;z-index:260;display:flex;flex-direction:column;align-items:flex-end;gap:8px;pointer-events:none}.app-toast{max-width:320px;min-height:40px;display:flex;align-items:center;padding:9px 12px;border:1px solid #a9c8b8;border-radius:5px;color:#215e45;background:#f0faf5;box-shadow:0 8px 22px #142a4a2e;font-size:12px}@media(min-width:900px){html,body,#root{height:100%;overflow:hidden}.app-shell{padding-bottom:0}.chart-toolbar{min-height:80px;flex-wrap:wrap;align-content:center;column-gap:5px;row-gap:4px;overflow:hidden}.chart-toolbar .toolbar-divider{height:20px}.chart-toolbar .segmented button{padding-right:5px;padding-left:5px}.chart-toolbar .adjustment-segment button{min-width:43px;padding-right:5px;padding-left:5px}.chart-legend{flex:1 1 calc(100% - 80px);min-width:0;margin-left:0;gap:3px;overflow:hidden}.chart-legend button{flex:none}.chart-actions{flex:none;margin-left:0}.chart-toolbar:has(.live-feed-state){min-height:44px;flex-wrap:nowrap}.market-layout{height:calc(100vh - 98px);min-height:0;gap:16px;padding:0 16px 16px;grid-template-columns:minmax(0,1fr) minmax(0,2.15fr) minmax(0,1fr);grid-template-rows:repeat(2,minmax(0,1fr));grid-template-areas:"search chart signals" "hot chart backtest";overflow:hidden}.market-layout>.module-panel,.market-layout>.strategy-backtest-panel{min-height:0;height:100%}.market-center>.chart-panel{height:max(320px,calc(66.667vh - 140px))}}@media(min-width:900px)and (max-width:1099px){.trade-signal-legend{gap:4px;font-size:0}.trade-signal-legend .trade-signal i{font-size:10px}}@media(min-width:1100px){.chart-toolbar .segmented button{padding-right:7px;padding-left:7px}.chart-toolbar .adjustment-segment button{min-width:46px;padding-right:6px;padding-left:6px}}@media(min-width:1400px){.market-layout{gap:16px;padding:0 16px 16px;grid-template-columns:minmax(0,1fr) minmax(0,1fr) minmax(360px,2fr) minmax(0,1fr) minmax(0,1fr);grid-template-rows:minmax(0,1fr);grid-template-areas:"search hot chart signals backtest"}.strategy-backtest-controls{flex-direction:column;align-items:stretch;gap:6px;padding:8px}.strategy-backtest-controls select{width:100%}.strategy-fixed-badge{align-self:flex-start}.strategy-date-fields{grid-template-columns:minmax(0,1fr);padding:8px}.signal-stock-row{grid-template-columns:minmax(0,1fr) 28px}.signal-stock-main{grid-template-columns:minmax(0,1fr);grid-template-rows:auto auto auto auto;padding-right:3px}.signal-stock-quote,.signal-stock-reason,.signal-stock-main time{grid-column:1}.signal-favorite-button{width:27px;height:27px}}@media(min-width:1400px)and (max-width:1719px){.market-center .chart-toolbar .segmented button{min-height:25px}.market-center .chart-footer{min-height:46px;display:grid;grid-template-columns:auto auto minmax(0,1fr);grid-template-rows:18px 26px;align-items:center;column-gap:8px;row-gap:0;padding:1px 8px;overflow:hidden}.market-center .chart-footer>:nth-child(1){grid-column:1 / 3}.market-center .chart-footer>:nth-child(2){grid-column:3;justify-self:end}}
