refactor(settings): Theme-Modal auslagern, Accordion-Sektionen
- Theme-Picker als eigenes Modal mit Header-Button aus Settings entfernt - Background-Optionen (URL + Upload) ins Theme-Modal verschoben - Alle Settings-Sektionen einklappbar mit Chevron-Animation - About und Danger Zone standardmaessig eingeklappt - Suchleisten-Toggle von DATA nach BEHAVIOR verschoben - Quick Save Placeholder-Element entfernt - STYLE_GUIDE.md fuer Theme-System hinzugefuegt
This commit is contained in:
+165
-123
@@ -3,10 +3,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Hellion NewTab</title>
|
<title>Hellion Dashboard</title>
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
||||||
<link href="https://fonts.googleapis.com/css2?family=Rajdhani:wght@400;500;600;700&family=Inter:wght@300;400;500&display=swap" rel="stylesheet" />
|
|
||||||
<link rel="stylesheet" href="src/css/main.css" />
|
<link rel="stylesheet" href="src/css/main.css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
@@ -38,6 +35,10 @@
|
|||||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 20h9"/><path d="M16.5 3.5a2.121 2.121 0 013 3L7 19l-4 1 1-4L16.5 3.5z"/></svg>
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 20h9"/><path d="M16.5 3.5a2.121 2.121 0 013 3L7 19l-4 1 1-4L16.5 3.5z"/></svg>
|
||||||
Note
|
Note
|
||||||
</button>
|
</button>
|
||||||
|
<button class="btn-icon" id="btnTheme" title="Theme wählen">
|
||||||
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 2a10 10 0 100 20 4 4 0 01-1-7.9 1 1 0 011-.1h1a2 2 0 002-2V7a5 5 0 00-3-4.5"/><circle cx="7" cy="10" r="1.5"/><circle cx="13" cy="6" r="1.5"/><circle cx="17" cy="10" r="1.5"/><circle cx="9" cy="17" r="1.5"/></svg>
|
||||||
|
Theme
|
||||||
|
</button>
|
||||||
<button class="btn-icon" id="btnSettings" title="Einstellungen">
|
<button class="btn-icon" id="btnSettings" title="Einstellungen">
|
||||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 010 2.83 2 2 0 01-2.83 0l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 01-4 0v-.09A1.65 1.65 0 009 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 01-2.83-2.83l.06-.06A1.65 1.65 0 004.68 15a1.65 1.65 0 00-1.51-1H3a2 2 0 010-4h.09A1.65 1.65 0 004.6 9a1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 012.83-2.83l.06.06A1.65 1.65 0 009 4.68a1.65 1.65 0 001-1.51V3a2 2 0 014 0v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 012.83 2.83l-.06.06A1.65 1.65 0 0019.4 9a1.65 1.65 0 001.51 1H21a2 2 0 010 4h-.09a1.65 1.65 0 00-1.51 1z"/></svg>
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 010 2.83 2 2 0 01-2.83 0l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 01-4 0v-.09A1.65 1.65 0 009 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 01-2.83-2.83l.06-.06A1.65 1.65 0 004.68 15a1.65 1.65 0 00-1.51-1H3a2 2 0 010-4h.09A1.65 1.65 0 004.6 9a1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 012.83-2.83l.06.06A1.65 1.65 0 009 4.68a1.65 1.65 0 001-1.51V3a2 2 0 014 0v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 012.83 2.83l-.06.06A1.65 1.65 0 0019.4 9a1.65 1.65 0 001.51 1H21a2 2 0 010 4h-.09a1.65 1.65 0 00-1.51 1z"/></svg>
|
||||||
Settings
|
Settings
|
||||||
@@ -76,7 +77,7 @@
|
|||||||
</main>
|
</main>
|
||||||
|
|
||||||
<!-- HIDDEN FILE INPUT FOR IMPORT -->
|
<!-- HIDDEN FILE INPUT FOR IMPORT -->
|
||||||
<input type="file" id="importInput" accept=".html,.htm" style="display:none" />
|
<input type="file" id="importInput" accept=".html,.htm" class="hidden" />
|
||||||
|
|
||||||
<!-- SETTINGS PANEL -->
|
<!-- SETTINGS PANEL -->
|
||||||
<div class="panel-overlay" id="settingsOverlay"></div>
|
<div class="panel-overlay" id="settingsOverlay"></div>
|
||||||
@@ -88,54 +89,12 @@
|
|||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
|
|
||||||
<!-- APPEARANCE -->
|
<!-- APPEARANCE -->
|
||||||
<section class="settings-section">
|
<section class="settings-section" data-section="appearance">
|
||||||
<!-- THEME PICKER -->
|
<button class="settings-section-title" type="button">
|
||||||
<h3 class="settings-section-title">THEME</h3>
|
<span class="section-chevron">▸</span>
|
||||||
<div class="theme-grid">
|
APPEARANCE
|
||||||
<div class="theme-card active" data-value="nebula">
|
</button>
|
||||||
<img class="theme-card-img" src="assets/themes/bg-nebula.jpg" alt="Nebula" />
|
<div class="section-content">
|
||||||
<span class="theme-card-label">Nebula</span>
|
|
||||||
<span class="theme-card-check">✓</span>
|
|
||||||
</div>
|
|
||||||
<div class="theme-card" data-value="crescent">
|
|
||||||
<img class="theme-card-img" src="assets/themes/bg-crescent.jpg" alt="Crescent" />
|
|
||||||
<span class="theme-card-label">Crescent</span>
|
|
||||||
<span class="theme-card-check">✓</span>
|
|
||||||
</div>
|
|
||||||
<div class="theme-card" data-value="event-horizon">
|
|
||||||
<img class="theme-card-img" src="assets/themes/bg-event-horizon.jpg" alt="Event Horizon" />
|
|
||||||
<span class="theme-card-label">Event Horizon</span>
|
|
||||||
<span class="theme-card-check">✓</span>
|
|
||||||
</div>
|
|
||||||
<div class="theme-card" data-value="merchantman">
|
|
||||||
<img class="theme-card-img" src="assets/themes/bg-merchantman.webp" alt="Merchantman" />
|
|
||||||
<span class="theme-card-label">Merchantman</span>
|
|
||||||
<span class="theme-card-check">✓</span>
|
|
||||||
</div>
|
|
||||||
<div class="theme-card" data-value="julia-jin">
|
|
||||||
<img class="theme-card-img" src="assets/themes/bg-julia-jin.png" alt="Julia & Jin" />
|
|
||||||
<span class="theme-card-label">Julia & Jin</span>
|
|
||||||
<span class="theme-card-check">✓</span>
|
|
||||||
</div>
|
|
||||||
<div class="theme-card" data-value="sc-sunset">
|
|
||||||
<img class="theme-card-img" src="assets/themes/bg-sc-sunset.jpg" alt="SC Sunset" />
|
|
||||||
<span class="theme-card-label">SC Sunset</span>
|
|
||||||
<span class="theme-card-check">✓</span>
|
|
||||||
</div>
|
|
||||||
<div class="theme-card" data-value="hellion-hud">
|
|
||||||
<img class="theme-card-img" src="assets/themes/bg-hellion-hud.png" alt="Hellion HUD" />
|
|
||||||
<span class="theme-card-label">HUD</span>
|
|
||||||
<span class="theme-card-check">✓</span>
|
|
||||||
</div>
|
|
||||||
<div class="theme-card" data-value="hellion-energy">
|
|
||||||
<img class="theme-card-img" src="assets/themes/bg-hellion-energy.jpg" alt="Hellion Energy" />
|
|
||||||
<span class="theme-card-label">Energy</span>
|
|
||||||
<span class="theme-card-check">✓</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h3 class="settings-section-title">APPEARANCE</h3>
|
|
||||||
|
|
||||||
<div class="setting-row">
|
<div class="setting-row">
|
||||||
<div class="setting-info">
|
<div class="setting-info">
|
||||||
<span class="setting-label">Compact mode</span>
|
<span class="setting-label">Compact mode</span>
|
||||||
@@ -143,7 +102,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<label class="toggle"><input type="checkbox" id="settingCompact" /><span class="slider"></span></label>
|
<label class="toggle"><input type="checkbox" id="settingCompact" /><span class="slider"></span></label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="setting-row">
|
<div class="setting-row">
|
||||||
<div class="setting-info">
|
<div class="setting-info">
|
||||||
<span class="setting-label">Shorten long titles</span>
|
<span class="setting-label">Shorten long titles</span>
|
||||||
@@ -151,35 +109,16 @@
|
|||||||
</div>
|
</div>
|
||||||
<label class="toggle"><input type="checkbox" id="settingShorten" /><span class="slider"></span></label>
|
<label class="toggle"><input type="checkbox" id="settingShorten" /><span class="slider"></span></label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="setting-row">
|
|
||||||
<div class="setting-info">
|
|
||||||
<span class="setting-label">Background image</span>
|
|
||||||
<span class="setting-desc">Custom wallpaper URL or upload</span>
|
|
||||||
</div>
|
</div>
|
||||||
<button class="btn-small" id="btnChangeBg">Change</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="setting-row" id="bgInputRow" style="display:none">
|
|
||||||
<input type="text" class="text-input full-width" id="bgUrlInput" placeholder="https://... or leave empty for default" />
|
|
||||||
<button class="btn-small" id="btnApplyBg">Apply</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="setting-row">
|
|
||||||
<div class="setting-info">
|
|
||||||
<span class="setting-label">Background file upload</span>
|
|
||||||
<span class="setting-desc">Use a local image as background</span>
|
|
||||||
</div>
|
|
||||||
<button class="btn-small" id="btnBgFile">Upload</button>
|
|
||||||
<input type="file" id="bgFileInput" accept="image/*" style="display:none" />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<!-- BEHAVIOR -->
|
<!-- BEHAVIOR -->
|
||||||
<section class="settings-section">
|
<section class="settings-section" data-section="behavior">
|
||||||
<h3 class="settings-section-title">BEHAVIOR</h3>
|
<button class="settings-section-title" type="button">
|
||||||
|
<span class="section-chevron">▸</span>
|
||||||
|
BEHAVIOR
|
||||||
|
</button>
|
||||||
|
<div class="section-content">
|
||||||
<div class="setting-row">
|
<div class="setting-row">
|
||||||
<div class="setting-info">
|
<div class="setting-info">
|
||||||
<span class="setting-label">Open links in new tab</span>
|
<span class="setting-label">Open links in new tab</span>
|
||||||
@@ -187,7 +126,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<label class="toggle"><input type="checkbox" id="settingNewTab" checked /><span class="slider"></span></label>
|
<label class="toggle"><input type="checkbox" id="settingNewTab" checked /><span class="slider"></span></label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="setting-row">
|
<div class="setting-row">
|
||||||
<div class="setting-info">
|
<div class="setting-info">
|
||||||
<span class="setting-label">Show bookmark descriptions</span>
|
<span class="setting-label">Show bookmark descriptions</span>
|
||||||
@@ -195,7 +133,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<label class="toggle"><input type="checkbox" id="settingShowDesc" /><span class="slider"></span></label>
|
<label class="toggle"><input type="checkbox" id="settingShowDesc" /><span class="slider"></span></label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="setting-row">
|
<div class="setting-row">
|
||||||
<div class="setting-info">
|
<div class="setting-info">
|
||||||
<span class="setting-label">Hide extra bookmarks in long boards</span>
|
<span class="setting-label">Hide extra bookmarks in long boards</span>
|
||||||
@@ -203,7 +140,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<label class="toggle"><input type="checkbox" id="settingHideExtra" /><span class="slider"></span></label>
|
<label class="toggle"><input type="checkbox" id="settingHideExtra" /><span class="slider"></span></label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="setting-row" id="visibleCountRow">
|
<div class="setting-row" id="visibleCountRow">
|
||||||
<div class="setting-info">
|
<div class="setting-info">
|
||||||
<span class="setting-label">Visible bookmarks before hide</span>
|
<span class="setting-label">Visible bookmarks before hide</span>
|
||||||
@@ -215,24 +151,68 @@
|
|||||||
<option value="20">20</option>
|
<option value="20">20</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="setting-row">
|
<div class="setting-row">
|
||||||
<div class="setting-info">
|
<div class="setting-info">
|
||||||
<span class="setting-label">Quick Save shortcut</span>
|
<span class="setting-label">Suchleiste anzeigen</span>
|
||||||
<span class="setting-desc">Save current page to a board quickly</span>
|
<span class="setting-desc">Suchleiste unter dem Header ein/aus</span>
|
||||||
</div>
|
</div>
|
||||||
<span class="setting-badge" id="quickSaveBadge">Not set</span>
|
<label class="toggle"><input type="checkbox" id="settingShowSearch" checked /><span class="slider"></span></label>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- DATA -->
|
||||||
|
<section class="settings-section" data-section="data">
|
||||||
|
<button class="settings-section-title" type="button">
|
||||||
|
<span class="section-chevron">▸</span>
|
||||||
|
DATA
|
||||||
|
</button>
|
||||||
|
<div class="section-content">
|
||||||
|
<div class="setting-row">
|
||||||
|
<div class="setting-info">
|
||||||
|
<span class="setting-label">Export Boards</span>
|
||||||
|
<span class="setting-desc">Alle Boards als JSON sichern</span>
|
||||||
|
</div>
|
||||||
|
<button class="btn-small" id="btnExportJSON">Export</button>
|
||||||
|
</div>
|
||||||
|
<div class="setting-row">
|
||||||
|
<div class="setting-info">
|
||||||
|
<span class="setting-label">Import Boards</span>
|
||||||
|
<span class="setting-desc">JSON-Backup wiederherstellen</span>
|
||||||
|
</div>
|
||||||
|
<button class="btn-small" id="btnImportJSON">Import</button>
|
||||||
|
<input type="file" id="jsonImportInput" accept=".json" class="hidden" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- HELP -->
|
||||||
|
<section class="settings-section" data-section="help">
|
||||||
|
<button class="settings-section-title" type="button">
|
||||||
|
<span class="section-chevron">▸</span>
|
||||||
|
HELP
|
||||||
|
</button>
|
||||||
|
<div class="section-content">
|
||||||
|
<div class="setting-row">
|
||||||
|
<div class="setting-info">
|
||||||
|
<span class="setting-label">Onboarding wiederholen</span>
|
||||||
|
<span class="setting-desc">Willkommens-Tour erneut anzeigen</span>
|
||||||
|
</div>
|
||||||
|
<button class="btn-small" id="btnRestartOnboarding">Start</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<!-- ABOUT / IMPRESSUM -->
|
<!-- ABOUT / IMPRESSUM -->
|
||||||
<section class="settings-section">
|
<section class="settings-section" data-section="about">
|
||||||
<h3 class="settings-section-title">ABOUT</h3>
|
<button class="settings-section-title" type="button">
|
||||||
|
<span class="section-chevron">▸</span>
|
||||||
|
ABOUT
|
||||||
|
</button>
|
||||||
|
<div class="section-content">
|
||||||
<div class="about-block">
|
<div class="about-block">
|
||||||
<div class="about-logo">⬡ HELLION NEWTAB</div>
|
<div class="about-logo">⬡ HELLION NEWTAB</div>
|
||||||
<div class="about-version">Version 1.2.0 · by Hellion Online Media</div>
|
<div class="about-version">Version 1.5.2 · by Hellion Online Media</div>
|
||||||
|
|
||||||
<div class="about-links">
|
<div class="about-links">
|
||||||
<a href="https://hellion-media.de/impressum" target="_blank" class="about-link">
|
<a href="https://hellion-media.de/impressum" target="_blank" class="about-link">
|
||||||
@@ -257,7 +237,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="about-info-row">
|
<div class="about-info-row">
|
||||||
<span class="about-info-label">Lizenz</span>
|
<span class="about-info-label">Lizenz</span>
|
||||||
<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/" target="_blank" class="about-info-value" style="color:var(--text-secondary);text-decoration:none">CC BY-NC-SA 4.0</a>
|
<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/" target="_blank" class="about-info-value about-link-subtle">CC BY-NC-SA 4.0</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="about-info-row">
|
<div class="about-info-row">
|
||||||
<span class="about-info-label">Datenspeicherung</span>
|
<span class="about-info-label">Datenspeicherung</span>
|
||||||
@@ -267,7 +247,7 @@
|
|||||||
<div class="about-divider"></div>
|
<div class="about-divider"></div>
|
||||||
|
|
||||||
<div class="about-bugreport">
|
<div class="about-bugreport">
|
||||||
<span class="about-info-label" style="display:block;margin-bottom:6px">Bug Report / Feedback</span>
|
<span class="about-info-label about-info-label-block">Bug Report / Feedback</span>
|
||||||
<a href="mailto:kontakt@hellion-media.de?subject=Hellion NewTab – Bug Report" class="about-link-mail">
|
<a href="mailto:kontakt@hellion-media.de?subject=Hellion NewTab – Bug Report" class="about-link-mail">
|
||||||
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"/><polyline points="22,6 12,13 2,6"/></svg>
|
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"/><polyline points="22,6 12,13 2,6"/></svg>
|
||||||
kontakt@hellion-media.de
|
kontakt@hellion-media.de
|
||||||
@@ -275,7 +255,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="about-browsers">
|
<div class="about-browsers">
|
||||||
<span class="about-info-label" style="display:block;margin-bottom:6px">Kompatible Browser</span>
|
<span class="about-info-label about-info-label-block">Kompatible Browser</span>
|
||||||
<div class="about-browser-tags">
|
<div class="about-browser-tags">
|
||||||
<span class="browser-tag">Chrome</span>
|
<span class="browser-tag">Chrome</span>
|
||||||
<span class="browser-tag">Edge</span>
|
<span class="browser-tag">Edge</span>
|
||||||
@@ -287,38 +267,16 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- DATA -->
|
|
||||||
<section class="settings-section">
|
|
||||||
<h3 class="settings-section-title">DATA</h3>
|
|
||||||
<div class="setting-row">
|
|
||||||
<div class="setting-info">
|
|
||||||
<span class="setting-label">Export Boards</span>
|
|
||||||
<span class="setting-desc">Alle Boards als JSON sichern</span>
|
|
||||||
</div>
|
|
||||||
<button class="btn-small" id="btnExportJSON">Export</button>
|
|
||||||
</div>
|
|
||||||
<div class="setting-row">
|
|
||||||
<div class="setting-info">
|
|
||||||
<span class="setting-label">Import Boards</span>
|
|
||||||
<span class="setting-desc">JSON-Backup wiederherstellen</span>
|
|
||||||
</div>
|
|
||||||
<button class="btn-small" id="btnImportJSON">Import</button>
|
|
||||||
<input type="file" id="jsonImportInput" accept=".json" style="display:none" />
|
|
||||||
</div>
|
|
||||||
<div class="setting-row">
|
|
||||||
<div class="setting-info">
|
|
||||||
<span class="setting-label">Suchleiste anzeigen</span>
|
|
||||||
<span class="setting-desc">Suchleiste unter dem Header ein/aus</span>
|
|
||||||
</div>
|
|
||||||
<label class="toggle"><input type="checkbox" id="settingShowSearch" checked /><span class="slider"></span></label>
|
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<!-- DANGER ZONE -->
|
<!-- DANGER ZONE -->
|
||||||
<section class="settings-section">
|
<section class="settings-section" data-section="danger">
|
||||||
<h3 class="settings-section-title danger">DANGER ZONE</h3>
|
<button class="settings-section-title danger" type="button">
|
||||||
|
<span class="section-chevron">▸</span>
|
||||||
|
DANGER ZONE
|
||||||
|
</button>
|
||||||
|
<div class="section-content">
|
||||||
<div class="setting-row">
|
<div class="setting-row">
|
||||||
<div class="setting-info">
|
<div class="setting-info">
|
||||||
<span class="setting-label">Reset all data</span>
|
<span class="setting-label">Reset all data</span>
|
||||||
@@ -326,11 +284,86 @@
|
|||||||
</div>
|
</div>
|
||||||
<button class="btn-danger" id="btnResetAll">Reset</button>
|
<button class="btn-danger" id="btnResetAll">Reset</button>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</aside>
|
</aside>
|
||||||
|
|
||||||
|
<!-- THEME PICKER MODAL -->
|
||||||
|
<div class="modal-overlay" id="themeOverlay">
|
||||||
|
<div class="theme-modal" id="themeModal">
|
||||||
|
<div class="modal-header">
|
||||||
|
<span>Theme wählen</span>
|
||||||
|
<button class="btn-close" id="btnCloseTheme">✕</button>
|
||||||
|
</div>
|
||||||
|
<div class="theme-grid">
|
||||||
|
<div class="theme-card active" data-value="nebula">
|
||||||
|
<img class="theme-card-img" src="assets/themes/bg-nebula.jpg" alt="Nebula" />
|
||||||
|
<span class="theme-card-label">Nebula</span>
|
||||||
|
<span class="theme-card-check">✓</span>
|
||||||
|
</div>
|
||||||
|
<div class="theme-card" data-value="crescent">
|
||||||
|
<img class="theme-card-img" src="assets/themes/bg-crescent.jpg" alt="Crescent" />
|
||||||
|
<span class="theme-card-label">Crescent</span>
|
||||||
|
<span class="theme-card-check">✓</span>
|
||||||
|
</div>
|
||||||
|
<div class="theme-card" data-value="event-horizon">
|
||||||
|
<img class="theme-card-img" src="assets/themes/bg-event-horizon.jpg" alt="Event Horizon" />
|
||||||
|
<span class="theme-card-label">Event Horizon</span>
|
||||||
|
<span class="theme-card-check">✓</span>
|
||||||
|
</div>
|
||||||
|
<div class="theme-card" data-value="merchantman">
|
||||||
|
<img class="theme-card-img" src="assets/themes/bg-merchantman.webp" alt="Merchantman" />
|
||||||
|
<span class="theme-card-label">Merchantman</span>
|
||||||
|
<span class="theme-card-check">✓</span>
|
||||||
|
</div>
|
||||||
|
<div class="theme-card" data-value="julia-jin">
|
||||||
|
<img class="theme-card-img" src="assets/themes/bg-julia-jin.png" alt="Julia & Jin" />
|
||||||
|
<span class="theme-card-label">Julia & Jin</span>
|
||||||
|
<span class="theme-card-check">✓</span>
|
||||||
|
</div>
|
||||||
|
<div class="theme-card" data-value="sc-sunset">
|
||||||
|
<img class="theme-card-img" src="assets/themes/bg-sc-sunset.jpg" alt="SC Sunset" />
|
||||||
|
<span class="theme-card-label">SC Sunset</span>
|
||||||
|
<span class="theme-card-check">✓</span>
|
||||||
|
</div>
|
||||||
|
<div class="theme-card" data-value="hellion-hud">
|
||||||
|
<img class="theme-card-img" src="assets/themes/bg-hellion-hud.png" alt="Hellion HUD" />
|
||||||
|
<span class="theme-card-label">HUD</span>
|
||||||
|
<span class="theme-card-check">✓</span>
|
||||||
|
</div>
|
||||||
|
<div class="theme-card" data-value="hellion-energy">
|
||||||
|
<img class="theme-card-img" src="assets/themes/bg-hellion-energy.jpg" alt="Hellion Energy" />
|
||||||
|
<span class="theme-card-label">Energy</span>
|
||||||
|
<span class="theme-card-check">✓</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="theme-modal-section">
|
||||||
|
<h3 class="settings-section-title">BACKGROUND</h3>
|
||||||
|
<div class="setting-row">
|
||||||
|
<div class="setting-info">
|
||||||
|
<span class="setting-label">Background image URL</span>
|
||||||
|
<span class="setting-desc">Custom wallpaper URL</span>
|
||||||
|
</div>
|
||||||
|
<button class="btn-small" id="btnChangeBg">Change</button>
|
||||||
|
</div>
|
||||||
|
<div class="setting-row hidden" id="bgInputRow">
|
||||||
|
<input type="text" class="text-input full-width" id="bgUrlInput" placeholder="https://... or leave empty for default" />
|
||||||
|
<button class="btn-small" id="btnApplyBg">Apply</button>
|
||||||
|
</div>
|
||||||
|
<div class="setting-row">
|
||||||
|
<div class="setting-info">
|
||||||
|
<span class="setting-label">Background file upload</span>
|
||||||
|
<span class="setting-desc">Use a local image as background</span>
|
||||||
|
</div>
|
||||||
|
<button class="btn-small" id="btnBgFile">Upload</button>
|
||||||
|
<input type="file" id="bgFileInput" accept="image/*" class="hidden" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- ADD BOARD MODAL -->
|
<!-- ADD BOARD MODAL -->
|
||||||
<div class="modal-overlay" id="addBoardOverlay">
|
<div class="modal-overlay" id="addBoardOverlay">
|
||||||
<div class="modal">
|
<div class="modal">
|
||||||
@@ -356,8 +389,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<input type="text" class="text-input full-width" id="newBmTitle" placeholder="Title..." maxlength="60" />
|
<input type="text" class="text-input full-width" id="newBmTitle" placeholder="Title..." maxlength="60" />
|
||||||
<input type="url" class="text-input full-width" id="newBmUrl" placeholder="https://..." style="margin-top:8px" />
|
<input type="url" class="text-input full-width modal-input-spaced" id="newBmUrl" placeholder="https://..." />
|
||||||
<input type="text" class="text-input full-width" id="newBmDesc" placeholder="Description (optional)" style="margin-top:8px" />
|
<input type="text" class="text-input full-width modal-input-spaced" id="newBmDesc" placeholder="Description (optional)" />
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button class="btn-primary" id="btnConfirmBookmark">Add</button>
|
<button class="btn-primary" id="btnConfirmBookmark">Add</button>
|
||||||
@@ -381,10 +414,17 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- ONBOARDING -->
|
||||||
|
<div class="dialog-overlay" id="onboardingOverlay">
|
||||||
|
<div class="onboarding-modal" id="onboardingModal"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Storage muss zuerst -->
|
<!-- Storage muss zuerst -->
|
||||||
<script src="src/js/storage.js"></script>
|
<script src="src/js/storage.js"></script>
|
||||||
<!-- State & Hilfsfunktionen -->
|
<!-- State & Hilfsfunktionen -->
|
||||||
<script src="src/js/state.js"></script>
|
<script src="src/js/state.js"></script>
|
||||||
|
<!-- Dialog-System (vor Features, wird überall gebraucht) -->
|
||||||
|
<script src="src/js/dialog.js"></script>
|
||||||
<!-- Theme-System -->
|
<!-- Theme-System -->
|
||||||
<script src="src/js/themes.js"></script>
|
<script src="src/js/themes.js"></script>
|
||||||
<!-- Features -->
|
<!-- Features -->
|
||||||
@@ -394,6 +434,8 @@
|
|||||||
<script src="src/js/search.js"></script>
|
<script src="src/js/search.js"></script>
|
||||||
<script src="src/js/sticky.js"></script>
|
<script src="src/js/sticky.js"></script>
|
||||||
<script src="src/js/data.js"></script>
|
<script src="src/js/data.js"></script>
|
||||||
|
<!-- Onboarding -->
|
||||||
|
<script src="src/js/onboarding.js"></script>
|
||||||
<!-- Einstiegspunkt zuletzt -->
|
<!-- Einstiegspunkt zuletzt -->
|
||||||
<script src="src/js/app.js"></script>
|
<script src="src/js/app.js"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -0,0 +1,101 @@
|
|||||||
|
# ⬡ Hellion Dashboard — Design & Theme-System
|
||||||
|
|
||||||
|
Leitfaden für das visuelle Design des Hellion Dashboards. Definiert wie Themes aufgebaut
|
||||||
|
sind und welche Patterns konsistent eingehalten werden — für eine immersive, fokussierte
|
||||||
|
Nutzererfahrung.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Design-Säulen
|
||||||
|
|
||||||
|
| Säule | Beschreibung |
|
||||||
|
|---|---|
|
||||||
|
| **Immersion** | Das Interface wirkt wie ein HUD das über der Szenerie schwebt — kein Fremdkörper |
|
||||||
|
| **Visual Clarity** | Gezielter `blur`-Einsatz trennt UI und Hintergrundbild — reduziert Reizüberflutung |
|
||||||
|
| **Harmonie** | Jedes Theme zieht seine Farben aus den dominanten Lichtquellen des Hintergrundbildes |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Anatomie eines Themes
|
||||||
|
|
||||||
|
Jedes Theme folgt dieser Variablen-Struktur in `main.css`.
|
||||||
|
Für ein neues Theme diesen Block kopieren und anpassen:
|
||||||
|
|
||||||
|
```css
|
||||||
|
[data-theme="dein-theme-name"] {
|
||||||
|
/* 1. AKZENTE — Die Lichtquelle */
|
||||||
|
--accent: #HEXCODE; /* Hauptfarbe (Neon/Licht) */
|
||||||
|
--accent-dim: rgba(R, G, B, 0.12); /* Subtiler Hintergrund */
|
||||||
|
--accent-glow: rgba(R, G, B, 0.08); /* Glow für Logo & Uhr */
|
||||||
|
--border-accent: rgba(R, G, B, 0.25); /* Fokus-Rahmen */
|
||||||
|
|
||||||
|
/* 2. BASIS — Das Fundament */
|
||||||
|
--bg-primary: #HEXCODE; /* Dunkelster Punkt im Bild */
|
||||||
|
--bg-board: rgba(R, G, B, 0.55); /* Glas-Effekt der Boards */
|
||||||
|
|
||||||
|
/* 3. TEXT — Kontrast */
|
||||||
|
--text-primary: #FFFFFF; /* Klar lesbar, leicht getönt */
|
||||||
|
--text-secondary: #A0A0A0; /* Entsättigt für weniger Rauschen */
|
||||||
|
|
||||||
|
/* 4. OVERLAY — Vignette */
|
||||||
|
--overlay-bg: radial-gradient(
|
||||||
|
circle at center,
|
||||||
|
transparent 0%,
|
||||||
|
var(--bg-primary) 100%
|
||||||
|
);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## UI-Patterns
|
||||||
|
|
||||||
|
### Frosted Glass
|
||||||
|
|
||||||
|
Hardware-beschleunigter Blur für Lesbarkeit auf komplexen Hintergründen:
|
||||||
|
|
||||||
|
```css
|
||||||
|
backdrop-filter: blur(8px);
|
||||||
|
```
|
||||||
|
|
||||||
|
Erzeugt Tiefe und visuelle Ruhe hinter Text und UI-Elementen.
|
||||||
|
|
||||||
|
### Typografie-Hierarchie
|
||||||
|
|
||||||
|
| Font | Einsatz |
|
||||||
|
|---|---|
|
||||||
|
| **Rajdhani** | Display — Uhr, Titel, Logo. Alles was nach "System" aussieht |
|
||||||
|
| **Inter** | Body — Bookmark-Titel, Listen, interaktive Elemente |
|
||||||
|
| **Cinzel** | Fantasy — Exklusiv für Themes mit majestätischem oder antikem Vibe (Crescent, Julia & Jin) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Theme-Übersicht
|
||||||
|
|
||||||
|
| Theme | Akzentfarbe | Stimmung |
|
||||||
|
|---|---|---|
|
||||||
|
| Nebula | `#b359ff` Magenta | Chill, Cosmic |
|
||||||
|
| Crescent | `#d4bd8a` Gold | Luxury, Night |
|
||||||
|
| Event Horizon | `#9d5cff` Purple | Deep Space, Void |
|
||||||
|
| Merchantman | `#2eb8b8` Emerald | Industrial, Alien |
|
||||||
|
| Julia & Jin | `#7db3ff` Aetherial Blue | FFXIV Night |
|
||||||
|
| SC Sunset | `#ff8c3d` Amber | Emotional, Horizon |
|
||||||
|
| Hellion HUD | `#32ff6a` Neon Green | Tactical, Admin |
|
||||||
|
| Hellion Energy | `#1eff8e` Acid Green | Overdrive, Power |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ADHS-Optimierung
|
||||||
|
|
||||||
|
Bei Hintergrundbildern mit vielen Details (z.B. Julia & Jin) den Board-Alpha erhöhen
|
||||||
|
und den Blur verstärken — das dimmt das Hintergrundrauschen und lässt das Gehirn
|
||||||
|
schneller die relevanten Informationen erfassen:
|
||||||
|
|
||||||
|
```css
|
||||||
|
--bg-board: rgba(R, G, B, 0.65);
|
||||||
|
backdrop-filter: blur(12px);
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Entwickelt von **[Hellion Online Media — Florian Wathling](https://hellion-media.de)** — JonKazama-Hellion
|
||||||
+437
-155
@@ -1,22 +1,60 @@
|
|||||||
/* =============================================
|
/* =============================================
|
||||||
HELLION NEWTAB — Theme System
|
HELLION Dashboard — Theme System
|
||||||
Themes: nebula | crescent | event-horizon
|
Themes: nebula | crescent | event-horizon | merchantman | julia-jin | sc-sunset | hellion-hud | hellion-energy
|
||||||
============================================= */
|
============================================= */
|
||||||
|
/* =============================================
|
||||||
|
Lokale Schriftarten
|
||||||
|
(für schnelleren Zugriff und Offline-Verfügbarkeit sowie DSGVO-Konformität)
|
||||||
|
- Rajdhani: Hauptschriftart für Überschriften und UI-Elemente
|
||||||
|
- Inter: Fließtext und allgemeine Lesbarkeit
|
||||||
|
- Cinzel: Alternative Display-Schriftart für bestimmte Themes
|
||||||
|
============================================= */
|
||||||
|
/* Rajdhani - Lokal */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Rajdhani';
|
||||||
|
src: url('../../assets/fonts/Rajdhani-Regular.woff2') format('woff2');
|
||||||
|
font-weight: 400;
|
||||||
|
font-style: normal;
|
||||||
|
font-display: swap;
|
||||||
|
}
|
||||||
|
|
||||||
@import url('https://fonts.googleapis.com/css2?family=Rajdhani:wght@400;500;600;700&family=Inter:wght@300;400;500&family=Cinzel:wght@400;600&display=swap');
|
@font-face {
|
||||||
|
font-family: 'Rajdhani';
|
||||||
|
src: url('../../assets/fonts/Rajdhani-Bold.woff2') format('woff2');
|
||||||
|
font-weight: 700;
|
||||||
|
font-style: normal;
|
||||||
|
font-display: swap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Inter - Lokal */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Inter';
|
||||||
|
src: url('../../assets/fonts/Inter-VariableFont_opsz,wght.woff2') format('woff2');
|
||||||
|
font-weight: 300 700;
|
||||||
|
font-style: normal;
|
||||||
|
font-display: swap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Cinzel - Lokal */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Cinzel';
|
||||||
|
src: url('../../assets/fonts/Cinzel-VariableFont_wght.woff2') format('woff2');
|
||||||
|
font-weight: 400 900;
|
||||||
|
font-style: normal;
|
||||||
|
font-display: swap;
|
||||||
|
}
|
||||||
/* ---- BASE VARIABLES (Nebula = Default) ---- */
|
/* ---- BASE VARIABLES (Nebula = Default) ---- */
|
||||||
:root {
|
:root {
|
||||||
--accent: #d65cff;
|
--accent: #b359ff;
|
||||||
--accent-dim: rgba(214, 92, 255, 0.15);
|
--accent-dim: rgba(179, 89, 255, 0.12);
|
||||||
--accent-glow: rgba(214, 92, 255, 0.08);
|
--accent-glow: rgba(179, 89, 255, 0.05);
|
||||||
--border-accent: rgba(214, 92, 255, 0.35);
|
--border-accent: rgba(179, 92, 255, 0.25);
|
||||||
--bg-primary: #0a060e;
|
--bg-primary: #050308;
|
||||||
--bg-board: rgba(12, 8, 18, 0.48);
|
--bg-board: rgba(10, 6, 14, 0.55);
|
||||||
--border: rgba(255, 255, 255, 0.06);
|
--border: rgba(255, 255, 255, 0.06);
|
||||||
--text-primary: #e0d8f0;
|
--text-primary: #e5dff2;
|
||||||
--text-secondary: #8a7a9e;
|
--text-secondary: #a395b8;
|
||||||
--text-muted: #4a3860;
|
--text-muted: #5a4a75;
|
||||||
--danger: #e05555;
|
--danger: #e05555;
|
||||||
--font-display: 'Rajdhani', sans-serif;
|
--font-display: 'Rajdhani', sans-serif;
|
||||||
--font-body: 'Inter', sans-serif;
|
--font-body: 'Inter', sans-serif;
|
||||||
@@ -25,34 +63,34 @@
|
|||||||
--board-width: 240px;
|
--board-width: 240px;
|
||||||
--spacing: 10px;
|
--spacing: 10px;
|
||||||
--spacing-compact: 5px;
|
--spacing-compact: 5px;
|
||||||
--overlay-bg: linear-gradient(180deg, rgba(10,6,14,0.85) 0%, rgba(10,6,14,0.42) 45%, rgba(10,6,14,0.90) 100%);
|
--overlay-bg: radial-gradient(circle at center, rgba(10,6,14,0.3) 0%, rgba(5,3,8,0.85) 100%);
|
||||||
--header-bg: rgba(10,6,14,0.90);
|
--header-bg: rgba(10,6,14,0.90);
|
||||||
--board-hover-border: rgba(214,92,255,0.22);
|
--board-hover-border: rgba(179,89,255,0.18);
|
||||||
--toggle-on-bg: rgba(214,92,255,0.22);
|
--toggle-on-bg: rgba(214,92,255,0.22);
|
||||||
--logo-shadow: rgba(214,92,255,0.45);
|
--logo-shadow: rgba(179,89,255,0.35);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ============================================
|
/* ============================================
|
||||||
THEME: NEBULA (magenta / cosmic nebula)
|
THEME: NEBULA (magenta / cosmic nebula)
|
||||||
============================================ */
|
============================================ */
|
||||||
[data-theme="nebula"] {
|
[data-theme="nebula"] {
|
||||||
--accent: #d65cff;
|
--accent: #b359ff;
|
||||||
--accent-dim: rgba(214, 92, 255, 0.14);
|
--accent-dim: rgba(179, 89, 255, 0.12);
|
||||||
--accent-glow: rgba(214, 92, 255, 0.06);
|
--accent-glow: rgba(179, 89, 255, 0.05);
|
||||||
--border-accent: rgba(214, 92, 255, 0.32);
|
--border-accent: rgba(179, 92, 255, 0.25);
|
||||||
--bg-primary: #0a060e;
|
--bg-primary: #050308;
|
||||||
--bg-board: rgba(12, 8, 18, 0.48);
|
--bg-board: rgba(10, 6, 14, 0.55);
|
||||||
--border: rgba(255, 255, 255, 0.055);
|
--border: rgba(255, 255, 255, 0.055);
|
||||||
--text-primary: #e0d8f0;
|
--text-primary: #e5dff2;
|
||||||
--text-secondary: #8a7a9e;
|
--text-secondary: #a395b8;
|
||||||
--text-muted: #4a3860;
|
--text-muted: #5a4a75;
|
||||||
--font-display: 'Rajdhani', sans-serif;
|
--font-display: 'Rajdhani', sans-serif;
|
||||||
--font-body: 'Inter', sans-serif;
|
--font-body: 'Inter', sans-serif;
|
||||||
--overlay-bg: linear-gradient(180deg, rgba(10,6,14,0.88) 0%, rgba(10,6,14,0.35) 45%, rgba(10,6,14,0.92) 100%);
|
--overlay-bg: radial-gradient(circle at center, rgba(10,6,14,0.3) 0%, rgba(5,3,8,0.85) 100%);
|
||||||
--header-bg: rgba(10,6,14,0.92);
|
--header-bg: rgba(10,6,14,0.92);
|
||||||
--board-hover-border: rgba(214,92,255,0.22);
|
--board-hover-border: rgba(179,89,255,0.18);
|
||||||
--toggle-on-bg: rgba(214,92,255,0.22);
|
--toggle-on-bg: rgba(214,92,255,0.22);
|
||||||
--logo-shadow: rgba(214,92,255,0.50);
|
--logo-shadow: rgba(179,89,255,0.35);
|
||||||
}
|
}
|
||||||
[data-theme="nebula"] .board { border-color: rgba(214,92,255,0.10); }
|
[data-theme="nebula"] .board { border-color: rgba(214,92,255,0.10); }
|
||||||
[data-theme="nebula"] .bm-item:hover { background: rgba(214,92,255,0.05); }
|
[data-theme="nebula"] .bm-item:hover { background: rgba(214,92,255,0.05); }
|
||||||
@@ -61,23 +99,24 @@
|
|||||||
THEME: CRESCENT (gold / minimalist night)
|
THEME: CRESCENT (gold / minimalist night)
|
||||||
============================================ */
|
============================================ */
|
||||||
[data-theme="crescent"] {
|
[data-theme="crescent"] {
|
||||||
--accent: #c8a84a;
|
--accent: #d4bd8a;
|
||||||
--accent-dim: rgba(200, 168, 74, 0.16);
|
--accent-dim: rgba(212, 189, 138, 0.12);
|
||||||
--accent-glow: rgba(200, 168, 74, 0.07);
|
--accent-glow: rgba(212, 189, 138, 0.05);
|
||||||
--border-accent: rgba(200, 168, 74, 0.35);
|
--border-accent: rgba(212, 189, 138, 0.25);
|
||||||
--bg-primary: #080a12;
|
--bg-primary: #06080f;
|
||||||
--bg-board: rgba(10, 14, 26, 0.50);
|
--bg-board: rgba(8, 12, 22, 0.45);
|
||||||
--border: rgba(200, 168, 74, 0.09);
|
--border: rgba(212, 189, 138, 0.10);
|
||||||
--text-primary: #d8dce8;
|
--text-primary: #e2e6f0;
|
||||||
--text-secondary: #6a7090;
|
--text-secondary: #7a84a5;
|
||||||
--text-muted: #363c55;
|
--text-muted: #3d4563;
|
||||||
--font-display: 'Cinzel', serif;
|
--font-display: 'Cinzel', serif;
|
||||||
--font-body: 'Inter', sans-serif;
|
--font-body: 'Inter', sans-serif;
|
||||||
--overlay-bg: linear-gradient(180deg, rgba(8,10,18,0.88) 0%, rgba(8,10,18,0.30) 50%, rgba(8,10,18,0.92) 100%);
|
--overlay-bg: radial-gradient(circle at center, rgba(6,8,15,0.2) 0%, rgba(6,8,15,0.9) 100%);
|
||||||
--header-bg: rgba(8,10,18,0.93);
|
--header-bg: rgba(6,8,15,0.95);
|
||||||
--board-hover-border: rgba(200,168,74,0.26);
|
--board-hover-border: rgba(212, 189, 138, 0.20);
|
||||||
--toggle-on-bg: rgba(200,168,74,0.22);
|
--toggle-on-bg: rgba(200,168,74,0.22);
|
||||||
--logo-shadow: rgba(200,168,74,0.55);
|
--logo-shadow: rgba(212, 189, 138, 0.40);
|
||||||
|
letter-spacing: 0.5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
[data-theme="crescent"] .logo { font-family: 'Cinzel', serif; letter-spacing: 4px; }
|
[data-theme="crescent"] .logo { font-family: 'Cinzel', serif; letter-spacing: 4px; }
|
||||||
@@ -87,158 +126,177 @@
|
|||||||
[data-theme="crescent"] .board { border-color: rgba(200,168,74,0.10); }
|
[data-theme="crescent"] .board { border-color: rgba(200,168,74,0.10); }
|
||||||
|
|
||||||
/* ============================================
|
/* ============================================
|
||||||
THEME: EVENT HORIZON (orange-violet / deep space)
|
THEME: EVENT HORIZON (Cosmic Purple / deep space)
|
||||||
============================================ */
|
============================================ */
|
||||||
[data-theme="event-horizon"] {
|
[data-theme="event-horizon"] {
|
||||||
--accent: #e08030;
|
--accent: #9d5cff;
|
||||||
--accent-dim: rgba(224, 128, 48, 0.15);
|
--accent-dim: rgba(157, 92, 255, 0.12);
|
||||||
--accent-glow: rgba(224, 128, 48, 0.07);
|
--accent-glow: rgba(157, 92, 255, 0.08);
|
||||||
--border-accent: rgba(224, 128, 48, 0.35);
|
--border-accent: rgba(157, 92, 255, 0.28);
|
||||||
--bg-primary: #06050c;
|
--bg-primary: #040308;
|
||||||
--bg-board: rgba(8, 6, 16, 0.52);
|
--bg-board: rgba(8, 5, 15, 0.45);
|
||||||
--border: rgba(224, 128, 48, 0.08);
|
--border: rgba(157, 92, 255, 0.12);
|
||||||
--text-primary: #d8d0e8;
|
--text-primary: #e6e0f5;
|
||||||
--text-secondary: #7a6898;
|
--text-secondary: #9284b0;
|
||||||
--text-muted: #3c3058;
|
--text-muted: #4a3d66;
|
||||||
--font-display: 'Rajdhani', sans-serif;
|
--font-display: 'Rajdhani', sans-serif;
|
||||||
--font-body: 'Inter', sans-serif;
|
--font-body: 'Inter', sans-serif;
|
||||||
--overlay-bg: linear-gradient(180deg, rgba(6,5,12,0.90) 0%, rgba(6,5,12,0.38) 50%, rgba(6,5,12,0.94) 100%);
|
--overlay-bg: radial-gradient(circle at center, rgba(4,3,8,0.2) 0%, rgba(4,3,8,0.95) 100%);
|
||||||
--header-bg: rgba(6,5,12,0.93);
|
--header-bg: rgba(4,3,8,0.96);
|
||||||
--board-hover-border: rgba(224,128,48,0.26);
|
--board-hover-border: rgba(157, 92, 255, 0.22);
|
||||||
--toggle-on-bg: rgba(224,128,48,0.22);
|
--toggle-on-bg: rgba(224,128,48,0.22);
|
||||||
--logo-shadow: rgba(224,128,48,0.55);
|
--logo-shadow: rgba(157, 92, 255, 0.45);
|
||||||
}
|
}
|
||||||
[data-theme="event-horizon"] .board { border-color: rgba(224,128,48,0.10); }
|
[data-theme="event-horizon"] .board { border-color: rgba(157, 92, 255, 0.15); }
|
||||||
[data-theme="event-horizon"] .bm-item:hover { background: rgba(224,128,48,0.05); }
|
[data-theme="event-horizon"] .bm-item:hover { background: rgba(157, 92, 255, 0.08); }
|
||||||
|
|
||||||
|
|
||||||
/* ============================================
|
/* ============================================
|
||||||
THEME: MERCHANTMAN (teal / industrial sci-fi)
|
THEME: MERCHANTMAN (Emerald / industrial sci-fi)
|
||||||
============================================ */
|
============================================ */
|
||||||
[data-theme="merchantman"] {
|
[data-theme="merchantman"] {
|
||||||
--accent: #4ecfcf;
|
--accent: #2eb8b8;
|
||||||
--accent-dim: rgba(78, 207, 207, 0.14);
|
--accent-dim: rgba(46, 184, 184, 0.12);
|
||||||
--accent-glow: rgba(78, 207, 207, 0.07);
|
--accent-glow: rgba(46, 184, 184, 0.06);
|
||||||
--border-accent: rgba(78, 207, 207, 0.32);
|
--border-accent: rgba(46, 184, 184, 0.25);
|
||||||
--bg-primary: #060d0d;
|
--bg-primary: #040808;
|
||||||
--bg-board: rgba(6, 14, 16, 0.50);
|
--bg-board: rgba(6, 10, 10, 0.58);
|
||||||
--border: rgba(78, 207, 207, 0.09);
|
--border: rgba(46, 184, 184, 0.10);
|
||||||
--text-primary: #c8e8e8;
|
--text-primary: #d1e8e8;
|
||||||
--text-secondary: #5a8888;
|
--text-secondary: #6a8f8f;
|
||||||
--text-muted: #2e5050;
|
--text-muted: #344f4f;
|
||||||
--font-display: 'Rajdhani', sans-serif;
|
--font-display: 'Rajdhani', sans-serif;
|
||||||
--font-body: 'Inter', sans-serif;
|
--font-body: 'Inter', sans-serif;
|
||||||
--overlay-bg: linear-gradient(160deg, rgba(6,13,13,0.88) 0%, rgba(6,13,13,0.40) 50%, rgba(6,13,13,0.92) 100%);
|
--overlay-bg: radial-gradient(circle at 30% 40%, rgba(4,8,8,0.2) 0%, rgba(4,8,8,0.92) 100%);
|
||||||
--header-bg: rgba(6,13,13,0.93);
|
--header-bg: rgba(4,8,8,0.95);
|
||||||
--board-hover-border: rgba(78,207,207,0.26);
|
--board-hover-border: rgba(46, 184, 184, 0.20);
|
||||||
--toggle-on-bg: rgba(78,207,207,0.22);
|
--toggle-on-bg: rgba(78,207,207,0.22);
|
||||||
--logo-shadow: rgba(78,207,207,0.55);
|
--logo-shadow: rgba(46, 184, 184, 0.45);
|
||||||
}
|
}
|
||||||
[data-theme="merchantman"] .board { border-color: rgba(78,207,207,0.10); }
|
[data-theme="merchantman"] .board { border-color: rgba(46, 184, 184, 0.12); }
|
||||||
[data-theme="merchantman"] .bm-item:hover { background: rgba(78,207,207,0.05); }
|
[data-theme="merchantman"] .bm-item:hover { background: rgba(46, 184, 184, 0.06); }
|
||||||
|
|
||||||
/* ============================================
|
/* ============================================
|
||||||
THEME: JULIA & JIN (blue night / FFXIV)
|
THEME: JULIA & JIN (Aetherial Night / FFXIV)
|
||||||
============================================ */
|
============================================ */
|
||||||
[data-theme="julia-jin"] {
|
[data-theme="julia-jin"] {
|
||||||
--accent: #5b9fff;
|
--accent: #7db3ff;
|
||||||
--accent-dim: rgba(91, 159, 255, 0.15);
|
--accent-dim: rgba(125, 179, 255, 0.12);
|
||||||
--accent-glow: rgba(91, 159, 255, 0.07);
|
--accent-glow: rgba(125, 179, 255, 0.08);
|
||||||
--border-accent: rgba(91, 159, 255, 0.35);
|
--border-accent: rgba(125, 179, 255, 0.30);
|
||||||
--bg-primary: #06080f;
|
--bg-primary: #03050a;
|
||||||
--bg-board: rgba(8, 12, 26, 0.52);
|
--bg-board: rgba(7, 10, 20, 0.60);
|
||||||
--border: rgba(91, 159, 255, 0.09);
|
--border: rgba(125, 179, 255, 0.12);
|
||||||
--text-primary: #ccd8f8;
|
--text-primary: #eef2ff;
|
||||||
--text-secondary: #5c72a8;
|
--text-secondary: #8ba0d1;
|
||||||
--text-muted: #2e3a60;
|
--text-muted: #465685;
|
||||||
--font-display: 'Cinzel', serif;
|
--font-display: 'Cinzel', serif;
|
||||||
--font-body: 'Inter', sans-serif;
|
--font-body: 'Inter', sans-serif;
|
||||||
--overlay-bg: linear-gradient(180deg, rgba(6,8,15,0.85) 0%, rgba(6,8,15,0.38) 50%, rgba(6,8,15,0.90) 100%);
|
--overlay-bg: linear-gradient(180deg, rgba(3,5,10,0.85) 0%, rgba(3,5,10,0.25) 50%, rgba(3,5,10,0.92) 100%);
|
||||||
--header-bg: rgba(6,8,15,0.92);
|
--header-bg: rgba(3,5,10,0.94);
|
||||||
--board-hover-border: rgba(91,159,255,0.26);
|
--board-hover-border: rgba(125, 179, 255, 0.22);
|
||||||
--toggle-on-bg: rgba(91,159,255,0.22);
|
--toggle-on-bg: rgba(91,159,255,0.22);
|
||||||
--logo-shadow: rgba(91,159,255,0.55);
|
--logo-shadow: rgba(125, 179, 255, 0.50);
|
||||||
}
|
}
|
||||||
[data-theme="julia-jin"] .logo { font-family: 'Cinzel', serif; letter-spacing: 4px; }
|
[data-theme="julia-jin"] .logo { font-family: 'Cinzel', serif; letter-spacing: 5px; text-transform: uppercase; }
|
||||||
[data-theme="julia-jin"] .clock { font-family: 'Cinzel', serif; }
|
[data-theme="julia-jin"] .clock { font-family: 'Cinzel', serif; font-weight: 600; }
|
||||||
[data-theme="julia-jin"] .board-title { letter-spacing: 2px; }
|
[data-theme="julia-jin"] .board-title { letter-spacing: 2px; font-weight: 500; }
|
||||||
[data-theme="julia-jin"] .board { border-color: rgba(91,159,255,0.10); }
|
[data-theme="julia-jin"] .board { border-color: rgba(125, 179, 255, 0.15); backdrop-filter: blur(4px); }
|
||||||
[data-theme="julia-jin"] .bm-item:hover { background: rgba(91,159,255,0.06); }
|
[data-theme="julia-jin"] .bm-item:hover { background: rgba(125, 179, 255, 0.08); }
|
||||||
|
|
||||||
/* ============================================
|
/* ============================================
|
||||||
THEME: SC SUNSET (amber / planet-side)
|
THEME: SC Sunset - Horizon Glow
|
||||||
============================================ */
|
============================================ */
|
||||||
[data-theme="sc-sunset"] {
|
[data-theme="sc-sunset"] {
|
||||||
--accent: #f07c30;
|
--accent: #ff8c3d;
|
||||||
--accent-dim: rgba(240, 124, 48, 0.15);
|
--accent-dim: rgba(255, 140, 61, 0.12);
|
||||||
--accent-glow: rgba(240, 124, 48, 0.07);
|
--accent-glow: rgba(255, 140, 61, 0.08);
|
||||||
--border-accent: rgba(240, 124, 48, 0.35);
|
--border-accent: rgba(255, 140, 61, 0.28);
|
||||||
--bg-primary: #0c0805;
|
--bg-primary: #080503;
|
||||||
--bg-board: rgba(18, 10, 5, 0.50);
|
--bg-board: rgba(15, 10, 8, 0.55);
|
||||||
--border: rgba(240, 124, 48, 0.09);
|
--border: rgba(255, 140, 61, 0.10);
|
||||||
--text-primary: #f0dcc8;
|
--text-primary: #fce8d5;
|
||||||
--text-secondary: #906050;
|
--text-secondary: #b08568;
|
||||||
--text-muted: #503828;
|
--text-muted: #634a3a;
|
||||||
--font-display: 'Rajdhani', sans-serif;
|
--font-display: 'Rajdhani', sans-serif;
|
||||||
--font-body: 'Inter', sans-serif;
|
--font-body: 'Inter', sans-serif;
|
||||||
--overlay-bg: linear-gradient(180deg, rgba(12,8,5,0.90) 0%, rgba(12,8,5,0.35) 50%, rgba(12,8,5,0.92) 100%);
|
--overlay-bg: radial-gradient(circle at 50% 60%, rgba(8,5,3,0.1) 0%, rgba(8,5,3,0.92) 100%);
|
||||||
--header-bg: rgba(12,8,5,0.93);
|
--header-bg: rgba(8,5,3,0.94);
|
||||||
--board-hover-border: rgba(240,124,48,0.26);
|
--board-hover-border: rgba(255, 140, 61, 0.22);
|
||||||
--toggle-on-bg: rgba(240,124,48,0.22);
|
--toggle-on-bg: rgba(240,124,48,0.22);
|
||||||
--logo-shadow: rgba(240,124,48,0.55);
|
--logo-shadow: rgba(255, 140, 61, 0.45);
|
||||||
}
|
}
|
||||||
[data-theme="sc-sunset"] .board { border-color: rgba(240,124,48,0.10); }
|
[data-theme="sc-sunset"] .board {
|
||||||
[data-theme="sc-sunset"] .bm-item:hover { background: rgba(240,124,48,0.05); }
|
border-color: rgba(255, 140, 61, 0.15);
|
||||||
|
backdrop-filter: blur(6px);}
|
||||||
|
[data-theme="sc-sunset"] .bm-item:hover {
|
||||||
|
background: rgba(255, 140, 61, 0.08); }
|
||||||
|
|
||||||
/* ============================================
|
/* ============================================
|
||||||
THEME: HELLION HUD (circuit board / red+green)
|
THEME: HELLION HUD (circuit board / red+green)
|
||||||
============================================ */
|
============================================ */
|
||||||
[data-theme="hellion-hud"] {
|
[data-theme="hellion-hud"] {
|
||||||
--accent: #22cc44;
|
--accent: #32ff6a;
|
||||||
--accent-dim: rgba(34, 204, 68, 0.14);
|
--accent-dim: rgba(50, 255, 106, 0.10);
|
||||||
--accent-glow: rgba(34, 204, 68, 0.07);
|
--accent-glow: rgba(50, 255, 106, 0.05);
|
||||||
--border-accent: rgba(34, 204, 68, 0.30);
|
--border-accent: rgba(50, 255, 106, 0.25);
|
||||||
--bg-primary: #080a08;
|
--bg-primary: #030503;
|
||||||
--bg-board: rgba(8, 12, 8, 0.50);
|
--bg-board: rgba(5, 8, 5, 0.65);
|
||||||
--border: rgba(34, 204, 68, 0.09);
|
--border: rgba(50, 255, 106, 0.12);
|
||||||
--text-primary: #c8e8cc;
|
--text-primary: #d4ffd9;
|
||||||
--text-secondary: #507050;
|
--text-secondary: #6e9975;
|
||||||
--text-muted: #2c402c;
|
--text-muted: #334d38;
|
||||||
--font-display: 'Rajdhani', sans-serif;
|
--font-display: 'Rajdhani', sans-serif;
|
||||||
--font-body: 'Inter', sans-serif;
|
--font-body: 'Inter', sans-serif;
|
||||||
--overlay-bg: linear-gradient(160deg, rgba(8,10,8,0.88) 0%, rgba(8,10,8,0.42) 50%, rgba(8,10,8,0.92) 100%);
|
--overlay-bg: radial-gradient(circle at center, rgba(3,5,3,0.15) 0%, rgba(3,5,3,0.95) 100%);
|
||||||
--header-bg: rgba(8,10,8,0.93);
|
--header-bg: rgba(3,5,3,0.96);
|
||||||
--board-hover-border: rgba(34,204,68,0.24);
|
--board-hover-border: rgba(50, 255, 106, 0.20);
|
||||||
--toggle-on-bg: rgba(34,204,68,0.20);
|
--toggle-on-bg: rgba(34,204,68,0.20);
|
||||||
--logo-shadow: rgba(34,204,68,0.50);
|
--logo-shadow: rgba(50, 255, 106, 0.40);
|
||||||
|
--danger: #ff4d4d;
|
||||||
|
}
|
||||||
|
[data-theme="hellion-hud"] .board {
|
||||||
|
border-color: rgba(50, 255, 106, 0.15);
|
||||||
|
backdrop-filter: blur(8px) brightness(1.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme="hellion-hud"] .clock {
|
||||||
|
font-family: 'Rajdhani', sans-serif;
|
||||||
|
font-weight: 700;
|
||||||
|
text-shadow: 0 0 10px var(--accent-glow);
|
||||||
}
|
}
|
||||||
[data-theme="hellion-hud"] .board { border-color: rgba(34,204,68,0.10); }
|
|
||||||
[data-theme="hellion-hud"] .bm-item:hover { background: rgba(34,204,68,0.05); }
|
|
||||||
|
|
||||||
/* ============================================
|
/* ============================================
|
||||||
THEME: HELLION ENERGY (matrix / tactical green)
|
THEME: HELLION ENERGY (matrix / tactical green)
|
||||||
============================================ */
|
============================================ */
|
||||||
[data-theme="hellion-energy"] {
|
[data-theme="hellion-energy"] {
|
||||||
--accent: #00e87a;
|
--accent: #1eff8e;
|
||||||
--accent-dim: rgba(0, 232, 122, 0.13);
|
--accent-dim: rgba(30, 255, 142, 0.12);
|
||||||
--accent-glow: rgba(0, 232, 122, 0.06);
|
--accent-glow: rgba(30, 255, 142, 0.08);
|
||||||
--border-accent: rgba(0, 232, 122, 0.28);
|
--border-accent: rgba(30, 255, 142, 0.30);
|
||||||
--bg-primary: #040a06;
|
--bg-primary: #020503;
|
||||||
--bg-board: rgba(4, 12, 6, 0.52);
|
--bg-board: rgba(4, 7, 5, 0.60);
|
||||||
--border: rgba(0, 232, 122, 0.08);
|
--border: rgba(30, 255, 142, 0.12);
|
||||||
--text-primary: #b8f0d0;
|
--text-primary: #e0ffef;
|
||||||
--text-secondary: #3a7050;
|
--text-secondary: #5e997a;
|
||||||
--text-muted: #1e3a28;
|
--text-muted: #2a4d3a;
|
||||||
--font-display: 'Rajdhani', sans-serif;
|
--font-display: 'Rajdhani', sans-serif;
|
||||||
--font-body: 'Inter', sans-serif;
|
--font-body: 'Inter', sans-serif;
|
||||||
--overlay-bg: linear-gradient(180deg, rgba(4,10,6,0.90) 0%, rgba(4,10,6,0.40) 50%, rgba(4,10,6,0.94) 100%);
|
--overlay-bg: radial-gradient(circle at center, rgba(2,5,3,0.1) 0%, rgba(2,5,3,0.95) 100%);
|
||||||
--header-bg: rgba(4,10,6,0.94);
|
--header-bg: rgba(2,5,3,0.96);
|
||||||
--board-hover-border: rgba(0,232,122,0.22);
|
--board-hover-border: rgba(30, 255, 142, 0.25);
|
||||||
--toggle-on-bg: rgba(0,232,122,0.18);
|
--toggle-on-bg: rgba(0,232,122,0.18);
|
||||||
--logo-shadow: rgba(0,232,122,0.50);
|
--logo-shadow: rgba(30, 255, 142, 0.60);
|
||||||
|
}
|
||||||
|
[data-theme="hellion-energy"] .board {
|
||||||
|
border-color: rgba(30, 255, 142, 0.15);
|
||||||
|
backdrop-filter: blur(10px) saturate(1.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-theme="hellion-energy"] .bm-item:hover {
|
||||||
|
background: rgba(30, 255, 142, 0.10);
|
||||||
|
box-shadow: inset 0 0 10px rgba(30, 255, 142, 0.05);
|
||||||
}
|
}
|
||||||
[data-theme="hellion-energy"] .board { border-color: rgba(0,232,122,0.09); }
|
|
||||||
[data-theme="hellion-energy"] .bm-item:hover { background: rgba(0,232,122,0.05); }
|
|
||||||
|
|
||||||
/* ============================================
|
/* ============================================
|
||||||
BASE STYLES
|
BASE STYLES
|
||||||
@@ -485,6 +543,9 @@ body.show-desc .bm-desc { display: block; }
|
|||||||
.settings-section-title {
|
.settings-section-title {
|
||||||
font-family: var(--font-display); font-size: 10px; font-weight: 700;
|
font-family: var(--font-display); font-size: 10px; font-weight: 700;
|
||||||
letter-spacing: 2px; color: var(--text-muted); padding: 10px 18px 6px; text-transform: uppercase;
|
letter-spacing: 2px; color: var(--text-muted); padding: 10px 18px 6px; text-transform: uppercase;
|
||||||
|
cursor: pointer; user-select: none;
|
||||||
|
display: flex; align-items: center; gap: 6px;
|
||||||
|
background: none; border: none; width: 100%;
|
||||||
}
|
}
|
||||||
.settings-section-title.danger { color: var(--danger); }
|
.settings-section-title.danger { color: var(--danger); }
|
||||||
|
|
||||||
@@ -537,14 +598,18 @@ body.show-desc .bm-desc { display: block; }
|
|||||||
text-align: center; text-transform: uppercase;
|
text-align: center; text-transform: uppercase;
|
||||||
}
|
}
|
||||||
|
|
||||||
.theme-card[data-value="nebula"] .theme-card-label { color: #d65cff; }
|
.theme-card[data-value="nebula"] .theme-card-label { color: #b359ff; } /* Deep Magenta */
|
||||||
.theme-card[data-value="crescent"] .theme-card-label { color: #c8a84a; }
|
.theme-card[data-value="crescent"] .theme-card-label { color: #d4bd8a; } /* Champagne Gold */
|
||||||
.theme-card[data-value="event-horizon"] .theme-card-label { color: #e08030; }
|
.theme-card[data-value="event-horizon"] .theme-card-label { color: #9d5cff; } /* Cosmic Purple */
|
||||||
.theme-card[data-value="merchantman"] .theme-card-label { color: #4ecfcf; }
|
.theme-card[data-value="merchantman"] .theme-card-label { color: #2eb8b8; } /* Emerald Teal */
|
||||||
.theme-card[data-value="julia-jin"] .theme-card-label { color: #5b9fff; }
|
.theme-card[data-value="julia-jin"] .theme-card-label { color: #7db3ff; } /* Aether Blue */
|
||||||
.theme-card[data-value="sc-sunset"] .theme-card-label { color: #f07c30; }
|
.theme-card[data-value="sc-sunset"] .theme-card-label { color: #ff8c3d; } /* Amber Sunset */
|
||||||
.theme-card[data-value="hellion-hud"] .theme-card-label { color: #22cc44; }
|
.theme-card[data-value="hellion-hud"] .theme-card-label { color: #32ff6a; } /* Neon Green */
|
||||||
.theme-card[data-value="hellion-energy"] .theme-card-label { color: #00e87a; }
|
.theme-card[data-value="hellion-energy"] .theme-card-label { color: #1eff8e; } /* Acid Green */
|
||||||
|
.theme-card:hover .theme-card-label {
|
||||||
|
text-shadow: 0 0 8px currentColor;
|
||||||
|
transition: text-shadow 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
.theme-card-check {
|
.theme-card-check {
|
||||||
position: absolute; top: 5px; right: 5px;
|
position: absolute; top: 5px; right: 5px;
|
||||||
@@ -606,12 +671,13 @@ body.show-desc .bm-desc { display: block; }
|
|||||||
.btn-primary:hover { filter: brightness(1.15); box-shadow: 0 0 18px var(--accent-glow); }
|
.btn-primary:hover { filter: brightness(1.15); box-shadow: 0 0 18px var(--accent-glow); }
|
||||||
|
|
||||||
.btn-danger {
|
.btn-danger {
|
||||||
padding: 5px 12px; background: rgba(224,85,85,0.1);
|
padding: 7px 16px; background: rgba(224,85,85,0.15);
|
||||||
border: 1px solid rgba(224,85,85,0.3); border-radius: var(--radius-sm);
|
border: 1px solid rgba(224,85,85,0.3); border-radius: var(--radius-sm);
|
||||||
color: var(--danger); font-family: var(--font-body); font-size: 12px;
|
color: var(--danger); font-family: var(--font-display); font-size: 12px;
|
||||||
|
font-weight: 600; letter-spacing: 1px; text-transform: uppercase;
|
||||||
cursor: pointer; transition: all 0.15s;
|
cursor: pointer; transition: all 0.15s;
|
||||||
}
|
}
|
||||||
.btn-danger:hover { background: rgba(224,85,85,0.2); }
|
.btn-danger:hover { background: rgba(224,85,85,0.25); border-color: rgba(224,85,85,0.5); }
|
||||||
|
|
||||||
.btn-close {
|
.btn-close {
|
||||||
background: none; border: none; color: var(--text-muted); font-size: 14px;
|
background: none; border: none; color: var(--text-muted); font-size: 14px;
|
||||||
@@ -906,6 +972,220 @@ body.show-desc .bm-desc { display: block; }
|
|||||||
::-webkit-scrollbar-track { background: transparent; }
|
::-webkit-scrollbar-track { background: transparent; }
|
||||||
::-webkit-scrollbar-thumb { background: var(--border); border-radius: 2px; }
|
::-webkit-scrollbar-thumb { background: var(--border); border-radius: 2px; }
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
CUSTOM DIALOG SYSTEM
|
||||||
|
============================================ */
|
||||||
|
.dialog-overlay {
|
||||||
|
position: fixed; inset: 0; z-index: 400;
|
||||||
|
background: rgba(0,0,0,0.65); backdrop-filter: blur(7px);
|
||||||
|
display: flex; align-items: center; justify-content: center;
|
||||||
|
opacity: 0; pointer-events: none; transition: opacity 0.2s;
|
||||||
|
}
|
||||||
|
.dialog-overlay.active { opacity: 1; pointer-events: all; }
|
||||||
|
|
||||||
|
.dialog-box {
|
||||||
|
background: rgba(10,9,20,0.98); border: 1px solid var(--border);
|
||||||
|
border-radius: var(--radius); width: 340px; max-width: 90vw;
|
||||||
|
backdrop-filter: blur(28px);
|
||||||
|
transform: translateY(8px) scale(0.98); transition: transform 0.2s;
|
||||||
|
box-shadow: 0 20px 60px rgba(0,0,0,0.7);
|
||||||
|
}
|
||||||
|
.dialog-overlay.active .dialog-box { transform: translateY(0) scale(1); }
|
||||||
|
|
||||||
|
.dialog-header {
|
||||||
|
display: flex; align-items: center; gap: 10px;
|
||||||
|
padding: 14px 16px 12px; border-bottom: 1px solid var(--border);
|
||||||
|
font-family: var(--font-display); font-size: 14px; font-weight: 600;
|
||||||
|
letter-spacing: 1.5px; color: var(--text-primary); text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dialog-icon {
|
||||||
|
width: 20px; height: 20px; flex-shrink: 0;
|
||||||
|
}
|
||||||
|
.dialog-icon.type-info { color: var(--accent); }
|
||||||
|
.dialog-icon.type-success { color: #4ade80; }
|
||||||
|
.dialog-icon.type-warning { color: #f59e0b; }
|
||||||
|
.dialog-icon.type-danger { color: var(--danger); }
|
||||||
|
|
||||||
|
.dialog-body {
|
||||||
|
padding: 16px;
|
||||||
|
font-family: var(--font-body); font-size: 13px; line-height: 1.6;
|
||||||
|
color: var(--text-secondary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dialog-actions {
|
||||||
|
padding: 10px 16px 14px;
|
||||||
|
display: flex; justify-content: flex-end; gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-secondary {
|
||||||
|
background: transparent; border: 1px solid var(--border);
|
||||||
|
color: var(--text-secondary); padding: 7px 16px;
|
||||||
|
border-radius: var(--radius-sm); font-family: var(--font-display);
|
||||||
|
font-size: 12px; font-weight: 600; letter-spacing: 1px;
|
||||||
|
text-transform: uppercase; cursor: pointer;
|
||||||
|
transition: background 0.15s, border-color 0.15s;
|
||||||
|
}
|
||||||
|
.btn-secondary:hover {
|
||||||
|
background: rgba(255,255,255,0.04); border-color: var(--text-muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
ONBOARDING
|
||||||
|
============================================ */
|
||||||
|
.onboarding-modal {
|
||||||
|
background: rgba(10,9,20,0.98); border: 1px solid var(--border);
|
||||||
|
border-radius: 12px; width: 460px; max-width: 92vw;
|
||||||
|
backdrop-filter: blur(28px);
|
||||||
|
transform: translateY(8px) scale(0.98); transition: transform 0.25s;
|
||||||
|
box-shadow: 0 24px 80px rgba(0,0,0,0.7);
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.dialog-overlay.active .onboarding-modal { transform: translateY(0) scale(1); }
|
||||||
|
|
||||||
|
.onboarding-skip {
|
||||||
|
position: absolute; top: 14px; right: 16px;
|
||||||
|
background: none; border: none; color: var(--text-muted);
|
||||||
|
font-family: var(--font-body); font-size: 12px;
|
||||||
|
cursor: pointer; letter-spacing: 0.5px;
|
||||||
|
transition: color 0.15s;
|
||||||
|
}
|
||||||
|
.onboarding-skip:hover { color: var(--text-secondary); }
|
||||||
|
|
||||||
|
.onboarding-slide {
|
||||||
|
padding: 32px 28px 20px; text-align: center;
|
||||||
|
animation: onboardingFadeIn 0.3s ease;
|
||||||
|
}
|
||||||
|
@keyframes onboardingFadeIn {
|
||||||
|
from { opacity: 0; transform: translateX(12px); }
|
||||||
|
to { opacity: 1; transform: translateX(0); }
|
||||||
|
}
|
||||||
|
|
||||||
|
.onboarding-hero {
|
||||||
|
font-size: 48px; margin-bottom: 16px; line-height: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.onboarding-title {
|
||||||
|
font-family: var(--font-display); font-size: 20px; font-weight: 700;
|
||||||
|
letter-spacing: 2px; text-transform: uppercase;
|
||||||
|
color: var(--text-primary); margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.onboarding-text {
|
||||||
|
font-family: var(--font-body); font-size: 13px; line-height: 1.7;
|
||||||
|
color: var(--text-secondary); max-width: 360px; margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.onboarding-feature-list {
|
||||||
|
list-style: none; padding: 0; margin: 14px auto 0;
|
||||||
|
text-align: left; max-width: 320px;
|
||||||
|
}
|
||||||
|
.onboarding-feature-list li {
|
||||||
|
font-family: var(--font-body); font-size: 13px;
|
||||||
|
color: var(--text-secondary); padding: 5px 0;
|
||||||
|
display: flex; align-items: center; gap: 8px;
|
||||||
|
}
|
||||||
|
.onboarding-feature-list li::before {
|
||||||
|
content: ''; width: 6px; height: 6px; border-radius: 50%;
|
||||||
|
background: var(--accent); flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.onboarding-theme-grid {
|
||||||
|
display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px;
|
||||||
|
margin-top: 14px;
|
||||||
|
}
|
||||||
|
.onboarding-theme-chip {
|
||||||
|
padding: 6px 4px; border-radius: var(--radius-sm);
|
||||||
|
border: 1px solid var(--border); background: rgba(255,255,255,0.03);
|
||||||
|
font-family: var(--font-body); font-size: 11px; color: var(--text-secondary);
|
||||||
|
text-align: center; cursor: default;
|
||||||
|
transition: border-color 0.15s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.onboarding-footer {
|
||||||
|
display: flex; align-items: center; justify-content: space-between;
|
||||||
|
padding: 14px 28px 20px; border-top: 1px solid var(--border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.onboarding-dots {
|
||||||
|
display: flex; gap: 6px;
|
||||||
|
}
|
||||||
|
.onboarding-dot {
|
||||||
|
width: 8px; height: 8px; border-radius: 50%;
|
||||||
|
background: var(--border); transition: background 0.2s, transform 0.2s;
|
||||||
|
}
|
||||||
|
.onboarding-dot.active {
|
||||||
|
background: var(--accent); transform: scale(1.25);
|
||||||
|
}
|
||||||
|
|
||||||
|
.onboarding-nav {
|
||||||
|
display: flex; gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
THEME PICKER MODAL
|
||||||
|
============================================ */
|
||||||
|
.theme-modal {
|
||||||
|
background: rgba(8,8,16,0.96);
|
||||||
|
border: 1px solid var(--border);
|
||||||
|
border-radius: var(--radius-lg);
|
||||||
|
backdrop-filter: blur(28px);
|
||||||
|
max-width: 520px; width: 90%;
|
||||||
|
max-height: 85vh; overflow-y: auto;
|
||||||
|
scrollbar-width: thin; scrollbar-color: var(--border) transparent;
|
||||||
|
}
|
||||||
|
.theme-modal .theme-grid {
|
||||||
|
padding: 12px 16px 16px;
|
||||||
|
}
|
||||||
|
.theme-modal-section {
|
||||||
|
border-top: 1px solid var(--border);
|
||||||
|
padding: 0 16px 16px;
|
||||||
|
}
|
||||||
|
.theme-modal-section .settings-section-title {
|
||||||
|
padding: 12px 0 8px;
|
||||||
|
cursor: default; user-select: auto;
|
||||||
|
}
|
||||||
|
.theme-modal-section .setting-row {
|
||||||
|
padding: 8px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
ACCORDION SETTINGS
|
||||||
|
============================================ */
|
||||||
|
.section-chevron {
|
||||||
|
font-size: 10px;
|
||||||
|
transition: transform 0.2s ease;
|
||||||
|
color: var(--text-muted);
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
.settings-section.open .section-chevron {
|
||||||
|
transform: rotate(90deg);
|
||||||
|
}
|
||||||
|
.section-content {
|
||||||
|
max-height: 0; overflow: hidden;
|
||||||
|
transition: max-height 0.3s ease-out;
|
||||||
|
}
|
||||||
|
.settings-section.open .section-content {
|
||||||
|
max-height: 800px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
UTILITY CLASSES
|
||||||
|
============================================ */
|
||||||
|
.hidden { display: none; }
|
||||||
|
.accent-text { color: var(--accent); }
|
||||||
|
.dim { opacity: 0.4; }
|
||||||
|
.drag-ghost {
|
||||||
|
position: fixed; opacity: 0.75; pointer-events: none; z-index: 9999;
|
||||||
|
transform: rotate(1.5deg) scale(1.02);
|
||||||
|
box-shadow: 0 12px 40px rgba(0,0,0,0.6);
|
||||||
|
}
|
||||||
|
.bm-item.drag-over { background: rgba(255,160,50,0.07); }
|
||||||
|
.bm-item.dragging-source { opacity: 0.4; }
|
||||||
|
.about-info-label-block { display: block; margin-bottom: 6px; }
|
||||||
|
.about-link-subtle { color: var(--text-secondary); text-decoration: none; }
|
||||||
|
.modal-input-spaced { margin-top: 8px; }
|
||||||
|
|
||||||
/* ============================================
|
/* ============================================
|
||||||
RESPONSIVE — Mobile & Tablet
|
RESPONSIVE — Mobile & Tablet
|
||||||
============================================ */
|
============================================ */
|
||||||
@@ -928,6 +1208,7 @@ body.show-desc .bm-desc { display: block; }
|
|||||||
|
|
||||||
.settings-panel { width: 320px; }
|
.settings-panel { width: 320px; }
|
||||||
.theme-grid { grid-template-columns: 1fr 1fr; }
|
.theme-grid { grid-template-columns: 1fr 1fr; }
|
||||||
|
.theme-modal { max-width: 400px; }
|
||||||
|
|
||||||
.search-bar { max-width: 400px; }
|
.search-bar { max-width: 400px; }
|
||||||
}
|
}
|
||||||
@@ -955,6 +1236,7 @@ body.show-desc .bm-desc { display: block; }
|
|||||||
|
|
||||||
.settings-panel { width: 100%; }
|
.settings-panel { width: 100%; }
|
||||||
.theme-grid { grid-template-columns: 1fr 1fr; gap: 6px; }
|
.theme-grid { grid-template-columns: 1fr 1fr; gap: 6px; }
|
||||||
|
.theme-modal { max-width: 100%; width: calc(100vw - 32px); }
|
||||||
|
|
||||||
.search-bar-wrapper { padding: 6px 10px; }
|
.search-bar-wrapper { padding: 6px 10px; }
|
||||||
.search-bar { max-width: 100%; }
|
.search-bar { max-width: 100%; }
|
||||||
|
|||||||
+70
-12
@@ -1,8 +1,9 @@
|
|||||||
/* =============================================
|
/* =============================================
|
||||||
HELLION NEWTAB — settings.js
|
HELLION NEWTAB — settings.js
|
||||||
Settings Panel: Toggles, Hintergrund, Theme-Picker
|
Settings Panel, Theme-Modal, Accordion, Toggles
|
||||||
============================================= */
|
============================================= */
|
||||||
|
|
||||||
|
// ---- SETTINGS PANEL ----
|
||||||
function openSettings() {
|
function openSettings() {
|
||||||
document.getElementById('settingsPanel').classList.add('open');
|
document.getElementById('settingsPanel').classList.add('open');
|
||||||
document.getElementById('settingsOverlay').classList.add('active');
|
document.getElementById('settingsOverlay').classList.add('active');
|
||||||
@@ -12,6 +13,43 @@ function closeSettings() {
|
|||||||
document.getElementById('settingsOverlay').classList.remove('active');
|
document.getElementById('settingsOverlay').classList.remove('active');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ---- THEME MODAL ----
|
||||||
|
function openThemeModal() {
|
||||||
|
const overlay = document.getElementById('themeOverlay');
|
||||||
|
overlay.classList.add('active');
|
||||||
|
}
|
||||||
|
function closeThemeModal() {
|
||||||
|
const overlay = document.getElementById('themeOverlay');
|
||||||
|
overlay.classList.remove('active');
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---- ACCORDION ----
|
||||||
|
function initAccordion() {
|
||||||
|
const defaultOpen = new Set(['appearance', 'behavior', 'data', 'help']);
|
||||||
|
const sections = document.querySelectorAll('.settings-section[data-section]');
|
||||||
|
|
||||||
|
sections.forEach(section => {
|
||||||
|
const name = section.dataset.section;
|
||||||
|
const title = section.querySelector('.settings-section-title');
|
||||||
|
|
||||||
|
if (defaultOpen.has(name)) {
|
||||||
|
section.classList.add('open');
|
||||||
|
}
|
||||||
|
|
||||||
|
title.addEventListener('click', () => {
|
||||||
|
section.classList.toggle('open');
|
||||||
|
});
|
||||||
|
|
||||||
|
title.addEventListener('keydown', e => {
|
||||||
|
if (e.key === 'Enter' || e.key === ' ') {
|
||||||
|
e.preventDefault();
|
||||||
|
section.classList.toggle('open');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---- APPLY SETTINGS ----
|
||||||
function applySettings() {
|
function applySettings() {
|
||||||
const body = document.body;
|
const body = document.body;
|
||||||
body.classList.toggle('compact', settings.compact);
|
body.classList.toggle('compact', settings.compact);
|
||||||
@@ -24,7 +62,7 @@ function applySettings() {
|
|||||||
document.getElementById('settingShowDesc').checked = settings.showDesc;
|
document.getElementById('settingShowDesc').checked = settings.showDesc;
|
||||||
document.getElementById('settingHideExtra').checked = settings.hideExtra;
|
document.getElementById('settingHideExtra').checked = settings.hideExtra;
|
||||||
document.getElementById('settingVisibleCount').value = String(settings.visibleCount);
|
document.getElementById('settingVisibleCount').value = String(settings.visibleCount);
|
||||||
document.getElementById('visibleCountRow').style.opacity = settings.hideExtra ? '1' : '0.4';
|
document.getElementById('visibleCountRow').classList.toggle('dim', !settings.hideExtra);
|
||||||
|
|
||||||
// showSearch: undefined (alter Save) → true
|
// showSearch: undefined (alter Save) → true
|
||||||
if (settings.showSearch === undefined) settings.showSearch = true;
|
if (settings.showSearch === undefined) settings.showSearch = true;
|
||||||
@@ -40,13 +78,21 @@ function applySettings() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ---- BIND EVENTS ----
|
||||||
function bindSettingsEvents() {
|
function bindSettingsEvents() {
|
||||||
// Panel
|
// Settings Panel
|
||||||
document.getElementById('settingsOverlay').addEventListener('click', closeSettings);
|
document.getElementById('settingsOverlay').addEventListener('click', closeSettings);
|
||||||
document.getElementById('btnCloseSettings').addEventListener('click', closeSettings);
|
document.getElementById('btnCloseSettings').addEventListener('click', closeSettings);
|
||||||
document.getElementById('btnSettings').addEventListener('click', openSettings);
|
document.getElementById('btnSettings').addEventListener('click', openSettings);
|
||||||
|
|
||||||
// Theme-Picker
|
// Theme Modal
|
||||||
|
document.getElementById('btnTheme').addEventListener('click', openThemeModal);
|
||||||
|
document.getElementById('btnCloseTheme').addEventListener('click', closeThemeModal);
|
||||||
|
document.getElementById('themeOverlay').addEventListener('click', e => {
|
||||||
|
if (e.target === document.getElementById('themeOverlay')) closeThemeModal();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Theme-Picker (Cards im Theme-Modal)
|
||||||
document.querySelectorAll('.theme-card').forEach(card => {
|
document.querySelectorAll('.theme-card').forEach(card => {
|
||||||
card.addEventListener('click', async () => {
|
card.addEventListener('click', async () => {
|
||||||
const name = card.dataset.value;
|
const name = card.dataset.value;
|
||||||
@@ -59,6 +105,9 @@ function bindSettingsEvents() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Accordion initialisieren
|
||||||
|
initAccordion();
|
||||||
|
|
||||||
// Toggles
|
// Toggles
|
||||||
const toggleMap = {
|
const toggleMap = {
|
||||||
settingCompact: v => { settings.compact = v; document.body.classList.toggle('compact', v); },
|
settingCompact: v => { settings.compact = v; document.body.classList.toggle('compact', v); },
|
||||||
@@ -67,7 +116,7 @@ function bindSettingsEvents() {
|
|||||||
settingShowDesc: v => { settings.showDesc = v; document.body.classList.toggle('show-desc', v); },
|
settingShowDesc: v => { settings.showDesc = v; document.body.classList.toggle('show-desc', v); },
|
||||||
settingHideExtra: v => {
|
settingHideExtra: v => {
|
||||||
settings.hideExtra = v;
|
settings.hideExtra = v;
|
||||||
document.getElementById('visibleCountRow').style.opacity = v ? '1' : '0.4';
|
document.getElementById('visibleCountRow').classList.toggle('dim', !v);
|
||||||
renderBoards();
|
renderBoards();
|
||||||
},
|
},
|
||||||
settingShowSearch: v => {
|
settingShowSearch: v => {
|
||||||
@@ -92,20 +141,19 @@ function bindSettingsEvents() {
|
|||||||
renderBoards();
|
renderBoards();
|
||||||
});
|
});
|
||||||
|
|
||||||
// Background URL
|
// Background URL (im Theme-Modal)
|
||||||
document.getElementById('btnChangeBg').addEventListener('click', () => {
|
document.getElementById('btnChangeBg').addEventListener('click', () => {
|
||||||
const row = document.getElementById('bgInputRow');
|
document.getElementById('bgInputRow').classList.toggle('hidden');
|
||||||
row.style.display = row.style.display === 'none' ? 'flex' : 'none';
|
|
||||||
});
|
});
|
||||||
document.getElementById('btnApplyBg').addEventListener('click', async () => {
|
document.getElementById('btnApplyBg').addEventListener('click', async () => {
|
||||||
const url = document.getElementById('bgUrlInput').value.trim();
|
const url = document.getElementById('bgUrlInput').value.trim();
|
||||||
settings.bgUrl = url;
|
settings.bgUrl = url;
|
||||||
document.getElementById('bgLayer').style.backgroundImage = url ? `url('${url}')` : '';
|
document.getElementById('bgLayer').style.backgroundImage = url ? `url('${url}')` : '';
|
||||||
await saveSettings();
|
await saveSettings();
|
||||||
document.getElementById('bgInputRow').style.display = 'none';
|
document.getElementById('bgInputRow').classList.add('hidden');
|
||||||
});
|
});
|
||||||
|
|
||||||
// Background File Upload
|
// Background File Upload (im Theme-Modal)
|
||||||
document.getElementById('btnBgFile').addEventListener('click', () => {
|
document.getElementById('btnBgFile').addEventListener('click', () => {
|
||||||
document.getElementById('bgFileInput').click();
|
document.getElementById('bgFileInput').click();
|
||||||
});
|
});
|
||||||
@@ -119,14 +167,24 @@ function bindSettingsEvents() {
|
|||||||
await saveSettings();
|
await saveSettings();
|
||||||
};
|
};
|
||||||
reader.onerror = () => {
|
reader.onerror = () => {
|
||||||
alert('Fehler beim Lesen der Datei. Bitte eine andere Datei wählen.');
|
HellionDialog.alert('Fehler beim Lesen der Datei. Bitte eine andere Datei wählen.', { type: 'danger', title: 'Dateifehler' });
|
||||||
};
|
};
|
||||||
reader.readAsDataURL(file);
|
reader.readAsDataURL(file);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Onboarding wiederholen
|
||||||
|
document.getElementById('btnRestartOnboarding').addEventListener('click', () => {
|
||||||
|
closeSettings();
|
||||||
|
Onboarding.start();
|
||||||
|
});
|
||||||
|
|
||||||
// Reset All
|
// Reset All
|
||||||
document.getElementById('btnResetAll').addEventListener('click', async () => {
|
document.getElementById('btnResetAll').addEventListener('click', async () => {
|
||||||
if (!confirm('Wirklich alle Boards und Einstellungen löschen? Nicht rückgängig machbar.')) return;
|
const ok = await HellionDialog.confirm(
|
||||||
|
'Wirklich alle Boards und Einstellungen löschen? Das kann nicht rückgängig gemacht werden.',
|
||||||
|
{ type: 'danger', title: 'Alles zurücksetzen', confirmText: 'Alles löschen' }
|
||||||
|
);
|
||||||
|
if (!ok) return;
|
||||||
boards = [];
|
boards = [];
|
||||||
settings = { compact: false, shortenTitles: false, newTab: true, showDesc: false,
|
settings = { compact: false, shortenTitles: false, newTab: true, showDesc: false,
|
||||||
hideExtra: false, visibleCount: 10, bgUrl: '', theme: 'nebula',
|
hideExtra: false, visibleCount: 10, bgUrl: '', theme: 'nebula',
|
||||||
|
|||||||
Reference in New Issue
Block a user