feat(orbitviewer): add satellite orbit viewer with 2D track, 10-day pass prediction, and AR sky view
Build and Push Docker Image / build (push) Successful in 2m31s

This commit is contained in:
2026-09-23 00:06:01 -07:00
parent c4caed6569
commit fa3dc66278
17 changed files with 4381 additions and 95 deletions
+14 -4
View File
@@ -57,19 +57,21 @@
.nav-item:hover { background: rgba(0,0,0,0.04); color: #000; }
.nav-item.active { background: var(--apple-blue); color: #ffffff; }
.main-container { flex: 1; display: flex; flex-direction: column; overflow-y: auto; width: 100%; }
.main-content { padding: 40px 60px; width: 100%; }
.main-container { flex: 1; display: flex; flex-direction: column; overflow-y: auto; overflow-x: hidden; width: 100%; max-width: 100vw; }
.main-content { padding: 40px 60px; width: 100%; max-width: 100%; box-sizing: border-box; }
/* Unified Page Header */
.page-header { margin-bottom: 32px; }
.page-header h1 { font-size: 34px; font-weight: 700; margin: 0 0 8px 0; }
.page-header h1 { font-size: 34px; font-weight: 700; margin: 0 0 8px 0; word-break: break-word; }
.page-header p { font-size: 18px; color: #86868b; margin: 0; }
@media (max-width: 768px) {
.sidebar { position: fixed; left: -260px; height: 100%; }
#menu-toggle:checked ~ .sidebar { transform: translateX(260px); }
.menu-btn { display: block; }
.main-content { padding: 80px 20px 20px; }
.main-content { padding: 70px 14px 20px; width: 100vw; max-width: 100vw; box-sizing: border-box; overflow-x: hidden; }
.page-header h1 { font-size: 24px; }
.page-header p { font-size: 14px; }
}
.tool-panel { display: none; }
@@ -164,6 +166,11 @@
title: '2026世界杯小组出线模拟器',
desc: '使用蒙特卡洛算法模拟2026年美加墨世界杯小组赛出线概率,支持自定义比赛概率、小组球队及已有赛果。',
keywords: '2026世界杯, 小组出线概率, 蒙特卡洛模拟, 足球预测'
},
'orbit-viewer': {
title: '卫星轨道观测与AR实景寻星',
desc: '实时模拟空间站与卫星投影地面轨迹,精准预测未来10天最佳肉眼可见过境窗口,并支持手机AR实景摄像头与陀螺仪定向寻星。',
keywords: '卫星过境预测, 空间站追踪, ISS轨迹, AR寻星, 卫星观测, 轨道投影, 空间望远镜'
}
};
@@ -199,6 +206,9 @@
document.querySelectorAll('.nav-item').forEach(n => n.classList.remove('active'));
const activeNav = document.getElementById(`nav-${path}`) || document.getElementById('nav-welcome');
if (activeNav) activeNav.classList.add('active');
// 触发自定义面板切换事件,通知工具初始化或重设尺寸
window.dispatchEvent(new CustomEvent('panel-changed', { detail: { path: path } }));
}
window.onpopstate = renderCurrentPath;