:root{--bg:#071015;--panel:#0b151b;--panel2:#101e25;--line:#21343c;--text:#eef5f5;--muted:#91a4aa;--soft:#c3d0d2;--green:#61d9a0;--orange:#f2bd76;--red:#ef7c80;--cyan:#7cdde2}
*{box-sizing:border-box}
html{color-scheme:dark}
body{margin:0;min-width:320px;background:var(--bg);color:var(--text);font-family:Arial,"Microsoft YaHei",sans-serif}
.scanner-shell{width:min(1400px,100%);margin:0 auto;padding:32px clamp(16px,4vw,48px) 48px}
.scanner-header{display:flex;justify-content:space-between;gap:24px;align-items:flex-start;border-bottom:1px solid var(--line);padding-bottom:24px}
.eyebrow{color:var(--cyan);font:10px/1.3 "Courier New",monospace;letter-spacing:1.2px}
.scanner-header h1{margin:8px 0 10px;font-size:clamp(24px,4vw,38px);font-weight:600}
.scanner-header p{margin:0;color:var(--muted);font-size:13px;line-height:1.6}
.scanner-header nav{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.scanner-header a,.scanner-header button{min-height:44px;padding:0 14px;border:1px solid var(--line);background:var(--panel2);color:var(--soft);text-decoration:none;font-size:12px;cursor:pointer}
.scanner-header button{color:#071512;background:var(--green);border-color:var(--green);font-weight:600}
.scanner-header a:focus-visible,.scanner-header button:focus-visible,.scanner-controls select:focus-visible,.toggle-row:focus-within,.detail-heading a:focus-visible{outline:2px solid var(--cyan);outline-offset:3px}
.scanner-header button:disabled{cursor:not-allowed;opacity:.5}
.scanner-controls{display:flex;align-items:end;gap:12px;padding:20px 0 12px;flex-wrap:wrap}
.scanner-controls label{display:grid;gap:6px;color:var(--muted);font-size:11px}
.scanner-controls select{min-width:120px;height:38px;padding:0 10px;background:var(--panel2);border:1px solid var(--line);color:var(--text);font-size:12px}
.scanner-controls>span{color:var(--muted);font:11px "Courier New",monospace;margin-left:auto;padding-bottom:10px}
.scanner-controls .toggle-row{display:flex;align-items:center;gap:8px;min-height:38px;padding:0 10px;border:1px solid var(--line);background:var(--panel2);color:var(--soft);cursor:pointer}
.toggle-row input{width:16px;height:16px;accent-color:var(--green)}
.scanner-summary{display:grid;grid-template-columns:repeat(7,1fr);border:1px solid var(--line);background:var(--panel);margin:8px 0 20px}
.scanner-summary div{padding:14px 16px;border-right:1px solid var(--line)}
.scanner-summary div:last-child{border-right:0}
.scanner-summary span,.scanner-summary strong{display:block}
.scanner-summary span{color:var(--muted);font-size:11px}
.scanner-summary strong{margin-top:8px;color:var(--text);font:600 16px "Courier New",monospace}
.table-wrap,.scanner-detail,.alert-log{border:1px solid var(--line);background:var(--panel)}
.table-heading{display:flex;justify-content:space-between;align-items:end;padding:18px 18px 14px;border-bottom:1px solid var(--line)}
.table-heading h2,.detail-heading h2,.alert-log h2{margin:5px 0 0;font-size:18px}
.table-heading small{color:var(--muted);font-size:11px}
.table-scroll{overflow-x:auto}
table{width:100%;border-collapse:collapse;min-width:900px}
th,td{text-align:left;padding:13px 14px;border-bottom:1px solid rgba(33,52,60,.7);font-size:12px;white-space:nowrap}
th{color:var(--muted);font-size:10px;font-weight:500}
tbody tr{cursor:pointer;transition:background .18s ease}
tbody tr:hover,tbody tr.selected{background:#12242b}
tbody tr:focus{outline:2px solid var(--cyan);outline-offset:-2px}
.symbol{color:var(--text);font-weight:600}
.symbol small{display:block;color:var(--muted);font:10px "Courier New",monospace;margin-top:4px}
.score{color:var(--green);font:600 14px "Courier New",monospace}
.score.low{color:var(--orange)}
.status{display:inline-block;padding:4px 7px;border:1px solid currentColor;font-size:11px}
.status.trigger{color:var(--green)}.status.candidate{color:var(--orange)}.status.invalidated{color:var(--red)}.status.observe{color:var(--muted)}
.secondary-wrap{margin-top:16px}.secondary-badge{display:inline-block;padding:4px 7px;border:1px solid currentColor;font-size:11px}.secondary-badge.surge,.secondary-badge.early_surge{color:var(--green)}.secondary-badge.drop,.secondary-badge.early_drop{color:var(--red)}.secondary-badge.extended_surge,.secondary-badge.extended_drop{color:var(--orange);background:rgba(242,189,118,.08)}.secondary-badge.observe{color:var(--orange)}.secondary-badge.neutral{color:var(--muted)}
.signal-legend{display:flex;gap:18px;align-items:center;flex-wrap:wrap;padding:9px 18px;border-bottom:1px solid var(--line);color:var(--muted);font-size:10px}.signal-legend span{display:inline-flex;align-items:center;gap:6px}.legend-dot{width:7px;height:7px;border:1px solid currentColor;background:currentColor}.legend-dot.early{color:var(--cyan)}.legend-dot.confirm{color:var(--green)}.legend-dot.stop{color:var(--orange)}
.warning-score{font:600 13px "Courier New",monospace;color:var(--muted)}.warning-score.early{color:var(--cyan)}.warning-score.building,.warning-score.near_trigger{color:var(--green)}
.warning-phase,.action{display:inline-block;font-size:11px;font-weight:600}.warning-phase.early{color:var(--cyan)}.warning-phase.building,.warning-phase.near_trigger{color:var(--green)}.action.no_chase,.action.blocked{color:var(--orange)}.action.wait_retest,.action.wait_trigger{color:var(--green)}.action.early_watch{color:var(--cyan)}.action-detail{display:block;max-width:210px;margin-top:4px;color:var(--muted);font-size:10px;line-height:1.45;white-space:normal}.evidence-cell{max-width:280px;color:var(--soft);line-height:1.5;white-space:normal}
.muted{color:var(--muted)}.danger{color:var(--red)}.positive{color:var(--green)}.negative{color:var(--red)}.score-note{display:block;color:var(--muted);font-size:9px;font-weight:400;margin-top:3px}.status.confirmed{color:var(--green)}.secondary-badge.pending_confirmation{color:var(--orange)}.validation-banner{display:flex;justify-content:space-between;gap:12px;align-items:center;margin:0 0 16px;padding:10px 12px;border:1px solid #76552e;background:rgba(242,189,118,.08);color:var(--orange);font-size:11px;line-height:1.5}.validation-banner span{color:var(--muted)}.validation-banner.validated{border-color:#286c55;background:rgba(97,217,160,.08);color:var(--green)}
.history-panel,.surge-panel{border:1px solid var(--line);background:var(--panel);margin:0 0 16px;padding:18px}.history-heading{display:flex;justify-content:space-between;align-items:end;gap:16px}.history-heading h2{margin:5px 0 0;font-size:18px}.history-heading>strong{color:var(--cyan);font:600 12px "Courier New",monospace}.history-metrics,.surge-metrics{display:grid;margin-top:16px;border-top:1px solid var(--line);border-left:1px solid var(--line)}.history-metrics{grid-template-columns:repeat(4,1fr)}.surge-metrics{grid-template-columns:repeat(5,1fr)}.history-metrics>div,.surge-metrics>div{min-width:0;padding:12px;border-right:1px solid var(--line);border-bottom:1px solid var(--line)}.history-metrics span,.history-metrics strong,.surge-metrics span,.surge-metrics strong{display:block}.history-metrics span,.surge-metrics span{color:var(--muted);font-size:10px}.history-metrics strong,.surge-metrics strong{margin-top:7px;color:var(--soft);font:600 13px "Courier New",monospace;overflow-wrap:anywhere}.history-panel p,.surge-panel p{margin:12px 0 0;color:var(--muted);font-size:11px;line-height:1.6;max-width:1100px}.surge-body{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:16px}.surge-label{display:block;margin-bottom:8px;color:var(--muted);font-size:10px;text-transform:uppercase}.trait-list{display:flex;flex-wrap:wrap;gap:7px}.trait-list span{padding:6px 8px;border:1px solid var(--line);color:var(--soft);font-size:10px;line-height:1.4}.surge-signals{margin:0;padding:0;list-style:none}.surge-signals li{padding:7px 0;border-bottom:1px solid rgba(33,52,60,.7);color:var(--soft);font-size:10px;line-height:1.55}.surge-signals li:last-child{border-bottom:0}.surge-signals strong{color:var(--cyan);font-weight:600}.surge-signals small{display:block;color:var(--muted);margin-top:2px}
.empty{text-align:center;color:var(--muted);padding:32px}
.scanner-detail,.alert-log{margin-top:16px;padding:18px}
.detail-heading{display:flex;align-items:center;justify-content:space-between;gap:16px}
.detail-heading a{min-height:38px;display:inline-flex;align-items:center;padding:0 12px;border:1px solid var(--cyan);color:var(--cyan);text-decoration:none;font-size:12px}
.detail-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.detail-actions button{min-height:38px;padding:0 12px;border:1px solid var(--orange);background:transparent;color:var(--orange);font-size:12px;cursor:pointer}.detail-actions button:disabled{opacity:.55;cursor:wait}.ai-review{margin-top:12px;padding:10px 12px;border-left:3px solid var(--orange);background:var(--panel2);color:var(--muted);font-size:11px;line-height:1.6}
.detail-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));margin-top:16px;border-top:1px solid var(--line);border-left:1px solid var(--line)}
.detail-grid>div{min-width:0;padding:12px;border-right:1px solid var(--line);border-bottom:1px solid var(--line)}
.detail-grid>p{grid-column:1/-1;color:var(--muted);font-size:11px}
.detail-grid span,.detail-grid strong,.detail-plan span,.detail-plan strong{display:block}
.detail-grid span,.detail-plan span{color:var(--muted);font-size:10px}
.detail-grid strong{margin-top:6px;color:var(--soft);font-size:11px;line-height:1.55;overflow-wrap:anywhere}
.detail-plan{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px}
.detail-plan>div{padding:12px;border-left:3px solid var(--green);background:var(--panel2)}
.detail-plan>div:last-child{border-left-color:var(--red)}
.detail-plan strong{margin-top:7px;font-size:12px;line-height:1.5}
.detail-reasons{margin:12px 0 0;color:var(--muted);font-size:11px;line-height:1.6}
.alert-log{display:grid;grid-template-columns:220px 1fr;gap:20px}
.alert-log ol{margin:0;padding:0;list-style:none}
.alert-log li{display:grid;grid-template-columns:72px 150px 1fr;gap:10px;padding:10px 0;border-bottom:1px solid var(--line);font-size:11px}
.alert-log li:last-child{border-bottom:0}
.alert-log time,.alert-log small{color:var(--muted)}
.alert-log span,.alert-log small{line-height:1.5}
.alert-log small{grid-column:3}
.scanner-note{color:var(--muted);font-size:11px;line-height:1.7;margin:16px 0 0;max-width:1000px}
.accum-panel{border:1px solid var(--line);background:var(--panel);margin:8px 0 20px;padding:18px}
.accum-panel .history-heading{margin-bottom:14px}
.accum-panel h2{font-size:19px;margin:5px 0 0}
.accum-metrics{display:grid;grid-template-columns:repeat(6,1fr);border:1px solid var(--line);background:var(--panel2);margin-bottom:14px}
.accum-metrics div{padding:12px 14px;border-right:1px solid var(--line)}
.accum-metrics div:last-child{border-right:0}
.accum-metrics span{display:block;color:var(--muted);font-size:11px}
.movers-panel{background:var(--panel);border:1px solid var(--line);padding:18px;margin:18px 0}
.movers-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-top:14px}
.mover-board{border:1px solid var(--line);background:rgba(255,255,255,.015);padding:10px 12px;min-width:0}
.board-focus{border-color:var(--green)}
.mover-board-head{display:flex;flex-direction:column;gap:2px;padding-bottom:8px;margin-bottom:6px;border-bottom:1px solid var(--line)}
.mover-board-head span{font-weight:700;font-size:14px}
.board-focus .mover-board-head span{color:var(--green)}
.mover-board-head small{color:var(--muted);font-size:11px}
.mover-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.mover-row{display:grid;grid-template-columns:1fr auto;grid-template-areas:"sym chg" "sub sub" "tags tags";align-items:center;gap:1px 8px;padding:7px 2px;border-bottom:1px dashed var(--line)}
.mover-row:last-child{border-bottom:0}
.mover-sym{grid-area:sym;font-weight:700;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mover-source{font-style:normal;font-size:9px;font-weight:600;padding:1px 5px;border-radius:3px;margin-right:5px;vertical-align:middle}
.mover-source-gate{background:rgba(24,144,255,.15);color:#1890ff;border:1px solid rgba(24,144,255,.3)}
.mover-source-gate-perp{background:rgba(250,140,22,.15);color:#fa8c16;border:1px solid rgba(250,140,22,.3)}
.oi-alert-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:12px 0}
.oi-alert-card{border:1px solid var(--line);padding:12px}
.oi-alert-card h3{font-size:13px;margin:0 0 8px;color:var(--muted)}
.oi-alert-main{border-left:3px solid #fa8c16}
.oi-alert-funding{border-left:3px solid #1890ff}
.mover-sym small{display:block;color:var(--muted);font-weight:400;font-size:11px;margin-top:1px}
.mover-chg{grid-area:chg;font:700 14px "Courier New",monospace;white-space:nowrap}
.mover-chg.positive{color:var(--green)}
.mover-chg.negative{color:var(--red)}
.mover-chg.mover-heat{color:var(--green);font-size:13px}
.mover-sub{grid-area:sub;color:var(--muted);font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mover-tags{grid-area:tags;display:flex;flex-wrap:wrap;gap:4px;margin-top:2px}
.mover-tag{font-style:normal;font-size:10px;padding:1px 6px;border:1px solid var(--line);color:var(--muted);white-space:nowrap}
.mover-tag.tag-hot{color:var(--green);border-color:var(--green)}
.mover-tag.tag-warn{color:var(--orange);border-color:var(--orange)}
.mover-empty{list-style:none;color:var(--muted);font-size:12px;padding:8px 2px}
#moversNote{color:var(--muted);font-size:11px;line-height:1.7;margin:12px 0 0;max-width:1200px}
@media(max-width:1200px){.movers-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:640px){.movers-grid{grid-template-columns:1fr}}
/* —— 触顶下跌 · 做空观察榜（红色系，与涨幅榜镜像）—— */
.short-grid{margin-top:22px}
.board-short-focus .mover-board-head span{color:var(--red)}
.mover-chg.short-heat{color:var(--red);font-size:13px}
.short-row{border-left:2px solid rgba(239,124,128,.35)}
.mover-tag.tag-short-hot{color:var(--red);border-color:var(--red)}
.mover-tag.short-tag{color:var(--red);border-color:rgba(239,124,128,.45)}
#shortNote{color:var(--muted);font-size:11px;line-height:1.7;margin:12px 0 0;max-width:1200px}
/* 折叠的 20% 前兆研究 */
.surge-collapsed{background:rgba(255,255,255,.015);border:1px solid var(--line);padding:10px 14px;margin-top:14px;max-width:1200px}
.surge-collapsed summary{cursor:pointer;display:flex;align-items:baseline;gap:10px;color:var(--text);font-weight:700;font-size:14px;user-select:none}
.surge-collapsed summary small{color:var(--muted);font-weight:400;font-size:12px}
.surge-collapsed .surge-body{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:12px}
.surge-collapsed .surge-metrics{display:flex;flex-wrap:wrap;gap:18px;margin-top:12px}
.surge-collapsed .surge-metrics div span{display:block;color:var(--muted);font-size:11px}
.surge-collapsed .surge-metrics strong{font:600 15px "Courier New",monospace;color:var(--text)}
.surge-collapsed .surge-label{display:block;color:var(--muted);font-size:11px;margin-bottom:6px}
.surge-collapsed .trait-list{display:flex;flex-wrap:wrap;gap:6px}
.surge-collapsed .trait-list span{font-size:11px;color:var(--text);border:1px solid var(--line);padding:2px 8px}
.surge-collapsed .surge-signals{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.surge-collapsed .surge-signals li{font-size:11px;color:var(--muted);border-bottom:1px solid var(--line);padding-bottom:6px}
.surge-collapsed .surge-signals li strong{color:var(--text)}
.surge-collapsed p{color:var(--muted);font-size:11px;line-height:1.7;margin:10px 0 0}
.accum-metrics strong{display:block;margin-top:6px;font:600 16px "Courier New",monospace;color:var(--text)}
.accum-metrics strong.dual{color:var(--green)}
.accum-metrics strong.squeeze{color:var(--orange)}
.accum-panel table{min-width:1500px}
.accum-plan-entry{display:inline-flex;flex-direction:column;gap:3px;color:var(--green);font-family:"Courier New",monospace;font-size:11px}.accum-plan-entry small{color:var(--muted);font-family:Arial,"Microsoft YaHei",sans-serif;font-size:10px}.accum-plan-entry.plan-no-chase{color:var(--orange)}
.accum-row td{font-size:13px}
.accum-phase,.accum-confirm{display:inline-block;padding:3px 9px;border:1px solid var(--line);font-size:11px;white-space:nowrap}
.phase-breaking{color:var(--green);border-color:var(--green)}
.phase-accumulation{color:var(--cyan);border-color:var(--cyan)}
.confirm-dual{color:#071512;background:var(--green);border-color:var(--green);font-weight:700}
.confirm-squeeze{color:var(--orange);border-color:var(--orange)}
.confirm-spot_only,.confirm-unavailable,.confirm-none{color:var(--muted)}
.confirm-reject{color:var(--red);border-color:var(--red)}
.accum-dual{box-shadow:inset 3px 0 0 var(--green)}
.accum-squeeze{box-shadow:inset 3px 0 0 var(--orange)}
.accum-reject{opacity:.72}
.accum-metrics strong.ignition{color:var(--green);font-weight:800}
.ign-badge{display:inline-block;padding:3px 8px;border:1px solid var(--line);font-size:11px;white-space:nowrap;color:var(--muted)}
.ign-badge.ign-on{color:#071512;background:var(--green);border-color:var(--green);font-weight:700}
.ign-badge.ign-ext{color:var(--orange);border-color:var(--orange)}
.accum-row.row-ignition{box-shadow:inset 3px 0 0 var(--green)}
.accum-row.row-ignition td{font-weight:600}
#accumNote{color:var(--muted);font-size:11px;line-height:1.7;margin:12px 0 0;max-width:1100px}
@media(max-width:900px){.scanner-summary{grid-template-columns:repeat(3,1fr)}.history-metrics,.surge-metrics{grid-template-columns:repeat(2,1fr)}.surge-body{grid-template-columns:1fr}.detail-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.alert-log{grid-template-columns:1fr}}
@media(max-width:640px){.scanner-shell{padding-top:20px}.scanner-header{display:block}.scanner-header nav{justify-content:flex-start;margin-top:18px}.scanner-summary{grid-template-columns:repeat(2,1fr)}.scanner-summary div:nth-child(odd){border-right:1px solid var(--line)}.scanner-summary div:nth-child(even){border-right:0}.scanner-controls>span{width:100%;margin-left:0}.table-heading{display:block}.table-heading small{display:block;margin-top:8px}.history-heading{display:block}.history-heading>strong{display:block;margin-top:8px}.history-metrics,.surge-metrics{grid-template-columns:1fr 1fr}.detail-heading{align-items:flex-start}.detail-actions{justify-content:flex-start}.validation-banner{display:block}.validation-banner span{display:block;margin-top:4px}.detail-grid,.detail-plan{grid-template-columns:1fr}.alert-log li{grid-template-columns:64px 1fr}.alert-log li span,.alert-log li small{grid-column:2}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
