3.2.3
Update and separate the yearly cosmic events. Set to display the next 4 rather than the next x months
This commit is contained in:
+33
-2
@@ -182,7 +182,8 @@
|
||||
}
|
||||
.almanac-list {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
|
||||
grid-template-columns: repeat(4, 1fr);
|
||||
grid-auto-rows: 1fr;
|
||||
gap: 0;
|
||||
}
|
||||
.almanac-entry {
|
||||
@@ -190,10 +191,13 @@
|
||||
align-items: flex-start;
|
||||
gap: 13px;
|
||||
padding: 13px 18px;
|
||||
border-bottom: 1px solid #f0e4cc;
|
||||
border-right: 1px solid #f0e4cc;
|
||||
transition: background 0.15s;
|
||||
}
|
||||
/* Desktop: single row of 4 — vertical dividers only, none on the far edge. */
|
||||
.almanac-entry:last-child {
|
||||
border-right: none;
|
||||
}
|
||||
.almanac-entry:hover {
|
||||
background: #fef8e8;
|
||||
}
|
||||
@@ -274,10 +278,37 @@
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* ≤900px: fall back to a 2×2 grid so cards stay readable. */
|
||||
@media (max-width: 900px) {
|
||||
.almanac-list {
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
}
|
||||
.almanac-entry {
|
||||
border-right: 1px solid #f0e4cc;
|
||||
}
|
||||
.almanac-entry:nth-child(2n) {
|
||||
border-right: none; /* right edge of the grid */
|
||||
}
|
||||
.almanac-entry:nth-child(-n + 2) {
|
||||
border-bottom: 1px solid #f0e4cc; /* divider between the two rows */
|
||||
}
|
||||
}
|
||||
|
||||
/* ≤600px: single column. */
|
||||
@media (max-width: 600px) {
|
||||
.almanac-list {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
.almanac-entry,
|
||||
.almanac-entry:nth-child(2n) {
|
||||
border-right: none;
|
||||
}
|
||||
.almanac-entry {
|
||||
border-bottom: 1px solid #f0e4cc;
|
||||
}
|
||||
.almanac-entry:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* ── EVENT BANNER — mobile fixes ────────────────────────────────────── */
|
||||
|
||||
+3
-3
@@ -1770,7 +1770,7 @@ export function UTCIForecast() {
|
||||
|
||||
|
||||
${(() => {
|
||||
const upcoming = getUpcomingEvents(location, 90);
|
||||
const upcoming = getUpcomingEvents(location, 3650).slice(0, 4);
|
||||
const formatPeak = (iso) => {
|
||||
const d = new Date(iso + 'T00:00Z');
|
||||
return d.toLocaleDateString('en-GB', { day: 'numeric', month: 'short', year: 'numeric', timeZone: 'UTC' });
|
||||
@@ -1787,11 +1787,11 @@ export function UTCIForecast() {
|
||||
<div class="almanac-panel">
|
||||
<div class="almanac-header">
|
||||
<span class="almanac-title">🔭 What's Coming</span>
|
||||
<span class="almanac-subtitle">Cosmic events · next 90 days · ${location.name}</span>
|
||||
<span class="almanac-subtitle">Cosmic events · next 4 events · ${location.name}</span>
|
||||
</div>
|
||||
<div class="almanac-list">
|
||||
${upcoming.length === 0
|
||||
? html`<div class="almanac-empty">No major cosmic events in the next 90 days — clear skies ahead.</div>`
|
||||
? html`<div class="almanac-empty">No major cosmic events on the horizon — clear skies ahead.</div>`
|
||||
: upcoming.map(ev => html`
|
||||
<div key=${ev.id} class="almanac-entry">
|
||||
<div class="almanac-entry-accent" style=${{ background: ev.color === '#fdf8ee' ? '#c8922a' : ev.color }} />
|
||||
|
||||
@@ -2,258 +2,32 @@
|
||||
// almanac-calendar.js - Extended event calendar for the "What's Coming"
|
||||
// panel and getUpcomingEvents() export.
|
||||
//
|
||||
// Includes all events from COSMIC_CALENDAR plus multi-year entries.
|
||||
// The per-year data now lives in ./calendar/<year>.js — each of those files
|
||||
// exports an `almanac` array. This module concatenates them (chronological
|
||||
// order) and provides the visibility-note and upcoming-events helpers.
|
||||
//
|
||||
// Each entry has a 'latHint':
|
||||
// null = global / no hint
|
||||
// 'north' = better from northern latitudes
|
||||
// 'south' = better from southern latitudes
|
||||
// 'path:...' = specific eclipse path note
|
||||
//
|
||||
// To add a new year: create ./calendar/<year>.js (copy an existing one),
|
||||
// then import it below and add its `almanac` spread to ALMANAC_CALENDAR.
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
export const ALMANAC_CALENDAR = [
|
||||
// 2026 events (covers rest of year from today)
|
||||
{
|
||||
id: 'lunar-eclipse-2026-mar',
|
||||
emoji: '🌕',
|
||||
title: 'Total Lunar Eclipse',
|
||||
desc: 'The Moon turns deep red as it passes through Earth\'s shadow. Visible from Europe, Africa, and the Americas.',
|
||||
start: '2026-03-03', peak: '2026-03-03',
|
||||
color: '#3a0a0a', textColor: '#ffd8d8',
|
||||
latHint: null,
|
||||
type: 'eclipse',
|
||||
},
|
||||
{
|
||||
id: 'lyrids-2026',
|
||||
emoji: '☄️',
|
||||
title: 'Lyrid Meteor Shower',
|
||||
desc: 'Up to 20 meteors/hour at peak. Active Apr 16–25, best after midnight from a dark site.',
|
||||
start: '2026-04-16', peak: '2026-04-22',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'eta-aquariids-2026',
|
||||
emoji: '☄️',
|
||||
title: 'Eta Aquariid Meteor Shower',
|
||||
desc: 'Debris from Halley\'s Comet — up to 50/hour before dawn. Best from southern latitudes but visible worldwide.',
|
||||
start: '2026-04-19', peak: '2026-05-06',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: 'south',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'mars-conjunction-2026',
|
||||
emoji: '🔴',
|
||||
title: 'Mars & Venus Conjunction',
|
||||
desc: 'Mars and Venus appear strikingly close in the evening sky — a beautiful naked-eye pairing.',
|
||||
start: '2026-06-30', peak: '2026-07-01',
|
||||
color: '#2a1520', textColor: '#ffc8d8',
|
||||
latHint: null,
|
||||
type: 'planetary',
|
||||
},
|
||||
{
|
||||
id: 'perseids-2026',
|
||||
emoji: '☄️',
|
||||
title: 'Perseid Meteor Shower',
|
||||
desc: 'One of the best showers of the year — up to 100/hour at peak, no need for a telescope.',
|
||||
start: '2026-07-17', peak: '2026-08-12',
|
||||
color: '#3a1a00', textColor: '#ffe8c0',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'solar-eclipse-2026-aug',
|
||||
emoji: '🌑',
|
||||
title: 'Total Solar Eclipse',
|
||||
desc: 'The path of totality crosses Spain, Iceland, and Greenland. Partial eclipse visible across most of Europe.',
|
||||
start: '2026-08-12', peak: '2026-08-12',
|
||||
color: '#1a0a2a', textColor: '#d8c8f8',
|
||||
latHint: 'path:Spain, Iceland, Greenland — partial eclipse across UK & Europe',
|
||||
type: 'eclipse',
|
||||
},
|
||||
{
|
||||
id: 'saturn-opposition-2026',
|
||||
emoji: '🪐',
|
||||
title: 'Saturn at Opposition',
|
||||
desc: 'Saturn is at its closest and brightest — rings tilted beautifully toward Earth. Visible all night.',
|
||||
start: '2026-09-23', peak: '2026-09-23',
|
||||
color: '#1a2a3a', textColor: '#c8e8ff',
|
||||
latHint: null,
|
||||
type: 'planetary',
|
||||
},
|
||||
{
|
||||
id: 'orionids-2026',
|
||||
emoji: '☄️',
|
||||
title: 'Orionid Meteor Shower',
|
||||
desc: 'Fast, bright meteors from Halley\'s Comet — up to 25/hour. Active Oct 2 – Nov 7.',
|
||||
start: '2026-10-02', peak: '2026-10-21',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: null,
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'jupiter-opposition-2026',
|
||||
emoji: '🪐',
|
||||
title: 'Jupiter at Opposition',
|
||||
desc: 'Jupiter at its closest — you can see its cloud bands and four Galilean moons with binoculars.',
|
||||
start: '2026-10-08', peak: '2026-10-08',
|
||||
color: '#1a2a3a', textColor: '#c8e8ff',
|
||||
latHint: null,
|
||||
type: 'planetary',
|
||||
},
|
||||
{
|
||||
id: 'leonids-2026',
|
||||
emoji: '☄️',
|
||||
title: 'Leonid Meteor Shower',
|
||||
desc: 'Fast, bright meteors from comet Tempel-Tuttle. Up to 15/hour at peak.',
|
||||
start: '2026-11-06', peak: '2026-11-17',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: null,
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'geminids-2026',
|
||||
emoji: '☄️',
|
||||
title: 'Geminid Meteor Shower',
|
||||
desc: 'The finest shower of the year — up to 150 meteors/hour, visible even before midnight.',
|
||||
start: '2026-12-04', peak: '2026-12-13',
|
||||
color: '#3a1a00', textColor: '#ffe8c0',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'ursids-2026',
|
||||
emoji: '☄️',
|
||||
title: 'Ursid Meteor Shower',
|
||||
desc: 'A quieter shower near the winter solstice — circumpolar, so best from northern latitudes.',
|
||||
start: '2026-12-17', peak: '2026-12-22',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
import { almanac as almanac2026 } from './calendar/2026.js';
|
||||
import { almanac as almanac2027 } from './calendar/2027.js';
|
||||
import { almanac as almanac2028 } from './calendar/2028.js';
|
||||
import { almanac as almanac2029 } from './calendar/2029.js';
|
||||
import { almanac as almanac2030 } from './calendar/2030.js';
|
||||
|
||||
// -- 2027 -------------------------------------------------------------
|
||||
{
|
||||
id: 'quadrantids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Quadrantid Meteor Shower',
|
||||
desc: 'Up to 120 meteors/hour at peak — one of the strongest showers but with a very sharp peak. Best in the hours before dawn on 4 Jan.',
|
||||
start: '2027-01-01', peak: '2027-01-04',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'annular-solar-eclipse-2027-feb',
|
||||
emoji: '🌑',
|
||||
title: 'Annular Solar Eclipse',
|
||||
desc: 'A "ring of fire" eclipse visible from parts of South America, Africa and the Indian Ocean. Partial eclipse across much of the southern hemisphere.',
|
||||
start: '2027-02-06', peak: '2027-02-06',
|
||||
color: '#1a0a2a', textColor: '#d8c8f8',
|
||||
latHint: 'path:South America, southern Africa, Indian Ocean',
|
||||
type: 'eclipse',
|
||||
},
|
||||
{
|
||||
id: 'mars-opposition-2027',
|
||||
emoji: '🔴',
|
||||
title: 'Mars at Opposition',
|
||||
desc: 'Mars is at its closest and brightest — a vivid red beacon visible all night long. Good binoculars reveal its distinct colour.',
|
||||
start: '2027-02-19', peak: '2027-02-19',
|
||||
color: '#2a1520', textColor: '#ffc8d8',
|
||||
latHint: null,
|
||||
type: 'planetary',
|
||||
},
|
||||
{
|
||||
id: 'lyrids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Lyrid Meteor Shower',
|
||||
desc: 'Up to 20 meteors/hour at peak. Note: bright waning gibbous moon may reduce visibility this year. Active Apr 16–25.',
|
||||
start: '2027-04-16', peak: '2027-04-23',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'eta-aquariids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Eta Aquariid Meteor Shower',
|
||||
desc: 'Debris from Halley\'s Comet — up to 50/hour before dawn. New moon on 6 May means excellent dark skies this year.',
|
||||
start: '2027-04-19', peak: '2027-05-05',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: 'south',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'perseids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Perseid Meteor Shower',
|
||||
desc: 'One of the best showers of the year — up to 100/hour at peak, no telescope needed. Active Jul 17 – Aug 24.',
|
||||
start: '2027-07-17', peak: '2027-08-13',
|
||||
color: '#3a1a00', textColor: '#ffe8c0',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'total-solar-eclipse-2027-aug',
|
||||
emoji: '🌑',
|
||||
title: 'Total Solar Eclipse',
|
||||
desc: 'One of the longest total solar eclipses of the century. Path of totality crosses Morocco, Spain, Algeria, Libya, Egypt and Saudi Arabia.',
|
||||
start: '2027-08-02', peak: '2027-08-02',
|
||||
color: '#1a0a2a', textColor: '#d8c8f8',
|
||||
latHint: 'path:Morocco, Spain, Algeria, Libya, Egypt, Saudi Arabia',
|
||||
type: 'eclipse',
|
||||
},
|
||||
{
|
||||
id: 'venus-jupiter-conjunction-2027',
|
||||
emoji: '🪐',
|
||||
title: 'Venus & Jupiter Conjunction',
|
||||
desc: 'Venus and Jupiter appear strikingly close together in the evening sky — a dazzling naked-eye pairing of the two brightest planets.',
|
||||
start: '2027-08-23', peak: '2027-08-25',
|
||||
color: '#1a2a3a', textColor: '#c8e8ff',
|
||||
latHint: null,
|
||||
type: 'planetary',
|
||||
},
|
||||
{
|
||||
id: 'orionids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Orionid Meteor Shower',
|
||||
desc: 'Fast, bright meteors from Halley\'s Comet debris — up to 25/hour. Active Oct 2 – Nov 7.',
|
||||
start: '2027-10-02', peak: '2027-10-21',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: null,
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'leonids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Leonid Meteor Shower',
|
||||
desc: 'Fast meteors from comet Tempel-Tuttle. Up to 15/hour at peak. Active Nov 6–30.',
|
||||
start: '2027-11-06', peak: '2027-11-17',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: null,
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'geminids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Geminid Meteor Shower',
|
||||
desc: 'The finest shower of the year — up to 150 meteors/hour, visible even before midnight. Active Dec 4–20.',
|
||||
start: '2027-12-04', peak: '2027-12-14',
|
||||
color: '#3a1a00', textColor: '#ffe8c0',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'ursids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Ursid Meteor Shower',
|
||||
desc: 'A quieter shower near the winter solstice — circumpolar, best from northern latitudes. Active Dec 17–26.',
|
||||
start: '2027-12-17', peak: '2027-12-22',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
export const ALMANAC_CALENDAR = [
|
||||
...almanac2026,
|
||||
...almanac2027,
|
||||
...almanac2028,
|
||||
...almanac2029,
|
||||
...almanac2030,
|
||||
];
|
||||
|
||||
// Returns a location-aware visibility note for an almanac entry.
|
||||
|
||||
@@ -0,0 +1,281 @@
|
||||
// ------------------------------------------------------------------------
|
||||
// calendar/2026.js - Cosmic & almanac events for 2026.
|
||||
//
|
||||
// `cosmic` -> feeds COSMIC_CALENDAR (active-event banners; has start/end).
|
||||
// `almanac` -> feeds ALMANAC_CALENDAR ("What's Coming" panel; has peak).
|
||||
// See ../cosmic-calendar.js and ../almanac-calendar.js for field docs.
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
export const cosmic = [
|
||||
// -- METEOR SHOWERS --------------------------------------------------
|
||||
{
|
||||
id: 'quadrantids-2026',
|
||||
emoji: '☄️',
|
||||
title: 'Quadrantid Meteor Shower',
|
||||
message: 'The Quadrantid meteor shower is active — up to 120 meteors/hour at peak. Best after midnight in a dark sky.',
|
||||
color: '#2a1a5a',
|
||||
textColor: '#e8d8ff',
|
||||
type: 'cosmic',
|
||||
nightOnly: true,
|
||||
start: '2026-01-01', end: '2026-01-05', peak: '2026-01-03',
|
||||
},
|
||||
{
|
||||
id: 'lyrids-2026',
|
||||
emoji: '☄️',
|
||||
title: 'Lyrid Meteor Shower',
|
||||
message: 'The Lyrid meteor shower peaks tonight — up to 20 meteors/hour from a dark sky after midnight.',
|
||||
color: '#2a1a5a',
|
||||
textColor: '#e8d8ff',
|
||||
type: 'cosmic',
|
||||
nightOnly: true,
|
||||
start: '2026-04-16', end: '2026-04-25', peak: '2026-04-22',
|
||||
},
|
||||
{
|
||||
id: 'eta-aquariids-2026',
|
||||
emoji: '☄️',
|
||||
title: 'Eta Aquariid Meteor Shower',
|
||||
message: 'The Eta Aquariid shower peaks tonight — fragments of Halley\'s Comet, up to 50/hour before dawn.',
|
||||
color: '#2a1a5a',
|
||||
textColor: '#e8d8ff',
|
||||
type: 'cosmic',
|
||||
nightOnly: true,
|
||||
start: '2026-04-19', end: '2026-05-28', peak: '2026-05-06',
|
||||
},
|
||||
{
|
||||
id: 'perseids-2026',
|
||||
emoji: '☄️',
|
||||
title: 'Perseid Meteor Shower',
|
||||
message: 'The Perseids are active — one of the best showers of the year, up to 100 meteors/hour at peak.',
|
||||
color: '#3a1a00',
|
||||
textColor: '#ffe8c0',
|
||||
type: 'cosmic',
|
||||
nightOnly: true,
|
||||
start: '2026-07-17', end: '2026-08-24', peak: '2026-08-12',
|
||||
},
|
||||
{
|
||||
id: 'orionids-2026',
|
||||
emoji: '☄️',
|
||||
title: 'Orionid Meteor Shower',
|
||||
message: 'The Orionid shower peaks tonight — fast, bright meteors from Halley\'s Comet debris. Up to 25/hour.',
|
||||
color: '#2a1a5a',
|
||||
textColor: '#e8d8ff',
|
||||
type: 'cosmic',
|
||||
nightOnly: true,
|
||||
start: '2026-10-02', end: '2026-11-07', peak: '2026-10-21',
|
||||
},
|
||||
{
|
||||
id: 'leonids-2026',
|
||||
emoji: '☄️',
|
||||
title: 'Leonid Meteor Shower',
|
||||
message: 'The Leonid shower is active tonight — fast, bright meteors from comet Tempel-Tuttle.',
|
||||
color: '#2a1a5a',
|
||||
textColor: '#e8d8ff',
|
||||
type: 'cosmic',
|
||||
nightOnly: true,
|
||||
start: '2026-11-06', end: '2026-11-30', peak: '2026-11-17',
|
||||
},
|
||||
{
|
||||
id: 'geminids-2026',
|
||||
emoji: '☄️',
|
||||
title: 'Geminid Meteor Shower',
|
||||
message: 'The Geminids peak tonight — the best shower of the year, up to 150 meteors/hour. No moon interference.',
|
||||
color: '#3a1a00',
|
||||
textColor: '#ffe8c0',
|
||||
type: 'cosmic',
|
||||
nightOnly: true,
|
||||
start: '2026-12-04', end: '2026-12-20', peak: '2026-12-13',
|
||||
},
|
||||
{
|
||||
id: 'ursids-2026',
|
||||
emoji: '☄️',
|
||||
title: 'Ursid Meteor Shower',
|
||||
message: 'The Ursid shower peaks tonight — a quieter festive shower near the winter solstice.',
|
||||
color: '#2a1a5a',
|
||||
textColor: '#e8d8ff',
|
||||
type: 'cosmic',
|
||||
nightOnly: true,
|
||||
start: '2026-12-17', end: '2026-12-26', peak: '2026-12-22',
|
||||
},
|
||||
|
||||
// -- ECLIPSES --------------------------------------------------------
|
||||
{
|
||||
id: 'solar-eclipse-2026-aug',
|
||||
emoji: '🌑',
|
||||
title: 'Total Solar Eclipse',
|
||||
message: 'A total solar eclipse crosses Europe and North Africa today — look for rapid temperature drops and unusual animal behaviour even in partial zones.',
|
||||
color: '#1a0a2a',
|
||||
textColor: '#d8c8f8',
|
||||
type: 'cosmic',
|
||||
nightOnly: false,
|
||||
start: '2026-08-12', end: '2026-08-12',
|
||||
},
|
||||
{
|
||||
id: 'lunar-eclipse-2026-mar',
|
||||
emoji: '🌕',
|
||||
title: 'Total Lunar Eclipse',
|
||||
message: 'A total lunar eclipse is visible tonight — the Moon turns deep red (a "Blood Moon") as it passes through Earth\'s shadow.',
|
||||
color: '#3a0a0a',
|
||||
textColor: '#ffd8d8',
|
||||
type: 'cosmic',
|
||||
nightOnly: true,
|
||||
start: '2026-03-03', end: '2026-03-03',
|
||||
},
|
||||
|
||||
// -- PLANETARY EVENTS ------------------------------------------------
|
||||
{
|
||||
id: 'saturn-opposition-2026',
|
||||
emoji: '🪐',
|
||||
title: 'Saturn at Opposition',
|
||||
message: 'Saturn is at its closest and brightest tonight — visible all night long, rings tilted beautifully toward Earth.',
|
||||
color: '#1a2a3a',
|
||||
textColor: '#c8e8ff',
|
||||
type: 'cosmic',
|
||||
nightOnly: true,
|
||||
start: '2026-09-23', end: '2026-09-23',
|
||||
},
|
||||
{
|
||||
id: 'jupiter-opposition-2026',
|
||||
emoji: '🪐',
|
||||
title: 'Jupiter at Opposition',
|
||||
message: 'Jupiter is at its closest and brightest tonight — you can see its cloud bands with binoculars.',
|
||||
color: '#1a2a3a',
|
||||
textColor: '#c8e8ff',
|
||||
type: 'cosmic',
|
||||
nightOnly: true,
|
||||
start: '2026-10-08', end: '2026-10-08',
|
||||
},
|
||||
{
|
||||
id: 'mars-conjunction-2026',
|
||||
emoji: '🔴',
|
||||
title: 'Mars & Venus Conjunction',
|
||||
message: 'Mars and Venus are remarkably close in the evening sky tonight — a striking pair visible to the naked eye.',
|
||||
color: '#2a1520',
|
||||
textColor: '#ffc8d8',
|
||||
type: 'cosmic',
|
||||
nightOnly: true,
|
||||
start: '2026-06-30', end: '2026-07-02',
|
||||
},
|
||||
];
|
||||
|
||||
export const almanac = [
|
||||
{
|
||||
id: 'lunar-eclipse-2026-mar',
|
||||
emoji: '🌕',
|
||||
title: 'Total Lunar Eclipse',
|
||||
desc: 'The Moon turns deep red as it passes through Earth\'s shadow. Visible from Europe, Africa, and the Americas.',
|
||||
start: '2026-03-03', peak: '2026-03-03',
|
||||
color: '#3a0a0a', textColor: '#ffd8d8',
|
||||
latHint: null,
|
||||
type: 'eclipse',
|
||||
},
|
||||
{
|
||||
id: 'lyrids-2026',
|
||||
emoji: '☄️',
|
||||
title: 'Lyrid Meteor Shower',
|
||||
desc: 'Up to 20 meteors/hour at peak. Active Apr 16–25, best after midnight from a dark site.',
|
||||
start: '2026-04-16', peak: '2026-04-22',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'eta-aquariids-2026',
|
||||
emoji: '☄️',
|
||||
title: 'Eta Aquariid Meteor Shower',
|
||||
desc: 'Debris from Halley\'s Comet — up to 50/hour before dawn. Best from southern latitudes but visible worldwide.',
|
||||
start: '2026-04-19', peak: '2026-05-06',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: 'south',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'mars-conjunction-2026',
|
||||
emoji: '🔴',
|
||||
title: 'Mars & Venus Conjunction',
|
||||
desc: 'Mars and Venus appear strikingly close in the evening sky — a beautiful naked-eye pairing.',
|
||||
start: '2026-06-30', peak: '2026-07-01',
|
||||
color: '#2a1520', textColor: '#ffc8d8',
|
||||
latHint: null,
|
||||
type: 'planetary',
|
||||
},
|
||||
{
|
||||
id: 'perseids-2026',
|
||||
emoji: '☄️',
|
||||
title: 'Perseid Meteor Shower',
|
||||
desc: 'One of the best showers of the year — up to 100/hour at peak, no need for a telescope.',
|
||||
start: '2026-07-17', peak: '2026-08-12',
|
||||
color: '#3a1a00', textColor: '#ffe8c0',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'solar-eclipse-2026-aug',
|
||||
emoji: '🌑',
|
||||
title: 'Total Solar Eclipse',
|
||||
desc: 'The path of totality crosses Spain, Iceland, and Greenland. Partial eclipse visible across most of Europe.',
|
||||
start: '2026-08-12', peak: '2026-08-12',
|
||||
color: '#1a0a2a', textColor: '#d8c8f8',
|
||||
latHint: 'path:Spain, Iceland, Greenland — partial eclipse across UK & Europe',
|
||||
type: 'eclipse',
|
||||
},
|
||||
{
|
||||
id: 'saturn-opposition-2026',
|
||||
emoji: '🪐',
|
||||
title: 'Saturn at Opposition',
|
||||
desc: 'Saturn is at its closest and brightest — rings tilted beautifully toward Earth. Visible all night.',
|
||||
start: '2026-09-23', peak: '2026-09-23',
|
||||
color: '#1a2a3a', textColor: '#c8e8ff',
|
||||
latHint: null,
|
||||
type: 'planetary',
|
||||
},
|
||||
{
|
||||
id: 'orionids-2026',
|
||||
emoji: '☄️',
|
||||
title: 'Orionid Meteor Shower',
|
||||
desc: 'Fast, bright meteors from Halley\'s Comet — up to 25/hour. Active Oct 2 – Nov 7.',
|
||||
start: '2026-10-02', peak: '2026-10-21',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: null,
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'jupiter-opposition-2026',
|
||||
emoji: '🪐',
|
||||
title: 'Jupiter at Opposition',
|
||||
desc: 'Jupiter at its closest — you can see its cloud bands and four Galilean moons with binoculars.',
|
||||
start: '2026-10-08', peak: '2026-10-08',
|
||||
color: '#1a2a3a', textColor: '#c8e8ff',
|
||||
latHint: null,
|
||||
type: 'planetary',
|
||||
},
|
||||
{
|
||||
id: 'leonids-2026',
|
||||
emoji: '☄️',
|
||||
title: 'Leonid Meteor Shower',
|
||||
desc: 'Fast, bright meteors from comet Tempel-Tuttle. Up to 15/hour at peak.',
|
||||
start: '2026-11-06', peak: '2026-11-17',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: null,
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'geminids-2026',
|
||||
emoji: '☄️',
|
||||
title: 'Geminid Meteor Shower',
|
||||
desc: 'The finest shower of the year — up to 150 meteors/hour, visible even before midnight.',
|
||||
start: '2026-12-04', peak: '2026-12-13',
|
||||
color: '#3a1a00', textColor: '#ffe8c0',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'ursids-2026',
|
||||
emoji: '☄️',
|
||||
title: 'Ursid Meteor Shower',
|
||||
desc: 'A quieter shower near the winter solstice — circumpolar, so best from northern latitudes.',
|
||||
start: '2026-12-17', peak: '2026-12-22',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
];
|
||||
@@ -0,0 +1,243 @@
|
||||
// ------------------------------------------------------------------------
|
||||
// calendar/2027.js - Cosmic & almanac events for 2027.
|
||||
// See ./2026.js for the shape of each array.
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
export const cosmic = [
|
||||
// -- METEOR SHOWERS --------------------------------------------------
|
||||
{
|
||||
id: 'quadrantids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Quadrantid Meteor Shower',
|
||||
message: 'The Quadrantid meteor shower is active — up to 120 meteors/hour at peak. Best in the hours before dawn on 4 Jan from a dark site.',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2027-01-01', end: '2027-01-05', peak: '2027-01-04',
|
||||
},
|
||||
{
|
||||
id: 'lyrids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Lyrid Meteor Shower',
|
||||
message: 'The Lyrid meteor shower peaks — up to 20 meteors/hour after midnight. Note: bright waning gibbous moon may reduce visibility this year.',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2027-04-16', end: '2027-04-25', peak: '2027-04-23',
|
||||
},
|
||||
{
|
||||
id: 'eta-aquariids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Eta Aquariid Meteor Shower',
|
||||
message: 'The Eta Aquariids peak — fragments of Halley\'s Comet, up to 50/hour before dawn. New moon on 6 May means excellent dark skies this year.',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2027-04-19', end: '2027-05-28', peak: '2027-05-05',
|
||||
},
|
||||
{
|
||||
id: 'perseids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Perseid Meteor Shower',
|
||||
message: 'The Perseids are active — one of the best showers of the year, up to 100 meteors/hour at peak around 13 Aug.',
|
||||
color: '#3a1a00', textColor: '#ffe8c0',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2027-07-17', end: '2027-08-24', peak: '2027-08-13',
|
||||
},
|
||||
{
|
||||
id: 'orionids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Orionid Meteor Shower',
|
||||
message: 'The Orionid shower peaks — fast, bright meteors from Halley\'s Comet debris. Up to 25/hour.',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2027-10-02', end: '2027-11-07', peak: '2027-10-21',
|
||||
},
|
||||
{
|
||||
id: 'leonids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Leonid Meteor Shower',
|
||||
message: 'The Leonid shower peaks — fast meteors from comet Tempel-Tuttle, up to 15/hour.',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2027-11-06', end: '2027-11-30', peak: '2027-11-17',
|
||||
},
|
||||
{
|
||||
id: 'geminids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Geminid Meteor Shower',
|
||||
message: 'The Geminids peak — the finest shower of the year, up to 150 meteors/hour, visible even before midnight.',
|
||||
color: '#3a1a00', textColor: '#ffe8c0',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2027-12-04', end: '2027-12-20', peak: '2027-12-14',
|
||||
},
|
||||
{
|
||||
id: 'ursids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Ursid Meteor Shower',
|
||||
message: 'The Ursid shower peaks near the winter solstice — circumpolar, best from northern latitudes.',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2027-12-17', end: '2027-12-26', peak: '2027-12-22',
|
||||
},
|
||||
|
||||
// -- ECLIPSES --------------------------------------------------------
|
||||
{
|
||||
id: 'annular-solar-eclipse-2027-feb',
|
||||
emoji: '🌑',
|
||||
title: 'Annular Solar Eclipse',
|
||||
message: 'An annular solar eclipse creates a "ring of fire" effect — visible across parts of South America, Africa and the Indian Ocean.',
|
||||
color: '#1a0a2a', textColor: '#d8c8f8',
|
||||
type: 'cosmic', nightOnly: false,
|
||||
start: '2027-02-06', end: '2027-02-06', peak: '2027-02-06',
|
||||
},
|
||||
{
|
||||
id: 'total-solar-eclipse-2027-aug',
|
||||
emoji: '🌑',
|
||||
title: 'Total Solar Eclipse',
|
||||
message: 'A spectacular total solar eclipse — the path of totality crosses Morocco, Spain, Algeria, Libya, Egypt and Saudi Arabia. One of the longest totalities of the century.',
|
||||
color: '#1a0a2a', textColor: '#d8c8f8',
|
||||
type: 'cosmic', nightOnly: false,
|
||||
start: '2027-08-02', end: '2027-08-02', peak: '2027-08-02',
|
||||
},
|
||||
|
||||
// -- PLANETARY EVENTS ------------------------------------------------
|
||||
{
|
||||
id: 'mars-opposition-2027',
|
||||
emoji: '🔴',
|
||||
title: 'Mars at Opposition',
|
||||
message: 'Mars is at its closest and brightest — a vivid red beacon visible all night long. Good binoculars will reveal its surface colour.',
|
||||
color: '#2a1520', textColor: '#ffc8d8',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2027-02-19', end: '2027-02-19', peak: '2027-02-19',
|
||||
},
|
||||
{
|
||||
id: 'venus-jupiter-conjunction-2027',
|
||||
emoji: '🪐',
|
||||
title: 'Venus & Jupiter Conjunction',
|
||||
message: 'Venus and Jupiter appear strikingly close together in the evening sky — a dazzling naked-eye pairing of the two brightest planets.',
|
||||
color: '#1a2a3a', textColor: '#c8e8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2027-08-23', end: '2027-08-27', peak: '2027-08-25',
|
||||
},
|
||||
];
|
||||
|
||||
export const almanac = [
|
||||
{
|
||||
id: 'quadrantids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Quadrantid Meteor Shower',
|
||||
desc: 'Up to 120 meteors/hour at peak — one of the strongest showers but with a very sharp peak. Best in the hours before dawn on 4 Jan.',
|
||||
start: '2027-01-01', peak: '2027-01-04',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'annular-solar-eclipse-2027-feb',
|
||||
emoji: '🌑',
|
||||
title: 'Annular Solar Eclipse',
|
||||
desc: 'A "ring of fire" eclipse visible from parts of South America, Africa and the Indian Ocean. Partial eclipse across much of the southern hemisphere.',
|
||||
start: '2027-02-06', peak: '2027-02-06',
|
||||
color: '#1a0a2a', textColor: '#d8c8f8',
|
||||
latHint: 'path:South America, southern Africa, Indian Ocean',
|
||||
type: 'eclipse',
|
||||
},
|
||||
{
|
||||
id: 'mars-opposition-2027',
|
||||
emoji: '🔴',
|
||||
title: 'Mars at Opposition',
|
||||
desc: 'Mars is at its closest and brightest — a vivid red beacon visible all night long. Good binoculars reveal its distinct colour.',
|
||||
start: '2027-02-19', peak: '2027-02-19',
|
||||
color: '#2a1520', textColor: '#ffc8d8',
|
||||
latHint: null,
|
||||
type: 'planetary',
|
||||
},
|
||||
{
|
||||
id: 'lyrids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Lyrid Meteor Shower',
|
||||
desc: 'Up to 20 meteors/hour at peak. Note: bright waning gibbous moon may reduce visibility this year. Active Apr 16–25.',
|
||||
start: '2027-04-16', peak: '2027-04-23',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'eta-aquariids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Eta Aquariid Meteor Shower',
|
||||
desc: 'Debris from Halley\'s Comet — up to 50/hour before dawn. New moon on 6 May means excellent dark skies this year.',
|
||||
start: '2027-04-19', peak: '2027-05-05',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: 'south',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'perseids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Perseid Meteor Shower',
|
||||
desc: 'One of the best showers of the year — up to 100/hour at peak, no telescope needed. Active Jul 17 – Aug 24.',
|
||||
start: '2027-07-17', peak: '2027-08-13',
|
||||
color: '#3a1a00', textColor: '#ffe8c0',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'total-solar-eclipse-2027-aug',
|
||||
emoji: '🌑',
|
||||
title: 'Total Solar Eclipse',
|
||||
desc: 'One of the longest total solar eclipses of the century. Path of totality crosses Morocco, Spain, Algeria, Libya, Egypt and Saudi Arabia.',
|
||||
start: '2027-08-02', peak: '2027-08-02',
|
||||
color: '#1a0a2a', textColor: '#d8c8f8',
|
||||
latHint: 'path:Morocco, Spain, Algeria, Libya, Egypt, Saudi Arabia',
|
||||
type: 'eclipse',
|
||||
},
|
||||
{
|
||||
id: 'venus-jupiter-conjunction-2027',
|
||||
emoji: '🪐',
|
||||
title: 'Venus & Jupiter Conjunction',
|
||||
desc: 'Venus and Jupiter appear strikingly close together in the evening sky — a dazzling naked-eye pairing of the two brightest planets.',
|
||||
start: '2027-08-23', peak: '2027-08-25',
|
||||
color: '#1a2a3a', textColor: '#c8e8ff',
|
||||
latHint: null,
|
||||
type: 'planetary',
|
||||
},
|
||||
{
|
||||
id: 'orionids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Orionid Meteor Shower',
|
||||
desc: 'Fast, bright meteors from Halley\'s Comet debris — up to 25/hour. Active Oct 2 – Nov 7.',
|
||||
start: '2027-10-02', peak: '2027-10-21',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: null,
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'leonids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Leonid Meteor Shower',
|
||||
desc: 'Fast meteors from comet Tempel-Tuttle. Up to 15/hour at peak. Active Nov 6–30.',
|
||||
start: '2027-11-06', peak: '2027-11-17',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: null,
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'geminids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Geminid Meteor Shower',
|
||||
desc: 'The finest shower of the year — up to 150 meteors/hour, visible even before midnight. Active Dec 4–20.',
|
||||
start: '2027-12-04', peak: '2027-12-14',
|
||||
color: '#3a1a00', textColor: '#ffe8c0',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'ursids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Ursid Meteor Shower',
|
||||
desc: 'A quieter shower near the winter solstice — circumpolar, best from northern latitudes. Active Dec 17–26.',
|
||||
start: '2027-12-17', peak: '2027-12-22',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
];
|
||||
@@ -0,0 +1,262 @@
|
||||
// ------------------------------------------------------------------------
|
||||
// calendar/2028.js - Cosmic & almanac events for 2028.
|
||||
// See ./2026.js for the shape of each array.
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
export const cosmic = [
|
||||
// -- METEOR SHOWERS --------------------------------------------------
|
||||
{
|
||||
id: 'quadrantids-2028',
|
||||
emoji: '☄️',
|
||||
title: 'Quadrantid Meteor Shower',
|
||||
message: 'The Quadrantid meteor shower is active — up to 120 meteors/hour at a sharp peak. Best in the hours before dawn from a dark site.',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2028-01-01', end: '2028-01-05', peak: '2028-01-04',
|
||||
},
|
||||
{
|
||||
id: 'lyrids-2028',
|
||||
emoji: '☄️',
|
||||
title: 'Lyrid Meteor Shower',
|
||||
message: 'The Lyrid meteor shower peaks — up to 20 meteors/hour after midnight from a dark sky.',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2028-04-16', end: '2028-04-25', peak: '2028-04-22',
|
||||
},
|
||||
{
|
||||
id: 'eta-aquariids-2028',
|
||||
emoji: '☄️',
|
||||
title: 'Eta Aquariid Meteor Shower',
|
||||
message: 'The Eta Aquariids peak — fragments of Halley\'s Comet, up to 50/hour in the hours before dawn.',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2028-04-19', end: '2028-05-28', peak: '2028-05-05',
|
||||
},
|
||||
{
|
||||
id: 'perseids-2028',
|
||||
emoji: '☄️',
|
||||
title: 'Perseid Meteor Shower',
|
||||
message: 'The Perseids are active — one of the best showers of the year, up to 100 meteors/hour at peak around 12 Aug.',
|
||||
color: '#3a1a00', textColor: '#ffe8c0',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2028-07-17', end: '2028-08-24', peak: '2028-08-12',
|
||||
},
|
||||
{
|
||||
id: 'orionids-2028',
|
||||
emoji: '☄️',
|
||||
title: 'Orionid Meteor Shower',
|
||||
message: 'The Orionid shower peaks — fast, bright meteors from Halley\'s Comet debris. Up to 25/hour.',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2028-10-02', end: '2028-11-07', peak: '2028-10-21',
|
||||
},
|
||||
{
|
||||
id: 'leonids-2028',
|
||||
emoji: '☄️',
|
||||
title: 'Leonid Meteor Shower',
|
||||
message: 'The Leonid shower peaks — fast meteors from comet Tempel-Tuttle, up to 15/hour.',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2028-11-06', end: '2028-11-30', peak: '2028-11-17',
|
||||
},
|
||||
{
|
||||
id: 'geminids-2028',
|
||||
emoji: '☄️',
|
||||
title: 'Geminid Meteor Shower',
|
||||
message: 'The Geminids peak — the finest shower of the year, up to 150 meteors/hour, visible even before midnight.',
|
||||
color: '#3a1a00', textColor: '#ffe8c0',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2028-12-04', end: '2028-12-20', peak: '2028-12-13',
|
||||
},
|
||||
{
|
||||
id: 'ursids-2028',
|
||||
emoji: '☄️',
|
||||
title: 'Ursid Meteor Shower',
|
||||
message: 'The Ursid shower peaks near the winter solstice — circumpolar, best from northern latitudes.',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2028-12-17', end: '2028-12-26', peak: '2028-12-22',
|
||||
},
|
||||
|
||||
// -- ECLIPSES --------------------------------------------------------
|
||||
{
|
||||
id: 'annular-solar-eclipse-2028-jan',
|
||||
emoji: '🌑',
|
||||
title: 'Annular Solar Eclipse',
|
||||
message: 'An annular "ring of fire" eclipse today — the path crosses South America before ending over southern Spain, Portugal (Madeira) and northern Morocco. Partial eclipse across western Europe.',
|
||||
color: '#1a0a2a', textColor: '#d8c8f8',
|
||||
type: 'cosmic', nightOnly: false,
|
||||
start: '2028-01-26', end: '2028-01-26', peak: '2028-01-26',
|
||||
},
|
||||
{
|
||||
id: 'total-solar-eclipse-2028-jul',
|
||||
emoji: '🌑',
|
||||
title: 'Total Solar Eclipse',
|
||||
message: 'A total solar eclipse crosses Australia and New Zealand today — the path of totality runs directly over Sydney, with more than five minutes of darkness at its maximum.',
|
||||
color: '#1a0a2a', textColor: '#d8c8f8',
|
||||
type: 'cosmic', nightOnly: false,
|
||||
start: '2028-07-22', end: '2028-07-22', peak: '2028-07-22',
|
||||
},
|
||||
{
|
||||
id: 'lunar-eclipse-2028-dec',
|
||||
emoji: '🌕',
|
||||
title: 'Total Lunar Eclipse',
|
||||
message: 'A total lunar eclipse rings in the New Year — the Moon turns deep red (a "Blood Moon") as it passes through Earth\'s shadow. Visible across Europe, Africa, Asia and the Americas.',
|
||||
color: '#3a0a0a', textColor: '#ffd8d8',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2028-12-31', end: '2028-12-31', peak: '2028-12-31',
|
||||
},
|
||||
|
||||
// -- PLANETARY EVENTS ------------------------------------------------
|
||||
{
|
||||
id: 'jupiter-opposition-2028',
|
||||
emoji: '🪐',
|
||||
title: 'Jupiter at Opposition',
|
||||
message: 'Jupiter is at its closest and brightest — visible all night long. Its cloud bands and four Galilean moons show through binoculars.',
|
||||
color: '#1a2a3a', textColor: '#c8e8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2028-03-09', end: '2028-03-09', peak: '2028-03-09',
|
||||
},
|
||||
{
|
||||
id: 'saturn-opposition-2028',
|
||||
emoji: '🪐',
|
||||
title: 'Saturn at Opposition',
|
||||
message: 'Saturn is at its closest and brightest tonight — visible all night long, its rings a highlight in any small telescope.',
|
||||
color: '#1a2a3a', textColor: '#c8e8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2028-10-30', end: '2028-10-30', peak: '2028-10-30',
|
||||
},
|
||||
];
|
||||
|
||||
export const almanac = [
|
||||
{
|
||||
id: 'quadrantids-2028',
|
||||
emoji: '☄️',
|
||||
title: 'Quadrantid Meteor Shower',
|
||||
desc: 'Up to 120 meteors/hour at a very sharp peak. Best in the hours before dawn on 4 Jan from a dark site.',
|
||||
start: '2028-01-01', peak: '2028-01-04',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'annular-solar-eclipse-2028-jan',
|
||||
emoji: '🌑',
|
||||
title: 'Annular Solar Eclipse',
|
||||
desc: 'A "ring of fire" eclipse. The path crosses Ecuador, Peru, Brazil and French Guiana, then southern Spain, Madeira and northern Morocco. Partial across western Europe.',
|
||||
start: '2028-01-26', peak: '2028-01-26',
|
||||
color: '#1a0a2a', textColor: '#d8c8f8',
|
||||
latHint: 'path:S. America → S. Spain, Madeira, Morocco — partial across W. Europe',
|
||||
type: 'eclipse',
|
||||
},
|
||||
{
|
||||
id: 'jupiter-opposition-2028',
|
||||
emoji: '🪐',
|
||||
title: 'Jupiter at Opposition',
|
||||
desc: 'Jupiter at its closest and brightest — cloud bands and the four Galilean moons visible through binoculars. Well placed all night.',
|
||||
start: '2028-03-09', peak: '2028-03-09',
|
||||
color: '#1a2a3a', textColor: '#c8e8ff',
|
||||
latHint: null,
|
||||
type: 'planetary',
|
||||
},
|
||||
{
|
||||
id: 'lyrids-2028',
|
||||
emoji: '☄️',
|
||||
title: 'Lyrid Meteor Shower',
|
||||
desc: 'Up to 20 meteors/hour at peak. Active Apr 16–25, best after midnight from a dark site.',
|
||||
start: '2028-04-16', peak: '2028-04-22',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'eta-aquariids-2028',
|
||||
emoji: '☄️',
|
||||
title: 'Eta Aquariid Meteor Shower',
|
||||
desc: 'Debris from Halley\'s Comet — up to 50/hour before dawn. Best from southern latitudes but visible worldwide.',
|
||||
start: '2028-04-19', peak: '2028-05-05',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: 'south',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'total-solar-eclipse-2028-jul',
|
||||
emoji: '🌑',
|
||||
title: 'Total Solar Eclipse',
|
||||
desc: 'The path of totality crosses the Cocos and Christmas Islands, then Australia — directly over Sydney — and Queenstown, New Zealand. Over five minutes of totality at maximum.',
|
||||
start: '2028-07-22', peak: '2028-07-22',
|
||||
color: '#1a0a2a', textColor: '#d8c8f8',
|
||||
latHint: 'path:Australia (Sydney), New Zealand (Queenstown)',
|
||||
type: 'eclipse',
|
||||
},
|
||||
{
|
||||
id: 'perseids-2028',
|
||||
emoji: '☄️',
|
||||
title: 'Perseid Meteor Shower',
|
||||
desc: 'One of the best showers of the year — up to 100/hour at peak, no telescope needed. Active Jul 17 – Aug 24.',
|
||||
start: '2028-07-17', peak: '2028-08-12',
|
||||
color: '#3a1a00', textColor: '#ffe8c0',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'orionids-2028',
|
||||
emoji: '☄️',
|
||||
title: 'Orionid Meteor Shower',
|
||||
desc: 'Fast, bright meteors from Halley\'s Comet debris — up to 25/hour. Active Oct 2 – Nov 7.',
|
||||
start: '2028-10-02', peak: '2028-10-21',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: null,
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'saturn-opposition-2028',
|
||||
emoji: '🪐',
|
||||
title: 'Saturn at Opposition',
|
||||
desc: 'Saturn at its closest and brightest — visible all night, its rings a highlight in any small telescope.',
|
||||
start: '2028-10-30', peak: '2028-10-30',
|
||||
color: '#1a2a3a', textColor: '#c8e8ff',
|
||||
latHint: null,
|
||||
type: 'planetary',
|
||||
},
|
||||
{
|
||||
id: 'leonids-2028',
|
||||
emoji: '☄️',
|
||||
title: 'Leonid Meteor Shower',
|
||||
desc: 'Fast meteors from comet Tempel-Tuttle. Up to 15/hour at peak. Active Nov 6–30.',
|
||||
start: '2028-11-06', peak: '2028-11-17',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: null,
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'geminids-2028',
|
||||
emoji: '☄️',
|
||||
title: 'Geminid Meteor Shower',
|
||||
desc: 'The finest shower of the year — up to 150 meteors/hour, visible even before midnight. Active Dec 4–20.',
|
||||
start: '2028-12-04', peak: '2028-12-13',
|
||||
color: '#3a1a00', textColor: '#ffe8c0',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'ursids-2028',
|
||||
emoji: '☄️',
|
||||
title: 'Ursid Meteor Shower',
|
||||
desc: 'A quieter shower near the winter solstice — circumpolar, best from northern latitudes. Active Dec 17–26.',
|
||||
start: '2028-12-17', peak: '2028-12-22',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'lunar-eclipse-2028-dec',
|
||||
emoji: '🌕',
|
||||
title: 'Total Lunar Eclipse',
|
||||
desc: 'A New Year\'s Eve "Blood Moon" — the Moon turns deep red in Earth\'s shadow. Visible from Europe, Africa, Asia and the Americas.',
|
||||
start: '2028-12-31', peak: '2028-12-31',
|
||||
color: '#3a0a0a', textColor: '#ffd8d8',
|
||||
latHint: null,
|
||||
type: 'eclipse',
|
||||
},
|
||||
];
|
||||
@@ -0,0 +1,265 @@
|
||||
// ------------------------------------------------------------------------
|
||||
// calendar/2029.js - Cosmic & almanac events for 2029.
|
||||
// See ./2026.js for the shape of each array.
|
||||
//
|
||||
// Note: 2029's four solar eclipses are all minor partials, so only the two
|
||||
// total lunar eclipses ("Blood Moons") are listed here.
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
export const cosmic = [
|
||||
// -- METEOR SHOWERS --------------------------------------------------
|
||||
{
|
||||
id: 'quadrantids-2029',
|
||||
emoji: '☄️',
|
||||
title: 'Quadrantid Meteor Shower',
|
||||
message: 'The Quadrantid meteor shower is active — up to 120 meteors/hour at a sharp peak. Best in the hours before dawn from a dark site.',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2029-01-01', end: '2029-01-05', peak: '2029-01-03',
|
||||
},
|
||||
{
|
||||
id: 'lyrids-2029',
|
||||
emoji: '☄️',
|
||||
title: 'Lyrid Meteor Shower',
|
||||
message: 'The Lyrid meteor shower peaks — up to 20 meteors/hour after midnight from a dark sky.',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2029-04-16', end: '2029-04-25', peak: '2029-04-22',
|
||||
},
|
||||
{
|
||||
id: 'eta-aquariids-2029',
|
||||
emoji: '☄️',
|
||||
title: 'Eta Aquariid Meteor Shower',
|
||||
message: 'The Eta Aquariids peak — fragments of Halley\'s Comet, up to 50/hour in the hours before dawn.',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2029-04-19', end: '2029-05-28', peak: '2029-05-06',
|
||||
},
|
||||
{
|
||||
id: 'perseids-2029',
|
||||
emoji: '☄️',
|
||||
title: 'Perseid Meteor Shower',
|
||||
message: 'The Perseids are active — one of the best showers of the year, up to 100 meteors/hour at peak around 12 Aug.',
|
||||
color: '#3a1a00', textColor: '#ffe8c0',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2029-07-17', end: '2029-08-24', peak: '2029-08-12',
|
||||
},
|
||||
{
|
||||
id: 'orionids-2029',
|
||||
emoji: '☄️',
|
||||
title: 'Orionid Meteor Shower',
|
||||
message: 'The Orionid shower peaks — fast, bright meteors from Halley\'s Comet debris. Up to 25/hour.',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2029-10-02', end: '2029-11-07', peak: '2029-10-21',
|
||||
},
|
||||
{
|
||||
id: 'leonids-2029',
|
||||
emoji: '☄️',
|
||||
title: 'Leonid Meteor Shower',
|
||||
message: 'The Leonid shower peaks — fast meteors from comet Tempel-Tuttle, up to 15/hour.',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2029-11-06', end: '2029-11-30', peak: '2029-11-17',
|
||||
},
|
||||
{
|
||||
id: 'geminids-2029',
|
||||
emoji: '☄️',
|
||||
title: 'Geminid Meteor Shower',
|
||||
message: 'The Geminids peak — the finest shower of the year, up to 150 meteors/hour, visible even before midnight.',
|
||||
color: '#3a1a00', textColor: '#ffe8c0',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2029-12-04', end: '2029-12-20', peak: '2029-12-13',
|
||||
},
|
||||
{
|
||||
id: 'ursids-2029',
|
||||
emoji: '☄️',
|
||||
title: 'Ursid Meteor Shower',
|
||||
message: 'The Ursid shower peaks near the winter solstice — circumpolar, best from northern latitudes.',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2029-12-17', end: '2029-12-26', peak: '2029-12-22',
|
||||
},
|
||||
|
||||
// -- ECLIPSES --------------------------------------------------------
|
||||
{
|
||||
id: 'lunar-eclipse-2029-jun',
|
||||
emoji: '🌕',
|
||||
title: 'Total Lunar Eclipse',
|
||||
message: 'A total lunar eclipse tonight — the Moon turns deep red (a "Blood Moon") as it passes through Earth\'s shadow. Visible across Europe, Africa and the Americas.',
|
||||
color: '#3a0a0a', textColor: '#ffd8d8',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2029-06-26', end: '2029-06-26', peak: '2029-06-26',
|
||||
},
|
||||
{
|
||||
id: 'lunar-eclipse-2029-dec',
|
||||
emoji: '🌕',
|
||||
title: 'Total Lunar Eclipse',
|
||||
message: 'The second total lunar eclipse of the year — another deep-red "Blood Moon" in Earth\'s shadow, visible across Europe, Asia, Africa and the Americas.',
|
||||
color: '#3a0a0a', textColor: '#ffd8d8',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2029-12-20', end: '2029-12-20', peak: '2029-12-20',
|
||||
},
|
||||
|
||||
// -- PLANETARY EVENTS ------------------------------------------------
|
||||
{
|
||||
id: 'mars-opposition-2029',
|
||||
emoji: '🔴',
|
||||
title: 'Mars at Opposition',
|
||||
message: 'Mars is at opposition — a vivid red beacon visible all night long. This is a more distant opposition, but Mars still outshines almost every star in the sky.',
|
||||
color: '#2a1520', textColor: '#ffc8d8',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2029-03-25', end: '2029-03-25', peak: '2029-03-25',
|
||||
},
|
||||
{
|
||||
id: 'jupiter-opposition-2029',
|
||||
emoji: '🪐',
|
||||
title: 'Jupiter at Opposition',
|
||||
message: 'Jupiter is at its closest and brightest — visible all night long. Its cloud bands and four Galilean moons show through binoculars.',
|
||||
color: '#1a2a3a', textColor: '#c8e8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2029-04-12', end: '2029-04-12', peak: '2029-04-12',
|
||||
},
|
||||
{
|
||||
id: 'saturn-opposition-2029',
|
||||
emoji: '🪐',
|
||||
title: 'Saturn at Opposition',
|
||||
message: 'Saturn is at its closest and brightest tonight — visible all night long, its rings a highlight in any small telescope.',
|
||||
color: '#1a2a3a', textColor: '#c8e8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2029-11-12', end: '2029-11-12', peak: '2029-11-12',
|
||||
},
|
||||
];
|
||||
|
||||
export const almanac = [
|
||||
{
|
||||
id: 'quadrantids-2029',
|
||||
emoji: '☄️',
|
||||
title: 'Quadrantid Meteor Shower',
|
||||
desc: 'Up to 120 meteors/hour at a very sharp peak. Best in the hours before dawn on 3 Jan from a dark site.',
|
||||
start: '2029-01-01', peak: '2029-01-03',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'mars-opposition-2029',
|
||||
emoji: '🔴',
|
||||
title: 'Mars at Opposition',
|
||||
desc: 'Mars at opposition — a vivid red beacon visible all night. A more distant (aphelic) opposition, but Mars still outshines almost every star.',
|
||||
start: '2029-03-25', peak: '2029-03-25',
|
||||
color: '#2a1520', textColor: '#ffc8d8',
|
||||
latHint: null,
|
||||
type: 'planetary',
|
||||
},
|
||||
{
|
||||
id: 'jupiter-opposition-2029',
|
||||
emoji: '🪐',
|
||||
title: 'Jupiter at Opposition',
|
||||
desc: 'Jupiter at its closest and brightest — cloud bands and the four Galilean moons visible through binoculars. Well placed all night.',
|
||||
start: '2029-04-12', peak: '2029-04-12',
|
||||
color: '#1a2a3a', textColor: '#c8e8ff',
|
||||
latHint: null,
|
||||
type: 'planetary',
|
||||
},
|
||||
{
|
||||
id: 'lyrids-2029',
|
||||
emoji: '☄️',
|
||||
title: 'Lyrid Meteor Shower',
|
||||
desc: 'Up to 20 meteors/hour at peak. Active Apr 16–25, best after midnight from a dark site.',
|
||||
start: '2029-04-16', peak: '2029-04-22',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'eta-aquariids-2029',
|
||||
emoji: '☄️',
|
||||
title: 'Eta Aquariid Meteor Shower',
|
||||
desc: 'Debris from Halley\'s Comet — up to 50/hour before dawn. Best from southern latitudes but visible worldwide.',
|
||||
start: '2029-04-19', peak: '2029-05-06',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: 'south',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'lunar-eclipse-2029-jun',
|
||||
emoji: '🌕',
|
||||
title: 'Total Lunar Eclipse',
|
||||
desc: 'A deep-red "Blood Moon" as the Moon passes through Earth\'s shadow. Visible from Europe, Africa and the Americas.',
|
||||
start: '2029-06-26', peak: '2029-06-26',
|
||||
color: '#3a0a0a', textColor: '#ffd8d8',
|
||||
latHint: null,
|
||||
type: 'eclipse',
|
||||
},
|
||||
{
|
||||
id: 'perseids-2029',
|
||||
emoji: '☄️',
|
||||
title: 'Perseid Meteor Shower',
|
||||
desc: 'One of the best showers of the year — up to 100/hour at peak, no telescope needed. Active Jul 17 – Aug 24.',
|
||||
start: '2029-07-17', peak: '2029-08-12',
|
||||
color: '#3a1a00', textColor: '#ffe8c0',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'orionids-2029',
|
||||
emoji: '☄️',
|
||||
title: 'Orionid Meteor Shower',
|
||||
desc: 'Fast, bright meteors from Halley\'s Comet debris — up to 25/hour. Active Oct 2 – Nov 7.',
|
||||
start: '2029-10-02', peak: '2029-10-21',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: null,
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'saturn-opposition-2029',
|
||||
emoji: '🪐',
|
||||
title: 'Saturn at Opposition',
|
||||
desc: 'Saturn at its closest and brightest — visible all night, its rings a highlight in any small telescope.',
|
||||
start: '2029-11-12', peak: '2029-11-12',
|
||||
color: '#1a2a3a', textColor: '#c8e8ff',
|
||||
latHint: null,
|
||||
type: 'planetary',
|
||||
},
|
||||
{
|
||||
id: 'leonids-2029',
|
||||
emoji: '☄️',
|
||||
title: 'Leonid Meteor Shower',
|
||||
desc: 'Fast meteors from comet Tempel-Tuttle. Up to 15/hour at peak. Active Nov 6–30.',
|
||||
start: '2029-11-06', peak: '2029-11-17',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: null,
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'geminids-2029',
|
||||
emoji: '☄️',
|
||||
title: 'Geminid Meteor Shower',
|
||||
desc: 'The finest shower of the year — up to 150 meteors/hour, visible even before midnight. Active Dec 4–20.',
|
||||
start: '2029-12-04', peak: '2029-12-13',
|
||||
color: '#3a1a00', textColor: '#ffe8c0',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'ursids-2029',
|
||||
emoji: '☄️',
|
||||
title: 'Ursid Meteor Shower',
|
||||
desc: 'A quieter shower near the winter solstice — circumpolar, best from northern latitudes. Active Dec 17–26.',
|
||||
start: '2029-12-17', peak: '2029-12-22',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'lunar-eclipse-2029-dec',
|
||||
emoji: '🌕',
|
||||
title: 'Total Lunar Eclipse',
|
||||
desc: 'The year\'s second "Blood Moon" — the Moon turns deep red in Earth\'s shadow. Visible from Europe, Asia, Africa and the Americas.',
|
||||
start: '2029-12-20', peak: '2029-12-20',
|
||||
color: '#3a0a0a', textColor: '#ffd8d8',
|
||||
latHint: null,
|
||||
type: 'eclipse',
|
||||
},
|
||||
];
|
||||
@@ -0,0 +1,243 @@
|
||||
// ------------------------------------------------------------------------
|
||||
// calendar/2030.js - Cosmic & almanac events for 2030.
|
||||
// See ./2026.js for the shape of each array.
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
export const cosmic = [
|
||||
// -- METEOR SHOWERS --------------------------------------------------
|
||||
{
|
||||
id: 'quadrantids-2030',
|
||||
emoji: '☄️',
|
||||
title: 'Quadrantid Meteor Shower',
|
||||
message: 'The Quadrantid meteor shower is active — up to 120 meteors/hour at a sharp peak. Best in the hours before dawn from a dark site.',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2030-01-01', end: '2030-01-05', peak: '2030-01-03',
|
||||
},
|
||||
{
|
||||
id: 'lyrids-2030',
|
||||
emoji: '☄️',
|
||||
title: 'Lyrid Meteor Shower',
|
||||
message: 'The Lyrid meteor shower peaks — up to 20 meteors/hour after midnight from a dark sky.',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2030-04-16', end: '2030-04-25', peak: '2030-04-22',
|
||||
},
|
||||
{
|
||||
id: 'eta-aquariids-2030',
|
||||
emoji: '☄️',
|
||||
title: 'Eta Aquariid Meteor Shower',
|
||||
message: 'The Eta Aquariids peak — fragments of Halley\'s Comet, up to 50/hour in the hours before dawn.',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2030-04-19', end: '2030-05-28', peak: '2030-05-06',
|
||||
},
|
||||
{
|
||||
id: 'perseids-2030',
|
||||
emoji: '☄️',
|
||||
title: 'Perseid Meteor Shower',
|
||||
message: 'The Perseids are active — one of the best showers of the year, up to 100 meteors/hour at peak around 13 Aug.',
|
||||
color: '#3a1a00', textColor: '#ffe8c0',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2030-07-17', end: '2030-08-24', peak: '2030-08-13',
|
||||
},
|
||||
{
|
||||
id: 'orionids-2030',
|
||||
emoji: '☄️',
|
||||
title: 'Orionid Meteor Shower',
|
||||
message: 'The Orionid shower peaks — fast, bright meteors from Halley\'s Comet debris. Up to 25/hour.',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2030-10-02', end: '2030-11-07', peak: '2030-10-21',
|
||||
},
|
||||
{
|
||||
id: 'leonids-2030',
|
||||
emoji: '☄️',
|
||||
title: 'Leonid Meteor Shower',
|
||||
message: 'The Leonid shower peaks — fast meteors from comet Tempel-Tuttle, up to 15/hour.',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2030-11-06', end: '2030-11-30', peak: '2030-11-17',
|
||||
},
|
||||
{
|
||||
id: 'geminids-2030',
|
||||
emoji: '☄️',
|
||||
title: 'Geminid Meteor Shower',
|
||||
message: 'The Geminids peak — the finest shower of the year, up to 150 meteors/hour, visible even before midnight.',
|
||||
color: '#3a1a00', textColor: '#ffe8c0',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2030-12-04', end: '2030-12-20', peak: '2030-12-14',
|
||||
},
|
||||
{
|
||||
id: 'ursids-2030',
|
||||
emoji: '☄️',
|
||||
title: 'Ursid Meteor Shower',
|
||||
message: 'The Ursid shower peaks near the winter solstice — circumpolar, best from northern latitudes.',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2030-12-17', end: '2030-12-26', peak: '2030-12-22',
|
||||
},
|
||||
|
||||
// -- ECLIPSES --------------------------------------------------------
|
||||
{
|
||||
id: 'annular-solar-eclipse-2030-jun',
|
||||
emoji: '🌑',
|
||||
title: 'Annular Solar Eclipse',
|
||||
message: 'An annular "ring of fire" eclipse today — the path sweeps across North Africa, Greece and Turkey, then on through Russia, Kazakhstan, China and Japan. Partial eclipse across much of Europe.',
|
||||
color: '#1a0a2a', textColor: '#d8c8f8',
|
||||
type: 'cosmic', nightOnly: false,
|
||||
start: '2030-06-01', end: '2030-06-01', peak: '2030-06-01',
|
||||
},
|
||||
{
|
||||
id: 'total-solar-eclipse-2030-nov',
|
||||
emoji: '🌑',
|
||||
title: 'Total Solar Eclipse',
|
||||
message: 'A total solar eclipse today — the path of totality crosses southern Africa (Namibia, Botswana and South Africa) before ending over southern Australia. Look for rapid temperature drops even in partial zones.',
|
||||
color: '#1a0a2a', textColor: '#d8c8f8',
|
||||
type: 'cosmic', nightOnly: false,
|
||||
start: '2030-11-25', end: '2030-11-25', peak: '2030-11-25',
|
||||
},
|
||||
|
||||
// -- PLANETARY EVENTS ------------------------------------------------
|
||||
{
|
||||
id: 'jupiter-opposition-2030',
|
||||
emoji: '🪐',
|
||||
title: 'Jupiter at Opposition',
|
||||
message: 'Jupiter is at its closest and brightest — visible all night long. Its cloud bands and four Galilean moons show through binoculars.',
|
||||
color: '#1a2a3a', textColor: '#c8e8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2030-05-16', end: '2030-05-16', peak: '2030-05-16',
|
||||
},
|
||||
{
|
||||
id: 'saturn-opposition-2030',
|
||||
emoji: '🪐',
|
||||
title: 'Saturn at Opposition',
|
||||
message: 'Saturn is at its closest and brightest tonight — visible all night long, its rings a highlight in any small telescope.',
|
||||
color: '#1a2a3a', textColor: '#c8e8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2030-11-21', end: '2030-11-21', peak: '2030-11-21',
|
||||
},
|
||||
];
|
||||
|
||||
export const almanac = [
|
||||
{
|
||||
id: 'quadrantids-2030',
|
||||
emoji: '☄️',
|
||||
title: 'Quadrantid Meteor Shower',
|
||||
desc: 'Up to 120 meteors/hour at a very sharp peak. Best in the hours before dawn on 3 Jan from a dark site.',
|
||||
start: '2030-01-01', peak: '2030-01-03',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'lyrids-2030',
|
||||
emoji: '☄️',
|
||||
title: 'Lyrid Meteor Shower',
|
||||
desc: 'Up to 20 meteors/hour at peak. Active Apr 16–25, best after midnight from a dark site.',
|
||||
start: '2030-04-16', peak: '2030-04-22',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'eta-aquariids-2030',
|
||||
emoji: '☄️',
|
||||
title: 'Eta Aquariid Meteor Shower',
|
||||
desc: 'Debris from Halley\'s Comet — up to 50/hour before dawn. Best from southern latitudes but visible worldwide.',
|
||||
start: '2030-04-19', peak: '2030-05-06',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: 'south',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'jupiter-opposition-2030',
|
||||
emoji: '🪐',
|
||||
title: 'Jupiter at Opposition',
|
||||
desc: 'Jupiter at its closest and brightest — cloud bands and the four Galilean moons visible through binoculars. Well placed all night.',
|
||||
start: '2030-05-16', peak: '2030-05-16',
|
||||
color: '#1a2a3a', textColor: '#c8e8ff',
|
||||
latHint: null,
|
||||
type: 'planetary',
|
||||
},
|
||||
{
|
||||
id: 'annular-solar-eclipse-2030-jun',
|
||||
emoji: '🌑',
|
||||
title: 'Annular Solar Eclipse',
|
||||
desc: 'A "ring of fire" eclipse. The path crosses Algeria, Tunisia, Greece and Turkey, then Russia, Kazakhstan, China and Japan. Partial eclipse across much of Europe.',
|
||||
start: '2030-06-01', peak: '2030-06-01',
|
||||
color: '#1a0a2a', textColor: '#d8c8f8',
|
||||
latHint: 'path:N. Africa, Greece, Turkey, Russia, China, Japan — partial across Europe',
|
||||
type: 'eclipse',
|
||||
},
|
||||
{
|
||||
id: 'perseids-2030',
|
||||
emoji: '☄️',
|
||||
title: 'Perseid Meteor Shower',
|
||||
desc: 'One of the best showers of the year — up to 100/hour at peak, no telescope needed. Active Jul 17 – Aug 24.',
|
||||
start: '2030-07-17', peak: '2030-08-13',
|
||||
color: '#3a1a00', textColor: '#ffe8c0',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'orionids-2030',
|
||||
emoji: '☄️',
|
||||
title: 'Orionid Meteor Shower',
|
||||
desc: 'Fast, bright meteors from Halley\'s Comet debris — up to 25/hour. Active Oct 2 – Nov 7.',
|
||||
start: '2030-10-02', peak: '2030-10-21',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: null,
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'leonids-2030',
|
||||
emoji: '☄️',
|
||||
title: 'Leonid Meteor Shower',
|
||||
desc: 'Fast meteors from comet Tempel-Tuttle. Up to 15/hour at peak. Active Nov 6–30.',
|
||||
start: '2030-11-06', peak: '2030-11-17',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: null,
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'saturn-opposition-2030',
|
||||
emoji: '🪐',
|
||||
title: 'Saturn at Opposition',
|
||||
desc: 'Saturn at its closest and brightest — visible all night, its rings a highlight in any small telescope.',
|
||||
start: '2030-11-21', peak: '2030-11-21',
|
||||
color: '#1a2a3a', textColor: '#c8e8ff',
|
||||
latHint: null,
|
||||
type: 'planetary',
|
||||
},
|
||||
{
|
||||
id: 'total-solar-eclipse-2030-nov',
|
||||
emoji: '🌑',
|
||||
title: 'Total Solar Eclipse',
|
||||
desc: 'The path of totality crosses Namibia, Botswana and South Africa (near Durban), then ends over southern Australia. Partial eclipse across southern Africa and Australasia.',
|
||||
start: '2030-11-25', peak: '2030-11-25',
|
||||
color: '#1a0a2a', textColor: '#d8c8f8',
|
||||
latHint: 'path:Namibia, Botswana, South Africa → southern Australia',
|
||||
type: 'eclipse',
|
||||
},
|
||||
{
|
||||
id: 'geminids-2030',
|
||||
emoji: '☄️',
|
||||
title: 'Geminid Meteor Shower',
|
||||
desc: 'The finest shower of the year — up to 150 meteors/hour, visible even before midnight. Active Dec 4–20.',
|
||||
start: '2030-12-04', peak: '2030-12-14',
|
||||
color: '#3a1a00', textColor: '#ffe8c0',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
{
|
||||
id: 'ursids-2030',
|
||||
emoji: '☄️',
|
||||
title: 'Ursid Meteor Shower',
|
||||
desc: 'A quieter shower near the winter solstice — circumpolar, best from northern latitudes. Active Dec 17–26.',
|
||||
start: '2030-12-17', peak: '2030-12-22',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
latHint: 'north',
|
||||
type: 'meteor',
|
||||
},
|
||||
];
|
||||
@@ -2,275 +2,31 @@
|
||||
// cosmic-calendar.js - Hardcoded cosmic events (meteor showers, eclipses,
|
||||
// planetary oppositions/conjunctions) used by getActiveEvents.
|
||||
//
|
||||
// The per-year data now lives in ./calendar/<year>.js — each of those files
|
||||
// exports a `cosmic` array (banner events) and an `almanac` array (the
|
||||
// "What's Coming" panel). This module just concatenates the cosmic arrays
|
||||
// in chronological order.
|
||||
//
|
||||
// Each entry: { id, start: 'YYYY-MM-DD', end: 'YYYY-MM-DD',
|
||||
// peak: 'YYYY-MM-DD' (optional), ...eventProps }
|
||||
// Active if today falls within [start, end] (inclusive).
|
||||
// Night-only events (meteor showers, eclipses) are marked nightOnly: true
|
||||
// so the cell icons only appear in night-time rows.
|
||||
//
|
||||
// To add a new year: create ./calendar/<year>.js (copy an existing one),
|
||||
// then import it below and add its `cosmic` spread to COSMIC_CALENDAR.
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
import { cosmic as cosmic2026 } from './calendar/2026.js';
|
||||
import { cosmic as cosmic2027 } from './calendar/2027.js';
|
||||
import { cosmic as cosmic2028 } from './calendar/2028.js';
|
||||
import { cosmic as cosmic2029 } from './calendar/2029.js';
|
||||
import { cosmic as cosmic2030 } from './calendar/2030.js';
|
||||
|
||||
export const COSMIC_CALENDAR = [
|
||||
|
||||
// -- METEOR SHOWERS --------------------------------------------------
|
||||
{
|
||||
id: 'quadrantids-2026',
|
||||
emoji: '☄️',
|
||||
title: 'Quadrantid Meteor Shower',
|
||||
message: 'The Quadrantid meteor shower is active — up to 120 meteors/hour at peak. Best after midnight in a dark sky.',
|
||||
color: '#2a1a5a',
|
||||
textColor: '#e8d8ff',
|
||||
type: 'cosmic',
|
||||
nightOnly: true,
|
||||
start: '2026-01-01', end: '2026-01-05', peak: '2026-01-03',
|
||||
},
|
||||
{
|
||||
id: 'lyrids-2026',
|
||||
emoji: '☄️',
|
||||
title: 'Lyrid Meteor Shower',
|
||||
message: 'The Lyrid meteor shower peaks tonight — up to 20 meteors/hour from a dark sky after midnight.',
|
||||
color: '#2a1a5a',
|
||||
textColor: '#e8d8ff',
|
||||
type: 'cosmic',
|
||||
nightOnly: true,
|
||||
start: '2026-04-16', end: '2026-04-25', peak: '2026-04-22',
|
||||
},
|
||||
{
|
||||
id: 'eta-aquariids-2026',
|
||||
emoji: '☄️',
|
||||
title: 'Eta Aquariid Meteor Shower',
|
||||
message: 'The Eta Aquariid shower peaks tonight — fragments of Halley\'s Comet, up to 50/hour before dawn.',
|
||||
color: '#2a1a5a',
|
||||
textColor: '#e8d8ff',
|
||||
type: 'cosmic',
|
||||
nightOnly: true,
|
||||
start: '2026-04-19', end: '2026-05-28', peak: '2026-05-06',
|
||||
},
|
||||
{
|
||||
id: 'perseids-2026',
|
||||
emoji: '☄️',
|
||||
title: 'Perseid Meteor Shower',
|
||||
message: 'The Perseids are active — one of the best showers of the year, up to 100 meteors/hour at peak.',
|
||||
color: '#3a1a00',
|
||||
textColor: '#ffe8c0',
|
||||
type: 'cosmic',
|
||||
nightOnly: true,
|
||||
start: '2026-07-17', end: '2026-08-24', peak: '2026-08-12',
|
||||
},
|
||||
{
|
||||
id: 'orionids-2026',
|
||||
emoji: '☄️',
|
||||
title: 'Orionid Meteor Shower',
|
||||
message: 'The Orionid shower peaks tonight — fast, bright meteors from Halley\'s Comet debris. Up to 25/hour.',
|
||||
color: '#2a1a5a',
|
||||
textColor: '#e8d8ff',
|
||||
type: 'cosmic',
|
||||
nightOnly: true,
|
||||
start: '2026-10-02', end: '2026-11-07', peak: '2026-10-21',
|
||||
},
|
||||
{
|
||||
id: 'leonids-2026',
|
||||
emoji: '☄️',
|
||||
title: 'Leonid Meteor Shower',
|
||||
message: 'The Leonid shower is active tonight — fast, bright meteors from comet Tempel-Tuttle.',
|
||||
color: '#2a1a5a',
|
||||
textColor: '#e8d8ff',
|
||||
type: 'cosmic',
|
||||
nightOnly: true,
|
||||
start: '2026-11-06', end: '2026-11-30', peak: '2026-11-17',
|
||||
},
|
||||
{
|
||||
id: 'geminids-2026',
|
||||
emoji: '☄️',
|
||||
title: 'Geminid Meteor Shower',
|
||||
message: 'The Geminids peak tonight — the best shower of the year, up to 150 meteors/hour. No moon interference.',
|
||||
color: '#3a1a00',
|
||||
textColor: '#ffe8c0',
|
||||
type: 'cosmic',
|
||||
nightOnly: true,
|
||||
start: '2026-12-04', end: '2026-12-20', peak: '2026-12-13',
|
||||
},
|
||||
{
|
||||
id: 'ursids-2026',
|
||||
emoji: '☄️',
|
||||
title: 'Ursid Meteor Shower',
|
||||
message: 'The Ursid shower peaks tonight — a quieter festive shower near the winter solstice.',
|
||||
color: '#2a1a5a',
|
||||
textColor: '#e8d8ff',
|
||||
type: 'cosmic',
|
||||
nightOnly: true,
|
||||
start: '2026-12-17', end: '2026-12-26', peak: '2026-12-22',
|
||||
},
|
||||
|
||||
// -- ECLIPSES --------------------------------------------------------
|
||||
{
|
||||
id: 'solar-eclipse-2026-aug',
|
||||
emoji: '🌑',
|
||||
title: 'Total Solar Eclipse',
|
||||
message: 'A total solar eclipse crosses Europe and North Africa today — look for rapid temperature drops and unusual animal behaviour even in partial zones.',
|
||||
color: '#1a0a2a',
|
||||
textColor: '#d8c8f8',
|
||||
type: 'cosmic',
|
||||
nightOnly: false,
|
||||
start: '2026-08-12', end: '2026-08-12',
|
||||
},
|
||||
{
|
||||
id: 'lunar-eclipse-2026-mar',
|
||||
emoji: '🌕',
|
||||
title: 'Total Lunar Eclipse',
|
||||
message: 'A total lunar eclipse is visible tonight — the Moon turns deep red (a "Blood Moon") as it passes through Earth\'s shadow.',
|
||||
color: '#3a0a0a',
|
||||
textColor: '#ffd8d8',
|
||||
type: 'cosmic',
|
||||
nightOnly: true,
|
||||
start: '2026-03-03', end: '2026-03-03',
|
||||
},
|
||||
|
||||
// -- PLANETARY EVENTS ------------------------------------------------
|
||||
{
|
||||
id: 'saturn-opposition-2026',
|
||||
emoji: '🪐',
|
||||
title: 'Saturn at Opposition',
|
||||
message: 'Saturn is at its closest and brightest tonight — visible all night long, rings tilted beautifully toward Earth.',
|
||||
color: '#1a2a3a',
|
||||
textColor: '#c8e8ff',
|
||||
type: 'cosmic',
|
||||
nightOnly: true,
|
||||
start: '2026-09-23', end: '2026-09-23',
|
||||
},
|
||||
{
|
||||
id: 'jupiter-opposition-2026',
|
||||
emoji: '🪐',
|
||||
title: 'Jupiter at Opposition',
|
||||
message: 'Jupiter is at its closest and brightest tonight — you can see its cloud bands with binoculars.',
|
||||
color: '#1a2a3a',
|
||||
textColor: '#c8e8ff',
|
||||
type: 'cosmic',
|
||||
nightOnly: true,
|
||||
start: '2026-10-08', end: '2026-10-08',
|
||||
},
|
||||
{
|
||||
id: 'mars-conjunction-2026',
|
||||
emoji: '🔴',
|
||||
title: 'Mars & Venus Conjunction',
|
||||
message: 'Mars and Venus are remarkably close in the evening sky tonight — a striking pair visible to the naked eye.',
|
||||
color: '#2a1520',
|
||||
textColor: '#ffc8d8',
|
||||
type: 'cosmic',
|
||||
nightOnly: true,
|
||||
start: '2026-06-30', end: '2026-07-02',
|
||||
},
|
||||
|
||||
// -- 2027 METEOR SHOWERS ---------------------------------------------
|
||||
{
|
||||
id: 'quadrantids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Quadrantid Meteor Shower',
|
||||
message: 'The Quadrantid meteor shower is active — up to 120 meteors/hour at peak. Best in the hours before dawn on 4 Jan from a dark site.',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2027-01-01', end: '2027-01-05', peak: '2027-01-04',
|
||||
},
|
||||
{
|
||||
id: 'lyrids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Lyrid Meteor Shower',
|
||||
message: 'The Lyrid meteor shower peaks — up to 20 meteors/hour after midnight. Note: bright waning gibbous moon may reduce visibility this year.',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2027-04-16', end: '2027-04-25', peak: '2027-04-23',
|
||||
},
|
||||
{
|
||||
id: 'eta-aquariids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Eta Aquariid Meteor Shower',
|
||||
message: 'The Eta Aquariids peak — fragments of Halley\'s Comet, up to 50/hour before dawn. New moon on 6 May means excellent dark skies this year.',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2027-04-19', end: '2027-05-28', peak: '2027-05-05',
|
||||
},
|
||||
{
|
||||
id: 'perseids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Perseid Meteor Shower',
|
||||
message: 'The Perseids are active — one of the best showers of the year, up to 100 meteors/hour at peak around 13 Aug.',
|
||||
color: '#3a1a00', textColor: '#ffe8c0',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2027-07-17', end: '2027-08-24', peak: '2027-08-13',
|
||||
},
|
||||
{
|
||||
id: 'orionids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Orionid Meteor Shower',
|
||||
message: 'The Orionid shower peaks — fast, bright meteors from Halley\'s Comet debris. Up to 25/hour.',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2027-10-02', end: '2027-11-07', peak: '2027-10-21',
|
||||
},
|
||||
{
|
||||
id: 'leonids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Leonid Meteor Shower',
|
||||
message: 'The Leonid shower peaks — fast meteors from comet Tempel-Tuttle, up to 15/hour.',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2027-11-06', end: '2027-11-30', peak: '2027-11-17',
|
||||
},
|
||||
{
|
||||
id: 'geminids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Geminid Meteor Shower',
|
||||
message: 'The Geminids peak — the finest shower of the year, up to 150 meteors/hour, visible even before midnight.',
|
||||
color: '#3a1a00', textColor: '#ffe8c0',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2027-12-04', end: '2027-12-20', peak: '2027-12-14',
|
||||
},
|
||||
{
|
||||
id: 'ursids-2027',
|
||||
emoji: '☄️',
|
||||
title: 'Ursid Meteor Shower',
|
||||
message: 'The Ursid shower peaks near the winter solstice — circumpolar, best from northern latitudes.',
|
||||
color: '#2a1a5a', textColor: '#e8d8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2027-12-17', end: '2027-12-26', peak: '2027-12-22',
|
||||
},
|
||||
|
||||
// -- 2027 ECLIPSES ---------------------------------------------------
|
||||
{
|
||||
id: 'annular-solar-eclipse-2027-feb',
|
||||
emoji: '🌑',
|
||||
title: 'Annular Solar Eclipse',
|
||||
message: 'An annular solar eclipse creates a "ring of fire" effect — visible across parts of South America, Africa and the Indian Ocean.',
|
||||
color: '#1a0a2a', textColor: '#d8c8f8',
|
||||
type: 'cosmic', nightOnly: false,
|
||||
start: '2027-02-06', end: '2027-02-06', peak: '2027-02-06',
|
||||
},
|
||||
{
|
||||
id: 'total-solar-eclipse-2027-aug',
|
||||
emoji: '🌑',
|
||||
title: 'Total Solar Eclipse',
|
||||
message: 'A spectacular total solar eclipse — the path of totality crosses Morocco, Spain, Algeria, Libya, Egypt and Saudi Arabia. One of the longest totalities of the century.',
|
||||
color: '#1a0a2a', textColor: '#d8c8f8',
|
||||
type: 'cosmic', nightOnly: false,
|
||||
start: '2027-08-02', end: '2027-08-02', peak: '2027-08-02',
|
||||
},
|
||||
|
||||
// -- 2027 PLANETARY EVENTS -------------------------------------------
|
||||
{
|
||||
id: 'mars-opposition-2027',
|
||||
emoji: '🔴',
|
||||
title: 'Mars at Opposition',
|
||||
message: 'Mars is at its closest and brightest — a vivid red beacon visible all night long. Good binoculars will reveal its surface colour.',
|
||||
color: '#2a1520', textColor: '#ffc8d8',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2027-02-19', end: '2027-02-19', peak: '2027-02-19',
|
||||
},
|
||||
{
|
||||
id: 'venus-jupiter-conjunction-2027',
|
||||
emoji: '🪐',
|
||||
title: 'Venus & Jupiter Conjunction',
|
||||
message: 'Venus and Jupiter appear strikingly close together in the evening sky — a dazzling naked-eye pairing of the two brightest planets.',
|
||||
color: '#1a2a3a', textColor: '#c8e8ff',
|
||||
type: 'cosmic', nightOnly: true,
|
||||
start: '2027-08-23', end: '2027-08-27', peak: '2027-08-25',
|
||||
},
|
||||
...cosmic2026,
|
||||
...cosmic2027,
|
||||
...cosmic2028,
|
||||
...cosmic2029,
|
||||
...cosmic2030,
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user