Skip to content

Témy a farebné schémy ​

EOS Hub má svetlý a tmavý režim, šesť farebných schém a vlastnú značku: logo, názov produktu a dve písma. Všetky farby sú CSS premenné vo farebnom priestore oklch, ktoré priamo čítajú komponenty shadcn/ui aj Tailwind v4. Svetlý a tmavý režim zabezpečuje next-themes.

Svetlý a tmavý režim ​

K dispozícii sú tri možnosti:

  • Svetlá -- svetlé pozadie s tmavým textom
  • Tmavá -- tmavé pozadie so svetlým textom
  • Systémová -- podľa nastavenia operačného systému (predvolená)

Režim prepnete v používateľskom menu dole v bočnom paneli (Téma) alebo v Nastaveniach (Téma, potom Uložiť).

Režim sa ukladá v prehliadači (localStorage, kľúč eos-hub-theme). Malý skript ho použije ešte pred vykreslením stránky, takže tmavá stránka nikdy nezabliká nabielo. Uložením v Nastaveniach sa navyše zapamätá vo vašom profile.

Farebné schémy ​

Farebná schéma mení primárnu a akcentovú farbu, plochy, bočný panel a farby grafov, vo svetlom aj tmavom režime:

SchémaFarby
PredvolenáZnačka: borovicovo zelená s medovým akcentom, neutrálne odtiene s jemným zeleno-modrým nádychom
RužaRužová
LevanduľaFialová
MätaSviežo zelená
BroskyňaOranžová
OblohaSvetlomodrá

Schému prepnete v používateľskom menu (Farebná schéma) alebo v Nastaveniach (Farebná schéma, potom Uložiť). Zmena sa prejaví okamžite.

Voľba sa ukladá do cookie v tomto prehliadači (colorScheme, platnosť jeden rok). Server cookie prečíta a vykreslí stránku už s nastavenou schémou, takže farby sú správne od prvého zobrazenia. Uložením v Nastaveniach sa navyše zapamätá vo vašom profile.

Značka ​

Logo a názov ​

Logo tvorí kruh zo štyroch štvrtín -- štvrťročný rytmus -- okolo stredového bodu, jedného spoločného smeru. Prvá štvrtina vpravo hore je medová. Ostatné tri preberajú primárnu farbu farebnej schémy a bod farbu textu, takže logo sedí ku každej schéme aj k tmavému režimu a medová štvrtina zostáva.

Vedľa loga je názov produktu z premennej prostredia PRODUCT_NAME (predvolene EOS Hub), vysádzaný písmom nadpisov. Nasadenie s vlastným názvom ho ukazuje všade:

  • na prihlasovacej stránke, v bočnom paneli, v sprievodcovi prvým spustením, na stránke súhlasu pre AI asistentov a na stránke O aplikácii;
  • v manifeste webovej aplikácie (názov pod ikonou na ploche telefónu);
  • v konektoroch AI asistentov: v názve a inštrukciách MCP servera a v názve OAuth zdroja.

Pozrite si Konfiguráciu.

Komponenty sú v src/components/brand/:

KomponentPoužitie
BrandMarkLogo ako vložené SVG, zafarbené cez tokeny značky. Varianty: default (na pozadí stránky), tile (svetlé na primárnej farbe), inverse (aktuálna farba textu s medovou štvrtinou, na tmavej ploche značky), mono (všetko v aktuálnej farbe textu)
BrandTileLogo na zaoblenej dlaždici v primárnej farbe (bočný panel, prepínač organizácií)
BrandLockupLogo + názov; názov produktu odovzdáva volajúci
illustrations.tsxMalé čiarové ilustrácie pre prázdne zoznamy, nakreslené z prvkov loga (kruh, štvrtiny, prerušované oblúky)

Tokeny značky ​

Logo a panel na prihlasovacej stránke majú vlastné tokeny v src/app/globals.css:

TokenHodnota
--brand-ringKruh: var(--primary), takže sa prispôsobí každej schéme
--brand-accentPrvá štvrtina: medová, oklch(0.72 0.13 85) (tmavý režim oklch(0.8 0.13 85))
--brand-dotStredový bod: var(--foreground)
--brand-panelPanel na prihlasovacej stránke: tmavá borovicová v každej schéme (oklch(0.38 0.075 168), tmavý režim oklch(0.27 0.05 170))
--brand-panel-foregroundText na tomto paneli

Tailwind ich sprístupňuje ako bg-brand-panel, text-brand-accent a podobne.

Písma ​

PísmoPoužitieToken
Schibsted GroteskNadpisy (stránok, kariet a dialógov) a názov produktu--font-heading (trieda font-heading)
Source Sans 3Všetok ostatný text--font-sans

Obe sa načítavajú cez next/font/google v src/app/layout.tsx so sadami latin a latin-ext, takže aj slovenská diakritika sa zobrazí v písmach značky. Písma sa stiahnu pri zostavení a posiela ich samotná aplikácia; prehliadač sa na Google vôbec nepripája.

Prihlasovacia stránka ​

Na širokých obrazovkách je prihlasovacia stránka rozdelená na dve časti. Vľavo je tmavý borovicový panel so značkou, vetou Riaďte svoju firmu pomocou … (názov metódy sa riadi pojmami) a krátkym riadkom o stretnutiach, scorecard, Rocks a problémoch. Vpravo je prihlasovací formulár. Na mobile sa zobrazí len formulár pod značkou.

Sprievodca prvým spustením, stránka Zatiaľ bez organizácie a stránka súhlasu pre AI asistentov používajú rovnakú kartu so značkou navrchu.

Prázdne zoznamy ​

Prázdne zoznamy namiesto ikony ukazujú malú ilustráciu nakreslenú z loga: Rocks, Problémy, Úlohy, Stretnutia, Scorecard, Dokumenty, Organizačná štruktúra, Hodnotenie ľudí a Týmto filtrom nič nezodpovedá. Ilustrácie používajú farbu textu a tokeny značky, takže fungujú v každej schéme aj v tmavom režime. V kóde ich odovzdáte komponentu EmptyState cez vlastnosť illustration.

Ikony ​

SúborČo to je
src/app/icon.svgFavicon: logo s vlastnými farbami pre tmavú tému prehliadača
src/app/apple-icon.pngIkona pre Apple zariadenia (180 × 180): logo na borovicovej dlaždici
public/icon-192.png, public/icon-512.pngIkony pre „Pridať na plochu“, uvedené v manifeste webovej aplikácie
src/app/manifest.tsManifest webovej aplikácie: názov a krátky názov z PRODUCT_NAME, farba témy borovicová

Súbory ikon nevedia čítať CSS premenné, preto sú ich farby zapísané ako hex hodnoty. Po zmene loga upravte src/app/icon.svg ručne a potom znova vygenerujte PNG ikony:

bash
node scripts/brand/render-icons.mjs

Skript nakreslí borovicovú dlaždicu pomocou Chromia z Playwrightu (ak chýba, raz spustite npx playwright install chromium) a zapíše tri PNG súbory.

Stránka dokumentácie používa rovnaké logo (docs/public/logo.svg) a farbu značky.

Farby stavov ​

Farby stavov znamenajú to isté na každej stránke, v každej farebnej schéme, vo svetlom aj tmavom režime. Farebná schéma mení len primárnu a akcentovú farbu -- farby stavov nikdy.

FarbaVýznamPríklady
ZelenáDobréV pláne, Splnené, Vyriešené, Dokončené, Aktívny
ČervenáZléMimo plánu, Nesplnené, Vysoká priorita, Pozastavená, Odvolaný, Po termíne
JantárováPozorStredná priorita, Riešia sa, Prebieha, expirovaný API kľúč, čas varovania na stretnutí
ModráInformáciaHotovo, Nízka priorita
SiváNeutrálneOtvorené, Čakajúce, Naplánované

Farba nikdy nie je jediný signál: každý štítok stavu stav aj pomenuje textom (často s ikonou) a bunky v Scorecard majú ikonu ✓ alebo ⚠. Stav sa tak dá prečítať aj bez rozlišovania červenej a zelenej a aj čítačkou obrazovky.

Každá farba stavu je samostatne vyladená pre svetlý a tmavý režim, aby štítky boli čitateľné na oboch pozadiach. Pásy stĺpcov vo V/TO a grafy naďalej používajú primárnu farbu schémy a farby grafov.

Ako to funguje ​

Všetky farby sú CSS premenné vo formáte oklch v súbore src/app/globals.css:

  • :root obsahuje predvolenú schému (značku) vo svetlom režime, .dark tú istú schému v tmavom režime. Triedu dark dáva na <html> next-themes.
  • Každá ďalšia schéma je atribút data-scheme na <html> (data-scheme="rose" a podobne). Predvolená schéma atribút nemá.
  • Blok schémy prepíše premenné plôch, primárnej a akcentovej farby, okrajov, bočného panela a grafov, raz pre svetlý a raz pre tmavý režim.
css
:root {
  --background: oklch(0.995 0.002 170);
  --foreground: oklch(0.2 0.015 200);
  --primary: oklch(0.42 0.085 168);          /* borovicová */
  --primary-foreground: oklch(0.985 0.005 168);
  --accent: oklch(0.95 0.03 168);
  --chart-1: oklch(0.5 0.09 168);            /* borovicová */
  --chart-3: oklch(0.72 0.13 85);            /* medová */
  /* ... */
}

.dark {
  --background: oklch(0.17 0.012 200);
  --primary: oklch(0.72 0.1 168);            /* svetlejšia borovicová */
  --primary-foreground: oklch(0.18 0.03 180);
  /* ... */
}

[data-scheme="rose"] {
  --primary: oklch(0.55 0.15 350);
  /* ... */
}

[data-scheme="rose"].dark,
.dark[data-scheme="rose"] {
  --primary: oklch(0.72 0.12 350);
  /* ... */
}

Blok @theme inline na začiatku súboru mapuje premenné na farby Tailwindu (bg-primary, text-muted-foreground, bg-status-good-bg …), takže sa pri zmene schémy prispôsobí každý komponent. Grafy používajú var(--chart-1) až var(--chart-5).

Vytvorenie vlastnej farebnej schémy ​

1. Definujte CSS premenné ​

V src/app/globals.css skopírujte existujúcu schému (napríklad Obloha) a zmeňte hodnoty -- v oklch, jeden blok pre svetlý a jeden pre tmavý režim:

css
[data-scheme="ocean"] {
  --background: oklch(0.985 0.008 200);
  --foreground: oklch(0.2 0.02 200);
  --card: oklch(0.99 0.006 200);
  --card-foreground: oklch(0.2 0.02 200);
  --popover: oklch(0.99 0.006 200);
  --popover-foreground: oklch(0.2 0.02 200);
  --primary: oklch(0.5 0.12 200);
  --primary-foreground: oklch(0.98 0.005 200);
  --secondary: oklch(0.94 0.02 200);
  --secondary-foreground: oklch(0.3 0.04 200);
  --muted: oklch(0.95 0.015 200);
  --muted-foreground: oklch(0.5 0.03 200);
  --accent: oklch(0.93 0.025 200);
  --accent-foreground: oklch(0.25 0.03 200);
  --border: oklch(0.9 0.02 200);
  --input: oklch(0.9 0.02 200);
  --ring: oklch(0.6 0.1 200);
  --sidebar: oklch(0.97 0.015 200);
  --sidebar-foreground: oklch(0.2 0.02 200);
  --sidebar-primary: oklch(0.5 0.12 200);
  --sidebar-primary-foreground: oklch(0.98 0.005 200);
  --sidebar-accent: oklch(0.93 0.025 200);
  --sidebar-accent-foreground: oklch(0.25 0.03 200);
  --sidebar-border: oklch(0.9 0.02 200);
  --chart-1: oklch(0.55 0.13 200);
  --chart-2: oklch(0.6 0.14 20);
  --chart-3: oklch(0.55 0.12 150);
  --chart-4: oklch(0.62 0.13 280);
  --chart-5: oklch(0.65 0.12 60);
}

[data-scheme="ocean"].dark,
.dark[data-scheme="ocean"] {
  --background: oklch(0.16 0.015 200);
  --primary: oklch(0.7 0.1 200);
  --primary-foreground: oklch(0.15 0.02 200);
  /* ... tie isté premenné, vyladené pre tmavý režim */
}

Farby stavov a tokeny značky nemeňte: kruh loga sa riadi --primary a medová štvrtina aj panel na prihlasovacej stránke zostávajú v každej schéme rovnaké.

2. Zaregistrujte schému ​

  • src/components/color-scheme-provider.tsx: pridajte názov do typu ColorScheme a do COLOR_SCHEMES, s hodnotou hue pre farebný bod v menu:

    typescript
    export const COLOR_SCHEMES: { value: ColorScheme; hue: string }[] = [
      { value: "default", hue: "" },
      { value: "rose", hue: "oklch(0.72 0.12 350)" },
      // ...
      { value: "sky", hue: "oklch(0.7 0.1 220)" },
      { value: "ocean", hue: "oklch(0.68 0.1 200)" }, // nová
    ]
  • src/app/(dashboard)/settings/actions.ts: pridajte ju do výčtu colorScheme, inak ju Nastavenia odmietnu uložiť. Doplňte ju aj do typu schémy v src/components/settings/settings-form.tsx.

  • src/i18n/messages/en.json a sk.json: pridajte jej názov ako settings.scheme_ocean.

Profil ukladá schému ako text, takže migrácia databázy nie je potrebná.

3. Otestujte oba režimy ​

Skontrolujte novú schému vo svetlom aj tmavom režime, na počítači aj na mobile. Všímajte si najmä:

  • kontrast textu voči pozadiu (aspoň WCAG AA)
  • stavy tlačidiel (hover, aktívne, neaktívne)
  • formulárové polia a okraje
  • farby grafov na prehľade
  • logo v bočnom paneli a na prihlasovacej stránke

TIP

Na overenie, či farebné kombinácie spĺňajú štandardy prístupnosti, použite nástroj ako WebAIM Contrast Checker.

Úprava predvolenej schémy ​

Ak chcete zmeniť farby značky bez pridania novej schémy, upravte bloky :root a .dark v src/app/globals.css a tokeny značky (--brand-accent, --brand-panel) nižšie v tom istom súbore. Potom zmeňte hex farby v src/app/icon.svg, scripts/brand/render-icons.mjs a src/app/manifest.ts (theme_color) a znova vygenerujte ikony.

Ďalšie kroky ​