# ⬡ Hellion Dashboard — Changelog

All notable changes per version. Format based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).

> Changelog entries can be written in English or German. English preferred for consistency.

---

## [2.2.0] — 2026-06-13

### Added
- **View Transitions** — Native cross-fade on theme switch and central modals (Settings, Theme-Picker, custom dialogs, bookmark import, add-board, add-bookmark, rename). Feature-detected via `document.startViewTransition`, instant swap on older browsers. Widgets, notebook sidebar and onboarding deliberately excluded.
- **`color-scheme: dark`** — Declares the dark UA scheme so native scrollbars and form controls match the dark themes.
- **Accessibility pass** — `role="dialog"` / `aria-modal` / `aria-labelledby` on Settings and Theme-Picker with new focus trap, Escape handling and focus return; `role="toolbar"` + per-button `aria-label` on the widget toolbar; keyboard-operable theme cards (`role="button"`, `tabindex`, Enter/Space); `role="switch"` + `aria-checked` on settings toggles; focusable boards and bookmarks; visible `:focus-visible` ring tinted in the theme accent. New ARIA strings run through the i18n pipeline. Verified with Lighthouse and the axe DevTools extension, not a formal WCAG 2.2 AA audit.

### Changed
- **`color-mix()` token refactor** — Accent-derived color tokens now computed via `color-mix()` from `var(--accent)`, classified per theme (formula vs. override). Theme-specific alpha values and real special colors stay overrides; no visible theme change. `--border-accent` `:root` drift (179,92,255 → 179,89,255) fixed at both the Nebula block and the `:root` default.
- **`@layer` cascade ordering** — CSS reorganized into six layers (base / theme / layout / components / theme-overrides / utilities) so theme component overrides win deterministically instead of relying on selector specificity.
- **`clamp()` fluid typography** — Clock, logo, board titles and main spacing scale fluidly via `clamp()`. Existing 768px / 480px breakpoints kept as a safety net.

### Accessibility
- **`prefers-reduced-motion`** — Unlayered `@media` block disables transitions and animations, including the `::view-transition-*` pseudo-elements. The 350ms widget teardown fallback timer is retained so widgets still close when `transitionend` no longer fires under reduced motion.

---

## [2.1.0] — 2026-04-16

### Added
- **Calculator Tab-System:** 6 Modi über Tab-Leiste erreichbar (Standard, Scientific, Unit, SAT, FAC, STA)
- **Scientific-Modus:** Wurzel, Potenz, Pi, Euler, Vorzeichen-Wechsel + Formel-Helfer (Kreis, Pythagoras, Prozent, Temperatur)
- **Unit-Converter:** 6 Kategorien (Länge, Gewicht, Temperatur, Volumen, Geschwindigkeit, Fläche) mit Live-Konvertierung und Swap
- **Satisfactory Calculator:** Items/Min, Overclock-Power (Exponent 1.321928), Maschinen-Rechner
- **Factorio Calculator:** Assembler-Ratios, Belt-Throughput, Maschinen-Rechner mit Belt-Empfehlung
- **Stationeers Calculator:** Idealgas (PV=nRT), Furnace/Verbrennung, Solar/Batterie-Dimensionierung, Atmosphären-Mixer

### Changed
- Parser um `^` (Potenz, rechts-assoziativ) und `sqrt()` erweitert
- Calculator-Widget Auto-Resize auf 320×480 für komplexe Modi
- ~110 neue i18n-Keys (DE + EN)

---

### v2.0.1 — 16.04.2026

#### Security

- **Background URL validation** — Only `blob:` and `data:image/` protocols allowed in CSS `backgroundImage` (prevents CSS injection via manipulated storage)
- **Import URL validation** — `javascript:`, `data:`, and other unsafe protocols are blocked during JSON import
- **Immutable import mapping** — Imported boards, bookmarks, and notes are sanitized with explicit field selection and string length limits

#### Fixed

- **Widget minimize race condition** — Replaced `setTimeout` with `transitionend` event; `openWidget()` during animation no longer causes display glitch
- **Notes import mutation** — Import now uses `Notes.init()` instead of directly setting `Notes._notes`
- **Complete i18n coverage** — 5 header button tooltips and 3 settings button texts now have `data-i18n` attributes (10 new translation keys)

#### Changed

- **Widget event system** — `WidgetManager` now dispatches `widget:close`, `widget:minimize`, `widget:open` CustomEvents via `EventTarget`. Calculator, Timer, and ImageRef use `WidgetManager.on()` instead of monkey-patching
- **Local favicon icons** — Replaced Google Favicons API with local colored letter icons (deterministic hue per title). Zero external network requests, Brave Shields compatible
- **backdrop-filter fallback** — `@supports not (backdrop-filter)` block with `--bg-solid-fallback` per theme for Brave Shields compatibility
- **Clock interval cleanup** — `setInterval` ID stored in variable

---

### v2.0.0 — 22.03.2026

#### New Features

- **Internationalization (i18n)** — Full DE/EN language support with runtime switching
- Language setting in Settings panel: German, English or Auto-detect (browser language)
- `i18n.js` module with ~220+ string keys, `t(key, vars?)` helper and `data-i18n` HTML attributes
- `_locales/de/` and `_locales/en/` for manifest-level i18n (`__MSG_extName__`, `__MSG_extDesc__`)
- `<html lang>` attribute updates dynamically when language changes
- All modules migrated: dialog, boards, onboarding, notes, calculator, timer, image-ref, data, bookmark-import, storage, settings, widgets, app

#### Technical

- New script load order: `storage → state → i18n → dialog → ...`
- `applyLanguage()` scans DOM for `data-i18n`, `data-i18n-placeholder`, `data-i18n-title`
- Onboarding slides use i18n keys instead of hardcoded text (rendered at display time)
- Clock day/month names via i18n keys instead of hardcoded arrays
- `resolveLang()` helper for DRY language resolution (auto → browser detect)

---

### v1.10.0 — 22.03.2026

#### Themes

- **3 new themes** — Satisfactory (Industrial Desert), Avorion (Deep Void) and Hellion Stealth (Tactical Recon)
- Now **11 themes** total, each with its own accent colors, overlays and font styles
- Satisfactory has increased board alpha (0.65) and stronger blur (12px), a deliberate choice for better readability on a visually busy background
- Avorion uses a radial gradient overlay so the ship in the center of the image stays visible
- Hellion Stealth is the only theme with a `border-left` hover effect in tactical scanner style

---

### v1.9.0 — 22.03.2026

#### New Features

- **Onboarding reworked** — 7 slides instead of 6, new slide explains the widget toolbar with all widgets
- **Gaming Starter Board** — Opt-in during onboarding: pre-filled board with links to Satisfactory, Factorio, Avorion, Minecraft and Star Citizen
- **Settings redesign** — Settings panel slimmed down to 3 sections (Widgets, Data & Help, Danger Zone)
- **Appearance modal** — Theme picker and all display settings combined in one modal instead of spread across the panel
- **Fixed about footer** — Developer info, license and links are now permanently visible at the bottom of the settings panel
- **Project documentation** — `docs/architecture.md`, `docs/widget-schema.md` and `docs/patterns.md` for anyone who wants to fork or contribute

#### Improvements

- All labels and descriptions unified in German, no more language mix
- Dropdown options use theme colors instead of white browser default
- Firefox update URL for store publishing added to `manifest.firefox.json`

---

### v1.8.0 — 21.03.2026

#### New Features

- **Image Reference Widget** — Drop images as floating reference widgets (max. 3 at once)
- Canvas API WebP conversion for smaller file sizes, all local in the browser
- Two-layer storage: metadata persistent, image data session-only (sessionStorage)
- Load images via drag & drop or file dialog
- Labels editable with debounced save
- Feature is off by default, enable via Settings → Widgets

---

### v1.7.1 — 21.03.2026

#### Improvements

- **Timer mute toggle** — Alarm can be muted via icon button without restarting the timer
- Alarm volume reduced to 7%, 30% was a bit much
- Mute state is saved and persists on next open

---

### v1.7.0 — 21.03.2026

#### New Features

- **Calculator widget** — Shunting-yard parser (no `eval()`), history of last calculations, keyboard input
- **Timer/countdown widget** — Saveable presets, Web Audio API alarm, tab title blinks when timer completes
- **Widget z-index fix** — Widgets now correctly render above the search bar (z-index 100+)

---

### v1.6.0 — 21.03.2026

#### New Features

- **Widget system** — Draggable, resizable floating panels managed by WidgetManager
- **Notes & checklists** — Multi-instance widgets (max. 5) with text and checklist template, Markdown support, export as `.md`
- **Notebook sidebar** — All notes at a glance, quick access via toolbar
- **Widget toolbar** — Floating buttons on the side for quick access to all widgets, position (left/right) configurable in Settings
- **Sticky note migration** — Old sticky notes are automatically migrated to the new widget system on first launch

#### Improvements

- Ko-fi support link added to the about section and `FUNDING.yml`

---

### v1.5.2 — 21.03.2026

#### New Features

- **Custom dialog system** — Native `confirm()` and `alert()` replaced with frosted glass dialogs (`dialog.js`)
- **Onboarding** — 6-step welcome flow on first launch with explanations for boards, themes, features and a backup reminder
- **Backup reminder** — Reminds every 7 days to run a JSON export and warns about data loss on browser reset
- **Theme modal** — Theme picker moved to its own modal with its own header button
- **Accordion settings** — All settings sections collapsible (About and Danger Zone closed by default)

#### Improvements

- Fonts migrated from Google Fonts API to local WOFF2 files (GDPR, ~388 KB saved)
- `innerHTML` fully replaced with `createElement` and `createElementNS` (XSS protection)
- SVG icons now via `createElementNS` instead of inline HTML
- Drag & drop uses CSS classes instead of inline styles (`.drag-ghost`, `.drag-over`, `.dragging-source`)
- Search bar toggle moved from DATA to BEHAVIOR section
- Unimplemented "Quick Save" UI element removed
- Onboarding repeatable via Settings → Help

#### Opera / Opera GX

- `manifest.opera.json` added (MV3 with workaround scripts)
- `src/js/opera/background.js` monitors tabs and redirects away from Opera Speed Dial
- `src/js/opera/redirect.js` fires as content script at `document_start`

#### Firefox

- `manifest.firefox.json` migrated to Manifest V3
- `browser_specific_settings` with Gecko ID and `data_collection_permissions` added

#### Build & CI

- GitHub Actions release now builds 3 ZIP packages (Chrome, Firefox, Opera)
- Quality check validates all 3 manifests and the Opera folder

---

### v1.2.0 — 20.03.2026

- Project structure split into `src/js/`, `src/css/` and `assets/`
- JS split into 10 modules (storage, state, themes, boards, drag, settings, search, sticky, data, app)
- Firefox compatibility (`manifest.firefox.json`, Manifest V3)
- Vivaldi confirmed compatible
- Theme image paths fixed (settings preview)
- URL validation on bookmark creation
- JSON import validates board and bookmark structure
- XSS protection: `createElement` instead of `innerHTML` for bookmarks
- Storage quota check with warning at 8 MB+
- Event delegation for bookmark clicks (performance)
- Responsive design (tablet 768px, smartphone 480px)
- Sticky note header collision fixed
- FileReader error handling for background image upload
- GitHub Actions: security scan, code quality, release automation
- 3 themes replaced: Astronaut → Nebula, Cosmic Clock → Crescent, Void Mage → Event Horizon
- All theme images checked and documented for license compliance
- LICENSE (CC BY-NC-SA 4.0), SECURITY.md and DISCLAIMER.md added

---

### v1.1.0 — 20.03.2026

- 5 new themes (Merchantman, Julia & Jin, SC Sunset, Hellion HUD, Hellion Energy)
- Search bar (Google, DuckDuckGo, Bing)
- Sticky note widget
- JSON export & import
- Date next to the clock
- About / imprint in settings
- Board blur function (privacy mode)
- Drag & drop migrated to Pointer Events API
- Opera / Opera GX compatibility

---

### v1.0.0 — 20.03.2026

- Initial release
- Boards & bookmarks with drag & drop
- 3 themes (Nebula, Crescent, Event Horizon)
- HTML import (browser bookmarks)
- Settings panel

---

**Hellion NewTab** — [Hellion Online Media](https://hellion-media.de) — JonKazama-Hellion
