
:root{
color-scheme: dark;
--bg:#04070d;
--bg-soft:#070d17;
--panel:#0a1220;
--panel-2:#0d1728;
--panel-3:#122036;
--line:#24405f;
--line-soft:#16283f;
--text:#f2f7ff;
--text-2:#bccbe0;
--text-3:#93a9c6;
--cyan:#33d6f5;
--cyan-deep:#0e7ea6;
--cyan-bg:rgba(51,214,245,.10);
--cyan-line:rgba(51,214,245,.45);
--green:#2fe6a7;
--green-bg:rgba(47,230,167,.12);
--green-line:rgba(47,230,167,.45);
--amber:#ffb02e;
--amber-bg:rgba(255,176,46,.12);
--amber-line:rgba(255,176,46,.55);
--red:#ff5d4d;
--mono:"JetBrains Mono",ui-monospace,"SF Mono","Cascadia Mono",Menlo,Consolas,monospace;
--disp:"Rajdhani","JetBrains Mono",ui-monospace,sans-serif;
--sans:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Noto Sans SC",sans-serif;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{
margin:0;color:var(--text);
background-color:var(--bg);
background-image:
radial-gradient(1150px 540px at 50% -170px,rgba(34,200,238,.13),rgba(34,200,238,0) 62%),
linear-gradient(rgba(96,186,242,.05) 1px,transparent 1px),
linear-gradient(90deg,rgba(96,186,242,.05) 1px,transparent 1px);
background-size:auto,46px 46px,46px 46px;
font-family:var(--sans);font-size:17px;line-height:1.7;
-webkit-font-smoothing:antialiased;
}
/* faint scanline texture over the whole command wall */
body::after{
content:"";position:fixed;inset:0;pointer-events:none;z-index:60;
background:repeating-linear-gradient(0deg,rgba(255,255,255,.016) 0 1px,transparent 1px 4px);
}
::selection{background:rgba(51,214,245,.4)}
a{color:var(--cyan);text-decoration:none}
.plain{color:var(--text-2);font-size:15px;line-height:1.65}
.plain b{color:var(--text);font-weight:600}
body.notes-off .plain-note{display:none}
.num{font-family:var(--mono);font-variant-numeric:tabular-nums;letter-spacing:-.01em}

.shell{max-width:1460px;margin:0 auto;padding:26px 30px 72px}

/* ---------- HUD corner brackets ---------- */
.hud{position:relative}
.hud::before,.hud::after{content:"";position:absolute;width:17px;height:17px;pointer-events:none;z-index:3}
.hud::before{top:9px;left:9px;border-top:2px solid var(--cyan);border-left:2px solid var(--cyan);opacity:.8}
.hud::after{bottom:9px;right:9px;border-bottom:2px solid var(--cyan);border-right:2px solid var(--cyan);opacity:.8}

/* ---------- top command strip ---------- */
.topbar{
display:flex;align-items:center;justify-content:space-between;gap:24px;
padding:24px 30px;flex-wrap:wrap;
background:
repeating-linear-gradient(0deg,rgba(255,255,255,.014) 0 1px,transparent 1px 4px),
linear-gradient(180deg,rgba(51,214,245,.07),rgba(51,214,245,.015) 55%,rgba(51,214,245,0)),
linear-gradient(180deg,var(--panel-2),var(--panel));
border:1px solid #28506f;border-radius:16px;
box-shadow:inset 0 1px 0 rgba(51,214,245,.35),0 0 34px rgba(34,200,238,.08),0 22px 44px rgba(0,0,0,.45);
}
.live{display:flex;gap:16px;align-items:flex-start;min-width:0}
.live-dot{
width:13px;height:13px;border-radius:50%;background:var(--green);
margin-top:11px;flex:none;
box-shadow:0 0 14px rgba(47,230,167,.9);
animation:pulse 2.4s ease-out infinite;
}
.topbar:not([data-readiness="READY"]) .live-dot{
background:var(--amber);box-shadow:0 0 14px rgba(255,190,75,.55);animation:none;
}
@keyframes pulse{
0%{box-shadow:0 0 0 0 rgba(47,230,167,.5),0 0 14px rgba(47,230,167,.9)}
70%{box-shadow:0 0 0 15px rgba(47,230,167,0),0 0 14px rgba(47,230,167,.9)}
100%{box-shadow:0 0 0 0 rgba(47,230,167,0),0 0 14px rgba(47,230,167,.9)}
}
.live strong{display:block;font-size:27px;font-weight:750;line-height:1.35;letter-spacing:.01em}
.live span{display:block;color:var(--text-2);font-size:15.5px;margin-top:3px}
.top-meta{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.meta-chip{
border:1px solid var(--cyan-line);background:rgba(7,17,29,.75);border-radius:9px;
padding:9px 14px;font-size:13.5px;color:var(--text-2);line-height:1.45;white-space:nowrap;
font-family:var(--mono);
}
.meta-chip b{color:var(--cyan);font-weight:700}
.toggle-btn{
appearance:none;border:1px solid var(--cyan-line);background:var(--panel-3);color:var(--text);
border-radius:9px;padding:10px 15px;font:inherit;font-size:14.5px;cursor:pointer;
display:inline-flex;align-items:center;gap:9px;
}
.toggle-btn:hover{border-color:var(--cyan);box-shadow:0 0 16px rgba(51,214,245,.25)}
.toggle-btn:focus-visible{outline:2px solid var(--cyan);outline-offset:2px}
.toggle-btn .sw{width:9px;height:9px;border-radius:50%;background:var(--green);flex:none;box-shadow:0 0 9px rgba(47,230,167,.9)}
body.notes-off .toggle-btn .sw{background:var(--text-3);box-shadow:none}

/* ---------- section scaffold ---------- */
section{margin-top:44px}
.sec-head{
display:flex;align-items:baseline;justify-content:space-between;gap:18px;
margin-bottom:18px;flex-wrap:wrap;position:relative;
border-bottom:1px solid var(--line);padding-bottom:13px;
}
.sec-head::after{
content:"";position:absolute;left:0;bottom:-1px;width:84px;height:2px;
background:var(--cyan);box-shadow:0 0 10px rgba(51,214,245,.8);
}
.sec-head h2{font-size:27px;font-weight:750;margin:0;letter-spacing:.02em}
.sec-head h2 .en{
font-family:var(--disp);font-size:13.5px;color:var(--cyan);font-weight:600;
letter-spacing:.24em;margin-left:12px;text-transform:uppercase;
}
.sec-head .hint{color:var(--text-3);font-size:14.5px;font-family:var(--mono)}
.panel{
background:
linear-gradient(180deg,rgba(51,214,245,.05),rgba(51,214,245,0) 42%),
linear-gradient(180deg,var(--panel-2),var(--panel));
border:1px solid var(--line);border-radius:14px;overflow:hidden;
box-shadow:0 20px 42px rgba(0,0,0,.42);
}

/* ---------- decision ---------- */
.no-decision{
padding:34px 36px 28px;display:flex;gap:26px;align-items:flex-start;
}
.nd-icon{
width:64px;height:64px;border-radius:14px;flex:none;
border:1px solid var(--cyan-line);background:var(--cyan-bg);
display:grid;place-items:center;color:var(--cyan);
box-shadow:0 0 20px rgba(51,214,245,.22),inset 0 0 14px rgba(51,214,245,.12);
}
.nd-icon svg{width:30px;height:30px}
.no-decision h3{margin:0;font-size:44px;font-weight:800;line-height:1.25;letter-spacing:.02em}
.no-decision p{margin:10px 0 0;color:var(--text-2);font-size:16.5px;max-width:68ch}
.nd-facts{
display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line-soft);
border-top:1px solid var(--line);
}
.nd-fact{background:rgba(7,13,23,.72);padding:18px 24px}
.nd-fact .k{font-size:13.5px;color:var(--cyan);letter-spacing:.14em;font-weight:600}
.nd-fact .v{font-size:20px;font-weight:700;margin-top:3px}
.badge{
display:inline-flex;align-items:center;gap:7px;border-radius:999px;
padding:5px 13px;font-size:13.5px;font-weight:700;line-height:1.5;white-space:nowrap;letter-spacing:.03em;
}
.badge-neutral{border:1px solid var(--line);color:var(--text-2);background:var(--bg-soft)}
.badge-green{border:1px solid var(--green-line);color:var(--green);background:var(--green-bg);box-shadow:0 0 14px rgba(47,230,167,.18)}
.badge-amber{border:1px solid var(--amber-line);color:var(--amber);background:var(--amber-bg)}













.dir{display:flex;align-items:center;gap:20px}
.dir-arrow{
width:66px;height:66px;border-radius:14px;background:var(--green-bg);
border:1px solid var(--green-line);display:grid;place-items:center;color:var(--green);flex:none;
box-shadow:0 0 22px rgba(47,230,167,.3),inset 0 0 14px rgba(47,230,167,.14);
}
.dir-arrow svg{width:32px;height:32px}
.dir-word{font-size:48px;font-weight:800;line-height:1.12;color:var(--green);letter-spacing:.03em}
.dir-word small{display:block;font-size:15px;font-weight:500;color:var(--text-2);margin-top:5px;letter-spacing:0}
.field-grid{
display:grid;grid-template-columns:repeat(2,1fr);gap:1px;background:var(--line-soft);
border:1px solid var(--line);border-radius:12px;overflow:hidden;margin-top:26px;
}
.field{background:var(--panel-2);padding:20px 22px 17px}
.field .fk{font-size:13.5px;color:var(--cyan);letter-spacing:.14em;font-weight:600;display:flex;align-items:center;gap:6px}
.field .fv{font-size:32px;font-weight:800;margin-top:6px;line-height:1.25}
.field .fv .unit{font-size:17px;font-weight:600;color:var(--text-2)}
.field .fn{font-size:14px;color:var(--text-2);line-height:1.6;margin-top:7px}
.reason{
margin-top:20px;border:1px solid var(--cyan-line);border-radius:12px;background:rgba(7,15,26,.8);
padding:20px 24px;box-shadow:inset 3px 0 0 var(--cyan);
}
.reason .rk{font-size:13.5px;color:var(--cyan);letter-spacing:.1em;font-weight:600;margin-bottom:6px}
.reason .rv{font-size:21px;font-weight:700;line-height:1.6}



/* ---------- window ---------- */
.win-top{padding:26px 32px 24px}
.win-line{display:flex;align-items:center;justify-content:space-between;gap:18px;flex-wrap:wrap}
.win-line .big{font-size:24px;font-weight:750}
.win-line .big .num{font-size:27px;color:var(--cyan);font-weight:800}
.progress{
height:13px;border-radius:99px;background:#050b14;border:1px solid var(--line);
margin-top:17px;overflow:hidden;
}
.progress i{
display:block;height:100%;width:2.5%;border-radius:99px;
background:
repeating-linear-gradient(90deg,transparent 0 24px,rgba(2,10,18,.55) 24px 27px),
linear-gradient(90deg,var(--cyan-deep),var(--cyan));
box-shadow:0 0 14px rgba(51,214,245,.65);
}
.win-note{margin-top:14px}
.strat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:16px}
.strat{
background:
linear-gradient(180deg,rgba(51,214,245,.05),rgba(51,214,245,0) 40%),
linear-gradient(180deg,var(--panel-2),var(--panel));
border:1px solid var(--line);border-top:3px solid var(--cyan-deep);border-radius:14px;
padding:24px 26px 20px;display:flex;flex-direction:column;
box-shadow:0 20px 42px rgba(0,0,0,.42);
}
.strat h3{margin:0;font-size:21px;font-weight:750;line-height:1.4}
.strat h3 .tag{
font-family:var(--disp);font-size:12.5px;color:var(--cyan);letter-spacing:.22em;
display:block;font-weight:600;margin-bottom:5px;text-transform:uppercase;
}
.strat .desc{color:var(--text-2);font-size:14.5px;margin-top:9px;flex:1;line-height:1.65}
.stat-rows{margin-top:16px;border-top:1px solid var(--line-soft)}
.stat-row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;padding:10px 0;border-bottom:1px solid var(--line-soft)}
.stat-row:last-child{border-bottom:0}
.stat-row .k{font-size:15px;color:var(--text-2)}
.stat-row .v{font-size:17px;font-weight:700;text-align:right}
.stat-row .v small{display:block;font-size:13px;color:var(--text-3);font-weight:400;margin-top:1px}
.ok{color:var(--green);text-shadow:0 0 12px rgba(47,230,167,.45)}
.gates{
margin-top:16px;padding:22px 26px;display:flex;gap:16px;align-items:flex-start;
}
.gates svg{flex:none;margin-top:3px;color:var(--cyan);width:22px;height:22px}
.gates p{margin:0;color:var(--text-2);font-size:15.5px}
.gates p b{color:var(--text)}
.gate-chips{display:flex;gap:10px;flex-wrap:wrap;margin-top:13px}
.gate-chip{
border:1px solid var(--line);background:rgba(7,15,26,.8);border-radius:9px;
padding:8px 13px;font-size:14px;color:var(--text-2);
}
.gate-chip b{color:var(--cyan);font-family:var(--mono);font-weight:700}

/* ---------- two column ---------- */
.two-col{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.two-col section{margin-top:0}
.kv-panel{padding:10px 26px}
.kv{display:flex;justify-content:space-between;gap:20px;padding:15px 0;border-bottom:1px solid var(--line-soft);align-items:flex-start}
.kv:last-child{border-bottom:0}
.kv .k{font-size:15.5px;color:var(--text-2);flex:none;padding-top:2px}
.kv .v{text-align:right;font-size:17px;font-weight:700}
.kv .v small{display:block;font-weight:400;color:var(--text-3);font-size:13.5px;margin-top:3px;line-height:1.6}
.status-row{display:flex;gap:14px;padding:15px 0;border-bottom:1px solid var(--line-soft);align-items:flex-start}
.status-row:last-child{border-bottom:0}
.s-dot{width:11px;height:11px;border-radius:50%;background:var(--green);flex:none;margin-top:8px;box-shadow:0 0 11px rgba(47,230,167,.95)}
.status-row .t{font-size:17px;font-weight:700;line-height:1.5}
.status-row .d{font-size:14.5px;color:var(--text-2);line-height:1.65;margin-top:2px}

/* ---------- push log ---------- */
.log-panel{padding:8px 26px}
.log-row{display:flex;gap:20px;padding:16px 0;border-bottom:1px solid var(--line-soft);align-items:flex-start}
.log-row:last-child{border-bottom:0}
.log-time{font-family:var(--mono);font-size:14.5px;color:var(--cyan);flex:none;width:138px;padding-top:2px;font-weight:600}
.log-main{flex:1;min-width:0}
.log-main .t{font-size:17px;font-weight:700}
.log-main .d{font-size:14.5px;color:var(--text-2);margin-top:2px;line-height:1.65}
.log-rule{margin-top:14px}

/* ---------- health heatmap ---------- */
.heat-panel{padding:26px 30px 24px}
.heat-legend{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:20px}
.heat-key{
display:inline-flex;align-items:center;gap:8px;border:1px solid var(--line);
background:rgba(7,15,26,.8);border-radius:9px;padding:7px 12px;
font-size:14px;color:var(--text-2);
}
.heat-key i{width:14px;height:14px;border-radius:4px;flex:none}
.hk-ok{background:var(--green);box-shadow:0 0 9px rgba(47,230,167,.7)}
.hk-warn{background:var(--amber);box-shadow:0 0 9px rgba(255,176,46,.7)}
.hk-bad{background:var(--red);box-shadow:0 0 9px rgba(255,93,77,.7)}
.hk-none{background:#3d4c61}
.heat-grid{display:grid;grid-template-columns:196px repeat(14,1fr);gap:5px;align-items:stretch}
.heat-day{
font-family:var(--mono);font-size:12.5px;color:var(--text-3);text-align:center;
align-self:end;padding-bottom:4px;line-height:1.3;
}
.heat-day.real{color:var(--cyan);font-weight:700}
.heat-day .hm{display:block;font-size:9.5px;min-height:13px;color:var(--text-3);font-family:var(--sans)}
.heat-corner{font-size:12.5px;color:var(--text-3);align-self:end;padding-bottom:4px}
.heat-name{
display:flex;flex-direction:column;justify-content:center;padding:5px 10px 5px 2px;min-width:0;
}
.heat-name .hn{font-size:16.5px;font-weight:700;line-height:1.35}
.heat-name .hd{font-size:12.5px;color:var(--text-3);line-height:1.45;margin-top:1px}
body.notes-off .heat-name .hd{display:none}
.heat-cell{
appearance:none;border:1px solid rgba(255,255,255,.07);border-radius:7px;
height:46px;padding:0;cursor:pointer;width:100%;
transition:transform .12s ease,box-shadow .12s ease;
}
.heat-cell:hover{transform:scale(1.1);box-shadow:0 0 14px rgba(51,214,245,.35);position:relative;z-index:2}
.heat-cell:focus-visible{outline:2px solid var(--cyan);outline-offset:2px}
.heat-cell.sel{outline:2px solid var(--cyan);outline-offset:1px}
.hc-ok{background:linear-gradient(180deg,#2fe6a7,#1cb584);box-shadow:inset 0 0 10px rgba(255,255,255,.12),0 0 8px rgba(47,230,167,.28)}
.hc-warn{background:linear-gradient(180deg,#ffb02e,#d98a12);box-shadow:inset 0 0 10px rgba(255,255,255,.14),0 0 10px rgba(255,176,46,.4)}
.hc-bad{background:linear-gradient(180deg,#ff5d4d,#d63a2e);box-shadow:0 0 10px rgba(255,93,77,.45)}
.hc-none{background:#232f42;box-shadow:inset 0 0 0 1px rgba(147,169,198,.14)}
.heat-detail{
margin-top:20px;border:1px solid var(--cyan-line);border-radius:12px;
background:rgba(7,15,26,.85);padding:16px 20px;box-shadow:inset 3px 0 0 var(--cyan);
display:flex;gap:14px;align-items:flex-start;
}
.heat-detail i{width:16px;height:16px;border-radius:5px;flex:none;margin-top:6px}
.heat-detail .dt{font-size:16.5px;font-weight:700;line-height:1.55}
.heat-detail .dt span{color:var(--text-3);font-weight:400;font-size:14px;display:block}
.heat-note{margin:16px 2px 0;color:var(--text-2);font-size:15px;line-height:1.65}
.heat-note b{color:var(--amber)}
@media (max-width:640px){
.heat-panel{padding:20px 14px}
.heat-grid{grid-template-columns:104px repeat(14,1fr);gap:3px}
.heat-name .hn{font-size:13.5px}
.heat-name .hd{font-size:10.5px;line-height:1.35}
.heat-cell{height:34px;border-radius:5px}
.heat-day{font-size:10px}
.heat-detail .dt{font-size:15px}
}

/* ---------- glossary ---------- */
.gloss{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line-soft);border:1px solid var(--line);border-radius:14px;overflow:hidden;box-shadow:0 20px 42px rgba(0,0,0,.42)}
.g-item{background:var(--panel);padding:19px 21px}
.g-item .term{font-size:17.5px;font-weight:750;color:var(--cyan)}
.g-item .def{font-size:14px;color:var(--text-2);margin-top:5px;line-height:1.65}

footer{
margin-top:44px;border-top:1px solid var(--line);padding-top:18px;
color:var(--text-3);font-size:13.5px;line-height:1.7;
display:flex;justify-content:space-between;gap:22px;flex-wrap:wrap;
}

@media (min-width:1700px){
body{font-size:18px}
.shell{max-width:1560px}
}
@media (max-width:1024px){
.strat-grid{grid-template-columns:1fr}
.two-col{grid-template-columns:1fr}
.gloss{grid-template-columns:1fr 1fr}
.nd-facts{grid-template-columns:1fr}
.nd-fact{border-bottom:1px solid var(--line-soft)}
.nd-fact:last-child{border-bottom:0}
.no-decision h3{font-size:36px}
}
@media (max-width:640px){
.shell{padding:16px 14px 48px}
.topbar{padding:20px 18px}
.live strong{font-size:22px}
.sec-head h2{font-size:23px}
.no-decision{flex-direction:column;padding:24px 20px}
.no-decision h3{font-size:32px}


.dir-word{font-size:38px}
.field-grid{grid-template-columns:1fr}
.field .fv{font-size:27px}
.win-top{padding:22px 20px}
.log-row{flex-direction:column;gap:4px}
.log-time{width:auto}
.gloss{grid-template-columns:1fr}
.kv-panel,.log-panel{padding-left:18px;padding-right:18px}
.kv{flex-direction:column;gap:4px}
.kv .v{text-align:left}
}
@media (prefers-reduced-motion:reduce){
html{scroll-behavior:auto}
.live-dot{animation:none}
}

/* ---------- 基本面（新增） ---------- */
.fund-lead{display:flex;gap:11px;align-items:flex-start;color:var(--text-2);font-size:15px;line-height:1.65;padding:22px 28px 0}
.fund-lead strong{flex:none;white-space:nowrap}
.fund-lead svg{flex:none;margin-top:4px;color:var(--cyan);width:19px;height:19px}
.fund-block{padding:24px 28px 22px;border-bottom:1px solid var(--line-soft)}
.fund-block:last-child{border-bottom:0}
.fund-block h3{margin:0 0 6px;font-size:20px;font-weight:750}
.fund-block h3 .en{font-family:var(--disp);font-size:12px;color:var(--cyan);letter-spacing:.2em;margin-left:10px;text-transform:uppercase}
.fund-block .sub{color:var(--text-2);font-size:14.5px;margin:0 0 16px;line-height:1.65}
.fund-table-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:12px}
table.fund-table{width:100%;border-collapse:collapse;font-size:15px;min-width:780px}
.fund-table th,.fund-table td{padding:11px 14px;text-align:left;border-bottom:1px solid var(--line-soft);vertical-align:top;line-height:1.55}
.fund-table thead th{background:rgba(7,15,26,.85);color:var(--cyan);font-size:13px;letter-spacing:.1em;font-weight:700;white-space:nowrap}
.fund-table tbody tr:last-child th,.fund-table tbody tr:last-child td{border-bottom:0}
.fund-table tbody tr:hover{background:rgba(51,214,245,.04)}
.fund-table .ev{font-weight:700;white-space:nowrap}
/* Verified-schedule type cell: Chinese name + code + badges stay
   on one line; narrow screens scroll the table instead of
   wrapping the cell. */
.fund-table td.ev-type{white-space:nowrap}
.fund-table .num{font-size:14.5px}
.fund-table .src{display:block;color:var(--text-3);font-size:13px;margin-top:3px;line-height:1.5}
.fund-legend{margin:14px 2px 0;color:var(--text-2);font-size:14.5px;line-height:1.65}
.fund-legend b{color:var(--text)}
.fund-chips{display:flex;gap:10px;flex-wrap:wrap}
.fund-chip{border:1px solid var(--line);background:rgba(7,15,26,.8);border-radius:9px;padding:9px 13px;font-size:14px;color:var(--text-2);line-height:1.5}
.fund-chip b{color:var(--cyan);font-weight:700}
.fund-chip small{display:block;color:var(--text-3);font-size:12.5px;margin-top:2px}
.fund-news-row{display:flex;gap:16px;padding:15px 0;border-bottom:1px solid var(--line-soft);align-items:flex-start}
.fund-news-row:last-child{border-bottom:0}
.fund-news-tag{flex:none;font-family:var(--mono);font-size:12.5px;font-weight:700;color:var(--amber);border:1px solid var(--amber-line);background:var(--amber-bg);border-radius:7px;padding:4px 9px;margin-top:2px;white-space:nowrap}
.fund-news-main{flex:1;min-width:0}
.fund-news-main .t{font-size:16.5px;font-weight:700;line-height:1.55}
.fund-news-main .d{font-size:14px;color:var(--text-2);margin-top:3px;line-height:1.6}
.fund-btn-row{display:flex;gap:12px;flex-wrap:wrap;margin:0 0 18px}
.fund-btn{display:inline-flex;align-items:center;gap:9px;border:1px solid var(--cyan-line);background:var(--panel-3);color:var(--text);border-radius:10px;padding:12px 18px;font-size:15.5px;font-weight:700}
.fund-btn:hover{border-color:var(--cyan);box-shadow:0 0 16px rgba(51,214,245,.25)}
.fund-btn small{font-weight:400;color:var(--text-2);font-size:13.5px}
.fund-steps{margin:0 0 18px;padding-left:22px;color:var(--text-2);font-size:15px;line-height:1.8}
.fund-steps li{margin-bottom:6px}
.fund-steps b{color:var(--text)}
.fund-upload{border:1.5px dashed var(--cyan-line);border-radius:12px;background:rgba(51,214,245,.04);padding:20px 22px;text-align:center;color:var(--text-2);font-size:15px;line-height:1.65;margin-bottom:20px}
.fund-upload b{color:var(--cyan)}
.fund-form{display:grid;grid-template-columns:1fr 1fr;gap:14px 16px}
.fund-field{display:flex;flex-direction:column;gap:6px}
.fund-field.full{grid-column:1 / -1}
.fund-field label{font-size:13.5px;color:var(--cyan);letter-spacing:.1em;font-weight:700}
.fund-field input:not([type="checkbox"]):not([type="radio"]),.fund-field select,.fund-field textarea{appearance:none;background:#050b14;border:1px solid var(--line);border-radius:9px;color:var(--text);font:inherit;font-size:15.5px;padding:11px 13px;width:100%}
.fund-field input[type="checkbox"]{accent-color:var(--cyan);cursor:pointer}
.fund-field input:focus,.fund-field select:focus,.fund-field textarea:focus{outline:2px solid var(--cyan);outline-offset:1px;border-color:var(--cyan)}
.fund-field input[readonly]{color:var(--text-2);background:rgba(7,15,26,.8)}
.fund-field textarea{min-height:74px;resize:vertical}
.fund-field .hint{font-size:13px;color:var(--text-3);line-height:1.55}
.fund-submit{grid-column:1 / -1;display:flex;gap:14px;align-items:center;flex-wrap:wrap;margin-top:2px}
.fund-submit-btn{appearance:none;border:1px solid var(--cyan-line);background:var(--cyan-bg);color:var(--cyan);border-radius:10px;padding:12px 20px;font:inherit;font-size:15.5px;font-weight:700;cursor:pointer}
.fund-submit-btn:hover{box-shadow:0 0 16px rgba(51,214,245,.25)}
.fund-mock{color:var(--amber);font-size:14px}
.fund-task{display:flex;gap:14px;align-items:flex-start;padding:14px 0;border-bottom:1px solid var(--line-soft)}
.fund-task:last-child{border-bottom:0}
.fund-task .t{font-size:16px;font-weight:700;line-height:1.55}
.fund-task .d{font-size:14px;color:var(--text-2);margin-top:2px;line-height:1.6}
@media (max-width:640px){
.fund-block{padding:20px 18px}
.fund-form{grid-template-columns:1fr}
.fund-table{font-size:14px}
}

/* ---------- terminal (live) additions ---------- */
.loading{color:var(--text-3);font-family:var(--mono);font-size:14px}
.error-box{
border:1px solid var(--red);background:rgba(255,93,77,.08);border-radius:10px;
padding:12px 16px;color:#ffd7d2;font-size:15px;margin:10px 0;
}
.ok-box{
border:1px solid var(--green-line);background:var(--green-bg);border-radius:10px;
padding:12px 16px;color:#c9f7e5;font-size:15px;margin:10px 0;
}
.warn-box{
border:1px solid var(--amber-line);background:var(--amber-bg);border-radius:10px;
padding:12px 16px;color:#ffe1a8;font-size:15px;margin:10px 0;
}
.btn{
appearance:none;border:1px solid var(--cyan-line);background:var(--panel-3);color:var(--text);
border-radius:9px;padding:10px 18px;font:inherit;font-size:15px;cursor:pointer;
display:inline-flex;align-items:center;gap:8px;
}
.btn:hover{border-color:var(--cyan);box-shadow:0 0 16px rgba(51,214,245,.25)}
.btn:disabled{opacity:.45;cursor:not-allowed;box-shadow:none}
.btn-primary{background:var(--cyan-deep);border-color:var(--cyan);color:#fff;font-weight:700}
.btn-danger{border-color:rgba(255,93,77,.6);color:#ffd7d2}
.btn-sm{padding:7px 12px;font-size:13.5px}
input[type="text"],input[type="date"],input[type="time"],textarea,select{
background:#060d18;border:1px solid var(--line);border-radius:9px;color:var(--text);
font:inherit;font-size:15px;padding:9px 12px;width:100%;
}
input:focus,textarea:focus,select:focus{outline:2px solid var(--cyan);outline-offset:1px;border-color:var(--cyan)}
input[readonly]{background:#0a1526;color:var(--text-2)}
.field-low{border-color:var(--amber) !important;box-shadow:0 0 0 1px var(--amber)}
.field-low-note{color:var(--amber);font-size:13px;margin-top:4px}
.task-row{display:flex;gap:14px;align-items:flex-start;padding:14px 18px;border-bottom:1px solid var(--line-soft)}
.task-row:last-child{border-bottom:none}
.task-kind{font-family:var(--mono);font-size:12.5px;color:var(--cyan);border:1px solid var(--cyan-line);border-radius:6px;padding:3px 8px;white-space:nowrap;flex:none;margin-top:2px;line-height:1.5;min-width:108px;text-align:center}
.task-body{flex:1;min-width:0}
.task-body .task-title{font-size:16px;font-weight:650}
.task-body .task-meta{color:var(--text-3);font-size:13.5px;font-family:var(--mono);margin-top:3px}
/* One line per event inside a multi-event (monthly) task, each
   with its own 已核对 / 待核对 mark. */
.task-ev{margin-top:6px;font-size:14.5px;color:var(--text-2)}
/* Data-interpretation lines (Fundamentals "最新数据解读"): one
   actual/expected/previous line per metric, then the bullish /
   bearish read, the NQ/ES impact, and the market reaction. */
.interp-data{margin-top:6px;font-size:14.5px;color:var(--text-2);line-height:1.7}
.interp-data b{color:var(--text)}
.interp-line{margin-top:6px;font-size:14.5px;color:var(--text-2);line-height:1.7}
.interp-line b{color:var(--text)}
.interp-line b.interp-bull{color:var(--green)}
.interp-line b.interp-bear{color:var(--amber)}
.news-row{display:flex;gap:14px;align-items:flex-start;padding:13px 18px;border-bottom:1px solid var(--line-soft)}
.news-row:last-child{border-bottom:none}
.news-tag{font-size:12px;font-family:var(--mono);border-radius:6px;padding:3px 8px;white-space:nowrap;flex:none;margin-top:2px;line-height:1.5}
.news-tag-important{background:var(--amber-bg);border:1px solid var(--amber-line);color:var(--amber)}
.news-tag-normal{background:rgba(147,169,198,.12);border:1px solid var(--line);color:var(--text-3)}
/* ---- important highlighting (fundamentals card) ---- */
/* Amber badge + light tint + left accent. The badge names the reason
   (今日 / 重要); the tint+accent is reserved for rows that must jump
   out, so it is not applied to every row of a table that is
   high-impact by definition (see the gated-table note in app.js). */
.imp-badge{display:inline-block;font-size:11.5px;font-weight:700;color:var(--amber);background:var(--amber-bg);border:1px solid var(--amber-line);border-radius:6px;padding:2px 7px;white-space:nowrap;line-height:1.5;vertical-align:middle}
.task-row.imp,.news-row.imp{background:rgba(255,176,46,.07);box-shadow:inset 3px 0 0 var(--amber)}
.fund-table tbody tr.imp td{background:rgba(255,176,46,.07)}
.fund-table tbody tr.imp td:first-child{box-shadow:inset 3px 0 0 var(--amber)}
.news-body{flex:1;min-width:0}
.news-body a{color:var(--text);font-weight:600}
.news-body a:hover{color:var(--cyan)}
.news-meta{color:var(--text-3);font-size:13px;font-family:var(--mono);margin-top:2px}
.upload-drop{
border:1.5px dashed var(--line);border-radius:12px;padding:22px;text-align:center;
color:var(--text-2);cursor:pointer;background:#060d18;
}
.upload-drop:hover,.upload-drop.drag{border-color:var(--cyan);background:var(--cyan-bg)}
.upload-drop input{display:none}
.ocr-side{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:14px}
@media (max-width:900px){.ocr-side{grid-template-columns:1fr}}
.ocr-side img{max-width:100%;border:1px solid var(--line);border-radius:10px;display:block}
.ocr-row{border:1px solid var(--line-soft);border-radius:9px;padding:10px 12px;margin-bottom:8px;cursor:pointer}
.ocr-row:hover{border-color:var(--cyan)}
.ocr-row.sel{border-color:var(--cyan);background:var(--cyan-bg)}
.ocr-conf{font-family:var(--mono);font-size:12.5px}
.ocr-conf-high{color:var(--green)}
.ocr-conf-medium{color:var(--amber)}
.ocr-conf-low{color:var(--red)}
.kv-row{display:flex;justify-content:space-between;gap:14px;padding:9px 0;border-bottom:1px solid var(--line-soft);font-size:15px}
.kv-row:last-child{border-bottom:none}
.kv-row .k{color:var(--text-3)}
.kv-row .v{font-family:var(--mono);text-align:right}
.decision-fields{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-top:14px}
@media (max-width:900px){.decision-fields{grid-template-columns:repeat(2,1fr)}}
.decision-field{border:1px solid var(--line-soft);border-radius:10px;padding:12px 14px;background:#060d18}
.decision-field .lbl{color:var(--text-3);font-size:13px}
.decision-field .val{font-size:22px;font-weight:750;font-family:var(--mono);margin-top:4px}
.decision-field .val-long{font-size:15px;font-family:var(--sans);font-weight:600;line-height:1.5}

/* 登录页：居中卡片（与终端同一套暗色 HUD 风格）。 */
.login-shell {
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 40px 16px;
}
.login-card {
  width: 100%;
  max-width: 420px;
  padding: 32px 32px 28px;
}
.login-brand {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  margin-bottom: 20px;
}
.login-brand strong { display:block; font-size: 28px; letter-spacing: 2px; line-height:1.25; }
/* Login button label sits in the middle of the full-width button. */
#lgSubmit{justify-content:center}
.login-brand span {
  display: block;
  margin-top: 4px;
  font-size: 12px;
  color: var(--text-3);
  letter-spacing: 1px;
}

/* ---------- 响应式：平板与手机 ---------- */
/* 平板（≤1024px）与手机共用：输入框字号不小于 16px（防 iOS 自动
   放大）、表格收窄、表格横向滚动带 iOS 惯性滚动。桌面端基线不动。 */
@media (max-width:1024px){
.fund-field input:not([type="checkbox"]):not([type="radio"]),.fund-field select,.fund-field textarea{font-size:16px}
input[type="text"],input[type="date"],input[type="time"],textarea,select{font-size:16px}
table.fund-table{min-width:660px}
.fund-table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
}
/* 手机（≤640px）：点按目标不小于 44px、表格再收窄、基本面
   lead 不再双重缩进、卡片内边距收紧。 */
@media (max-width:640px){
.btn{min-height:44px}
.btn-sm{min-height:44px;padding:11px 14px;font-size:14px}
.toggle-btn{min-height:44px}
.fund-btn{min-height:44px}
.fund-submit-btn{min-height:44px}
table.fund-table{min-width:600px}
.fund-table th,.fund-table td{padding:10px 12px}
.fund-lead{flex-direction:column;gap:4px;padding:0}
.topbar .live-dot{margin-top:8px}
.strat{padding:20px 18px}
.gates{padding:18px}
.login-shell{padding:24px 16px}
/* 财报表在手机上改堆叠卡片：不用横向滚动，行紧凑，公司+状态一行，日期两行，按钮满宽可达。 */
.fund-table-wrap.earnings-table-wrap{border:0;overflow:visible}
table.fund-table.earnings-table{min-width:0;display:block}
.fund-table.earnings-table thead{display:none}
.fund-table.earnings-table tbody{display:block}
.fund-table.earnings-table tr{display:flex;flex-wrap:wrap;align-items:flex-start;border:1px solid var(--line);border-radius:12px;padding:12px 14px;margin-bottom:10px;background:rgba(7,15,26,.55)}
.fund-table.earnings-table tr:last-child{margin-bottom:0}
.fund-table.earnings-table td{display:block;padding:0;border-bottom:0;line-height:1.5}
.fund-table.earnings-table td.earn-company{flex:0 0 auto;order:1;align-self:center;font-weight:700;font-size:16px;white-space:nowrap}
.fund-table.earnings-table td.earn-status{flex:0 0 auto;order:2;display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:center;align-self:center;margin-left:8px}
.fund-table.earnings-table td.earn-status .plain{flex:1 1 100%;text-align:left;margin-top:6px}
.fund-table.earnings-table td.earn-date{flex:1 1 100%;order:3;margin-top:6px}
.fund-table.earnings-table td.earn-date::before{content:attr(data-label);display:inline-block;min-width:64px;color:var(--text-3);font-size:13px;margin-right:8px}
.fund-table.earnings-table td.earn-action{flex:1 1 100%;order:4;margin-top:10px}
.fund-table.earnings-table td.earn-action .btn{width:100%}
/* Important earnings card: uniform tint on the card itself (the
   cells are display:block, so per-cell tint would be patchy). */
.fund-table.earnings-table tbody tr.imp{background:rgba(255,176,46,.07)}
.fund-table.earnings-table tbody tr.imp td{background:transparent}
}
/* 小手机（≤480px）：决策字段单列、顶部条再收紧。 */
@media (max-width:480px){
.decision-fields{grid-template-columns:1fr}
.topbar{padding:18px 16px}
}

/* ---------------- 技术面 (K 线图) ---------------- */
/* Chart colors (match the user's TradingView screenshot, corrected
   2026-11-07: UP = magenta, DOWN = bright green; black background):
   up #FF00FF, down #00FF00, wicks same as body. VWAP heat colors:
   VWAP #2962FF, ±1σ #FFD60A, ±2σ #FF9500, ±3σ #FF3B30. */
.tech-controls{display:flex;flex-direction:column;gap:10px;margin-bottom:14px}
.tech-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.tech-label{color:var(--text-3);font-size:14px;min-width:36px}
.tech-btn{appearance:none;border:1px solid var(--line);background:var(--panel-2);color:var(--text-2);border-radius:8px;padding:7px 13px;font:inherit;font-size:14.5px;font-weight:700;cursor:pointer;min-height:38px}
.tech-btn:hover{border-color:var(--cyan);color:var(--text)}
.tech-btn.tech-active{border-color:var(--cyan);background:var(--cyan-bg);color:var(--cyan)}
.tech-btn:focus-visible{outline:2px solid var(--cyan);outline-offset:2px}
.tech-vol{display:inline-flex;flex-wrap:wrap;align-items:center;gap:8px}
.tech-vol label{color:var(--text-3);font-size:14px}
.tech-vol input[type="number"]{width:110px;background:var(--panel-3);border:1px solid var(--line);border-radius:8px;color:var(--text);font:inherit;font-size:14.5px;padding:7px 10px;min-height:38px}
.tech-vol input[type="number"]:focus{outline:2px solid var(--cyan);outline-offset:1px}
.tech-check{display:inline-flex;align-items:center;gap:7px;color:var(--text-2);font-size:14.5px;cursor:pointer}
.tech-check input{width:18px;height:18px;accent-color:var(--cyan);cursor:pointer}
.tech-inds{display:inline-flex;flex-wrap:wrap;gap:12px}
.tech-chart{position:relative;width:100%;height:440px;background:#000;border:1px solid var(--line-soft);border-radius:10px;overflow:hidden}
.tech-chart-error{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;text-align:center;padding:20px;color:#ffb0a0;background:rgba(0,0,0,.72);font-size:15px;line-height:1.7;z-index:2}
.tech-note{color:var(--text-3);font-size:13.5px}
@media (max-width:640px){.tech-chart{height:360px}.tech-btn{flex:1 1 auto;min-height:44px;padding:9px 8px;text-align:center}.tech-label{min-width:0}}

/* ---------------- 技术面划线工具栏 ---------------- */
.tech-toolbar{border-top:1px solid var(--line-soft);padding-top:10px}
.tech-tool.tech-active{border-color:var(--amber);background:var(--amber-bg);color:var(--amber)}
.tech-tool:focus-visible{outline:2px solid var(--amber);outline-offset:2px}
@media (max-width:640px){.tech-toolbar .tech-btn{min-height:44px;padding:9px 10px}}
