V.1 — cut the CDN tether. Vendored the exact pinned files the importmap used (three.module.js r170 + OrbitControls + CSS2DRenderer, ~1.29 MB) under vendor/three/, mirroring the package layout so the addons' bare `import from 'three'` resolves. Import graph verified shallow (addons import only 'three'; the bundle is self-contained). Both importmaps (index.html, verify.html) now point at ./vendor/three/… — zero jsdelivr/CDN URLs remain. MIT LICENSE + PROVENANCE.txt retained. V.2 — open deep time. EPOCH toggle (1800–2050 / 3000 BC–3000 AD) next to MEGA/TRUE; deep mode is a hash-carried page mode (&e=1) read before ephem/clock init → ephem.setExtendedRange(true) + CONFIG.time swaps to the deep bounds. Timeline end labels + scrub tooltip now read from CONFIG (were hardcoded 1800/2050). Toggle serializes current view and reloads with the flipped e token (orbit paths + element resolution are baked per-session). Appended 1 decade/s and 1 century/s rates. Hash e token added to applyHash/serializeHash. V.3 — appended verify gates (PERIHELION-V): Jupiter @1000 BC (extended 2a+2b) vs live Horizons barycenter tol 0.15 AU (Δ 0.0041); Mercury @2500 tol 0.02 AU (Δ 3e-5); Table 2b M-correction proven live (zeroing it worsens Jupiter@1000BC by 0.0214 AU). Core 13 gates untouched. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
94 lines
3.0 KiB
HTML
94 lines
3.0 KiB
HTML
<!doctype html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||
<title>SOLARGOD ▸ Orrery</title>
|
||
<link rel="stylesheet" href="css/style.css" />
|
||
<!-- Three.js is vendored (offline-first, zero CDN). See vendor/three/PROVENANCE.txt. -->
|
||
<script type="importmap">
|
||
{
|
||
"imports": {
|
||
"three": "./vendor/three/build/three.module.js",
|
||
"three/addons/": "./vendor/three/examples/jsm/"
|
||
}
|
||
}
|
||
</script>
|
||
</head>
|
||
<body>
|
||
<div id="scene"></div>
|
||
<div id="labels"></div>
|
||
|
||
<!-- breadcrumb (top-left) -->
|
||
<div id="breadcrumb"></div>
|
||
|
||
<!-- HUD (right) -->
|
||
<aside id="hud">
|
||
<header>
|
||
<div class="brand">SOLARGOD <span>▸ ORRERY</span></div>
|
||
<div id="live-chip" data-state="live">LIVE</div>
|
||
</header>
|
||
|
||
<div class="ctl-row">
|
||
<div class="seg" id="scale-toggle">
|
||
<button data-mode="mega" class="active" type="button">MEGA</button>
|
||
<button data-mode="true" type="button">TRUE</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="ctl-row slider-row">
|
||
<label class="ctl-label">Epoch</label>
|
||
<div class="seg" id="epoch-toggle" title="Deep-time range — switching reloads the session onto Table 2a/2b">
|
||
<button data-epoch="near" class="active" type="button">1800–2050</button>
|
||
<button data-epoch="deep" type="button">3000 BC – 3000 AD</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="ctl-row slider-row">
|
||
<label class="ctl-label">Body scale</label>
|
||
<div class="seg" id="bodyscale-toggle">
|
||
<button data-e="1" type="button">1×</button>
|
||
<button data-e="100" type="button">100×</button>
|
||
<button data-e="1200" class="active" type="button">1200×</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="menu-row">
|
||
<label class="ctl-label">Focus</label>
|
||
<select id="focus-menu"></select>
|
||
</div>
|
||
|
||
<div id="layers"></div>
|
||
|
||
<footer>
|
||
<div>Positions: JPL SSD approximate elements · live feeds: JPL Horizons / SBDB / CAD</div>
|
||
<div id="credits-textures">Textures: <a href="https://www.solarsystemscope.com/textures/" target="_blank" rel="noopener">Solar System Scope</a> (CC BY 4.0)</div>
|
||
</footer>
|
||
</aside>
|
||
|
||
<!-- time bar (bottom) -->
|
||
<div id="timebar">
|
||
<div class="tb-controls">
|
||
<button id="tb-now" type="button" title="Jump to wall-clock now">NOW</button>
|
||
<button id="tb-reverse" type="button" title="Reverse">◀</button>
|
||
<button id="tb-play" type="button" title="Play / pause">❚❚</button>
|
||
<select id="tb-rate" title="Time rate"></select>
|
||
<div id="date-readout">—</div>
|
||
</div>
|
||
<div id="timeline-outer" title="Scrub">
|
||
<div id="timeline-fill"></div>
|
||
<div id="timeline-cursor"></div>
|
||
</div>
|
||
<div class="tb-ends"><span id="tb-end-min">1800</span><span id="tb-end-max">2050</span></div>
|
||
</div>
|
||
|
||
<!-- info panel (left, Stage 6) -->
|
||
<aside id="infopanel" hidden></aside>
|
||
|
||
<div id="toast"></div>
|
||
<div id="debug" hidden></div>
|
||
|
||
<script type="module" src="js/main.js"></script>
|
||
</body>
|
||
</html>
|