diff --git a/frontend/components/dashboard/ScanTerminalBoard.module.css b/frontend/components/dashboard/ScanTerminalBoard.module.css index 89032ffc..6f987fbd 100644 --- a/frontend/components/dashboard/ScanTerminalBoard.module.css +++ b/frontend/components/dashboard/ScanTerminalBoard.module.css @@ -29,6 +29,62 @@ background: rgba(8, 17, 30, 0.8); } +.root :global(.scan-upgrade-announcement) { + display: grid; + grid-template-columns: 1fr; + gap: 12px; + padding: 16px 20px; + border: 1px solid rgba(77, 163, 255, 0.18); + border-radius: 16px; + background: + radial-gradient(circle at top left, rgba(77, 163, 255, 0.08), transparent 36%), + rgba(11, 18, 32, 0.66); + backdrop-filter: blur(8px); +} + +.root :global(.scan-upgrade-announcement-copy) { + display: grid; + gap: 6px; +} + +.root :global(.scan-upgrade-announcement-copy span) { + color: #4da3ff; + font-size: 11px; + font-weight: 800; + text-transform: uppercase; + letter-spacing: 0.04em; +} + +.root :global(.scan-upgrade-announcement-copy strong) { + color: #e6edf3; + font-size: 18px; + font-weight: 900; +} + +.root :global(.scan-upgrade-announcement-copy p) { + color: #9fb2c7; + font-size: 13px; + line-height: 1.55; +} + +.root :global(.scan-upgrade-announcement ul) { + display: flex; + flex-wrap: wrap; + gap: 8px; + padding: 0; + list-style: none; +} + +.root :global(.scan-upgrade-announcement li) { + padding: 5px 10px; + border: 1px solid rgba(77, 163, 255, 0.14); + border-radius: 999px; + background: rgba(77, 163, 255, 0.08); + color: #cfe5ff; + font-size: 12px; + font-weight: 800; +} + .root :global(.scan-terminal.focus-view-active .scan-upgrade-announcement), .root :global(.scan-terminal.focus-view-active .scan-kpi-bar) { display: none; diff --git a/frontend/components/dashboard/ScanTerminalDashboard.tsx b/frontend/components/dashboard/ScanTerminalDashboard.tsx index 10228b34..162b2283 100644 --- a/frontend/components/dashboard/ScanTerminalDashboard.tsx +++ b/frontend/components/dashboard/ScanTerminalDashboard.tsx @@ -115,6 +115,20 @@ function ScanTerminalScreen() { const [activeView, setActiveView] = useState("map"); const [mapSelectedCityName, setMapSelectedCityName] = useState(null); const [showScanPaywall, setShowScanPaywall] = useState(false); + const [showAnnouncement, setShowAnnouncement] = useState(false); + + useEffect(() => { + const key = "polyweather_v156_announcement_seen_at"; + const seen = localStorage.getItem(key); + const now = Date.now(); + if (!seen) { + localStorage.setItem(key, String(now)); + setShowAnnouncement(true); + return; + } + const elapsed = now - Number(seen); + setShowAnnouncement(elapsed < 3 * 24 * 60 * 60 * 1000); + }, []); const userLocalTime = useUserLocalClock(); const { setThemeMode, themeMode } = useScanTerminalTheme(); const lastMapSelectedCityRef = useRef(""); @@ -508,6 +522,29 @@ function ScanTerminalScreen() { locale={locale} /> + {showAnnouncement ? ( +
+
+ {isEn ? "v1.5.6 upgrade" : "v1.5.6 升级公告"} + + {isEn ? "Scan terminal is upgraded to v1.5.6" : "决策终端已升级到 v1.5.6"} + +

+ {isEn + ? "City decision cards have been redesigned with a compact hero layout and consistent DEB data source. Sticky headers are removed for smoother scrolling." + : "城市决策卡 hero 布局重新设计,三指标并列对比更直观;DEB 数据源统一不再出现不一致;去除顶部固定效果滚动更流畅。"} +

+
+
    +
  • {isEn ? "Redesigned decision card hero" : "重设计城市决策卡 hero 布局"}
  • +
  • {isEn ? "Unified DEB data source" : "统一 DEB 数据源"}
  • +
  • {isEn ? "Light theme coverage" : "亮色主题补全覆盖"}
  • +
  • {isEn ? "HKO observatory AI read" : "香港天文台观测 AI 解读"}
  • +
  • {isEn ? "Smoother scrolling experience" : "滚动体验优化"}
  • +
+
+ ) : null} +