## Changelog ### New Features - Modularized 3D earth HTML page from single 1918-line file into ES Modules - Split CSS into separate module files (base, info-panel, coordinates-display, legend, earth-stats) - Split JS into separate modules (constants, utils, ui, earth, cables, controls, main) ### 3D Earth Rendering - Use Three.js r128 (via esm.sh CDN) for color consistency with original - Earth with 8K satellite texture and proper material settings - Cloud layer with transparency and additive blending - Starfield background (8000 stars) - Latitude/longitude grid lines that rotate with Earth ### Cable System - Load cable data from geo.json with great circle path calculation - Support for MultiLineString and LineString geometry types - Cable color from geo.json properties.color field - Landing points loading from landing-point-geo.geojson ### User Interactions - Mouse hover: highlight cable and show details - Mouse click: lock cable with pulsing glow effect - Click cable to pause rotation, click elsewhere to resume - Click rotation toggle button to resume rotation and clear highlight - Reset view with smooth animation (800ms cubic ease-out) - Mouse wheel zoom support - Drag to rotate Earth ### UI/UX Improvements - Tooltip shows latitude, longitude, and altitude - Prevent tooltip text selection during drag - Hide tooltip during drag operation - Blue border tooltip styling matching original - Cursor changes to grabbing during drag - Front-facing cable detection (only detect cables facing camera) ### Bug Fixes - Grid lines now rotate with Earth (added as Earth child) - Reset view button now works correctly - Fixed camera reference in reset view - Fixed autoRotate state management when clearing locked cable ### Original HTML - Copied original 3dearthmult.html to public folder for reference
48 lines
912 B
CSS
48 lines
912 B
CSS
/* coordinates-display */
|
|
|
|
#coordinates-display {
|
|
position: absolute;
|
|
top: 20px;
|
|
right: 250px;
|
|
background-color: rgba(10, 10, 30, 0.85);
|
|
border-radius: 10px;
|
|
padding: 10px 15px;
|
|
z-index: 10;
|
|
box-shadow: 0 0 20px rgba(0, 150, 255, 0.3);
|
|
border: 1px solid rgba(0, 150, 255, 0.2);
|
|
font-size: 0.9rem;
|
|
min-width: 180px;
|
|
backdrop-filter: blur(5px);
|
|
}
|
|
|
|
#coordinates-display .coord-item {
|
|
margin-bottom: 5px;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
}
|
|
|
|
#coordinates-display .coord-label {
|
|
color: #aaa;
|
|
}
|
|
|
|
#coordinates-display .coord-value {
|
|
color: #4db8ff;
|
|
font-weight: 500;
|
|
}
|
|
|
|
#coordinates-display #zoom-level {
|
|
margin-top: 5px;
|
|
color: #ffff44;
|
|
font-weight: 500;
|
|
text-align: center;
|
|
font-size: 1rem;
|
|
}
|
|
|
|
#coordinates-display .mouse-coords {
|
|
font-size: 0.8rem;
|
|
color: #aaa;
|
|
margin-top: 5px;
|
|
padding-top: 5px;
|
|
border-top: 1px solid rgba(255, 255, 255, 0.1);
|
|
}
|