From 214b8987cc1eb9fcbcbb555e2b11e1dc02c9fe68 Mon Sep 17 00:00:00 2001 From: fraxle Date: Sat, 16 May 2026 21:18:28 +0100 Subject: [PATCH] v1.4 - Cosmic Events --- assets/css/ui.css | 199 +++++++++++++ assets/js/app.js | 101 +++++++ assets/js/components.js | 8 +- assets/js/events.js | 632 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 939 insertions(+), 1 deletion(-) create mode 100644 assets/js/events.js diff --git a/assets/css/ui.css b/assets/css/ui.css index 8077bd4..d080515 100644 --- a/assets/css/ui.css +++ b/assets/css/ui.css @@ -3,6 +3,205 @@ ════════════════════════════════════════════════════════════════════════ */ +/* ── EVENT BANNER ───────────────────────────────────────────────────── */ +/* Animated slide-down banner for cosmic/weather/promo events. */ + +.event-banner-wrap { + overflow: hidden; + max-height: 0; + transition: max-height 0.5s cubic-bezier(0.4, 0, 0.2, 1); +} +.event-banner-wrap.visible { + max-height: 120px; +} +.event-banner { + display: flex; + align-items: center; + gap: 14px; + padding: 13px 18px; + border-radius: 4px; + margin-bottom: 12px; + position: relative; + border-left: 4px solid rgba(255,255,255,0.25); +} +.event-banner-emoji { + font-size: 24px; + flex-shrink: 0; + line-height: 1; +} +.event-banner-body { + flex: 1; + min-width: 0; +} +.event-banner-title { + font-family: Fraunces, serif; + font-style: italic; + font-weight: 700; + font-size: 16px; + line-height: 1.2; + margin-bottom: 3px; +} +.event-banner-msg { + font-family: Manrope, sans-serif; + font-size: 12.5px; + line-height: 1.55; + opacity: 0.88; +} +.event-banner-dismiss { + background: transparent; + border: none; + cursor: pointer; + font-size: 18px; + opacity: 0.55; + padding: 4px 6px; + line-height: 1; + flex-shrink: 0; + transition: opacity 0.15s; +} +.event-banner-dismiss:hover { + opacity: 1; +} + +/* Cell tag — tiny event icon in the hour column */ +.event-cell-tag { + font-size: 11px; + line-height: 1; + vertical-align: middle; + margin-left: 3px; + display: inline-block; +} + +/* ── ALMANAC PANEL ──────────────────────────────────────────────────── */ +/* "What's Coming" upcoming cosmic events box below the forecast table. */ + +.almanac-panel { + margin: 20px 0 12px; + border: 1.5px solid #c9b08a; + border-radius: 4px; + background: #fdf8ee; + overflow: hidden; +} +.almanac-header { + display: flex; + align-items: baseline; + gap: 12px; + padding: 12px 18px 10px; + border-bottom: 1px solid #e8d8b8; + background: #faf2e2; +} +.almanac-title { + font-family: Fraunces, serif; + font-style: italic; + font-weight: 700; + font-size: 17px; + color: #2a1a08; + letter-spacing: 0; +} +.almanac-subtitle { + font-family: JetBrains Mono, monospace; + font-size: 10px; + text-transform: uppercase; + letter-spacing: 0.12em; + color: #9a7d5a; +} +.almanac-list { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); + gap: 0; +} +.almanac-entry { + display: flex; + align-items: flex-start; + gap: 13px; + padding: 13px 18px; + border-bottom: 1px solid #f0e4cc; + border-right: 1px solid #f0e4cc; + transition: background 0.15s; +} +.almanac-entry:hover { + background: #fef8e8; +} +.almanac-entry-icon { + font-size: 22px; + line-height: 1; + flex-shrink: 0; + margin-top: 1px; +} +.almanac-entry-body { + flex: 1; + min-width: 0; +} +.almanac-entry-head { + display: flex; + align-items: baseline; + gap: 8px; + flex-wrap: wrap; + margin-bottom: 3px; +} +.almanac-entry-title { + font-family: Fraunces, serif; + font-style: italic; + font-weight: 700; + font-size: 14px; + color: #1e1208; + line-height: 1.2; +} +.almanac-entry-date { + font-family: JetBrains Mono, monospace; + font-size: 10px; + text-transform: uppercase; + letter-spacing: 0.1em; + color: #c8922a; + white-space: nowrap; +} +.almanac-entry-countdown { + font-family: JetBrains Mono, monospace; + font-size: 10px; + color: #9a7d5a; + white-space: nowrap; +} +.almanac-entry-desc { + font-family: Manrope, sans-serif; + font-size: 12px; + color: '#4a3420'; + line-height: 1.55; + color: #4a3420; +} +.almanac-entry-visibility { + display: inline-block; + margin-top: 5px; + font-family: JetBrains Mono, monospace; + font-size: 10px; + text-transform: uppercase; + letter-spacing: 0.1em; + color: #7a9a6a; + background: #eef4e8; + border: 1px solid #c0d8b0; + border-radius: 3px; + padding: 2px 7px; +} +.almanac-entry-accent { + width: 3px; + align-self: stretch; + border-radius: 2px; + flex-shrink: 0; + margin-top: 1px; + opacity: 0.7; +} +.almanac-empty { + padding: 22px 18px; + font-family: Manrope, sans-serif; + font-size: 13px; + color: #9a7d5a; + font-style: italic; +} + +@media (max-width: 600px) { + .almanac-list { + grid-template-columns: 1fr; + } +} + /* ── CUSTOM SELECT DROPDOWN ─────────────────────────────────────────── */ /* Cross-platform replacement for native