Reorganize intraday signal cards for clearer trade guidance

This commit is contained in:
2569718930@qq.com
2026-03-24 01:49:00 +08:00
parent 58a09fe6fe
commit 5796d380c5
5 changed files with 306 additions and 133 deletions
@@ -2056,6 +2056,27 @@
letter-spacing: 0.02em;
}
.root :global(.future-v2-stack) {
margin-top: 14px;
display: grid;
gap: 12px;
}
.root :global(.future-v2-subpanel) {
border: 1px solid var(--border-subtle);
border-radius: 12px;
background: rgba(255, 255, 255, 0.025);
padding: 12px;
}
.root :global(.future-v2-subpanel-title) {
margin: 0;
color: var(--text-primary);
font-size: 12px;
font-weight: 700;
letter-spacing: 0.02em;
}
.root :global(.future-v2-market-v3) {
margin-top: 16px;
display: flex;
@@ -2308,6 +2329,13 @@
line-height: 1.45;
}
.root :global(.future-subsection-title) {
color: var(--text-primary);
font-size: 0.95rem;
font-weight: 700;
margin-top: 18px;
}
.root :global(.future-trend-value.warm) {
color: #34d399;
}
@@ -2444,6 +2472,10 @@
padding: 10px;
}
.root :global(.future-v2-subpanel) {
padding: 10px;
}
.root :global(.future-trend-value) {
font-size: 16px;
}
@@ -2454,6 +2486,11 @@
line-height: 1.6;
}
.root :global(.future-subsection-title) {
font-size: 0.9rem;
margin-top: 14px;
}
.root :global(.future-front-meta) {
gap: 8px;
}
@@ -828,6 +828,76 @@ export function FutureForecastModal() {
<strong>{marketSignal}</strong>
</div>
</section>
<section className="future-v2-card">
<h4 className="future-v2-card-title">
{locale === "en-US"
? "City Risk Profile & Airport Narrative"
: "城市风险档案与机场报文解读"}
</h4>
<div className="future-v2-stack">
<div className="future-v2-subpanel">
<h5 className="future-v2-subpanel-title">
{locale === "en-US" ? "City Risk Profile" : "城市风险档案"}
</h5>
<div className="risk-info" style={{ marginTop: "10px" }}>
{!risk.airport ? (
<span style={{ color: "var(--text-muted)" }}>
{t("section.noRiskProfile")}
</span>
) : (
<>
<div className="risk-row">
<span className="risk-label">
{settlementProfileLabel}
</span>
<span>{settlementProfileValue}</span>
</div>
<div className="risk-row">
<span className="risk-label">
{t("section.distance")}
</span>
<span>{risk.distance_km ?? "--"}km</span>
</div>
{risk.warning ? (
<div className="risk-row">
<span className="risk-label">
{t("section.note")}
</span>
<span>{risk.warning}</span>
</div>
) : null}
</>
)}
</div>
</div>
<div className="future-v2-subpanel">
<h5 className="future-v2-subpanel-title">
{locale === "en-US" ? "Airport Narrative" : "机场报文解读"}
</h5>
<div className="ai-box" style={{ marginTop: "10px" }}>
{!ai.summary && ai.bullets.length === 0 ? (
<span className="ai-placeholder">
{t("future.noAi")}
</span>
) : (
<>
{ai.summary ? (
<div className="ai-summary">{ai.summary}</div>
) : null}
{ai.bullets.length > 0 ? (
<ul className="ai-list">
{ai.bullets.map((item) => (
<li key={item}>{item}</li>
))}
</ul>
) : null}
</>
)}
</div>
</div>
</div>
</section>
</aside>
<main className="future-v2-right">
@@ -915,6 +985,9 @@ export function FutureForecastModal() {
</div>
) : null}
</div>
<div className="future-subsection-title">
{locale === "en-US" ? "Surface Structure" : "近地面信号"}
</div>
<div className="future-trend-grid">
{view.front.metrics.slice(0, 6).map((metric) => (
<div key={metric.label} className="future-trend-card">
@@ -935,14 +1008,7 @@ export function FutureForecastModal() {
{view.front.upperAirSummary ||
(view.front.upperAirMetrics?.length || 0) > 0 ? (
<>
<div
style={{
color: "var(--text-primary)",
fontSize: "0.95rem",
fontWeight: 700,
marginTop: "18px",
}}
>
<div className="future-subsection-title">
{locale === "en-US" ? "Upper-Air Structure" : "高空结构信号"}
</div>
{view.front.upperAirSummary ? (
@@ -970,74 +1036,6 @@ export function FutureForecastModal() {
</>
) : null}
</section>
<section className="future-modal-section">
<h3>
{locale === "en-US"
? "City Risk Profile & Airport Narrative"
: "城市风险档案与机场报文解读"}
</h3>
<div className="future-modal-grid">
<div>
<h4 className="future-v2-card-title">
{locale === "en-US" ? "City Risk Profile" : "城市风险档案"}
</h4>
<div className="risk-info" style={{ marginTop: "10px" }}>
{!risk.airport ? (
<span style={{ color: "var(--text-muted)" }}>
{t("section.noRiskProfile")}
</span>
) : (
<>
<div className="risk-row">
<span className="risk-label">
{settlementProfileLabel}
</span>
<span>{settlementProfileValue}</span>
</div>
<div className="risk-row">
<span className="risk-label">
{t("section.distance")}
</span>
<span>{risk.distance_km ?? "--"}km</span>
</div>
{risk.warning ? (
<div className="risk-row">
<span className="risk-label">
{t("section.note")}
</span>
<span>{risk.warning}</span>
</div>
) : null}
</>
)}
</div>
</div>
<div>
<h4 className="future-v2-card-title">{t("future.ai")}</h4>
<div className="ai-box" style={{ marginTop: "10px" }}>
{!ai.summary && ai.bullets.length === 0 ? (
<span className="ai-placeholder">
{t("future.noAi")}
</span>
) : (
<>
{ai.summary ? (
<div className="ai-summary">{ai.summary}</div>
) : null}
{ai.bullets.length > 0 ? (
<ul className="ai-list">
{ai.bullets.map((item) => (
<li key={item}>{item}</li>
))}
</ul>
) : null}
</>
)}
</div>
</div>
</div>
</section>
</main>
</div>
) : (