Design Library

Živý katalog tmavých komponent (.pc-*) použitých v prototypu PhoneCopy. Sdílí stejné design-system.css jako prototyp - co upravíš v CSS, projeví se i tam. Komponenty jsou navržené pro tmavé obrazovky s gradientovým pozadím, proto je i tento katalog tmavý. U každé komponenty najdeš živou ukázku, varianty a zkopírovatelný kód.

Design tokeny

Barvy

Definované jako CSS proměnné v :root plus tmavé plochy specifické pro tmavý styl. Červená se v UI prakticky nepoužívá — zbylo jediné místo, ikona popelnice u nevratného smazání kontaktů; zelená nese stav „v bezpečí", fialová a modrá kreslí gradientové pozadí.

Barvy aplikace se přenášejí do produktu. Barvy prototypu patří obalu (rám telefonu, plovoucí přepínače) nebo je vykresluje operační systém (dialogy oprávnění) — do implementace nepatří.

Typografie

Systémový font stack (-apple-system … system-ui). Nadpisy tučné se zúženým trackingem. Na tmavém pozadí .pc-title / .pc-lede / .pc-kicker / .pc-sec.

.pc-kicker · 11.5/700Záloha telefonu
.pc-title · 27/800Vaše data jsou jenom vaše.
.pc-lede · 15/400Automaticky zálohujeme fotky, videa a kontakty.
.pc-sec · 12/700Vaše data
.pc-hero .big · 52/8001 133

Typografie

Kompletní škála z :root - velikosti (--fs-*), váhy (--fw-*), tracking (--ls-*) a řádkování (--lh-*). Systémový font stack. Ukázky čtou hodnoty přímo z tokenů, takže vždy sedí s CSS.

Velikost písma (--fs-*)

12 kroků od popisků (10px) po hero číslo (52px).

Tloušťka písma (--fw-*)

4 váhy - od medium (500) po extrabold (800). Nadpisy jsou tučné.

Prostrkání (--ls-*)

Nadpisy mají zúžený tracking; kickery / štítky naopak rozšířený.

Řádkování (--lh-*)

Těsné pro nadpisy, normální pro odstavce.

Spacing a zaoblení

Odsazovací krokování (--sp-*) a rádiusy (--r-*) z :root. Ukázky čtou hodnoty přímo z tokenů.

Odsazení (--sp-*)

10 kroků od 2px po 34px (--sp-safe = Apple home-indicator safe area). Šířka pruhu = hodnota tokenu.

Zaoblení (--r-*)

Sjednocená škála: --r-md (12, ikony, malé prvky, pole a dialogy) · --r-2xl (20, karty a seznamy) · --r-full (999, tlačítka a pilulky). --r-phone (52) = rám telefonu.

Ikony

Inline SVG sprite (<symbol> + <use>), viewBox 24, stroke 2, currentColor (dědí barvu kontextu). Vkládá se jako <svg class="i"><use href="#ic-…"/></svg>.

Loga poskytovatelů přihlášení

Nejsou to ikony systému — mají oficiální barvy značek a pevný fill, takže se nesmí přebarvovat ani stylovat přes currentColor. Google má navíc jiný viewBox (48). V portu použij oficiální SDK komponenty, pokud je platforma nabízí.

Symboly#ic-apple#ic-google#ic-facebook

Tlačítka

Primární akce .pc-cta (plná šířka, bílá). Varianty: .safe (zelená — akce, které něco spouští nebo povolují), .ghost (průhledná, sekundární). Textový odkaz .pc-linkbtn (15px, semibold) — část v <b> je akcentní fialová (--violet-ink). Když je klikatelný celý text a nic se nezvýrazňuje, použij .solo bez <b>.

<button class="pc-cta">Primární</button>
<button class="pc-cta safe">
  <svg class="i"><use href="#ic-check"/></svg> Povolit
</button>
<button class="pc-cta ghost">Ghost</button>
<button class="pc-linkbtn">Už mám účet - <b>Přihlásit</b></button>
<button class="pc-linkbtn solo">Teď ne</button>
Tokeny--r-full--fs-lg--fw-semibold--brand--safe--sp-5
Odhlášení (.pc-signout)

Destruktivní textové tlačítko na plnou šířku pro odhlášení z účtu. Jemné červené pozadí zesílí při hoveru; ikona vlevo.

Tokeny--danger-dark--r-md--sp-3

Karty

Základní karta (.pc-card)

Nese řádek .pc-ch (ikona .em + text .gr + hodnota .amt). Barevné varianty: .grad (zelená), .warn (jantarová), .blue (modrá).

KontaktyVšech 815 zálohováno · zdarma
Fotkám došlo místo2 412 fotek a 184 videí čeká · 1 GB plné
Data zůstávají v Evropě a nikdy je nepoužíváme k reklamě. Zrušíte kdykoli.
Nejoblíbenější
Premium 200 GB
149 Kč
<div class="pc-card warn">
  <div class="pc-ch">
    <span class="em"><svg class="i"><use href="#ic-image"/></svg></span>
    <div class="gr"><b>Fotkám došlo místo</b><small></small></div>
  </div>
  <button class="pc-cta">Vyzkoušet Premium</button>
</div>
Tokeny--pc-card--pc-line--r-2xl--sp-5--grad-warn-1/2--grad-blue-1/2
Dlaždice (.pc-tile)

Kanonická položka „ikona + nadpis + popis" (Soukromí, Co zálohujeme). Skládá se do .pc-tiles.

Data zůstávají v EvropěVše leží na serverech v EU, pod evropskými zákony o ochraně osobních údajů.
Nečteme, neindexujemeVaše fotky ani kontakty si neprohlížíme a neanalyzujeme jejich obsah.
Tokeny--pc-card--pc-line--pc-fill--r-md--sp-4--fs-md
Hero číslo (.pc-hero)

Velké centrální číslo dashboardu: štítek .lbl, číslo .big s jednotkou .u, podtitulek .sub.

Zálohováno
1 133 položek
815 kontaktů + 318 fotek v bezpečí · 2 596 čeká
Tokeny--pc-card--fs-hero--fw-extrabold--ls-tight--lh-tight--r-2xl
Tarifní karta (.pc-plan)

Cenový plán na paywallu, vkládá se do .pc-card - typicky .pc-card.blue (zvýrazněný nabízený tarif) nebo .pc-card.current (váš stávající tarif). Uvnitř: štítek .tag (varianta .now = „váš tarif"), hlavička .head s .name a .price (jednotka v <span>), a seznam vlastností <ul> s odrážkami .ck (zelená fajfka) nebo .ck.lock (šedý zámek = nedostupné). Drobné písmo pod tarifem řeší .pc-fineprint.

Nejoblíbenější
Premium 200 GB149 Kč / měsíc
  • 200 GB pro fotky a videa
  • Zálohuje všechna vaše zařízení
  • Bez reklam, data v EU

Jinak se aktivuje automaticky za 10 dní.

Váš tarif
Free 1 GB0 Kč / měsíc
  • 1 GB pro fotky a videa
  • Jen 1 zařízení
  • Bez automatické zálohy
<div class="pc-card blue">
  <div class="pc-plan">
    <div class="tag">Nejoblíbenější</div>
    <div class="head">
      <span class="name">Premium 200 GB</span>
      <span class="price">149 Kč<span> / měsíc</span></span>
    </div>
    <ul>
      <li><span class="ck"></span> 200 GB pro fotky</li>
      <li><span class="ck lock"></span> Jen 1 zařízení</li>
    </ul>
  </div>
  <p class="pc-fineprint">Jinak se aktivuje za 10 dní.</p>
</div>
Tokeny--pc-card--grad-blue-1/2--fs-xl--fw-extrabold--safe-ring--pc-fg-5
Mřížka náhledů (.thumbs)

Třísloupcová mřížka čtvercových náhledů fotek (aspect-ratio:1). Náhled je <div> s background-image. Používá se v kartách médií jako rychlý přehled zálohovaných fotek.

Tokeny--r-md--sp-3--sp-4
Avatar (.av / .av.lg)

Kruhový avatar s iniciálami. Základní .av (40px) se používá v řádcích (.pc-list) a horní liště (.pc-top); velký .av.lg (54px, modro-fialový gradient) v hlavičce profilu. Základní avatar je stylovaný jen ve svém kontextu, proto je zde ukázán uvnitř .pc-top.

JN
JN
Tokeny--r-full--blue--violet--fw-bold--fs-md

Rychlé akce

Řada kruhových akcí .pc-actions (ikona .ic + popisek .t). Zvýrazněná akce má .ic.key (brand). Modifikátor .three vycentruje tři akce.

<div class="pc-actions three">
  <button>
    <span class="ic key"><svg class="i"><use href="#ic-upload"/></svg></span>
    <span class="t">Zálohovat</span>
  </button>
</div>

Seznamy

Seznam řádků (.pc-list / .row)

Sloučené řádky v jedné kartě. Řádek začíná avatarem .av nebo ikonou .em, končí switchem .pc-sw, hodnotou .val nebo šipkou .chev.

Automatická zálohaNa pozadí
ŠifrováníZapnuto · servery v EU
Úložiště
1,0 / 1 GB
AN
Anna Nováková+420 777 123 456
<div class="pc-list">
  <div class="row">
    <span class="em"><svg class="i"><use href="#ic-refresh"/></svg></span>
    <div class="gr"><b>Auto záloha</b><small></small></div>
    <div class="pc-sw on"></div>
  </div>
</div>
Tokeny--pc-card--pc-line--pc-fill--r-2xl--sp-4--safe-ring--fs-md
Seznam výhod (.pc-points)
  • Kopírujeme jen pro zálohu, nic víc
  • Obsah neindexujeme ani neanalyzujeme
  • Kdykoli můžete vybrat jen některá alba
Rozbalovací řádek (.exp)

Akordeon uvnitř .pc-list. Vrchní .row je klikací; třída .open na .exp rozbalí tělo .exp-body (řádky .exp-row s ikonou, popiskem a hodnotou .val) a otočí chevron .chev o 90°. V katalogu je ukázán staticky s .open.

Fotky
2 730
Fotoaparát2 400
Screenshoty330
Videa
184
Nahraná184
<div class="pc-list">
  <div class="exp open">
    <div class="row"><span class="chev"></span></div>
    <div class="exp-body">
      <div class="exp-row">…Fotoaparát<span class="val">2 400</span></div>
    </div>
  </div>
</div>
Tokeny--pc-line--pc-fg-3--pc-fg-4--pc-fg-5--sp-5
Zamčený řádek (.row.locked)

Řádek v .pc-list pro nedostupnou položku (např. zařízení mimo zkušební verzi). .locked ho ztlumí (opacity) a doprava přidá zámek .em-lock. Pro kontrast je nad ním aktivní řádek se zelenou fajfkou .ok-check.

iPhone JanaToto zařízení · aktivní teď
iPad JanaZamčeno ve zkušební verzi · nezálohuje se
Tokeny--pc-fg-5--pc-line--safe-ring
Barevná hodnota (.val.hot / .val.ok)

Zvýrazněná hodnota na konci řádku. .val.hot = zlatá (upsell / výzva k upgradu), .val.ok = zelená (aktivní / v pořádku). Bez modifikátoru je .val tlumená.

Předplatné
Upgrade
Šifrování
Aktivní
Tokeny--gold--safe-ring--fw-bold
Oznámení (.row.notif)

Řádek feedu oznámení v .pc-list. Ikona .em nese barevnou variantu podle typu: .ok (zelená), .warn (žlutá), .info (modrá). Nepřečtené oznámení má .unread (zvýrazněné pozadí, bílý titulek), vpravo je čas .time. Nad seznamem bývá hlavička .notif-head s nadpisem a tlačítkem .notif-mark („Označit vše").

Nové
Záloha dokončenaKontakty a 318 fotek je v bezpečí.
teď
Dochází místoÚložiště je z 92 % plné. Zvažte Premium.
2 h
Nové zařízeníPřihlášení z iPad Jana.
včera
Tokeny--safe-ring--gold--blue--violet-2--pc-fg-3--pc-fg-5

Formuláře

Pole .pc-field (label + input), přepínač .pc-sw, checklist síly hesla .pw-req, validační chyba .val-err.

  • Alespoň 8 znaků
  • Velké písmeno
  • Číslice
Zadejte platný e-mail.
<div class="pc-field">
  <label>E-mail</label>
  <input type="email" placeholder="vas@email.cz">
</div>
<ul class="pw-req">
  <li class="met"><span class="dot"></span>Alespoň 8 znaků</li>
</ul>
<div class="val-err show">…Zadejte platný e-mail.</div>
Přepínač (.pc-sw)

Toggle. Přidej .on pro zapnutý stav (zelená).

Feedback a stavy

„V bezpečí" indikátor (.ok-check)

Zelené kolečko s fajfkou - jednotný znak stavu „zálohováno".

Info / souhrnná poznámka (.pc-note)
Obnova jen doplní, co v telefonu chybí. Nic, co už máte, nepřepíšeme ani nesmažeme.
Krokové tečky (.pc-dots)
Progress onboardingu (.onb-progress)

Průběžný ukazatel přes celý proces zakládání účtu: registrace → 4× oprávnění → první záloha. Je prvním prvkem v .body dané obrazovky, šířku výplně nastavuje setOnbProgress(id) podle pořadí v poli ONB_STEPS. Gradient používá --violet--blue, tedy barvy loga a ilustrací.

<div class="onb-progress"><i></i></div>

// JS — pořadí kroků na jednom místě
ONB_STEPS = ['signup', 'perm_photos', 'perm_contacts',
             'perm_bg', 'perm_notif', 'firstsync']
Tokeny--pc-track--violet--blue--r-full
Pole s heslem a očkem (.pw-wrap / .pw-eye)

Standardní .pc-field obalený v .pw-wrap, které vpravo vloží tlačítko pro zobrazení hesla. Funkce togglePw(id) přepne type mezi password a text a vymění ikonu (#ic-eye / #ic-eyeOff). Input má vpravo padding, aby text nezajížděl pod ikonu.

<div class="pw-wrap">
  <input type="password" id="pw">
  <button class="pw-eye" onclick="togglePw('pw')">…</button>
</div>
Tokeny--pc-fg-4--pc-fg-2--r-full
Pole pro ověřovací kód (.code-input)

Šestimístný kód s rozpalem číslic. inputmode="numeric" vyvolá číselnou klávesnici, autocomplete="one-time-code" nabídne kód ze schránky nebo SMS. Nečíselné znaky se odfiltrují při psaní.

Tokeny--fs-xl--fw-bold--r-md
Progress prstenec (.ring)
66%fotky
Lineární ukazatel (.meter)

Vodorovný pruh průběhu / zaplnění. Vnitřní <i> nese šířku (width) a barvu podle stavu - zelená --safe-ring (v pořádku) nebo zlatá --gold (plné / pozor). Pozadí pruhu se nastavuje inline (rgba(255,255,255,.1)).

Tokeny--safe-ring--gold
Toast (.toast)

Dočasné potvrzení, které vyjede zdola a po chvíli zmizí. V aplikaci se volá JS funkcí toast('zpráva'), která přidá třídu .show. V katalogu je zobrazen staticky se .show.

Odhlášeno
Tokeny--ink--r-md--fw-semibold--sp-4--sp-5
Spodní panel (.pc-sheet)

Potvrzovací panel, který v aplikaci vyjíždí zespodu přes ztmavovací masku .pc-sheetmask. Obsahuje úchyt .grip, nadpis <h3>, text <p> a sloupec akcí .acts s tlačítky .keep (bílé, ponechat) a .danger (destruktivní). V katalogu je ukázán staticky na místě (inline position:relative;transform:none).

Zrušit předplatné?

Premium poběží do 14. 8. 2026, pak přejdete na Free.

Tokeny--pc-card--r-2xl--pc-fill-3--danger-dark--fs-xl
Pohledy uvnitř sheetu (.auth-view)

Víckrokový tok bez opuštění sheetu — uživatel nevypadne z kontextu, obrazovka pod ním se nemění. Každý krok je .auth-view, přepíná se atributem hidden přes showEmailView(id). Aktivní pohled vyplní sheet (flex:1), takže patička .auth-foot drží dole.

Tok obnovy hesla:
1. login — e-mail + heslo, odkaz „Zapomenuté heslo"
2. forgot — zadání e-mailu, „Odeslat kód"
3. sent — ověřovací kód (+ odpočet po 3 pokusech)
4. newpw — nové heslo se dvěma poli a kontrolou shody
<div class="auth-view" id="email-view-login"></div>
<div class="auth-view" id="email-view-forgot" hidden></div>

showEmailView('forgot')  // přepnutí
Třídy.auth-view.auth-h.auth-sub.pc-linkbtn.auth-foot
Dialog oprávnění (.nat-alert)

Žádost o systémové oprávnění (fotky, kontakty, běh na pozadí, oznámení). Používá stejnou komponentu jako ostatní native screens - .nat-alert s primary:true, takže „Povolit" je modré a „Nepovolit" šedé. Volá se přes sysPrompt('photos'); odmítnutí přepne obrazovku do stavu „bez přístupu to nepůjde".

„PhoneCopy" chce přístup k vašim fotkám

Aplikace bude moct zálohovat fotky a videa z této knihovny.

sysPrompt('photos')  // photos | contacts | bg | notif

// nebo obecně:
nativeAlert({title, body, cancel, confirm,
  primary: true, onConfirm, onCancel})
Tokeny--r-full--fs-md--fw-semiboldiOS#0a84ff#f2f2f7
Native screens (.nat-alert / .nat-sheet)

Novější iOS styl (18+) systémových dialogů - pilulková tlačítka vedle sebe místo děleného alertu. Primary (.nat-btn.primary, plné modré) potvrzuje přihlášení v Apple sheetu; sekundární (.nat-btn, šedá) je v OAuth alertu, kde žádná akce není zvýrazněná. Dvě varianty: .nat-sheet = Sign in with Apple (plovoucí karta u spodní hrany, ikona appky a účet), .nat-alert = OAuth přes web (Google, Facebook). Rozměry odečtené z reálných iOS dialogů. Dialogy nereagují na motiv - v reálné appce je vykresluje OS, proto vypadají stejně nad světlou i tmavou obrazovkou.

„PhoneCopy" chce použít k přihlášení „accounts.google.com"

Aplikace a webová stránka budou moct sdílet vaše osobní data.

Přihlášení přes Apple

Přihlaste se k „PhoneCopy" pod svým účtem Apple.

🙂Moudrý Vojtěch
// JS API - obsah se plní z index.html
nativeAlert({title, body, cancel, confirm, onConfirm})
nativeSheet({title, body, account, avatar, confirm, onConfirm})
closeNative()

// zkratky pro přihlášení
authApple()   // sheet
authWeb('accounts.google.com')  // alert
Tokeny--r-full--fs-md--fw-semibold--sp-3--sp-6iOS#0a84ff#f2f2f7

Prototyp shell (lešení)

Prvky, které existují jen v prototypu a při implementaci reálné aplikace se zahodí: rám telefonu, levý panel s obrazovkami, přepínače nahoře. Mají vlastní fixní paletu (tokeny --shell-*) a nereagují na světlý/tmavý motiv - je to vývojářský nástroj, ne součást produktu. Díky tomu vypadají hamburger i přepínače stejně v prototypu i v katalogu a při přepínání nepřeskakují.

Výjimka: status bar (.statusbar.on-dark) je součást appka obrazovky (imituje iOS status bar), proto na motiv reaguje přes --pc-fg-1 - není součástí shellu.
Shell třídy

Lešení, které se v produkci nahradí skutečným zařízením a routingem:

Shell.phone.notch.rail.rail-toggle.view-switch.theme-switch.lib-rail.demo.stage
Shell paleta (--shell-*)

Fixní tmavé tokeny přepínačů. Nepřepisují se v light theme (na rozdíl od --pc-* / --ink), takže shell drží stejný vzhled bez ohledu na motiv i stránku.

Tokeny--shell-bg--shell-line--shell-fg--shell-fg-hover--shell-on-bg--shell-on-fg--shell-shadow

Ilustrace

Rastrové ilustrace (PNG 1024×1024) použité v onboardingu, oprávněních a obnově. Zdroje jsou čtvercové; výslednou výšku řídí třída — viz níže. Přepni motiv (nahoře) a uvidíš, jak fungují v light i dark.

Velikosti podle role

Dvě velikosti podle toho, co je pod ilustrací. .pc-illus / .pc-permhero = plná šířka těla (358 px), ilustrace nese sdělení. .compact (max-height:240px) když pod ní soupeří karty nebo seznam. Uvnitř .body.onb se ilustrace navíc smrští podle volného místa (flex:1, max-height:260px).

Třídy.wlc-illus.pc-illus.pc-permhero.compact.body.onb
welcome welcome.png Úvodní obrazovka. Vzpomínky vylétají do bezpečí — „Odteď se o vaše vzpomínky nemusíte bát.“
privacy privacy.png Onboarding „Soukromí“. Zámek v kruhu EU hvězd — data v Evropě, „Vaše data jsou jenom vaše.“
what what.png Onboarding „Co zálohujeme“. Fotka, kontakt a video — „Postaráme se o všechno podstatné.“
forgot_sent forgot_sent.png Zapomenuté heslo — potvrzení. Odkaz odeslán — „Zkontrolujte schránku.“
perm_photos perm_photos.png Oprávnění 1/4 — přístup k fotkám. Fotky putují do mraku.
perm_contacts perm_contacts.png Oprávnění 2/4 — přístup ke kontaktům. Telefonní seznam v bezpečí.
perm_bg perm_bg.png Oprávnění 3/4 — běh na pozadí. Záloha běží sama i v noci.
perm_not perm_not.png Oprávnění 4/4 — oznámení. „Ať víte, že je hotovo.“
first_sync first_sync.png První záloha — průběh. Data tečou do bezpečí.
perm_camera perm_camera.png Oprávnění ke kameře před skenováním QR. Telefon čte kód z obrazovky počítače.
backup_not_found backup_not_found.png Prázdná média — ještě nezálohováno. Otevřená krabice s přeškrtnutým cloudem.
restore_found restore_found.png Nalezená záloha — obnova. Data se vracejí do telefonu — „Našli jsme vaši zálohu.“