src/data/moons.js

// ————————————————————————————————————————————————
// Major moon data.
//
// Keyed by parent planet id (lowercase English name from planets.js).
// Values are REAL:
//   - radiusKm:          mean radius
//   - axesKm:            optional triaxial semi-axes [a, b, c] for bodies far
//                        below hydrostatic equilibrium that are visibly
//                        non-spherical (Phobos, Deimos). a is the long axis;
//                        for tidally-locked moons it points at the parent.
//                        Geomean of the three matches radiusKm.
//   - orbitKm:           orbital semi-major axis around parent
//   - orbitalPeriodDays: sidereal period. NEGATIVE = retrograde orbit
//                        (e.g. Triton orbits Neptune backwards).
//   - color:             stylized hex tint
//
// Each entry has:
//   - id:    stable lowercase identifier, unique within the moon set
//   - names: localized display names. Keys match SUPPORTED_LANGS from
//            src/i18n.js. When a moon has the same name in every language
//            (e.g. Io, Titan), duplicate the value across language keys — the
//            data stays self-describing with no implicit fallback.
//
// Views apply their own display scaling. At true scale most moons are
// invisible next to their planet — they're always visually inflated.
// ————————————————————————————————————————————————

export const MOONS = {
  earth: [
    {
      id: 'moon',
      names: { fr: 'Lune', en: 'Moon' },
      color: 0xc8c8cc,
      radiusKm: 1737.4,
      orbitKm: 384400,
      orbitalPeriodDays: 27.32,
    },
  ],
  mars: [
    {
      id: 'phobos',
      names: { fr: 'Phobos', en: 'Phobos' },
      color: 0x887766,
      radiusKm: 11.27,
      axesKm: [13.4, 11.2, 9.2],
      orbitKm: 9376,
      orbitalPeriodDays: 0.3189,
    },
    {
      id: 'deimos',
      names: { fr: 'Déimos', en: 'Deimos' },
      color: 0x776655,
      radiusKm: 6.2,
      axesKm: [7.5, 6.1, 5.2],
      orbitKm: 23463,
      orbitalPeriodDays: 1.263,
    },
  ],
  jupiter: [
    // The four Galilean moons — discovered by Galileo in 1610.
    {
      id: 'io',
      names: { fr: 'Io', en: 'Io' },
      color: 0xeecc66,
      radiusKm: 1821.6,
      orbitKm: 421800,
      orbitalPeriodDays: 1.769,
    },
    {
      id: 'europa',
      names: { fr: 'Europe', en: 'Europa' },
      color: 0xddd5c0,
      radiusKm: 1560.8,
      orbitKm: 671100,
      orbitalPeriodDays: 3.551,
    },
    {
      id: 'ganymede',
      names: { fr: 'Ganymède', en: 'Ganymede' },
      color: 0x998877,
      radiusKm: 2634.1,
      orbitKm: 1070400,
      orbitalPeriodDays: 7.155,
    },
    {
      id: 'callisto',
      names: { fr: 'Callisto', en: 'Callisto' },
      color: 0x6a5a48,
      radiusKm: 2410.3,
      orbitKm: 1882700,
      orbitalPeriodDays: 16.69,
    },
  ],
  saturn: [
    {
      id: 'enceladus',
      names: { fr: 'Encelade', en: 'Enceladus' },
      color: 0xecedf2,
      radiusKm: 252.1,
      orbitKm: 238000,
      orbitalPeriodDays: 1.37,
    },
    {
      id: 'rhea',
      names: { fr: 'Rhéa', en: 'Rhea' },
      color: 0xccbbaa,
      radiusKm: 764.5,
      orbitKm: 527108,
      orbitalPeriodDays: 4.518,
    },
    {
      id: 'titan',
      names: { fr: 'Titan', en: 'Titan' },
      color: 0xd9a659,
      radiusKm: 2574.7,
      orbitKm: 1221870,
      orbitalPeriodDays: 15.945,
    },
    {
      id: 'iapetus',
      names: { fr: 'Japet', en: 'Iapetus' },
      color: 0x8a7a66,
      radiusKm: 734.5,
      orbitKm: 3560820,
      orbitalPeriodDays: 79.322,
    },
  ],
  uranus: [
    {
      id: 'miranda',
      names: { fr: 'Miranda', en: 'Miranda' },
      color: 0xb0bcc0,
      radiusKm: 235.8,
      orbitKm: 129390,
      orbitalPeriodDays: 1.413,
    },
    {
      id: 'titania',
      names: { fr: 'Titania', en: 'Titania' },
      color: 0xa8b6ba,
      radiusKm: 788.4,
      orbitKm: 436300,
      orbitalPeriodDays: 8.706,
    },
    {
      id: 'oberon',
      names: { fr: 'Obéron', en: 'Oberon' },
      color: 0x98a8ac,
      radiusKm: 761.4,
      orbitKm: 583519,
      orbitalPeriodDays: 13.463,
    },
  ],
  neptune: [
    // Triton orbits retrograde — likely a captured Kuiper Belt object.
    {
      id: 'triton',
      names: { fr: 'Triton', en: 'Triton' },
      color: 0xd8c8c0,
      radiusKm: 1353.4,
      orbitKm: 354760,
      orbitalPeriodDays: -5.877,
    },
  ],
};
← Astrarium