---
name: generate-lms-course
description: >-
  Use this skill when the user asks to create, generate or write a new course
  for the "O procento" LMS Demo platform. It contains instructions on the exact JSON format,
  all available blocks (lessons), access rules (free/paid, locked, sequential, drip, prerequisites),
  the self-assessment questionnaire format and certificates. Course content is written in Czech.
---

# Generovanie kurzu pre LMS "O procento"

Tento skill slúži na vygenerovanie kurzu vo formáte JSON, ktorý je priamo kompatibilný s platformou "O procento" (import cez stránku **Import kurzu**). Platforma je v češtine – **všetky texty v kurze musia byť v češtine** (ak používateľ výslovne nepožiada o iný jazyk). Cieľová skupina O procento sú ľudia 55+ – píš zrozumiteľne, prívetivo a bez žargónu. Ceny uvádzaj v Kč (`"currency": "CZK"`).

## Štruktúra kurzu

```json
{
  "title": "Název kurzu",
  "description": "Krátký popis kurzu (max. 2 věty)",
  "author": "Tým O procento",
  "access": "paid",              // voliteľné: "free" (predvolené) alebo "paid"
  "price": 990,                  // pri platenom obsahu
  "currency": "CZK",
  "sequential": false,           // voliteľné: celý kurz v presnom poradí
  "certificate": {               // voliteľné: certifikát za kurz (a moduly)
    "title": "Osvědčení o absolvování",
    "perModule": true,
    "signatures": [{ "name": "Tým O procento", "role": "Program Re-Start Up" }]
  },
  "assessments": [ ... ],        // voliteľné: definície sebahodnotení (pozri nižšie)
  "mascot": "procenticko",       // voliteľné: maskot-sprievodca celým kurzom ("bohous" | "procenticko"), pozri Maskoti
  "theme": {                     // voliteľné: odlíšenie kurzu (pozri Vzhľad a téma)
    "accent": "teal", "icon": "sprout", "category": "Osobní rozvoj", "coverImage": "obrazky/obalka.jpg"
  },
  "modules": [
    {
      "id": "krok-1",                 // povinné, ak naň odkazujú prerekvizity
      "title": "Název modulu",
      "description": "Volitelný popis",
      "access": "free",               // prepíše access kurzu
      "sequential": true,             // lekcie modulu v presnom poradí
      "prerequisites": ["uvod"],      // ID modulov, ktoré musia byť dokončené
      "drip": { "intervalDays": 1 },  // n-tá lekcia sa odomkne n dní po zápise
      "certificate": false,           // prepíše certificate.perModule pre tento modul
      "unlock": [ ... ],              // podmienky odomknutia celého modulu
      "lessons": [ ... ]
    }
  ]
}
```

## Lekcia (blok)

Každá lekcia má unikátne `id`, typ `type` a dáta `data`. Voliteľne `title` (názov v osnove), `access`, `unlock` a `appearance` (farba zvýraznení a pozadie bloku – pozri Vzhľad a téma).

```json
{
  "id": "unikatni-id",
  "type": "text_block",
  "access": "free",
  "unlock": [{ "type": "lesson_completed", "lessonId": "jine-id" }],
  "data": { ... }
}
```

## Sprístupňovanie obsahu

| Funkcia | Ako nastaviť |
|---|---|
| Free content | `"access": "free"` (predvolené) na kurze, module alebo lekcii |
| Paid content | `"access": "paid"` + `price` na kurze; jednotlivé moduly/lekcie môžu byť `"free"` |
| Sekvenčná navigácia | `"sequential": true` na kurze alebo module |
| Drip content | `"drip": { "intervalDays": 1 }` na module, alebo pravidlo `days_after_enrollment` |
| Prerekvizity | `"prerequisites": ["id-modulu"]` na module |
| Zamknutý obsah | pole `unlock` s podmienkami (všetky musia platiť) |

Podmienky v `unlock`:

```json
{ "type": "lesson_completed", "lessonId": "l1" }                 // dokončiť lekciu
{ "type": "min_score", "lessonId": "test-1", "minScore": 70 }    // skóre 0–100 v teste/aktivite
{ "type": "delay_after_lesson", "lessonId": "l1", "hours": 24 }  // časový interval po lekcii
{ "type": "days_after_enrollment", "days": 3 }                   // drip: 3 dni po zápise
{ "type": "date", "date": "2026-12-01T17:00:00" }                // pevný dátum
```

## Certifikáty

`certificate` na kurze zapne certifikát za dokončenie celého kurzu. S `"perModule": true` sa vydáva aj certifikát za každý dokončený modul (modul s `"certificate": false` sa vynechá; `"certificate": true` na module ho zapne aj bez `perModule`). Certifikát sa zobrazí na stránke **Certifikáty**, dá sa stiahnuť ako PDF a obsahuje QR kód na overenie.

## Vzhľad a téma

**V dizajne sa nepoužívajú emoji** – ani v texte blokov, ani ako ikony. Namiesto nich slúžia ikony zo zoznamu nižšie a maskoti.

Farby sú len z palety značky:
- `accent` (zvýraznenie, tlačidlá, obálka kurzu): `coral` (predvolená), `navy`, `green`, `teal`, `plum`, `amber`
- `background` (podfarbenie bloku): `white`, `sand`, `navy-soft`, `gold-soft`, `peach-soft`, `green-soft`

```json
// kurz
"theme": { "accent": "navy", "icon": "shield", "category": "Digitální svět", "coverImage": "https://…/obalka.jpg" }
// lekcia
"appearance": { "accent": "green", "background": "green-soft" }
```

Téma kurzu (`category`) slúži na filtrovanie v katalógu – používaj ustálené názvy: Digitální svět, Zdraví a pohyb, Jazyky, Peníze, Komunita, Osobní rozvoj.

**Ikony** (`theme.icon`, `process_block.steps[].icon`, `icon` na strane kartičky): `laptop`, `smartphone`, `shield`, `heart-pulse`, `footprints`, `languages`, `plane`, `wallet`, `piggy-bank`, `users`, `hand-heart`, `sprout`, `compass`, `book-open`, `graduation-cap`, `lightbulb`, `brain`, `palette`, `music`, `leaf`, `sun`, `house`, `phone`, `mail`, `messages`, `calendar`, `clock`, `key`, `siren`, `notebook`, `target`, `flag`, `star`, `trophy`, `party`, `sparkles`, `puzzle`, `bike`, `dumbbell`, `apple`, `stethoscope`, `landmark`, `banknote`, `camera`, `ticket`, `id-card`, `luggage`, `train`, `taxi`, `bus`, `coffee`, `wheat`, `water`, `utensils`, `hotel`, `map`, `map-pin`, `receipt`.

## Kurz so súbormi (ZIP)

Kurz s vlastnými obrázkami, videami alebo nahrávkami sa importuje ako `.zip`:

```
kurz.zip
├── course.json          // kurz (formát ako vyššie)
├── obrazky/mapa.png
├── video/uvod.mp4
└── audio/podcast.m4a
```

V `course.json` sa na súbory odkazuje **relatívnou cestou od koreňa ZIP**, napr. `"image": "obrazky/mapa.png"`, `"src": "audio/podcast.m4a"`, `"url": "video/uvod.mp4"`, aj vo vnútri HTML: `<img src="obrazky/mapa.png">`. Pri importe sa súbory uložia do platformy. Ak nemáš skutočné súbory, nevymýšľaj cesty.

## Podporované bloky

### `text_block` – text alebo HTML
Predvolene prostý text: prázdny riadok = nový odsek, riadky začínajúce `•` alebo `-` = odrážky.
```json
{ "title": "Nadpis", "content": "Odstavec.\n\n• první bod\n• druhý bod" }
```
S `"format": "html"` je `content` HTML – nadpisy, zoznamy, tabuľky, obrázky, odkazy, vložené video z YouTube/Vimeo (`<iframe>`), inline štýly. Takéto HTML sa vloží priamo do lekcie (v štýle platformy); skripty, formuláre a iné iframy sa pred zobrazením odstránia.
```json
{ "title": "Tabulka tarifů", "format": "html", "content": "<p>Přehled:</p><table><tr><th>Tarif</th><th>Cena</th></tr><tr><td>Senior</td><td>199 Kč</td></tr></table>" }
```
**Celá HTML stránka** – ak `content` obsahuje `<!DOCTYPE html>`, `<html>`, `<head>`, `<body>`, `<style>`, `<script>` alebo `<link>`, zobrazí sa v samostatnom izolovanom okne (sandbox): vlastné štýly, CSS animácie aj JavaScript fungujú, ale stránka nemá prístup k platforme. Výška okna sa prispôsobí obsahu; pri `height: 100vh` má okno 400 px. Odkazy sa otvárajú v novej karte, formuláre a `alert()` nefungujú. Hodí sa na interaktívne ukážky a animácie.
```json
{ "title": "Animace", "format": "html", "content": "<!DOCTYPE html><html><head><style>body{margin:0;height:100vh;display:flex;align-items:center;background:#102c5a}.kulicka{width:80px;height:80px;border-radius:50%;background:#dc5e59;animation:pohyb 2s ease-in-out infinite alternate}@keyframes pohyb{to{transform:translateX(calc(100vw - 80px))}}</style></head><body><div class=\"kulicka\"></div></body></html>" }
```

### `video_block` – video a mikrovideo
YouTube, Vimeo alebo priamy .mp4. Mikrovideo = výrez `start`–`end` (sekundy). Lekcia sa dokončí sama po pozretí `completeAt` (predvolene 90 %).
```json
{
  "title": "Síla slova „zatím“", "description": "…", "url": "https://www.youtube.com/watch?v=_X0mgOOSpLU",
  "start": 0, "end": 150, "duration": "2,5 min",
  "chapters": [{ "time": 0, "title": "Úvod" }],
  "keyPoints": ["Klíčová myšlenka"], "transcript": "Volitelný přepis"
}
```

### `audio_block` – podcast / audionahrávka
Rýchlosť prehrávania, ±15 s, kapitoly, prepis, pokračovanie od miesta, kde študent skončil, stiahnutie na cesty.
```json
{
  "title": "Podcast: …", "description": "…", "src": "/audio/podcast.m4a", "duration": "12 min",
  "chapters": [{ "time": 0, "title": "Úvod" }, { "time": 95, "title": "Hlavní téma" }],
  "transcript": "…", "showNotes": ["Poznámka k dílu"]
}
```

### `quiz_block` – jednoduchý kvíz (1 otázka)
```json
{ "question": "Otázka?", "options": ["A", "B", "C"], "correctIndex": 1, "explanation": "Proč B." }
```

### `test_block` – kvíz / test s okamžitou spätnou väzbou
Typy otázok: `single_choice`, `multiple_choice`, `true_false`, `fill_blank` (medzera `{{odpověď|alternativa}}`).
```json
{
  "title": "Test", "passingScore": 70,
  "questions": [
    { "id": "t1", "type": "single_choice", "question": "?", "options": ["A", "B"], "correctIndex": 0, "explanation": "…" },
    { "id": "t2", "type": "multiple_choice", "question": "?", "options": ["A", "B", "C"], "correctIndices": [0, 2] },
    { "id": "t3", "type": "true_false", "statement": "Tvrzení.", "correct": true },
    { "id": "t4", "type": "fill_blank", "text": "Stačí jedno {{procento|%}} denně." }
  ]
}
```
Lekcia sa dokončí, keď skóre dosiahne `passingScore`. Na skóre sa dá odkázať pravidlom `min_score`.

### `flashcards_block` – kartičky
Strana kartičky (`front`, `back`) môže mať `text`, `icon` (zo zoznamu ikon), `image` a `audio` (výslovnosť).
```json
{
  "title": "Slovíčka na cesty",
  "cards": [{ "front": { "text": "ticket", "icon": "ticket", "audio": "/audio/en/ticket.m4a" }, "back": { "text": "jízdenka" }, "hint": "volitelná nápověda" }]
}
```

### `memory_game_block` – pexeso
2–12 dvojíc; každá strana dvojice je ako strana kartičky.
```json
{ "title": "Pexeso", "pairs": [{ "a": { "icon": "coffee" }, "b": { "text": "coffee" } }, { "a": { "text": "bread" }, "b": { "text": "chléb" } }] }
```

### `process_block` – animovaný proces
```json
{ "title": "Postup", "autoplay": true, "steps": [{ "icon": "phone", "title": "Zavolejte do banky", "text": "…" }, { "icon": "key", "title": "Změňte hesla", "text": "…" }] }
```

### `infographic_block` – interaktívna infografika
`chart.type`: `bar` | `line` | `area` | `pie`; `note` sa zobrazí po kliknutí na hodnotu.
```json
{
  "title": "Co udělá jedno procento",
  "stats": [{ "value": 14.4, "label": "minuty denně", "decimals": 1 }],
  "chart": { "type": "bar", "title": "Hodiny za rok", "unit": "h", "data": [{ "label": "Týden", "value": 1.7, "note": "…" }, { "label": "Rok", "value": 87.6 }] },
  "insights": ["Postřeh"], "source": "Zdroj dat"
}
```

### `survey_block` – dotazník
```json
{ "title": "Dotazník", "description": "…", "thankYou": "Děkujeme!", "questions": [ ...otázky... ] }
```

Typy otázok (spoločné pre dotazník aj sebahodnotenie; každá má `id`, `type`, `question`, voliteľne `description`, `required: false`):

```json
{ "type": "dichotomous", "options": ["Ano", "Ne"] }                          // uzavretá – 2 možnosti
{ "type": "single_choice", "options": ["A", "B", "C"] }                       // jedna odpoveď
{ "type": "multiple_choice", "options": ["A", "B", "C"], "maxSelect": 2 }     // viac odpovedí
{ "type": "rating", "min": 1, "max": 5, "minLabel": "Špatně", "maxLabel": "Výborně" } // škálová
{ "type": "open", "placeholder": "…", "multiline": true }                     // otvorená
{ "type": "semi_closed", "options": ["A", "B"], "otherLabel": "Jiné (uveďte)", "multiple": false } // polouzavretá
{ "type": "likert", "points": 5 }                                             // Likert 5 alebo 7 bodov
{ "type": "likert", "scale": ["Vůbec ne", "Spíše ne", "Spíše ano", "Rozhodně ano"] } // vlastná škála
{ "type": "semantic_differential", "items": [{ "left": "Nudné", "right": "Zajímavé" }], "points": 7 }
{ "type": "ranking", "options": ["A", "B", "C"] }                             // poradová
{ "type": "matrix", "rows": ["Videa", "Texty"], "columns": ["Nevyhovuje", "Vyhovuje"] } // maticová
{ "type": "nps", "lowLabel": "Určitě ne", "highLabel": "Určitě ano" }         // NPS 0–10
```

### `self_assessment_block` – sebahodnotenie pred / počas / po
Dotazník sa definuje **raz** v `assessments` na úrovni kurzu a do lekcií sa vkladá s fázou `pre`, `mid` alebo `post`. Výsledky sa porovnajú v grafe s komentárom.
```json
// lekcia
{ "assessmentId": "kompas", "phase": "pre", "title": "Vstupní sebehodnocení" }

// course.assessments[]
{
  "id": "kompas",
  "title": "Kompas sebedůvěry",
  "dimensions": [{ "id": "confidence", "label": "Sebedůvěra" }, { "id": "energy", "label": "Energie" }],
  "questions": [
    { "id": "k1", "type": "likert", "dimension": "confidence", "question": "Věřím si." },
    { "id": "k2", "type": "likert", "dimension": "confidence", "reverse": true, "question": "Často o sobě pochybuji." },
    { "id": "k3", "type": "single_choice", "dimension": "energy", "question": "?", "options": ["Málo", "Dost"], "scores": [0, 100] },
    { "id": "k4", "type": "open", "required": false, "question": "Čeho chcete dosáhnout?" }
  ],
  "feedback": [
    { "min": 0, "max": 39, "label": "Na začátku cesty", "comment": "…", "recommendation": "…", "questions": ["Otázka k zamyšlení?"] },
    { "dimension": "energy", "min": 40, "max": 100, "label": "Plná energie", "comment": "…", "recommendation": "…" }
  ]
}
```
Bodovanie: škály (likert, rating, NPS, sémantický diferenciál, matica) sa prepočítajú na 0–100; pri výberových otázkach určuje body pole `scores`; `reverse: true` obráti škálu. `feedback` bez `dimension` platí pre celkové skóre. Pásma pokryj celé 0–100.

### `drag_drop_block` – drag & drop
```json
{ "mode": "matching", "title": "…", "instructions": "…", "pairs": [{ "prompt": "Pohyb", "match": "Procházka" }] }
{ "mode": "categorize", "categories": [{ "id": "a", "label": "A" }], "items": [{ "text": "…", "category": "a" }] }
{ "mode": "ordering", "steps": ["První krok", "Druhý krok", "Třetí krok"] }   // v správnom poradí
```

### `hotspot_block` – interaktívny obrázok / mapa
Súradnice `x`, `y` sú v percentách obrázka (0–100).
```json
{
  "title": "…", "image": "/demo/community-map.svg", "imageAlt": "Popis obrázku", "aspectRatio": 1.6,
  "hotspots": [{ "id": "h1", "x": 22, "y": 30, "title": "Knihovna", "content": "Doplňující informace." }]
}
```

### `branching_block` – vetviaci scenár
Každý uzol má buď `choices` (voľby vedú na `next`), alebo `ending` (`success` | `neutral` | `failure`).
```json
{
  "title": "Scénář", "start": "start",
  "nodes": [
    { "id": "start", "speaker": "Volající", "text": "…", "choices": [
      { "text": "Zavěsím.", "next": "end-good", "feedback": "Správně!" },
      { "text": "Řeknu kód.", "next": "end-bad" }
    ]},
    { "id": "end-good", "text": "…", "ending": { "outcome": "success", "title": "Výborně", "summary": "…" } },
    { "id": "end-bad", "text": "…", "ending": { "outcome": "failure", "title": "Podvod", "summary": "…" } }
  ]
}
```

### `discussion_block` – diskusné fórum / chat
V deme sú ostatní účastníci simulovaní: `posts` sú existujúce príspevky, `autoReplies` reakcie na príspevok študenta. `mode`: `forum` (vlákna s odpoveďami) alebo `chat`.
```json
{
  "mode": "forum", "title": "Diskuse", "prompt": "Otázka do diskuse",
  "posts": [{ "id": "p1", "author": "Jana Veselá", "role": "účastnice", "text": "…", "minutesAgo": 90, "likes": 3,
              "replies": [{ "author": "Marie Horáková", "role": "mentorka", "text": "…", "minutesAgo": 60 }] }],
  "autoReplies": [{ "author": "Marie Horáková", "role": "mentorka", "text": "Děkuji za sdílení!" }]
}
```

### `group_project_block` – skupinový projekt
Študent sa do tímu pridá automaticky; jeho úlohy a sekcie majú `"assignee": "me"` / `"author": "me"`.
```json
{
  "title": "…", "brief": "Zadání projektu",
  "team": [{ "name": "Jana Veselá", "role": "koordinátorka" }],
  "tasks": [{ "id": "t1", "title": "Úkol", "assignee": "me" }, { "id": "t2", "title": "Úkol", "assignee": "Jana Veselá", "status": "doing" }],
  "document": { "title": "Společný dokument", "sections": [{ "heading": "Úvod", "author": "me" }, { "heading": "…", "author": "Jana Veselá", "content": "…" }] }
}
```

### `peer_review_block` – vzájomné hodnotenie
```json
{
  "title": "…", "assignment": "Zadání práce", "minWords": 40,
  "rubric": [{ "id": "goal", "criterion": "Jasný cíl", "description": "…", "maxPoints": 3 }],
  "peerSubmissions": [{ "author": "Jana Veselá", "text": "Práce k ohodnocení" }],
  "receivedReviews": [{ "reviewer": "Marie Horáková", "scores": { "goal": 3 }, "comment": "…" }]
}
```

### `webinar_block` – webinár / živé stretnutie (Jitsi Meet)
Termín: `date` (ISO) alebo `daysAfterEnrollment` + `time`. Po skončení sa zobrazí záznam (`recordingUrl`).
```json
{
  "title": "Webinář: …", "host": { "name": "Marie Horáková", "role": "mentorka" },
  "daysAfterEnrollment": 2, "time": "17:00", "durationMinutes": 60, "room": "NazevMistnosti",
  "agenda": ["Bod programu"], "recordingUrl": "https://www.youtube.com/watch?v=…"
}
```

### Maskoti – Bohouš a Procentíčko
Platforma má dvoch animovaných maskotov. V maskotích blokoch hovoria v bubline, menia výraz a reagujú na študenta. Každý maskotí blok má povinné pole `"mascot": "bohous" | "procenticko"` (hlavný maskot bloku).

| `mascot` | Kto to je | Povaha a hlas |
|---|---|---|
| `bohous` | **Bohouš** – starý dub, **mužský rod** („já jsem rád“, „pochopil jsem“) | pokojný, vľúdny, múdry, s dedkovským humorom. Motto „Kořeny mám. Rostu dál.“ Korene = skúsenosti, koruna = všetko, čo ešte len príde. |
| `procenticko` | **Procentíčko** – ožitý znak % z loga, **stredný rod** („já jsem rádo“, „udělalo jsem“) | energické, hravé, stále naklonené k ďalšiemu kroku. Motto „Každý den o procento víc svůj.“ |

Nálada `mood` (výraz / póza maskota):

| `mood` | Význam (česky) | Kedy použiť |
|---|---|---|
| `happy` | usmívá se | bežná replika (predvolená) |
| `wave` | mává | pozdrav, rozlúčka |
| `joy` | raduje se | pochvala, úspech, nadšenie |
| `thinking` | přemýšlí | otázka, nápoveda, úvaha |
| `sad` | je posmutnělý / posmutnělé | súcit, horšia nálada študenta |
| `surprised` | je překvapený / překvapené | prekvapenie, zaujímavosť |

Voliteľné `"mascot"` na úrovni kurzu určí sprievodcu, ktorý je so študentom v bočnom paneli celým kurzom. Maskoti študentovi vykajú; v odpovediach študenta (`replies`) sa vyhni rodovým tvarom („jsem rád/ráda“).

### `mascot_dialog_block` – rozhovor s maskotom
Repliky idú postupne. Replika bez `mascot` patrí hlavnému maskotovi bloku, s `"mascot"` hovorí ten druhý (rozhovor oboch). `replies` = odpovede študenta na výber; maskot zareaguje vetou `response` s náladou `mood`. `outro` zaznie po dokončení rozhovoru.
```json
{
  "title": "Seznamte se", "mascot": "procenticko",
  "lines": [
    { "mood": "wave", "text": "Dobrý den! Já jsem Procentíčko." },
    { "mascot": "bohous", "mood": "happy", "text": "A já jsem Bohouš, starý dub." },
    { "text": "Co vás k nám přivedlo?", "replies": [
      { "text": "Chci zkusit něco nového.", "response": "Přesně na to jsme tady!", "mood": "joy" },
      { "text": "Jen se dívám.", "response": "I zvědavost je krok." }
    ]}
  ],
  "outro": "Teď už se známe."
}
```

### `mascot_quiz_block` – kvíz s maskotom
Maskot kladie otázky (jedna správna odpoveď), na požiadanie napovie (`hint`), pri správnej odpovedi sa raduje (`praise`, inak všeobecná pochvala), pri chybe povzbudí; `explanation` sa ukáže po odpovedi. Lekcia sa dokončí pri `passingScore` (predvolene 60), na skóre sa dá odkázať pravidlom `min_score`.
```json
{
  "title": "Kvíz s Procentíčkem", "mascot": "procenticko", "passingScore": 60,
  "intro": "Nebojte, nejsou to chytáky.",
  "questions": [
    { "id": "q1", "question": "Kolik minut je zhruba jedno procento dne?", "options": ["Asi 1", "Asi 14", "Asi 60"], "correctIndex": 1,
      "hint": "Den má 1 440 minut.", "explanation": "1 % z 24 hodin je 14,4 minuty.", "praise": "Přesně tak!" }
  ]
}
```

### `mascot_challenge_block` – výzva po malých krokoch
1–8 krokov na odškrtnutie; po každom maskot povzbudí vetou `cheer`, po poslednom zaznie `reward`. Bohoušovi s každým krokom pribudne plod v korune, Procentíčko kráča vpred. Lekcia sa dokončí po odškrtnutí všetkých krokov.
```json
{
  "title": "Výzva: pět malých kroků", "mascot": "bohous",
  "challenge": "Každý den jeden malý krok.",
  "steps": [
    { "text": "Projděte se aspoň 5 minut.", "cheer": "Ani moje kořeny nerostly najednou." },
    { "text": "Zavolejte někomu blízkému.", "cheer": "Lidé kolem nás jsou jako kořeny." }
  ],
  "reward": "Jsem na vás pyšný!"
}
```

### `mascot_mood_block` – „Jak se dnes máte?“
2–6 možností; každá sa zobrazí ako malý maskot v danej nálade (`mood`), po výbere maskot odpovie vetou `response`. Pri horších náladách odpovedaj jemne a podporne, bez moralizovania.
```json
{
  "title": "Jak se dnes máte?", "mascot": "bohous", "question": "Jak se dnes máte?",
  "options": [
    { "label": "Skvěle", "mood": "joy", "response": "To mě těší!" },
    { "label": "Ujde to", "mood": "thinking", "response": "I obyčejné dny mají svůj smysl." },
    { "label": "Je mi smutno", "mood": "sad", "response": "To mě mrzí. Jsem tu s vámi." }
  ]
}
```

### `file_block` – súbor na stiahnutie
```json
{ "title": "Materiál", "fileName": "material.pdf", "fileType": "application/pdf", "fileSize": "2,4 MB", "url": "https://…" }
```

### `interactive_block` – praktická aktivita (potvrdenie splnenia)
```json
{ "title": "Můj závazek", "description": "Co má student udělat." }
```

## Postup pre vygenerovanie kurzu
1. Zisti tému, cieľovú skupinu a rozsah (alebo ich vyvoď z promptu).
2. Navrhni aspoň 2–3 moduly. Úvodný modul je vhodné dať `"access": "free"`.
3. Kombinuj bloky: text, mikrovideo alebo podcast na výklad, `test_block` na overenie, aspoň jednu aktivitu (`drag_drop_block`, `hotspot_block`, `branching_block`, `flashcards_block`, `memory_game_block`) a podľa potreby spoluprácu (`discussion_block`, `group_project_block`, `peer_review_block`, `webinar_block`). Pri hravom kurze uprednostni maskotie bloky (`mascot_dialog_block`, `mascot_mood_block`, `mascot_quiz_block` namiesto `test_block`, `mascot_challenge_block`), kombinuj ich s klasickými a nastav sprievodcu `"mascot"` na kurze. Povahu maskotov drž konzistentnú: Bohouš je on (mužský rod), Procentíčko je ono (stredný rod) – pozor na tvary slovies.
4. Ak má kurz merať posun, pridaj `assessments` a tri lekcie `self_assessment_block` (pre / mid / post).
5. Ak má kurz končiť osvedčením, pridaj `certificate`. Daj kurzu `theme` (farba, ikona, téma) – kurzy sa tak v katalógu odlíšia. Nepoužívaj emoji.
6. Videá, nahrávky, obrázky a súbory musia byť dostupné na URL. Používaj len odkazy, ktoré dodal používateľ alebo ktoré určite existujú – nevymýšľaj ich. Ak médiá chýbajú, postav lekcie na textoch, testoch a aktivitách bez médií a na konci vypíš, čo by bolo dobré doplniť. `hotspot_block` použi len s obrázkom, ktorého obsah poznáš (súradnice bodov musia sedieť).
7. Všetky `id` lekcií musia byť unikátne; každý `lessonId`, `assessmentId`, ID v `prerequisites`, `start`, `next` a `category` musí odkazovať na existujúci prvok – import inak zlyhá s popisom chyby.
8. Vráť kompletný validný JSON (bez komentárov) – ako súbor `.json`, ak to prostredie umožňuje, inak ako jeden code-block. Používateľ ho nahrá na stránke **Import kurzu**.
