# App Navigation Shell Specification ## Purpose The 5-root tab contract, the push-chrome rule for second-level screens, the explicit Favoritos exemption from that rule, and root-to-root switching (Escuchar "Ver todas" to Favoritos). Traceable to WU1. ## Requirements ### Requirement: Five-Tab Root Navigation The app MUST render exactly 5 root tabs, in order: Escuchar, Buscar, Favoritos, Alarmas, Ajustes, using the existing `PluriIconGlyph.*` icon set. `PluriIconGlyph.home` MUST be the Escuchar tab's icon. #### Scenario: App launch renders the 5 tabs in order - GIVEN the app has finished cold-start - WHEN the bottom navigation renders - THEN exactly 5 tabs appear, labeled Escuchar, Buscar, Favoritos, Alarmas, Ajustes, in that order #### Scenario: Escuchar uses the home glyph - GIVEN the bottom navigation is rendered - WHEN the Escuchar tab's icon is inspected - THEN it is `PluriIconGlyph.home` ### Requirement: Push-Chrome on Second-Level Screens Every genuine second-level screen (Reproductor completo, PaĆ­ses, Vacaciones, Ecualizador, Grabaciones, and every new Settings detail screen) MUST render a 56px header with a back affordance and MUST NOT render a bottom tab bar. #### Scenario: Reproductor completo hides the tab bar - GIVEN the user opens Reproductor completo from Escuchar - WHEN the screen renders - THEN it shows a 56px header with a back arrow and no bottom tab bar #### Scenario: A Settings detail screen hides the tab bar - GIVEN the user pushes any Settings detail screen from the Ajustes root - WHEN the screen renders - THEN it shows a 56px header with a back arrow and no bottom tab bar ### Requirement: Favoritos Tab-Bar Exemption Favoritos MUST keep its bottom tab bar. This is the one deliberate exception to the push-chrome rule: the source mockup draws this content as a pushed screen only because its own 4-root IA had demoted Favoritos out of the root set. In this app's 5-tab IA, Favoritos is root-level and MUST render the tab bar like every other root. #### Scenario: Favoritos renders with its tab bar - GIVEN the user is on the Favoritos tab - WHEN the screen renders - THEN the bottom tab bar is visible, unlike every true second-level screen ### Requirement: Root-to-Root Switching Without Push Navigating from Escuchar's "Tus emisoras" section to the full favorites list MUST switch the active tab index to Favoritos. It MUST NOT push a new route. #### Scenario: "Ver todas" switches tabs, not routes - GIVEN the user is on Escuchar with 1 or more favorite stations - WHEN they tap "Ver todas" - THEN the active tab index becomes Favoritos - AND no new route is pushed onto the navigation stack (back from Favoritos returns to whatever screen preceded Escuchar, not to Escuchar itself) ### Requirement: Escuchar Tab Rename Preserves the ARB Key The former "Inicio" tab MUST be relabeled "Escuchar" (English: "Listen") by changing the `navHome` key's VALUE, not by introducing a new key. The key `navHome` MUST continue to exist, unchanged, in all 13 ARB locales. #### Scenario: English and Spanish values are updated - GIVEN `lib/l10n/app_en.arb` and `lib/l10n/app_es.arb` - WHEN the `navHome` key is read - THEN `app_en.arb` returns `"Listen"` and `app_es.arb` returns `"Escuchar"` #### Scenario: Key parity across all 13 locales (edge case) - GIVEN all 13 ARB files - WHEN each is checked for the `navHome` key - THEN every file still contains the key `navHome` (value content may differ), and no file is missing it