Tmavý režim (Dark Theme)
Přehled
Aplikace AMČR podporuje přepínání mezi světlým a tmavým režimem.
Tmavý režim je implementován výhradně na straně klienta pomocí CSS
proměnných, SCSS přepisů a JavaScriptové třídy ThemeManager.
Žádná serverová logika není zapojena.
Mechanismus aktivace
Téma je řízeno dvěma DOM atributy nastavenými současně:
Selektor |
Účel |
|---|---|
|
Primární SCSS selektor pro všechny tmavé přepisy |
|
Alternativní třída na |
Přepínání zajišťuje třída ThemeManager v webclient/static/js/theme-toggle.js:
Při načtení stránky čte
localStorage.getItem('app-theme'); pokud není nastaveno, použije preferenci operačního systému (prefers-color-scheme: dark).Nastaví
data-themena<html>a přepne třídyapp-dark-theme/app-light-themena<body>.Sleduje změny
prefers-color-schemea automaticky přepíná, pokud uživatel ručně nezvolil téma.Při ruční změně tématu ukládá volbu přes
localStorage.setItem('app-theme', theme).Dispatchuje
CustomEventtheme-changed, na který reagují další komponenty (např. ikona tlačítka).
Tlačítko přepínání používá Material Icons ikonu (dark_mode / light_mode)
a nachází se v:
Přihlášené rozložení:
webclient/templates/base_logged_in.html(navbar,#theme-toggle-btn)Oznámení (veřejné stránky):
webclient/oznameni/templates/oznameni/header.html,index.html,index_2.html,success.html
Struktura souborů
Soubor |
Role |
|---|---|
|
Proměnné světlého tématu (Bootstrap přepisy, barvy entit, layout) |
|
Definice tmavých proměnných (barevná paleta, tokeny komponent) |
|
SCSS pravidla tmavého režimu — importuje |
|
Kořenový SCSS vstupní bod — importuje proměnné → Bootstrap → app styly → dark theme naposled |
|
Vlastní dark-mode proměnné Bootstrap 5 (využívané BS interně) |
|
JS třída |
|
Dark mode widgetu cookie-consent ( |
|
Tmavá varianta pozadí přihlašovací stránky |
Pořadí importů v theme.scss
@import 'scss/app-variables'; // 1. Světlé výchozí hodnoty
@import 'bootstrap5/bootstrap'; // 2. Bootstrap 5
@import 'scss/app-mixins'; // 3. App mixiny
@import 'scss/app-global'; // 4. Globální app styly
@import 'scss/app-layout'; // 5. Layout
@import 'scss/app-select2'; // 6. Select2 přepisy
@import 'scss/app-theme-dark'; // 7. Tmavé téma (poslední — přepisuje vše výše)
Barevné škály
Světlý režim — odstíny šedé (_app-variables.scss)
Standardní Bootstrap škála šedé pro všechny světlé prvky UI:
Proměnná |
Hex |
Použití |
|---|---|---|
|
|
Pozadí stránky, pozadí karet |
|
|
Světlá pozadí, jemné výplně |
|
|
Ohraničení, hlavičky karet |
|
|
Ohraničení, oddělovače, disabled stavy |
|
|
Ohraničení vstupních polí, muted UI |
|
|
Placeholder text, disabled stav PIAN |
|
|
Sekundární text |
|
|
Text (tmavší) |
|
|
Nadpisy, důraz |
|
|
Téměř černý text, potvrzený stav PIAN |
|
|
Čistě černá (výjimečně) |
Tmavý režim — odstíny šedé (_app-variables-dark.scss)
Invertovaná škála — nízké hodnoty jsou tmavé, vysoké světlé:
Proměnná |
Hex |
Použití |
|---|---|---|
|
|
Nahrazuje |
|
|
Hover řádku tabulky, nejhlubší povrch |
|
|
Hlavičky karet, hlavičky tabulek, sidebar, tělo tabulky |
|
|
Pozadí navbaru, |
|
|
Primární povrch — pozadí body, karty, vstupy, sidebar, tabulky, posuvník |
|
|
Ohraničení karet, vstupních polí, obecné ohraničení, hover posuvníku, disabled select2 |
|
|
Placeholder text, daterange hover/in-range, dropzone, select2 multi-choice, text accordion sidebaru |
|
|
Sekundární text |
|
|
Text s důrazem, pozadí tooltipů |
|
|
Primární text ( |
|
|
Nahrazuje |
Primární / akcentové barvy
Token |
Světlý |
Tmavý |
Použití |
|---|---|---|---|
|
|
— |
Tlačítka, odkazy, brand accent |
|
— |
|
Odkazy, focus border, patička, odznaky, aktivní položky sidebaru |
|
|
|
Sekundární tlačítka, muted akcenty |
Barvy entit (neměnné v tmavém režimu)
Barvy specifické pro entity se v tmavém režimu nepřepisují:
Entita |
Hex |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Mapování barev na komponenty (tmavý režim)
Layout a struktura
Komponenta |
Pozadí |
Text |
Ohraničení |
|---|---|---|---|
Body / page wrapper |
|
|
— |
Navbar |
|
|
|
Sidebar |
|
accordion: |
|
Patička |
|
|
— |
Obsah
Komponenta |
Pozadí |
Text |
Ohraničení |
|---|---|---|---|
Karty |
|
|
|
Hlavičky karet |
|
zděděno |
|
Tabulky (thead) |
|
|
|
Tabulky (tbody) |
|
|
|
Řádky tabulky (hover) |
|
— |
— |
Pruhované buňky |
|
— |
— |
Dropdowny |
|
|
|
Dropdown hover |
|
— |
— |
Modály |
|
|
|
Hlavičky modálů |
|
— |
|
Formuláře
Komponenta |
Pozadí |
Text |
Ohraničení |
|---|---|---|---|
Vstupy / selecty |
|
|
|
Focus vstupu |
|
|
|
Placeholder |
— |
|
— |
Select2 dropdown |
|
|
— |
Select2 (vybraný) |
|
|
— |
Select2 (zvýrazněný) |
|
|
— |
Select2 multi-choice tagy |
|
|
— |
Ostatní
Komponenta |
Pozadí |
Text / barva |
|---|---|---|
Tlačítka ( |
|
|
Alerty |
|
|
Odznaky (badges) |
|
|
Tooltipy |
|
|
Text muted |
|
— |
Posuvník (track) |
|
— |
Posuvník (thumb) |
|
— |
Daterangepicker |
|
|
Daterange (aktivní) |
|
|
Daterange (in-range) |
|
|
Přihlašovací / registrační stránky
Tmavé přihlašovací stránky používají stejné tokeny proměnných plus:
Pozadí se přepíná na
login-bg-dark.svgOhraničení
input-group-text: natvrdo#666666Vnitřní sloupec popisu: pozadí
#d2d2d20ds levým ohraničením$border-color-dark
Interakce vrstev
┌──────────────────────────────────────────────┐
│ _app-variables.scss (světlé výchozí) │
├──────────────────────────────────────────────┤
│ Bootstrap 5 (využívá světlé výchozí) │
├──────────────────────────────────────────────┤
│ _app-global.scss / _app-layout.scss │
│ (app komponenty se světlými výchozími) │
├──────────────────────────────────────────────┤
│ _app-theme-dark.scss │
│ └─ importuje _app-variables-dark.scss │
│ └─ scoped pod html[data-theme="dark"] │
│ └─ přepisuje CSS custom properties │
│ └─ per-component SCSS přepisy │
└──────────────────────────────────────────────┘
JS ThemeManager ──→ nastaví data-theme="dark" na <html>
──→ přidá .app-dark-theme na <body>
──→ SCSS pravidla se aktivují
Poznámky a postřehy
Tmavý režim používá jednu střední šedou (
#4a4a4a) jako dominantní barvu povrchu pro body, karty, vstupy i sidebar. To vytváří uniformně „středně tmavý“ vzhled místo hlubokého dark UI.Barvy entit nejsou přizpůsobeny pro tmavý režim — některé (např.
#85140Eprosamostatny_nalez) mohou mít nízký kontrast vůči pozadí#4a4a4a.V
_app-theme-dark.scssexistuje několik natvrdo zadaných barevných hodnot (#357ebd,#ebf4f0,#d2d2d20d,#666666) mimo systém proměnných.Paleta cookie-consent dark je nezávislá a nerespektuje škálu šedé aplikace.
Bootstrap 5 má vlastní
_variables-dark.scss, ale aplikace dark theme používá separátní, paralelní SCSS vrstvu (_app-theme-dark.scss) místo BS5 mechanismu[data-bs-theme="dark"].