# ATADAS.md — Urbino public-spa · fejlesztői spec-átadó

**Modul:** a webes láb (`urbino.io`) — `public-spa` (Angular) · polgári publikus oldalak + capture + fiók
**Státusz:** design-átadó v1.0 · 2026. 07. 14. (6. fázis) · a képernyő-szintű igazság a `.dc.html` munkafájlokban él
**Belépő-nézet:** `00 Áttekintés.dc.html` (sitemap + láthatóság + funkció-leltár + állapot-mátrix) · terv-forrás: `ROADMAP.md`
**Átadó-csomag:** **`atadas/`** (7. fázis, 2026. 07. 14. — egyirányú export): W0–W12 screen-mockok állapot-mátrixszal · chrome-organizmusok · `data/mock.js` fixture-kánon · 77 PNG-melléklet — belépő: `atadas/00-index.html`; a csomag generált, javítás mindig a `.dc.html` forrásban (re-export: `atadas-pipeline/`)
**Testvér-csomagok:** a polgári **mobilapp** spec-csomagja (`urbino-polgari-handoff-v1/spec/` — domain/API: `10_domain_es_api.md`, string-katalógus: `50_string_katalogus.md`) · backend-kontraktus: `atadas_specprojektnek/20_polgari_api_kontraktus.md`
**Design system:** Urbino DS, citizen-web világ — minden felület `.urbino-cit.urbino-cit-web` wrapperben; tokenek/komponensek a DS-projektből, itt nem definiálunk újat.

> **Megjegyzés (spec-oldali igazítás, 2026. 09. 22.):** a fejlesztés forrása az urbino-docs spec —
> `apps/polgari-web/spec/10_publikus_oldalak_es_seo.md` és `apps/polgari-web/spec/20_webes_capture_es_koveto_oldal.md`
> (v2.0); **ütközésnél a spec nyer**. Ez a fájl a design-döntések háttere. **A 12. szakasz reszponzív
> kontraktusa kötött.** A v1-ből kimaradó részek (kérdőív, lakcím, kérdőív-levél) a szerző engedélyével
> kikerültek vagy jelölve vannak — tételesen: `../../SPEC-OLDALI-MODOSITASOK.md`.

---

## 1 · A modul egy bekezdésben

Az `urbino.io` **élő publikus ablak** a platformra (K-042), négy felületcsoporttal: **gyökér** (mi az Urbino + élő bizonyíték + település-belépő + kereslet-jelzés), **település-oldal** (bejelentés-lista + térkép, hír-sapka), **publikus bejelentés-oldal** (anonim, indexelt, megosztható — ez a megosztott link célja), **capture-flow** (bejelentés-küldés app nélkül), plusz a **fiók** (privát, v1: Bejelentéseid · Adataim). Konfiguráció-egységes, tiszta always-index (K-048 v11); a capture minőség-magja a mobilappal közös (K-049).

## 2 · Kanonikus fájl-index (design-forrás)

| Felület | Fájl | Kulcs-keretek |
|---|---|---|
| **Spec — a fejlesztés forrása** | **`apps/polgari-web/spec/10_publikus_oldalak_es_seo.md`** · **`20_webes_capture_es_koveto_oldal.md`** (v2.0) | végpontok · DTO-k · viselkedés · acceptance criteria — ütközésnél a spec nyer |
| **Szövegkészlet** | **`apps/polgari-web/spec/i18n/hu.json`** | a szövegek kanonikus katalógusa a spec-rétegben (a csomagbeli `i18n/hu.json` megszűnt) |
| **Fejlesztői kontraktus** | **`KONTRAKTUS.md`** | route- és állapot-tábla · komponens-leltár · megjelenés + láthatóság — **viselkedés- és komponens-referencia** a spec mellé |
| **Demó-adat** | **`fixtures/demo.json`** | a mobil-szinkron ALM-készlet + hírek/programok gépi alakban, láthatósági jelöléssel |
| Projekt-áttekintő | `00 Áttekintés.dc.html` | sitemap · láthatóság · funkció-leltár · állapot-mátrix · reszponzív lefedettség · hiánylista |
| Gyökéroldal | `Gyökéroldal.dc.html` | 4a (+ **„Mit tud az Urbino” 3 képesség-kártya**, 2026. 09. 15.) · t19 kereslet-jelzés (19f kereshető lista · elküldve · már-jelezted · hibák) · **`/app` áthidaló — belépés-mentő** (33a desktop · 33c mobil; forrás `App-áthidaló.dc.html` — a 27a leváltva) |
| Önkormányzatoknak | `Önkormányzatoknak.dc.html` | **28a B2B oldal** — háttérrendszer 4 képessége · lakos-oldal · Balatonalmádi referencia · bevezetés · demó-kérés űrlap · **28b** demó-kérés elküldve (indexelt; **7 image-slot** valós manager-képernyőt vár) — **v1:** az űrlap helyett „Demót kérek” e-mail gomb, a 28b nincs |
| Település-oldal | `Település-oldal.dc.html` | 2b · 17f üres település |
| Hírek és programok | `Hírek és programok.dc.html` | 6a hír-listázó + hír-aloldal · **32a program-listázó** (idő-ablakos) · **32b–32d program-aloldal** (alap · gyűjtő · ismétlődő) · **32e** állapot-bannerek (v1: a „Változott” egyetlen általános szöveggel) · **32f** helyszín-variánsok (v1: online-változat nélkül) · 17g üres lista |
| Publikus bejelentés-oldal | `Bejelentés-oldal.dc.html` | 8a (2 állapot + fotó-nélküli tweak) · 17h soft-lezárás |
| Capture-flow | `Bejelentés-folyamat.dc.html` | 9a/9d · 16. kör bejelentkezve-tweak · 17i validáció · 17j beküldés-hiba |
| Fiók · Bejelentéseid | `Fiók - Bejelentéseid.dc.html` | t14 shell · 14b lista + részletek (own mód) · 18b üres fiók |
| Fejléc-spec | `Fejléc-spec.dc.html` | 14a fejléc-identitás (4 sáv) · 26a avatar-menü · 26b település-váltó popover — keresztirányú referencia |
| Fiók · Adataim | `Fiók - Adataim.dc.html` | **t21 Adataim végleges** · 14e lakcím · 15c cím-törlés · 18g fiók-törlés · 22d/22f követés · **31a** követés-megszüntetés · **31b–31d** település-kezelő (kereső · hozzáadva · várt település) — **v1:** a lakcím (14e, 15c) és a várt település (31d) nélkül |
| Fiók · Belépés | `Fiók - Belépés.dc.html` | 14f belépés (SSO + magic-link) · 18e link-hibák + SSO-hiba |
| Rendszer-állapotok | `Rendszer-állapotok.dc.html` | 17a–c skeleton-archetípusok · 17d hiba · 17e 404 · 18a fiók-skeleton |
| Reszponzív nézetek | `Reszponzív nézetek.dc.html` | **t29 reszponzív kontraktus** (transzformáció-tábla + öröklés-tábla) · t20 kulcskeretek (20a–20h) · 24f vendég-megerősítő · **29a–29o** archetípus-keretek 320/390/744/1040/1280-on |
| OG-kártyák | `Megosztás-kártyák.dc.html` | **25a/25a·2** bejelentés-OG v2 (fotó-hero + csempés fallback — a 19a leváltva) · **30a/30a·2** tartalom-OG (hír/program + település-fotós fallback) · 19d település · 19e generikus · 25b/25c/30b/30c poszt-előnézetek + spec-blokk |

Minden keret `data-screen-label`-lel jelölt; a Tweaks-kapcsolók (`segedvonalak`, `bejelentkezve`) a nézet-variánsokat adják.

## 3 · URL-térkép (K-044: alkönyvtár-architektúra, egy domain)

```
urbino.io                                     gyökér (publikus, indexelt) · `#mit-tud` = „Mi az Urbino?” horgony
├─ /app                                       app-áthidaló — belépés-mentő (33a · 33c): statikus, mindenki ugyanazt látja, UA-átirányítás nincs · QR + 2 store-badge · indexelt (canonical urbino.io/app) · a QR mindig ezt az URL-t kódolja
├─ /onkormanyzatoknak                         B2B oldal (28a, indexelt): háttérrendszer · lakos-oldal · referencia · „Demót kérek” e-mail gomb (a cím configból) — űrlap nincs
├─ /adatkezeles · /aszf · /impresszum         statikus jogi oldalak (indexelt; a mobil is ide linkel ki) — tartalom nem design-feladat; a lábléc „Kapcsolat” linkje is ide (mailto vagy /impresszum#kapcsolat)
├─ /belepes                                   SSO + magic-link (link + 6 jegyű kód, 15 perc) · elküldve · lejárt · érvénytelen · SSO-hiba · noindex
│   └─ /belepes/vissza                        SSO-callback + magic-link cél → returnUrl · noindex
├─ /fiok                                      fiók-shell (privát, noindex) → /fiok/bejelentesek
│   ├─ /fiok/bejelentesek                     saját lista (Beérkezett is)
│   │   └─ /fiok/bejelentesek/:displayId      saját részlet — a publikus ReportDetail sablon `own` módban (§6)
│   └─ /fiok/adataim                          név · e-mail · követett települések · értesítések · fiók-törlés
├─ /reports/:displayId                        a vendég-megerősítő levél linkjének alias-a → /fiok/bejelentesek/:displayId · noindex
├─ /:telepules                                település-oldal (indexelt) · `?allapot=` szűrő (noindex, canonical a szűretlenre) · `?kovetes=1` a belépés utáni automatikus csatlakozáshoz
│   ├─ /:telepules/kategoria/:kategoriaSlug   kategória-nézet (indexelt)
│   ├─ /:telepules/bejelentesek/:displayId[-slug]   publikus bejelentés-oldal (indexelt, og:image)
│   ├─ /:telepules/bejelentes                 capture-flow (2 lépés, noindex)
│   │   └─ /:telepules/bejelentes/elkuldve    visszaigazolás (noindex)
│   └─ /:telepules/hirek-es-programok         listázó (indexelt)
│       ├─ …/hirek/:id[-slug]                 hír-aloldal (indexelt)
│       └─ …/programok                        program-listázó, „Korábbi programok” lapozással (indexelt)
│           └─ …/programok/:id[-slug]         program-aloldal (indexelt)
└─ og:image (1200×630)                        generált asset, státusz-hash-verziózott URL
```

A hír- és program-oldalak **mind indexeltek**, és a sitemapben vannak. **Noindex:** `/belepes*`, `/fiok*`, `/reports/*`, a capture-útvonalak és a szűrő-paraméteres alakok.

## 4 · Láthatósági modell (kötelező invariánsok)

1. **Triage-kapu (K-050):** csak jóváhagyott bejelentés publikus. A `New` („Beérkezett”) kizárólag a bejelentőnek látszik, a saját fiókjában (ownOnly).
2. **Nyilvánosan anonim (K-053):** publikus oldalon **soha** nincs bejelentő-név; a cím házszám nélkül jelenik meg (a szerver vágja le). A felelős (staff) neve **sehol** nem jelenik meg — a polgári API nem adja. Megosztás mindig a publikus URL-t osztja.
3. **Triage előtt elutasított bejelentésnek nincs publikus oldala** — még ownOnly nézetben is a soft-lezárás nyelve érvényes (lásd 5).
4. **E-mail-horgony (SD-84):** az e-mail-cím maga a fiók; jelszó nincs. A publikus oldal nem különbözteti meg a hitelesített/hitelesítetlen bejelentőt.
5. **Always-index (K-048 v11):** publikus oldalak minden konfigurációban indexeltek, opt-out nélkül (a hír- és program-oldalak is); noindex: `/belepes*`, `/fiok*`, `/reports/*`, a capture-útvonalak és a szűrő-paraméteres alakok.

## 5 · Státusz → polgár-látható badge leképezés

A kliens a szerver **`citizenStatus`** értékéből renderel — nem backend-állapotból (a leképezést a szerver végzi).

| `citizenStatus` (szerver) | Weben (polgár felé) | Megjegyzés |
|---|---|---|
| `Received` | **Beérkezett** | csak a saját, triage előtti bejelentésen (fiók); publikusan nem létezik |
| `Approved` | **Jóváhagyva** | ettől publikus (a belső kiosztás a weben nem külön állapot) |
| `InProgress` | **Folyamatban** | |
| `Resolved` | **Megoldódott** | a lépés-szöveg a lezárás-üzenet |
| `Forwarded` | **Továbbítva** (slate) | a más szervhez továbbított bejelentés — publikus + saját; „Továbbítva: {szervezet}” + lezárás-üzenet (SD-153) |
| `Closed` | slate **„Lezárult”** + soft-close kártya | **csak a saját nézetben**; publikus oldala nincs (404) — a kártya szövegei a spec-katalógusból (`apps/polgari-web/spec/i18n/hu.json`) |

Polgár felé **soha**: „Új”, „Elutasítva”, „Lezárva”, „Kiosztva”. A chip-színek a DS status-palettából (`u-chip--status`).

## 6 · Fiók-modul — szerkezet és szabályok

- **Shell:** bal modul-sín (240 px, sticky) — Bejelentéseid · Adataim (v1); aktív modul `blue-50` háttérrel. **A sín a modul-listákon él; a bejelentés-részlet (`/fiok/bejelentesek/{id}`) sín nélküli, teljes szélességű (2026. 09. 14.).** ≤900 px: a sín vízszintes modul-chipsekké alakul (t20). **Lábléc:** a fiók-oldalak is a publikus, 4 oszlopos láblécet kapják (Urbino · Települések · Jogi · © sor) — egy lábléc-komponens az egész webben; a korábbi kompakt egysoros kivezetve (2026. 09. 14.). Kivétel a ≤900 px-es nézetek kompakt lábléce (Reszponzív nézetek).
- **Bejelentés-részlet a fiókban — egy sablon, két nézet (14b, döntés 2026. 09. 14.):** a publikus Bejelentés-oldal komponense (`ReportDetail`) `own` proppal, két route-on. Az `own` réteg: privát sáv a fejléc alatt · breadcrumb „Fiók › Bejelentéseid › {id}” · slate chip **„Saját bejelentésed”** (user-round) a kategória-chip előtt · meta **„Te jelentetted be · {dátum}”** a „Bejelentve” helyett · idővonalon a Beérkezett-lépés (lépés-szöveg csak a Megoldódott/Továbbítva lépésen; felelős-név sehol) · fotó-felirat „A fotód” · cím házszámmal · oldalsávban a támogatás-kártya helyén **„Publikus oldal”** kártya (megosztás + megnyitás + publikus URL; nem publikus bejelentésnél: a jóváhagyás utáni publikálás jegyzete) · „Vissza a bejelentéseidhez”. **Elmarad:** „Te is látsz ilyet?” CTA, „Kövesd Balatonalmádit”, közeli bejelentések, „Nem itt élsz?”. Minden más (H1 38 px, 420 px térkép-oldalsáv, „Itt tartunk” kártya, app-CTA, e-mail-jegyzet, lábléc) pixelre a publikus.
- **Sín-szám:** a Bejelentéseid aktív elemeit számolja (demó: 3). **Üres modulnál a szám eltűnik (nem 0)**; betöltés alatt skeleton-pill (18a).
- **Privát sáv** (minden fiók-oldalon, szó szerint): „A fiókod — csak te látod · a publikus oldalakon névtelen maradsz” + e-mail. A **Kilépés** nem itt él: a fejléc avatar-chipjének legördülőjéből érhető el, bárhonnan (2026. 09. 14.).
- **Település-váltó (26b, döntés 2026. 09. 15.):** a fejléc település-chipje kattintásra DS popover-menüt nyit (nem teljes képernyős választót), a chip alá **balra** zárva. Tartalma: bejelentkezve + követés esetén „Követett települések” szakasz a `TownMembership`-lista sorrendjében (az aktíven pipa; egy követésnél nincs szakasz-felirat) → elválasztó → **Összes település** (gyökéroldal) + **Nem találod a településed?** (kereslet-jelzés, §9). Kijelentkezve csak az utóbbi kettő. A választás **navigáció** a `/[település]` publikus oldalra — nincs rejtett állapot. A **fejléc viszont megjegyzi a legutóbb nézett települést** azokon az oldalakon, ahol az URL nem hordozza: `/belepes`, `/belepes/vissza`, `/fiok/*` (ezt mutatja a 14b · 14f · 21a–21c keret); ha nincs ilyen, gyökér-fejléc jön. *(Spec-oldali igazítás, 2026-10-05 — spec 20 4.5c, `apps/polgari-web/spec_kod_elteresek.md` #218; a korábbi „nincs »utolsó település« memória” mondat helyére.)* Viselkedés = avatar-menü (kattintás nyit, Esc/kívülre zár, `aria-expanded` + surface-alt, 180 ms). A település-vonalon (Település-oldal · Hírek · Bejelentés-oldal) **és az azt öröklő oldalakon** (belépés, Fiók); a Gyökéren, az `/app`-on és a jogi oldalakon nincs váltó. ≤1900 px → ≤900 px: teljes szélességű lap a fejléc alatt (20a-minta).
- **Avatar-menü (26a):** a chip kattintásra nyit, DS popover-menu a chip alatt jobbra zárva. Tartalma **mindenhol azonos** (publikus oldal és fiók-shell): fejléc teljes név + e-mail (nem kattintható; név nélkül csak e-mail) → Bejelentéseid · Adataim (sín-sorrend, sín-számmal) → elválasztó → **Kilépés** (egyetlen helye; nincs megerősítés; utána az aktuális oldal publikus nézete, fiók-oldalról a Gyökéroldal). Esc / kívülre kattintás / választás zár; nyitva `aria-expanded` + surface-alt háttér, chevron fordul. ≤900 px: csak avatar, a menü teljes szélességű lap a fejléc alatt. Ikonok: inbox · user-round · log-out.
- **Üdvözlés:** „Jó napot, Gergő! 👋” — az egyetlen felkiáltójeles hely; **név nélkül: „Jó napot! 👋”** (21c).
- **Avatar-chip név nélkül (21c):** csak avatar + chevron, keresztnév-felirat nincs; a monogram az **e-mail első betűje nagybetűvel** (`kovacs.gergo@…` → „K”), színe az e-mail hash-éből (`u-avatar--c1…c6`). A gomb `aria-label`-je az e-mail-cím. Név megadása után a chip a keresztnév kezdőbetűjére és feliratára vált (14b). Az avatar-menü fejlécében név nélkül csak az e-mail áll (26a).
- **Bejelentéseid:** lista + részletek a publikus oldal layout-nyelvén (14b); a Beérkezett is látszik; felelős-név és lépésenkénti jegyzet sehol (a polgári API nem adja).
- **Adataim (v1):** sorrend Név → E-mail (nem módosítható) → Követett települések → Értesítések → fiók-törlés (a jogi linkek a láblécben).
  - **Név** (21a/21b): vezetéknév + keresztnév, önkéntes; az üdvözléshez kell, publikusan soha nem jelenik meg. Mentés csak változásnál aktív; mentés után toast. Név nélküli fiók (21c): hívó kártya, a fejléc-chip monogramja az e-mailből.
  - **E-mail:** a fiók horgonya, „Megerősítve” jelzéssel — **nem módosítható** (MVP-döntés 2026. 07. 14.).
  - **Követett települések (22. kör, v1: app-híd):** a mobil `TownMembership` webes vetülete — **egy lista, két felület** (app ↔ web szinkron, fiók-szintű). Tartalma a weben: a település a fiókod településeihez kerül; hírei és programjai az Urbino-appban, értesítéssel érkeznek — e-mailes hír-, program- vagy kérdőív-levél **nincs**. Keletkezés: explicit („Követem” a település-oldal hero-jában · Adataim-hozzáadás a **31b keresővel**: a gomb helyén nyílik, gépelésre szűkül, találat-típusok „már követed” · aktív → „Követem” · nem elérhető → „Szólj, ha indul” (egyszerű kereslet-jelzés, §9); hozzáadás után az új sor blue-50 kiemeléssel, toast nélkül — 31c) **és** implicit (bejelentés beküldése). Kijelentkezve: e-mail-mezős kapu a hero-ban — **belépési linket** küld (a szokásos belépés, 15 perc); a visszatérés (`?kovetes=1`) után a csatlakozás automatikus, külön követés-mód nincs (22a–22c). App nélküli (CaptureOnly) településen a követés-felület nem jelenik meg. A megszüntetés nem destruktív, bármikor újra követhető — de **megerősítő dialógussal** (31a): `u-dialog--confirm`, nem danger; szövege: mi szűnik meg (a település a fiókod települései közül — az appban is), mi marad (a bejelentéseid), újra követhető; elsődleges gomb „Követés megszüntetése”, Mégsem. Utána a sor eltűnik, toast nélkül. Indok: a link halk, egy kattintás, a településnek követőt ér.
  - **Értesítések:** **egyetlen kapcsoló** — „a bejelentéseid változásairól” —, amely a **fiók-szintű** beállítás: az appra és az e-mailre egyaránt hat (külön webes e-mail-kapcsoló nincs). A fiókban minden változás enélkül is látszik. Nincs településenkénti finomhangolás (a mobilon sem, K-047). *(A 2026. 09. 14-i csatorna-döntést — a web csak az e-mail-csatornát kezeli, két kapcsolóval — a v1 felülírja.)*
  - **Jogi linkek:** nem a kártyában — a lábléc jogi sora fedi: Adatkezelés · Felhasználási feltételek · Impresszum (kivezetve a kártyából 2026. 09. 14.).
  - **Fiók törlése** (18g): dialógus következmény-listával — a publikus bejelentések maradnak (név nélkül), újraregisztrálásnál **nem kapcsolódnak vissza**; törlés után kijelentkezett pillanat.
- **Demó-kérés (B2B, 28a):** **v1:** az űrlap helyén egy **„Demót kérek” e-mail gomb** (a cím configból). A helyben váltó visszaigazolás (28b), a visszaigazoló levél és az űrlap bot-védelme a v1-ben nincs.
- **Belépés (14f + 18e):** Google/Apple SSO + e-mail magic-link (link + 6 jegyű kód — a kód csak itt, a sima belépésnél él). Link-életciklus: **15 perc** · egyszer használható · mindig a legutóbb kért él; felhasznált/érvénytelen link egy közös képernyő; SSO-hiba inline a belépés-oldalon.

## 7 · K-052-felülírás (szerzői termék-döntés)

A kanonikus K-052 „vékony követő-oldalt” ír elő (engagement nélkül, a webappá hízás ellen). **A v1-ben a Fiók = Bejelentéseid + Adataim, plusz a település-követés app-hídként** — szerzői termék-döntés (2026. 09. 22.). **Kérdőív nincs** (se modul, se levél, se lakcím-kapu). A szellem marad: a **publikus** oldalakon nincs engagement-akció (a „támogatom” explicit app-CTA, K-023), és **nincs bejelentés-szintű „Értesíts, ha változik” e-mail-capture** (döntés: 2026. 07. 14. — elvetve; a megosztott link élő oldal, ez elég). **Elhatárolás:** a település-oldali „Követem” nem bejelentés-szintű feliratkozás, hanem **fiók-szintű tagság** (TownMembership) — tartalma az app-híd: a település a fiókod településeihez kerül, hírei és programjai az appban érkeznek; e-mailes levél nincs. A fiók-értesítés a saját bejelentésekhez kötődik (egy kapcsoló, §6).

## 8 · Capture-flow (a mobil minőség-magja, K-049)

- **2 lépés:** 1/2 helyszín (kötelező lokáció, térkép + cím-kereső) → 2/2 kategória (2×3 rács, funkcionális emoji) + **rövid összefoglaló** (kötelező, ez lesz a cím; max 200) + **bővebb leírás** (opcionális, max 4000) + fotó (opcionális, ösztönzött) + identitás.
- **Identitás a végén** (K-045, 14f-hez igazítva): SSO vagy e-mail; „ha még nincs fiókod, a megerősítéssel létrejön — a weben és az appban ugyanaz a fiók”. Bejelentkezve: összecsukott összefoglaló + „Nem te vagy?”.
- **Visszaigazolás:** **belépve** köszönet + fiók-kártya (a saját részletre; app-CTA csak ha a településnek van appja). **Vendégnél** a megerősítés-kérés áll elöl („Már csak egy lépés…” — a bejelentés csak a megerősítés után jut a településhez, SD-124); a megerősítés **csak a levél linkjével** történik (6 jegyű kód nincs — SD-160). A link megerősíti a címet ÉS a bejelentést a fiókban nyitja (verify→Tag, K-045/K-051; `/reports/:displayId` → `/fiok/bejelentesek/:displayId`).
- **Validáció (17i, t15-kánon):** inline piros hairline + rövid üzenet, görgetés az első hibára, összegző jegyzet a gombnál — toast hibára soha.
- **Beküldés-hiba (17j):** „minden adatod megvan” kártya a gomb fölött — az űrlap-tartalom nem vész el.
- **Mobilon teljes értékű** (t20 döntés): app-terelés csak a meglévő halk pontokon; rögzített alsó CTA-sáv.

## 9 · Kereslet-jelzés (CityInterest, VP-14/K-054)

A gyökéroldal 4a kártyájában: célváros **kereshető listából** (19f, „nem találom” ággal) + e-mail → értékesítési lead. **Bejelentkezett párja (v1, egyszerű változat):** az Adataim-kereső nem elérhető találatán „Szólj, ha indul” — e-mail-mező nélkül, a **fiók e-mailjével** küldött egyszerű kereslet-jelzés, **helyben visszaigazolva**. A „Várt települések” sor, a „Visszavonom” és az induláskori automatikus követés **nincs** (a 31d keret a v1-ből kimarad). **Nincs double opt-in** — az egyetlen levél az indulás-értesítő, benne leiratkozó-link. Számláló csak a visszaigazoláson, ≥5 jelzéstől. Már-jelezted eset: kék tény-kártya, nem hiba (19i).

## 10 · OG/megosztás-kártyák (spec: `Megosztás-kártyák.dc.html`)

1200×630. **Fallback-lánc — bejelentés:** saját fotó (25a fotó-hero) → kategória-csempe azonos geometriával (25a·2). **Hír és program:** saját borítófotó (30a) → a település borítófotója (30a·2). **Település:** időtálló kártya, stat nélkül (19d). **Minden más útvonal:** generikus (19e). Badge csak polgár-látható néven; bejelentő-név/házszám **soha** (K-053). Az `og:image` URL státusz-hash-verziózott (cache-bust státuszváltásnál).

## 11 · Rendszer-állapot minták (Rendszer-állapotok.dc.html)

- **Skeleton-recept (17a–c, 18a):** ami a route-ból tudható, azonnal kirajzolódik (fejléc, cím-szintek, sín); csak az adat-mezők skeletonok. Nincs középső spinner.
- **Betöltési hiba (17d):** „egy tény, egy kiút” — rövid tény + Újra gomb; „Hoppá” és bocsánatkérő emoji tilos.
- **404 (17e):** kontextus-függő kiutak (település-oldal / gyökér).
- **Üres állapotok:** oldal-fájlokban (17f település · 17g hírlista · 18b fiók) — hívó, nem hibáztató.

## 12 · Reszponzív kontraktus (t29 — normatív)

**Ez a fejezet kötött.** A `Reszponzív nézetek.dc.html` t29 körének transzformáció-táblája a normatív forrás; a keretek illusztrálnak. Ütközésnél a tábla dönt. A lépcső-értékek (**1200 · 900 · 480 · 360**) kötöttek; hogy media-query vagy container-query adja ki őket, az implementációs szabadság.

### 12.1 · A négy lépcső

| Sáv | Viselkedés |
|---|---|
| **≥1200** — kanonikus | a 82 desktop keret · 1120 px container, középre zárva · teljes fejléc. Alsó szél: 1280 px (1120 + 2×80) |
| **1199–901** — folyékony | container 100% − 2×40 px · oldalsávok keskenyednek (publikus részlet 420→340 · capture 400→340 · hír-aloldal 360→320 · fiók-részlet 300) · fejléc változatlan, a menü-gap 24→16 px |
| **≤900** — tablet | **hamburger-fejléc** (20a: logó + Bejelentek + (avatar) + menü — cselekvés elöl, a navigáció és a település-váltó a menüben) · egy folyam, az oldalsáv-tartalom a kontextusához sorolódik · **fiók-sín → vízszintes modul-chips** · rácsok 2 oszlopon · 24 px margó · popover → alsó lap |
| **≤480** — mobil | 16 px margó (**≤360: 12 px**) · rácsok 1 oszlop · capture rögzített alsó CTA-sávval · **44 px** érintés-célok · input **16 px** betűméret (iOS-zoom ellen) · kategória-rács 2×3 marad, 56 px cellák · dialógus → alsó lap, toast alul középre |

### 12.2 · Organizmus-transzformációk (a ≤900 és ≤480 lépés)

| Organizmus | ≤900 | ≤480 |
|---|---|---|
| Publikus fejléc | 56 px hamburger-sáv | ugyanaz; 320-on rövid CTA-címke |
| Fókusz-fejléc (capture) | a lépésjelző önálló sávba kerül | ugyanaz, a név elmarad, az avatar marad |
| Település-váltó · avatar-menü | popover → **alsó lap**, 44 px sorok | ugyanaz; a Kilépés a lap alján, elválasztva |
| Oldalsáv | **megszűnik** — térkép az „Itt tartunk” alá, app/megosztás a folyam végére | ugyanaz |
| Kártya-rács | 2 oszlop | 1 oszlop |
| Szűrő-chipsor | tördel | **vízszintesen görgethető sor**, jobb szélen halványuló maszk |
| Kategória-választó | 3×2 | **2×3, 56 px cellák** — nem válik listává |
| Fiók modul-sín | **vízszintes chips** (44 px, görgethető) | ugyanaz — a szám-szabályok változatlanok |
| Privát sáv | változatlan | **e-mail elmarad**, a kánon-szöveg tördel, a Kilépés a sor végén |
| Térkép | folyamban, teljes szélesség, 220 px | **kompakt előnézet 160 px** + „Megnyitom a térképen” |
| Idővonal | változatlan | változatlan geometria, a dátum a cím alá |
| Űrlap-kártya | teljes szélesség | **egy hasáb**, 48 px mezők, 100% gomb |
| Dialógus | változatlan | **alsó lap**: 16 px felső radius, gombok egymás alatt (elsődleges felül), 48 px |
| Toast | változatlan | alul középre, 16 px margó; rögzített sáv fölé ül |
| Rögzített CTA-sáv | nincs | **van** a capture-lépéseken (safe-area padding, a folyam alján 88 px hely) |
| Morzsa | teljes útvonal | **egy szint visszafelé** |
| Táblázat | változatlan | **vízszintesen görgethető**, első oszlop rögzítve |
| Hero (település) | 240 px, pillek a cím alá | **200 px**, cím 26 px, pillek 2×2 |
| Lábléc | 2 hasáb | 1 hasáb, jogi linkek tördelt sorban |

### 12.3 · Amit egyetlen lépcső sem változtat meg

A badge-nyelv és -szín · a privát sáv kánon-szövege · a sín-szám szabályai · az `ALM-1051` formátum · a kártya-hairline · 44 px érintés-minimum · 16 px input-betűméret · a capture teljes értéke mobilon · a kategória-választó rács-jellege · az OG-kártyák fix 1200×630 geometriája.

### 12.4 · Archetípus-öröklés (12 osztály)

Minden desktop keret egy layout-archetípusba tartozik; a mobil viselkedést az archetípus kerete mutatja. A teljes leképezés (melyik keret melyik archetípust örökli, kivételekkel) a t29 **öröklés-táblájában** és a `00 Áttekintés` 5. szakaszában áll.

| # | Archetípus | Mobil-keret |
|---|---|---|
| A1 | Publikus hero-oldal | 20d · 29e |
| A2 | Listázó | 20e · 29b |
| A3 | Cikk-aloldal | 29a · 29c |
| A4 | Bejelentés-részlet (publikus + own) | 20f · 29i |
| A5 | Capture-folyam | 20g · 24f · 29o |
| A6 | Fiók-shell lista | 20h |
| A7 | Kérdőív-kitöltés *(a v1-ből kimarad)* | 29g |
| A8 | Űrlap-modul | 29h |
| A9 | Dialógus → alsó lap | 29h |
| A10 | Egy-kártyás oldal (belépés · állapot) | 29f · 29j |
| A11 | Marketing-oldal | 20c · 29k · 29n |
| A12 | Fejléc-menük | 20a · 29l |

A `/app` áthidaló (33a · 33c) mobilon is oldal — UA-alapú átirányítás **nincs** (2026. 09. 22., spec 10 v2.2 — SF-149).

## 13 · Szókincs- és formátum-kánon (kötelező)

- **Tegezés mindenhol**; „bejelentés” (polgár felé „ügy” soha); felkiáltójel csak az üdvözlésben; „Hoppá”/emoji-állapotok tilosak (emoji csak: kategóriák + üdvözlés 👋).
- **Dátum:** `2026. 07. 13.` · **idő:** 24 h · **azonosító:** mono `ALM-1051` (displayPrefix-ticketNumber, `#` és évszám nélkül — SD-16).
- Soft-lezárás szövegei: a spec-katalógusból (`apps/polgari-web/spec/i18n/hu.json`) — a mobil készletét követik; webes átfogalmazás tilos.
- DS-szabályok: no gradient · 1 px hairline · Lucide 1.5 px stroke · animáció 120/180/240 ms, bounce nélkül.
- **Keret-id névtér (2026. 09. 16.):** a `{kör}{betű}` id a projektben **egyedi** — egy id egy keretet jelöl, fájltól függetlenül. A 29. körben feloldott ütközések: Megosztás tartalom-OG `26a–26c` → **`30a–30c`** · Adataim követés-kezelő → **`31a–31d`** · program-kör `27a–27f` → **`32a–32f`** (a Gyökér `27a` = `/app` és a Fejléc-spec `26a`/`26b` változatlan).

## 14 · Demó-fixture-kánon (mobil-szinkron)

Forrás: a mobilapp `lib.jsx` készlete. **Bejelentések:** ALM-1030 (kidőlt ág, publikus) · ALM-1039 (web-only soft-lezárás, 71-es főút) · ALM-1042 · ALM-1047 · ALM-1051 (csőtörés — fiók-részletek) · ALM-1058 · ALM-1060 (capture-sztori, Beérkezett). **Horgonyok:** bejelentések CASE_NOW `2026. 05. 10.` · hírek/programok DEMO_NOW `2026. 06. 11.` · web-only fiók-modulok `2026. 07. 13.` **Demó-user:** Kovács Gergő (`kovacs.gergo@gmail.com`, avatar „G”).

## 15 · API-elvárások

A végpontok és a DTO-k a spec 3. szakaszaiban élnek (`apps/polgari-web/spec/10_publikus_oldalak_es_seo.md` és `20_webes_capture_es_koveto_oldal.md`).

## 16 · Döntésnapló (web-MVP)

| Dátum | Döntés |
|---|---|
| 2026. 07. 13. | Beküldött kérdőív-válasz nem módosítható; cím-törlésnél a válaszok név/cím nélkül összesítve maradnak (15b/15c) *(a v1-ből kimarad)* |
| 2026. 07. 14. | E-mail-módosítás **nem MVP** — az e-mail a fiók horgonya (18. kör) |
| 2026. 07. 14. | Fiók-törlés: publikus bejelentések + összesített válaszok maradnak; újraregisztrálásnál nem kapcsolódnak vissza (18g) *(a kérdőív-válaszok része a v1-ből kimarad)* |
| 2026. 07. 14. | Azonosító-formátum `ALM-…` (mobil-szinkron, SD-16); soft-lezárás chipje „Lezárult” |
| 2026. 07. 14. | Kereslet-jelzés: nincs double opt-in; számláló csak visszaigazoláson (≥5) (t19) |
| 2026. 09. 15. | Település-váltó: halk popover-menü (26b) — nem teljes képernyős választó; követett települések + Összes település + kereslet-jelzés |
| 2026. 07. 14. | Mobil fejléc: 20a — cselekvés elöl (t20) |
| 2026. 07. 14. | Publikus „Értesíts, ha változik” e-mail-capture **elvetve** — a megosztott link élő oldal (6. fázis) |
| 2026. 07. 14. | Adataim végleges: név (önkéntes, üdvözléshez) + e-mail-értesítés-kapcsolók + jogi linkek (t21, mobil 46-egyeztetés) |
| 2026. 07. 14. | Követett települések a weben (22. kör): fiók-szintű tagság, app ↔ web szinkron · tartalma kérdőív-kör + kérdőív-levél · „Követem” a település-hero-ban, kijelentkezve e-mail-mezős kapuval (fiók a megerősítő linkkel) · lakcím-kapu változatlan *(a kérdőív- és lakcím-rész a v1-ből kimarad — l. 2026. 09. 22.)* |
| 2026. 09. 22. | Spec-oldali igazítás (szerzői termék-döntés): Fiók v1 = Bejelentéseid · Adataim · kérdőív-modul, lakcím, kérdőív-levél nincs · értesítés egy kapcsoló (app + e-mail) · követés app-hídként (kijelentkezve belépési link + automatikus csatlakozás; CaptureOnly-n nincs) · fiókos „Szólj, ha indul” egyszerű jelzés · vendég-megerősítés csak link (SD-160) · B2B: „Demót kérek” e-mail gomb · online-program és bontott „Változott”-szöveg nincs · felelős-név és Jóváhagyva/Folyamatban lépés-jegyzet sehol |
