# Theater Browse

## Цел

Един каталог за намиране на заглавия и хора с минимална навигационна дълбочина. Browse е общият вход „Виж всички“ от Theater Home. Detailed View обяснява заглавието, а Player го възпроизвежда. В Browse няма нови вътрешни нива „Виж всички“.

## За кого

Абонати на NOISY, които търсят филм, сериал или човек. Потребители без Premium Films разглеждат добавката в отделен каталог. След покупка достъпното съдържание се обединява. Екранът трябва да работи с мишка, клавиатура, телефон и TV дистанционно.

## Зона и екран

Зона: Theater. Екран: Browse. Папка: `theatre`. Основен адрес: `/theatre/?v=a`.

## Статус

чернова

Изискванията са извлечени от `noisy_theatre_browse_product_uiux_brief.pdf` (август 2026, раздели 1-15), предоставен в `/Users/kostadinpavlov/Downloads/`. Името Theater и цената на Premium Films следват уточненията от 30.10.2026. Примерните цени, заглавия и оценки в PDF изображенията не са продуктови факти.

## Поток

Home → Browse с предварително зададен контекст → Detailed View → Player. Play върху достъпна карта може да отвори Player директно. Целта е максимум две нива от Home до Player; отклоненията се описват изрично.

Един екран поддържа All, Movies, Series и Actors & Creators. All смесва филми и сериали. Хората се откриват чрез търсене и Actors & Creators. Смяната на категория не създава ново навигационно ниво. Глобалната навигация остава видима с активна зона Theater.

Преди покупка основният каталог съдържа включеното в абонамента. Premium Films е отделен обхват на каталога, а не жанр, филтър или четвърта категория. Заключени Premium заглавия не се смесват с основните резултати. Premium картата има дискретен маркер и действие за добавката вместо Play. Символът отваря количка с избрана Premium Films. Останалата част от картата отваря Detailed View с действие за добавката.

Premium Films струва **7,60 € на месец**. Това е отделна лицензирана библиотека (HBO, Max, Warner Bros., DC). Имената описват библиотеката и не разрешават ползване на чужди лога. След успешна покупка обхватът и рекламният блок изчезват като отделни предложения. Заглавията и хората се сливат с достъпния каталог, търсенето и съответните Home редове. Потребителят се връща към същото заглавие и контекст. Реалното плащане е извън обхвата на симулатора.

### Контекст и контроли

Състоянието съдържа категория, заявка, филтри, подредба, права за достъп, източник на входа, ред на резултатите и позиция/курсор. Detailed View го запазва. Стрелките ←/→ следват текущите филтрирани и подредени резултати. Затварянето връща точната позиция. Връщането от Player пази последния контекст, когато сценарият позволява.

Филтрите поддържат множествен избор. На desktop резултатите се обновяват веднага, без Apply. Избраните стойности са видими като премахваеми чипове с „Изчисти всички“. Подредбата е едно падащо меню, съобразено с категорията. Броят на резултатите е видим. Списъкът се зарежда постепенно или е виртуализиран, без номерирани страници.

| Състояние | Търсене и филтри | Подредба |
| --- | --- | --- |
| All | Заглавия, актьори и създатели; жанр, година, Tomatometer, Audience Score, достъп и All Filters | Едно меню; точният списък предстои да се потвърди |
| Movies | Заглавие, актьор, режисьор, създател; жанр, година, оценки, продължителност и достъп | Top Rated изисква минимален брой рецензии; прагът е отворен |
| Series | Заглавие, актьори, създатели; жанр, година, оценки, брой сезони, текущ/завършен и достъп | Top Rated, Most Popular, Recently Updated, Newest Release, A-Z, Z-A |
| Actors & Creators | Хора и свързани заглавия; роля, награди, брой заглавия, жанрова връзка, Tomatometer и All Filters | A-Z, Most Popular, Most Titles, Award Winners |

All Filters събира по-рядко ползвани полета. Награди, държава, език и дата на добавяне са кандидати за Movies. Финалните списъци по категории са отворени. В Movies търсенето по човек запазва филмови резултати. В Series запазва сериали. При хора търсенето по заглавие може да върне участващите хора. People картата показва инициали вместо лице, име, роля, брой достъпни заглавия и 2-4 познати заглавия със собствени налични постери. Отваря People Detailed View без междинен каталог. Преди покупка хора само с Premium заглавия са видими в Premium обхвата.

### Входове от Home

| Вход | Категория и предварително зададен контекст |
| --- | --- |
| For You | All, персонализирани резултати и подредба |
| Top Rated Movies | Movies, Top Rated и минимален брой рецензии |
| Top Rated Series | Series, Top Rated и отделно валидиран праг за сериали |
| New Movies This Week | Movies, добавени през последните 7 дни, Recently Added |
| New Episodes This Week | Series, нов/обновен епизод през последните 7 дни, Recently Updated |
| Coming Soon | All, предстояща наличност |
| Watch History | All, гледани, Last Watched |
| Continue Watching | All, продължаване/запазено за по-късно според уточненията за Home |
| Premium Films | Отделен Premium обхват преди покупка |
| Movies / Series / Actors & Creators | Съответната категория без допълнителен филтър |

Предварително зададените филтри се показват като чипове, когато обясняват резултатите. Премахването им разширява каталога без нова навигация. Home има отделен Premium блок с добавяне и разглеждане. Формата му, банер или ред с подложка, остава отворена.

### Действия, фокус и връщане

| Компонент | Мишка и клавиатура | TV дистанционно | Назад |
| --- | --- | --- | --- |
| Достъпен филм/сериал | Hover/focus показва Play; Play отваря Player; останалата карта отваря подробности | Видим фокус; OK отваря подробности с фокус върху Play; OK върху Play стартира | Връща картата и контекста |
| Continue Watching / Watch History | Цялата карта стартира Player; отделно контекстно меню за премахване/рестарт | OK стартира; отделно фокусируемо меню за контекстните действия | Връща същия ред |
| Входна категория | Click/Enter сменя състоянието; видим избран и фокусиран вид | Стрелки местят фокуса; OK избира | Връща предишния контекст |
| Човек | Click/Enter отваря People Detailed View; няма Play | OK отваря подробности | Връща картата с човек |
| Premium без права | Символът отваря количката; останалата карта отваря подробности | OK отваря подробности с фокус върху добавката; OK върху действието отваря количката | Връща заглавието без загуба на контекст |
| Premium с права | Същото поведение като достъпно заглавие | Същото поведение като достъпно заглавие | Връща контекста |
| Филтри и подредба | Tab достига контролите; Enter отваря; Escape затваря и връща фокуса | Стрелки местят фокуса; OK избира; Back затваря панела | Връща контролата, без да губи избраното |

TV поведението тук е предложен договор за проверка с екипа. Контекстните действия са отделно фокусируеми, без изискване за hover. На телефон всички действия се достигат с докосване. Подробностите затварят обратно към задействащата карта.

## Данни и източник

- Прототипът е симулатор с `demo`, `today`, `future` и `edge`. Р3: реалните данни засега са снимка; истинското ЕПГ не е свързано.
- Р1 е отворена хипотеза: ЕПГ → запис → каталог. Да се потвърди с Жорката. Наличието на ЕПГ запис не доказва наличен запис за гледане или лицензни права.
- Каталожните данни включват идентификатор, тип, заглавие, описание, наличност, край на правата, постер, оценки, жанрове, година, хора и връзки към записи. Сериалите имат сезони, епизоди, статус и дата на обновяване. При запис се пазят планиран и действителен край, ако са известни.
- Източниците на метаданни и рейтинги, договорът за права, обновяването след покупка и аналитичните събития предстои да се уточнят. Не попълвай липсващи рейтинги или времена с измислени стойности.
- Изображенията са собствени активи на NOISY от `public/media` според `SOURCES.md`. При липса използвай текстово/цветно заместване. Без AI изображения, чужди лога и чужд UI. Лица на хора само с инициали. Не за production.

## Случаи

Линковете са предложен договор за симулатора. `v=a`, `data=edge` и `ent=1` идват от заданието. Допълнителните параметри по-долу описват желаните състояния и изискват свързване и проверка от работника по прототипа. Те не са отчет за налична функционалност. Тази задача не променя `prototype/lib/screens.ts`.

| № | Ситуация | Какво вижда потребителят | Линк в прототипа | Покритие |
| --- | --- | --- | --- | --- |
| С1 | Основен All каталог | Смесени филми и сериали, три неизбрани входни карти, търсене, филтри, едно меню за подредба и брой резултати | [All](/theatre/?v=a&data=demo) | Има вход в пилота; приемането предстои |
| С2 | Movies и търсене по човек | Само филми със съответните контроли; търсенето не сменя категорията | [Movies](/theatre/?v=a&cat=movies&q=Нолан) | Има вход в пилота; приемането предстои |
| С3 | Series | Сериали, сезони, текущ/завършен статус и подходяща подредба | [Series](/theatre/?v=a&cat=series) | Има вход в пилота; приемането предстои |
| С4 | Actors & Creators | Хора с инициали и достъпни заглавия; подробности без Play и без нов каталог | [Хора](/theatre/?v=a&cat=people) | Има вход в пилота; приемането предстои |
| С5 | Вход от Home с филтър | Съответна категория, филтър като чип и възпроизводима подредба | [Нови филми](/theatre/?v=a&cat=movies&added=7&sort=added) | Има вход в пилота; приемането предстои |
| С6 | Множествен избор и изчистване | Незабавно обновени резултати; премахваеми чипове и „Изчисти всички“ | [Филтри](/theatre/?v=a&g=Драма,Комедия) | Има вход в пилота; приемането предстои |
| С7 | Търсене без резултат | Заявката остава видима; обяснение и действие за промяна/изчистване | [Без съвпадение](/theatre/?v=a&q=няма-такова-заглавие) | Има вход в пилота; приемането предстои |
| С8 | Филтри с 0 резултата | Избраните филтри остават; премахване на отделен чип или всички | [Нулев резултат](/theatre/?v=a&g=Несъществуващ) | Има вход в пилота; приемането предстои |
| С9 | Празен каталог | Обяснение за липсващо съдържание, различимо от грешка и от 0 съвпадения | Предстои реализация | Няма отделно състояние в пилота |
| С10 | Бавно начално зареждане и зареждане на още | Видим индикатор; няма преждевременно съобщение за празен каталог или скок на позицията | [Бавно зареждане](/theatre/?v=a&data=edge) | Началното забавяне е симулирано; проверка на догрузването предстои |
| С11 | Без мрежа | Съобщение и повторен опит; наличните филтри и контекст се запазват | Предстои реализация | Няма отделно състояние в пилота |
| С12 | Сървърна грешка | Обяснение и повторен опит; грешката не се представя като празни резултати | Предстои реализация | Няма отделно състояние в пилота |
| С13 | Мач без известен край | „Краят не е обявен“; няма измислена продължителност или обещание за готов запис | [Мач без край](/theatre/?v=c&data=edge) | Има вход в пилота; приемането предстои |
| С14 | Запис без метаданни | Наличните идентификатор/канал/час и ясно означени липси; картата не се чупи | [Без метаданни](/theatre/?v=a&data=edge&title=nometa) | Има вход в пилота; приемането предстои |
| С15 | Запис изтича след 2 часа | Ясно оставащо време, без обещание за достъп след изтичането | [Изтичащ запис](/theatre/?v=a&data=edge&title=mamnik) | Има вход в пилота; приемането предстои |
| С16 | Права изтичат в отворен екран | Достъпът се проверява отново; обяснение и валидно следващо действие вместо неработещ Play | Предстои реализация | Няма отделна симулация на изтичане в отворен екран |
| С17 | Дълго заглавие | Четим текст и достъпно пълно заглавие в подробностите; запазена подредба | [Дълго заглавие](/theatre/?v=a&data=edge&title=long-title) | Има вход в пилота; приемането предстои |
| С18 | Липсващи постери и оценки | Собствено текстово/цветно заместване и „Няма оценка“; няма измислен рейтинг | [Липсващи активи](/theatre/?v=a&data=edge&title=otkradnat-zhivot) | Има вход в пилота; приемането предстои |
| С19 | Detailed View и ←/→ | Навигация само по текущите филтрирани/подредени резултати; краищата са означени; затварянето връща позицията | [Подробности](/theatre/?v=a&title=mamnik) | Има вход в пилота; приемането предстои |
| С20 | Play и връщане от Player | Play стартира директно; click извън Play отваря подробности; назад пази контекста, когато е приложимо | [Възпроизвеждане](/theatre/?v=a&play=mamnik) | Има вход в пилота; приемането предстои |
| С21 | Continue Watching / Watch History | Цялата карта стартира Player; контекстно меню за премахване/рестарт според състоянието | [Продължаване](/theatre/?v=a&cont=1) | Има филтър Продължи; контекстното меню предстои |
| С22 | Premium Films без права | Отделен обхват с цена 7,60 € на месец, категории, търсене, филтри и резултати; няма Play върху недостъпна карта | [Premium](/theatre/?v=a&scope=premium) | Има вход в пилота; приемането предстои |
| С23 | Количка от Premium символ или CTA | Premium Films е предварително избрана; запазени са конкретното заглавие и контекстът за връщане | [Количка](/theatre/?v=a&scope=premium&cart=dune-2) | Има вход в пилота; приемането предстои |
| С24 | Купена Premium Films | Добавката е активна, съдържанието е обединено, няма отделни upsell повърхности; връщане към избраното заглавие | [След покупка](/theatre/?v=a&ent=1&title=dune-2) | Има вход в пилота; приемането предстои |
| С25 | Отказ или неуспешна покупка | Няма придобити права; връщане към заглавието със запазен Premium контекст | [Отказ](/theatre/?v=a&scope=premium&cart=dune-2) | Има затваряне на количката; платежна грешка не е симулирана |
| С26 | Забавено обновяване на права | Междинно състояние и повторна проверка; нито фалшив успех, нито повторно искане за покупка | Предстои реализация | Няма симулация на забавени права |
| С27 | Телефон на 390 px | Достижими контроли и действия без hover; четими карти и подробности; връщане на позицията | [Телефон](/theatre/?v=a&data=edge) | Има вход в пилота; приемането предстои |
| С28 | Клавиатура и TV дистанционно | Видим последователен фокус, достъпни основни/контекстни действия и връщане към задействащия елемент | [Фокус](/theatre/?v=a) | Клавиатурата подлежи на проверка; TV дистанционно не е проверено |
| С29 | Дълъг списък | Постепенно зареждане без номерирани страници; запазени ред и позиция след подробности | [Дълъг списък](/theatre/?v=a) | Списъкът е кратък; дълъг набор не е симулиран |
| С30 | Предстоящо съдържание | Ясна бъдеща наличност, без Play преди потвърден достъп | [Предстоящо](/theatre/?v=a&data=future&soon=1) | Има вход в пилота; приемането предстои |
| С31 | Снимка на текущите данни | Ясно тестово състояние; не се представя като връзка с живо ЕПГ | [Текущи данни](/theatre/?v=a&data=today) | Има вход в пилота; приемането предстои |

## Критерии за приемане

- С1-С4: един шаблон поддържа четирите състояния. Глобалната навигация маркира Theater. В Browse няма ново ниво „Виж всички“.
- С5: всеки вход от таблицата за Home възстановява зададената категория, филтри и подредба. Активните предварително зададени филтри са видими.
- С6-С9: множественият избор обновява веднага на desktop. Чиповете и изчистването работят. Празен каталог, търсене без съвпадение и филтри с 0 резултата са различими.
- С10-С12: зареждане, мрежова и сървърна грешка имат различни видими състояния. Повторният опит пази заявката и филтрите.
- С13-С18: липси, изтичане и дълги текстове не чупят картите на 390 и 1440 px. Няма измислени метаданни, рейтинги или права.
- С19-С21 и С29: подробностите пазят точните резултати, подредба и позиция. Стрелките не излизат в глобалния каталог. Директното пускане и изключенията за историята са съобразени с матрицата.
- С22-С26: преди покупка Premium е отделен обхват. Символът и CTA отварят количка с избрана добавка за 7,60 € месечно. След успех съдържанието се слива и upsell изчезва. Отказът не дава права. Връщането пази заглавието и контекста.
- С27-С28: действията са достъпни с докосване, клавиатура и дистанционно. Фокусът се възстановява. Преди предаване има браузърна проверка на 390 и 1440 px.
- С30-С31: режимите future и today не внушават достъп до живо ЕПГ или готов production продукт.
- Всеки случай има проверен линк в прототипа преди статус „готова“. Предложените линкове и TV договорът остават непотвърдени до реалната проверка.

## Отворени въпроси

- Р1: Жорката да потвърди дали каталогът идва от ТВ записи и как се обработват събития без край. С13-С16 остават хипотетични гранични случаи до потвърждение.
- PM: точни източници и схема на каталога, права, рейтинги и минимални прагове за Top Rated Movies и Series.
- PM: финални списъци за All Filters, подредба за All и Movies, правила за липсващи оценки при филтриране.
- PM: поведение на търсенето по заглавия/хора, ранкиране и връзката на Continue Watching със запазеното за по-късно.
- PM и разработка: договор за количката, идентификатор на добавката, връщане към заглавието и обновяване на правата след покупка.
- PM: поведение при изтичане по време на възпроизвеждане, липсващ/необработен запис и преизчисляване на оставащото време.
- Дизайн: финален Premium символ и текст при фокус; банер или ред с подложка за Home. Цената е решена с Р5.
- Дизайн и QA: потвърждение на TV матрицата, край на ←/→, филтрите на телефон и възстановяването на фокус.
- Разработка: свързване и проверка на предложените параметри за всички случаи. Регистрацията в `prototype/lib/screens.ts` е отделна задача със статуси Дизайн и Разработка.
- PM и разработка: аналитични събития за вход, търсене, филтри, подробности, директно Play, Premium, количка и завършена покупка.

## Решения

Виж [регистъра на решенията](../../decisions/DECISIONS.md): Р1 е отворена хипотеза; Р2 определя одобрението на основата; Р3 описва снимката на данните; Р4 определя името Theater и адресите theatre; Р5 определя Premium Films и цената; Р6: засега локален Git без GitHub и преглед на тестов адрес във Vercel; НЛ27: дизайна към програмистите одобрява PM.
