{
  "version": "0.1.0",
  "date": "2026-11-02",
  "title": "Pravidla návrhu a dalšího vývoje kalkulaček",
  "baseline": {
    "travel": "0.21.2",
    "uraz": "0.14.1"
  },
  "authority": [
    "Potvrzeno znamená požadavek doložený zadáním uživatele nebo platnými pokyny projektu. Neznamená to, že jej všechny současné obrazovky už splňují.",
    "Návrh je doporučení tohoto auditu. Do závazné společné specifikace přejde až po výslovném rozhodnutí vlastníka produktu.",
    "Ověřit označuje chybějící podklad nebo podmínku budoucí integrace. Nelze ji prohlásit za splněnou podle vzhledu prototypu.",
    "Konkrétní nové zadání uživatele má přednost. Změna se promítne do registru rozhodnutí a verze pravidel, nikoli tichým přepsáním historického reportu.",
    "Původní WordPress audit je zdrojem palety a historických měření; pro tento katalog jsou rozhodující aktuální produktové potřeby, doložené preference a ověřené chování."
  ],
  "maintenance": {
    "owner": "Vlastník produktů rozhoduje o směru; vývojový správce udržuje katalog. Konkrétní osoby a odpovědnost za integraci je třeba určit.",
    "updateWhen": [
      "Po schválení některého rozhodnutí z reportu nebo po nové výslovné korekci uživatele.",
      "Při změně sdílené komponenty, stavu, přístupnosti, textu kritické akce nebo produktové výjimky.",
      "Po ověření aktuálního procesu Ferdy, mapování dat a rozhraní; znovu před zapojením skutečného adaptéru.",
      "Po relevantním zjištění z testu s lidmi, čtečkou, reálným mobilem nebo z provozního měření."
    ],
    "process": [
      "Zapsat podnět, zdroj, dotčené produkty a stabilní ID pravidla nebo nového rozhodnutí.",
      "Oddělit pozorovaný stav od návrhu; u výjimky uvést důvod, rozsah, vlastníka a podmínku nového přezkumu.",
      "Výslovně zaznamenat rozhodnutí vlastníka a teprve potom změnit status návrhu. Volba uložená v prohlížeči reportu je pracovní poznámka.",
      "Upravit tento zdrojový JSON, zvýšit jeho verzi, přidat záznam změny a popsat dopad na stávající implementace.",
      "Ověřit společné komponenty v úrazu i travelu, sestavit nové samostatné verze a publikovat aktuální čitelný katalog.",
      "Ponechat snapshot pravidel u historického reportu a všechny vydané ZIPy beze změny."
    ],
    "versioning": "Pravidla mají vlastní verzi, oddělenou od kalkulaček a portálu. 0.1.0 je první katalog s návrhy. Další obsahové doplnění nebo schválené rozhodnutí zvýší minor; oprava formulace bez změny významu patch. Nekompatibilní přijatá norma musí mít popsanou migraci a novou major verzi."
  },
  "changelog": [
    {
      "version": "0.1.0",
      "date": "2026-11-02",
      "change": "První katalog pro úraz a travel: doložené preference oddělené od návrhů sjednocení a neověřených integračních podmínek. Současné rozpory nejsou tímto dokumentem schváleny."
    }
  ],
  "rules": [
    {
      "id": "ZAD-01",
      "category": "Identita a vzhled",
      "status": "potvrzeno",
      "title": "Červený malý sekční nadpis",
      "text": "Eyebrow/kicker, například název pojištění a úvodní popisek formuláře, zůstává červený #F42534 v úvodu, krocích, kartách a detailech. Nesmí se při sjednocování modré přebarvit na modrou.",
      "rationale": "Výslovná korekce uživatele z 2. 11. 2026. Kontrast malého významového textu vůči podkladu zůstává otevřeným rozporem, nikoli prokázanou shodou WCAG.",
      "checks": [
        "Odečíst výsledný styl statických i dynamických kickerů na mobilu a desktopu.",
        "Prověřit kontrast na skutečném podkladu a případnou změnu odstínu předložit k rozhodnutí."
      ],
      "source": "AGENTS.md; zadání červených malých nadpisů; section-accents.css",
      "decision": "D02"
    },
    {
      "id": "ZAD-02",
      "category": "Identita a vzhled",
      "status": "potvrzeno",
      "title": "Světlé písmo zelené hlavní akce",
      "text": "Hlavní zelená tlačítka používají světlé, nyní bílé písmo. Tichá náhrada tmavým textem není přijatou úpravou.",
      "rationale": "Výslovný požadavek uživatele. Současná bílá na #00B53B má vypočteně 2,737:1; volba přístupnější zelené je nové rozhodnutí při zachování bílého písma.",
      "checks": [
        "Ověřit klid, hover, focus, disabled a loading odděleně.",
        "Nevydávat samotné dodržení barvy textu za splnění kontrastních kritérií."
      ],
      "source": "Zadání bílého písma na zelených akcích; aktuální měření a kontrastní posudek",
      "decision": "D02"
    },
    {
      "id": "ZAD-03",
      "category": "Identita a vzhled",
      "status": "potvrzeno",
      "title": "Bílý formulář na tmavším okolí",
      "text": "Formulářové karty a pole mají světlé plochy, stránka tmavší šedý podklad podle současného travelu. Základní reference je #FFFFFF proti #F2F4F7.",
      "rationale": "Uživatel výslovně zvolil tento vztah ploch i přes odlišnosti původního WordPressu.",
      "checks": [
        "Prověřit skutečný výsledek kaskády u polí, panelů a vnořených sekcí.",
        "Selected, chyba ani disabled nesmějí ztratit význam kvůli plošnému přebarvení."
      ],
      "source": "Zadání sjednocení formulářů; uraz-unified.css; travel-refinement.css",
      "decision": ""
    },
    {
      "id": "ZAD-04",
      "category": "Identita a vzhled",
      "status": "potvrzeno",
      "title": "Společná kontaktní hlavička a patička",
      "text": "Úraz používá konstrukci produktové hlavičky travelu. Patička má společný vzhled s pozadím #003B71 a světlým obsahem. Kontakty zůstávají správné pro konkrétní produkt.",
      "rationale": "Výslovné požadavky na přenos hlavičky a patičky mezi produkty.",
      "checks": [
        "Ověřit produktový e-mail, telefon, pracovní dobu, odkazy a mobilní zobrazení.",
        "Nedovozovat správnost kontaktu pouze ze shodného layoutu."
      ],
      "source": "Zadání hlavičky a patičky; aktuální HTML obou verzí",
      "decision": ""
    },
    {
      "id": "ZAD-05",
      "category": "Navigace",
      "status": "potvrzeno",
      "title": "Travel bez prezentačního pruhu",
      "text": "Nový travel nedostává prezentační hlavičku ani odkaz na rozcestník verzí v produktové hlavičce. Čtyři vnější fáze používají logiku úrazu.",
      "rationale": "Výslovné zadání pro současnou i budoucí práci; nástroje pro přezkum prototypu nemají přebít produktový průchod.",
      "checks": [
        "Otevřít oba starty a ověřit hlavičku.",
        "Kontrolovat fáze Kalkulace, Konfigurace, Údaje a Rekapitulace a zachování dat při návratu."
      ],
      "source": "AGENTS.md; předchozí zadání navigace",
      "decision": "D04"
    },
    {
      "id": "ZAD-06",
      "category": "Prototyp a data",
      "status": "potvrzeno",
      "title": "Průchod bez AI a živých služeb",
      "text": "Každá prezentovaná větev prototypu musí být průchozí lokálně bez AI/API. Nabídnout ruční cestu nebo upravitelná modelová data; mapa rizik nesmí být blokována nefunkční AI.",
      "rationale": "Uživatel požaduje produkční vzhled a současně všechny možnosti pro testování, pro travel i úraz.",
      "checks": [
        "Zablokovat vnější síť a projít demo i prázdný začátek.",
        "Vyzkoušet alternativní vstup, mapu, volby, nabídky, úpravy a modelové dokončení."
      ],
      "source": "AGENTS.md; zadání průchodnosti prototypů",
      "decision": ""
    },
    {
      "id": "ZAD-07",
      "category": "Prototyp a data",
      "status": "potvrzeno",
      "title": "Model zůstává modelem",
      "text": "Nezapojovat skutečné sjednání, platbu, e-maily ani živé AI. Kritické potvrzení má pravdivě popisovat modelový stav a nesmí vydávat simulaci za uskutečněné odeslání či smlouvu.",
      "rationale": "Projektové vymezení modelových dat a vypnutých integrací. Aktuální travel má v potvrzení textový rozpor, přestože síťové odeslání je zablokované.",
      "checks": [
        "Ověřit vedlejší účinky i text výsledné obrazovky.",
        "Přezkoumat e-mailový návrh, platbu, číslo smlouvy a dokončení v obou produktech."
      ],
      "source": "AGENTS.md; marketingový posudek; fresh snímek travel done",
      "decision": "D09"
    },
    {
      "id": "ZAD-08",
      "category": "Identita a vzhled",
      "status": "potvrzeno",
      "title": "Jednotný styl ilustrativních ikon",
      "text": "Travelové země mají navazovat na styl úrazových rizik: stejný modro-bílý materiál, tahy, odlesk a jemný stín. Nové členy sady vytvářet v odpovídajícím vektorovém formátu, pokud rozšiřují stávající SVG.",
      "rationale": "Výslovné zadání ikon travelu ve stylu úrazu; formát je praktické zachování nynější sady.",
      "checks": [
        "Porovnat vedle sebe stejné zobrazovací velikosti a zkontrolovat čitelnost menšího motivu.",
        "Smysl volby musí být dostupný textem, nikoli jen ilustrací."
      ],
      "source": "Zadání ikon travelu; aktuální assets/destinations a assets/risks",
      "decision": ""
    },
    {
      "id": "ZAD-09",
      "category": "Formuláře",
      "status": "potvrzeno",
      "title": "Konkrétní jiná země",
      "text": "Ve travelu nahrazuje obecné volby Evropa/mimo Evropu jediná Jiná země s následným seznamem konkrétních zemí. Vybraná země se zachová a používá v navazujícím průchodu.",
      "rationale": "Výslovná korekce uživatele ve verzi 0.21.1.",
      "checks": [
        "Zkontrolovat podmíněné zobrazení a required/disabled skrytého selectu.",
        "Ověřit evropskou i mimoevropskou zemi v nabídkách, mapě a po návratu; modelová oblast není potvrzením skutečného krytí."
      ],
      "source": "Zadání Jiná země; travel-countries.js",
      "decision": ""
    },
    {
      "id": "ZAD-10",
      "category": "Vydávání a údržba",
      "status": "potvrzeno",
      "title": "Historie a původní kořenový úraz se zachovávají",
      "text": "Starší vydané složky a ZIPy nepřepisovat. Původní serverový /cmp_uraz/ ponechat beze změny kvůli cizím odkazům; aktuální prototypy a reporty patří pod /prototypy/.",
      "rationale": "Opakované explicitní vymezení uživatele a projektová pravidla.",
      "checks": [
        "Před a po nasazení porovnat symlink i součty původního úrazu.",
        "Nové vydání aktivovat samostatně, s uchovaným předchozím cílem pro návrat."
      ],
      "source": "AGENTS.md; DEPLOYMENT-PROTOTYPY.md",
      "decision": ""
    },
    {
      "id": "ZAD-11",
      "category": "Vydávání a údržba",
      "status": "potvrzeno",
      "title": "Reprodukovatelné verze a oba starty",
      "text": "Změna vzniká přes zdrojový recept jako nová samostatná verze, včetně vizuálních subverzí. Udržovat ukázkový i prázdný začátek a jednotný rozcestník s až deseti posledními verzemi viditelnými.",
      "rationale": "Dosavadní schválený postup verzování a prezentace.",
      "checks": [
        "Sestavit znovu a porovnat výsledek i obsah ZIPu.",
        "Prázdný začátek nesmí obnovit modelová osobní data; odkazy otevírají správné verze."
      ],
      "source": "AGENTS.md; zadání verzování a rozcestníku",
      "decision": ""
    },
    {
      "id": "DS-01",
      "category": "Společné komponenty",
      "status": "navrh",
      "title": "Společná komponenta s produktovými daty",
      "text": "Zvolit sdílené sémantické tokeny a kontrakty komponent, ale zachovat produktové otázky, výpočet, osoby, krytí a dokumenty jako vlastní konfigurace.",
      "rationale": "Shodné základní role dnes neodstraňují rozdíly úrazové konfigurace a cestovní mapy/aktivit.",
      "checks": [
        "Každá sdílená komponenta má dokumentované vstupy, stavy, události a produktové výjimky.",
        "Pilot funguje v obou renderech dříve než se rozšíří na všechny obrazovky."
      ],
      "source": "Tři odborné posudky; směr B hlavního reportu",
      "decision": "D01"
    },
    {
      "id": "DS-02",
      "category": "Identita a vzhled",
      "status": "navrh",
      "title": "Typografické role místo plošných změn",
      "text": "Výchozí hero 48/34 px a pracovní H1 32/26 px s váhou 600 již vycházejí společně. Sekce formuláře, cena, nápověda a kicker mají vlastní role; nenahrazovat je jedním globálním H2 nebo velikostí všech textů.",
      "rationale": "Čerstvá měření potvrzují shodu hlavních titulků, ale rozdíly sekcí a polí.",
      "checks": [
        "Porovnat stejné role na 375/1440 px a při zvětšení.",
        "Zaznamenat odůvodněné výjimky pro husté nabídky či opakované osoby."
      ],
      "source": "evidence/measurements.json; UX a architektonický posudek",
      "decision": "D05"
    },
    {
      "id": "DS-03",
      "category": "Formuláře",
      "status": "navrh",
      "title": "Společná výchozí geometrie pole",
      "text": "Pro nový základ zvážit vstupní text 16 px, minimální výšku 48 px a radius 8 px, se stejným label/hint/error vzorem. Je to návrh; ne tvrzení o dnešní shodě.",
      "rationale": "Travel má v mobilním vzorku datum 12 px/r7 a klienta 14 px/r7, úraz příkladová pole 16 px/r8. Potřeba zůstat kompaktní nesmí znečitelnit zadávání.",
      "checks": [
        "Vyzkoušet dlouhé hodnoty, datum, select i vyhledávání zaměstnání.",
        "Ověřit skutečný telefon, softwarovou klávesnici, zvětšení textu a menší šířky."
      ],
      "source": "Fresh měření; architektonický posudek",
      "decision": "D05"
    },
    {
      "id": "DS-04",
      "category": "Společné komponenty",
      "status": "navrh",
      "title": "Škála mezer, rohů a šířek",
      "text": "Definovat jednu výchozí škálu mezer 4/8/12/16/24/32/48 px, akční radius 8 px a obsahový 15 px. Maximální šířky a chování bočního shrnutí odvozovat od úlohy; výjimky pojmenovat.",
      "rationale": "Současné komponenty mají směs rolí a geometrie; přesná hodnota není univerzální pravidlo původního WordPressu.",
      "checks": [
        "Vyhodnotit rozdíl formulářové karty, volby, nabídky a dialogu samostatně.",
        "Nedělat velký dialog automaticky stejně velký jako informační kartu."
      ],
      "source": "UX/UI a architektonický posudek",
      "decision": "D05"
    },
    {
      "id": "DS-05",
      "category": "Navigace",
      "status": "navrh",
      "title": "Pravdivá fáze i podkrok na mobilu",
      "text": "Mobilní navigace má rozlišit čtyři vnější fáze a aktuální produktový podkrok. Číslo 1/4 nesmí slibovat čtyři obrazovky, pokud jich proces obsahuje více.",
      "rationale": "Travel a úraz mají stejné fáze, ale rozdílné mobilní popisky a vnitřní členění.",
      "checks": [
        "Projít všechny větve, návraty a editaci z rekapitulace.",
        "Přechod zachová potvrzená data a má srozumitelný fokus; neuložený draft má definované chování."
      ],
      "source": "travel-navigation.js; ferda-flow.js; fresh snímky",
      "decision": "D04"
    },
    {
      "id": "DS-06",
      "category": "Obsah a akce",
      "status": "navrh",
      "title": "Sloveso odpovídá skutečné akci",
      "text": "Zelená znamená hlavní postup či výběr, vedlejší detail a změna mají vlastní roli. Tlačítko vybírající nabídku nemá slibovat uzavření smlouvy. Modelový e-mail nebo platbu nazvat podle skutečného účinku.",
      "rationale": "Výchozí travel karty už používají Vybrat, aktivní detail má jinou formulaci; nejde o totéž co neaktivní zachované renderery.",
      "checks": [
        "Ověřit viditelné karty, detail nabídky, rekapitulaci, platbu a konec.",
        "Stejná akce má shodný název a ikonu; odlišný účinek nemusí mít stejné sloveso."
      ],
      "source": "Marketingový posudek; aktivní renderery a screenshoty",
      "decision": "D09"
    },
    {
      "id": "DS-07",
      "category": "Obsah a akce",
      "status": "navrh",
      "title": "Cena má jednotku a stabilní význam barvy",
      "text": "Výchozí role ceny má být navy a vždy má vyjádřit časovou jednotku a obsah. Nepřenášet roční úrazovou cenu na cenu travelu za cestu. Ověřit červenou travelovou rekapitulační výjimku.",
      "rationale": "Travel výsledky a boční shrnutí mají navy, jeho rekapitulace červenou; úrazová rekapitulace navy.",
      "checks": [
        "Porovnat výsledky, výběr, konfiguraci a rekapitulaci.",
        "Při změně varianty/frekvence zůstává jasná celková částka i jednotka."
      ],
      "source": "evidence/gpt-6-sol/price-probe.json",
      "decision": "D07"
    },
    {
      "id": "DS-08",
      "category": "Nabídky a údaje",
      "status": "navrh",
      "title": "Stejná struktura nabídky, vlastní produktové porovnání",
      "text": "Sjednotit roli loga, názvu, ceny, klíčového krytí, dostupnosti, detailu a výběru. Zachovat cestovní aktivity/shodu i úrazovou matici rizik a frekvence; všechny modelové možnosti zůstanou dosažitelné.",
      "rationale": "22 travel variant a úrazové rizikové kombinace nejsou shodná informační úloha.",
      "checks": [
        "Ověřit řazení, filtr/seskupení a dostupnost všech variant i návrat z porovnání.",
        "Nepřevzít počet sloupců nebo řádků jen kvůli shodnému vzhledu."
      ],
      "source": "UX/UI posudek; dataset a current výsledky",
      "decision": "D06"
    },
    {
      "id": "DS-09",
      "category": "Nabídky a údaje",
      "status": "navrh",
      "title": "Osoby jsou produktové, pole společná",
      "text": "Sdílet zobrazení jména, adresy, kontaktu a chyb; vztah pojistník/pojištěný, opakovaní cestující, obmyšlené osoby a dotazník určuje konkrétní produkt.",
      "rationale": "Stejný formulář všech osob by potlačil skutečně odlišné povinnosti a závislosti.",
      "checks": [
        "Ověřit jiné osoby, sdílenou adresu, podmíněné osoby a úpravu z rekapitulace.",
        "Změna role osoby zachová jen relevantní potvrzené hodnoty."
      ],
      "source": "Aktuální people kroky; historický Ferda podklad",
      "decision": ""
    },
    {
      "id": "DS-10",
      "category": "Nabídky a údaje",
      "status": "navrh",
      "title": "Kontakty až podle doložené potřeby",
      "text": "Rozhodnout, proč a kdy se žádá e-mail a telefon. Preferovat kontakt po ceně/výběru, pokud výpočet či ověřený proces nevyžaduje dřívější krok; dřívější lead má jasný účel a odlišené povinné/volitelné údaje.",
      "rationale": "Úraz nyní chce e-mail před cenou, travel v údajích; technickou potřebu aktuální Ferdy tento audit neověřil.",
      "checks": [
        "Doložit potřebu každého povinného kontaktu a sjednotit vysvětlení účelu.",
        "Ověřit formulaci Bez telefonního spamu oproti zamýšlenému provoznímu postupu."
      ],
      "source": "Marketingový posudek; core/profile a client-form",
      "decision": "D03"
    },
    {
      "id": "DS-11",
      "category": "Nabídky a údaje",
      "status": "navrh",
      "title": "Společná rekapitulační fakta a oprava",
      "text": "Zvolit jednu vizuální gramatiku rekapitulačních sekcí: název skupiny, fakta, výběr a viditelná změna. Produktová fakta, dokumenty a návaznost zůstávají vlastní.",
      "rationale": "Travel má jednu kartu s vnitřními skupinami, úraz sadu samostatných panelů; liší se i práce s linkou a cenou.",
      "checks": [
        "Po opravě části se vrátit na rekapitulaci a ukázat aktualizované údaje.",
        "Odvozený návrh a platba se zneplatní podle ověřených pravidel procesu, ne pouhým přemalováním souhrnu."
      ],
      "source": "Fresh recap snímky obou produktů; UX/UI posudek",
      "decision": "D07"
    },
    {
      "id": "A11Y-01",
      "category": "Přístupnost a stavy",
      "status": "navrh",
      "title": "Kontrast je přejímací podmínka, ne odhad",
      "text": "Měřit textový i netextový kontrast skutečných stavů proti konkrétnímu podkladu. Cílem nové společné specifikace je WCAG 2.2 AA; tento audit nepředstavuje potvrzení úplné shody.",
      "rationale": "Současná bílá/zelená a malý červený text mají doložený rozpor. Zvětšení samotného písma nevyřeší 2,737:1 pod hranicí i velkého textu.",
      "checks": [
        "Zaznamenat poměry, velikost/váhu a funkční roli, ne jen hex barvy.",
        "Před přijetím zvolit řešení D02 a ověřit normální, hover, focus, chybu a disabled."
      ],
      "source": "WCAG 2.2 SC 1.4.3 a 1.4.11; kontrastní posudek",
      "decision": "D02"
    },
    {
      "id": "A11Y-02",
      "category": "Formuláře",
      "status": "navrh",
      "title": "Stejný kontrakt validace",
      "text": "Pole má jednoznačný label, hint a viditelnou chybu s vazbou přes ID/aria-describedby; při chybě aria-invalid. Složená otázka používá legend. Skryté podmíněné pole není validováno a chyba nezmizí pouze změnou barvy.",
      "rationale": "Travel a úraz mají rozdílnou implementaci chyb; stejný vzhled ji nenahradí.",
      "checks": [
        "Vyvolat chybu prázdným startem, opravit ji a odeslat znovu.",
        "Ověřit souhrn/umístění první chyby i čtečku; nezaměňovat vypnutou osobní validaci prototypu za produkční pravidlo."
      ],
      "source": "Architektonický posudek; current form renderery",
      "decision": "D05"
    },
    {
      "id": "A11Y-03",
      "category": "Přístupnost a stavy",
      "status": "navrh",
      "title": "Předvídatelná klávesnice a fokus",
      "text": "Tab a šipky mají odpovídat významu prvku. Při výběru rádia nemá fokus neočekávaně přeskočit skupinu; při přechodu kroku se přesune na smysluplný kontext. Zvýraznění patří ovladači, ne červenému rámečku kolem celého main.",
      "rationale": "Jiná země nyní při šipce přesune fokus do selectu. Předchozí obrys main byl zdrojem nechtěné červené linky.",
      "checks": [
        "Projít Tab, Shift+Tab, šipky, Home/End, Enter a Escape v relevantních skupinách.",
        "Ověřit focus-visible proti pozadí a nezakrytí sticky prvky."
      ],
      "source": "evidence/gpt-6.1-terra/keyboard.json; minulá oprava navigace",
      "decision": "D04"
    },
    {
      "id": "A11Y-04",
      "category": "Přístupnost a stavy",
      "status": "navrh",
      "title": "Dialog jako úplný stavový kontrakt",
      "text": "Dialog má jméno, smysluplný počáteční fokus, vymezenou tabulaci, dostupné zavření/Escape a návrat na spouštěč nebo popsaný náhradní cíl. Uložit potvrzuje draft, Zrušit/Escape jej zahazuje.",
      "rationale": "Oba produkty používají různé implementace i mobilní umístění. Nativní dialog sám nezaručuje správný workflow.",
      "checks": [
        "Ověřit dlouhý obsah, mobilní klávesnici, opakované otevření a oba směry tabulace.",
        "Prověřit návrat po překreslení/odstranění spouštěče a chování čtečky."
      ],
      "source": "WAI-ARIA APG Dialog; výběrový keyboard test",
      "decision": "D08"
    },
    {
      "id": "A11Y-05",
      "category": "Přístupnost a stavy",
      "status": "navrh",
      "title": "Responzivita, zoom a dotyk",
      "text": "Přejímat nový základ při 320/375/768/1440 px a zvětšení textu; zkontrolovat orientaci a ovládání s klávesnicí. Návrhovým cílem ovladače je 44 × 44 CSS px, menší případy mají doložený důvod a vyhovující rozestupy.",
      "rationale": "WCAG 2.2 minimum 24 px obsahuje výjimky; 44 px je zde návrhový cíl, nikoli tvrzení o plošné normativní povinnosti AA.",
      "checks": [
        "Bez horizontálního přetečení běžného formuláře; široké porovnání má pojmenovanou oblast posuvu.",
        "Fyzický telefon a čtečku vést jako samostatné kontroly, ne jako výsledek desktopové emulace."
      ],
      "source": "WCAG 2.2; architektonický posudek; současná kontrola jen Chrome375/1440",
      "decision": "D05"
    },
    {
      "id": "A11Y-06",
      "category": "Přístupnost a stavy",
      "status": "navrh",
      "title": "Výběr, dostupnost a asynchronní stav mají textový význam",
      "text": "Selected, chyba, loading a disabled jsou samostatné role. Výběr se neoznačuje pouze barvou; nedostupná akce vysvětlí důvod a nabídne dosažitelnou alternativu. AI není jediným zdrojem vysvětlení.",
      "rationale": "Společný design musí popsat chování, ne jen klidový snímek.",
      "checks": [
        "Ověřit stav před volbou, po volbě, při změně a při nedostupné službě.",
        "Přiměřeně oznámit změnu výsledků/potvrzení bez ztráty fokusu a vstupu."
      ],
      "source": "Tři odborné posudky; projektové offline pravidlo",
      "decision": ""
    },
    {
      "id": "SEO-01",
      "category": "Publikace a důvěryhodnost",
      "status": "navrh",
      "title": "Výslovná politika indexace prototypů",
      "text": "Devel a modelové kroky mají mít jednotnou záměrnou indexační politiku. Doporučení je noindex pro prototypové stránky; případné omezení přístupu řešit samostatně. Noindex ani robots.txt nejsou ochrana důvěrných dat.",
      "rationale": "Aktuální travel má meta noindex,nofollow, úraz nemá meta noindex ani ověřenou hlavičku X-Robots-Tag. To nedokazuje, že jej vyhledávač indexuje.",
      "checks": [
        "Ověřit skutečné HTTP hlavičky a HTML pro všechny veřejné vstupy.",
        "Nezablokovat pouze robots.txt přístup k noindex, který má robot přečíst; ochranu přístupu ověřit odděleně."
      ],
      "source": "Google Search Central; evidence/public-http.json",
      "decision": "D11"
    },
    {
      "id": "SEO-02",
      "category": "Publikace a důvěryhodnost",
      "status": "navrh",
      "title": "Marketingová stránka a aplikační kroky mají odlišný účel",
      "text": "Produkční vstupní obsah může mít jedinečný titul, popis a srozumitelné vysvětlení produktu. Osobní kroky, návrhy a rekapitulace nemají sloužit jako akviziční obsah. Konkrétní URL/render/indexační plán musí odpovídat skutečné architektuře.",
      "rationale": "Klíčová slova a SEO text se nemají mechanicky vkládat do každé obrazovky kalkulačky.",
      "checks": [
        "Ověřit vykreslené title, H1, popis a dostupnost smysluplného obsahu pro zvolenou veřejnou stránku.",
        "Neslibovat výsledek vyhledávání ani hodnocení konverze bez měření."
      ],
      "source": "Marketingový posudek; Google Search Central title/snippet/JavaScript",
      "decision": "D11"
    },
    {
      "id": "SEO-03",
      "category": "Publikace a důvěryhodnost",
      "status": "navrh",
      "title": "Doložitelné obchodní a AI formulace",
      "text": "Počty pojišťoven/variant, tvrzení o pomoci AI, ceně a nezávaznosti odpovídají skutečnému režimu a ověřenému zdroji. Číslo odvozené z modelového datasetu není automaticky aktuální obchodní nabídka.",
      "rationale": "22 variant a 11 skupin odpovídá místním datům, nikoli nezávislému ověření trhu. Současný offline popis text ve skutečnosti neanalyzuje.",
      "checks": [
        "U každého slibu určit vlastníka, zdroj a okamžik aktualizace.",
        "Před produkcí revidovat Bez telefonního spamu a formulace návrhu, platby a sjednání."
      ],
      "source": "Marketingový posudek; evidence/gpt-6.1-sol/source-copy-audit.json",
      "decision": "D03"
    },
    {
      "id": "DEV-01",
      "category": "Společné komponenty",
      "status": "navrh",
      "title": "Vlastník každé CSS role a produktová výjimka",
      "text": "Směřovat ke kaskádě primitives → sémantické role → komponenty → produktové adaptéry → explicitní výjimky. Každá role má vlastníka a ukázky; nové výjimky neřešit řetězením širokých !important pravidel bez přezkumu.",
      "rationale": "Dnešní finální akcentová vrstva opravuje předchozí široké přebarvení. Pořadí souborů a specifičnost jsou rizikem dalších úprav.",
      "checks": [
        "Před refaktorem změřit vítězný výsledný styl a všechny relevantní stavy.",
        "Výjimka má produkt, důvod, rozsah a datum dalšího přezkumu."
      ],
      "source": "Architektonický posudek; současná CSS kaskáda",
      "decision": "D01"
    },
    {
      "id": "DEV-02",
      "category": "Vydávání a údržba",
      "status": "navrh",
      "title": "Přejímka změny podle dotčených rolí",
      "text": "Společná změna se ověří na obou produktech, z obou startů, ve stejných reprezentativních stavech. Rozsah kontroly odpovídá změně; výsledky a meze se uloží k vydání.",
      "rationale": "Samotná shoda úvodu nestačí pro dynamické karty, dialogy nebo rekapitulaci.",
      "checks": [
        "Zachytit before/after, počítané styly, chybové stavy a dotčené větve.",
        "Rozlišit screenshot, funkční průchod, klávesnicový test, test se čtečkou a test s lidmi; nezaměňovat jejich důkazní sílu."
      ],
      "source": "Metodika tohoto reportu; tři posudky",
      "decision": ""
    },
    {
      "id": "FER-01",
      "category": "Příprava Ferdy",
      "status": "overit",
      "title": "Ověřit současný proces a vlastníky Ferdy",
      "text": "Před návrhem skutečné integrace potvrdit aktuální produkt, formulářové definice, odpovědnosti, fáze a události z dnešních owning zdrojů. Historické identity 130/132/142 a Calc/Buy/Order jsou vodítko, nikoli dnešní schválené rozhraní.",
      "rationale": "Máme historický čtecí podklad z 21. 10. 2026, nikoli nový audit produkční Ferdy.",
      "checks": [
        "Získat aktuální mapu procesu a zodpovědného vlastníka.",
        "Popsat známé/nezjištěné oblasti včetně rozdílu produktů132a142; nevymýšlet endpointy."
      ],
      "source": "Historický IMPLEMENTACE.md; architektonický posudek",
      "decision": "D10"
    },
    {
      "id": "FER-02",
      "category": "Příprava Ferdy",
      "status": "overit",
      "title": "Datové smlouvy a serverová validace",
      "text": "Zmapovat modelový stav na skutečné atributy konkrétního produktu: osoby, povolání, číselníky, destinace, rizika, částky, dotazník a dokumenty. Potvrdit pravidla serverové validace a životního cyklu výsledků.",
      "rationale": "CMPFerda.toFerdaDraft je lokální vzor. Sám neověřuje správnost requestu, formuláře ani pojistné logiky.",
      "checks": [
        "Schválit DTO/schéma a chybový formát s owning systémem.",
        "Ověřit invalidaci výsledků/návrhu při změně, obnovu stavu a produktové rozdíly na testovacích datech."
      ],
      "source": "Historický integrační podklad; current modelový core",
      "decision": "D10"
    },
    {
      "id": "FER-03",
      "category": "Příprava Ferdy",
      "status": "overit",
      "title": "Oddělený modelový a skutečný adaptér",
      "text": "UI popisuje záměr kalkulovat, vybrat nebo připravit návrh; samostatný adaptér zajišťuje ověřené skutečné volání. Modelový adaptér zůstává lokální a průchozí i při nedostupné integraci.",
      "rationale": "Názvy UI záměrů nejsou endpointy. Přepínač režimu není náhradou autentizace, kontroly procesu a zabezpečení.",
      "checks": [
        "Ověřit autorizaci, správu stavu, chyby, timeout/retry a ochranu duplicit podle reálné smlouvy.",
        "Před jakýmkoli skutečným vedlejším účinkem samostatně potvrdit prostředí a rozsah testu."
      ],
      "source": "Architektonický posudek; hranice současného prototypu",
      "decision": "D10"
    },
    {
      "id": "FER-04",
      "category": "Příprava Ferdy",
      "status": "overit",
      "title": "Dokumenty, souhlasy, platby a odborné znění",
      "text": "Správné verze dokumentů, souhlasy, produktové podmínky, stav platby a potvrzení musí být ověřené s odpovědnými vlastníky před produkčním použitím. Modelové dokumenty ani demo formulace nejsou takovým ověřením.",
      "rationale": "Tento audit se týká designu a společných smluv UI; neověřuje právní či pojistnou správnost, bezpečnost produkce nebo skutečné sjednání.",
      "checks": [
        "V testovacím prostředí doložit návaznost nabídka → dokumenty → návrh → případná platba → potvrzení.",
        "Zapsat zvlášť právní/produktové, bezpečnostní a provozní přejímky a jejich vlastníky."
      ],
      "source": "Meze původního i nového auditu; historický Ferda podklad",
      "decision": "D10"
    },
    {
      "id": "FER-05",
      "category": "Příprava Ferdy",
      "status": "overit",
      "title": "Pilot před rozšířením integrace",
      "text": "Začít jedním schváleným reprezentativním komponentem nebo čtecím integračním scénářem v ověřeném testovacím prostředí, s popsanou odpovědností, důkazem a návratem. Rozšíření na oba produkty až po vyhodnocení pilotu.",
      "rationale": "Společný vzhled neprokazuje společný datový model ani připravenou integraci.",
      "checks": [
        "Definovat vstupní podmínky, úspěch, selhání a kritérium zastavení pilotu.",
        "Po novém integračním zjištění aktualizovat pravidla a rozhodnutí, zachovat historický snapshot."
      ],
      "source": "Konsolidované doporučení; plán postupného sjednocení",
      "decision": "D10"
    }
  ]
}