# Navigation Style Decisions

## Obiectiv

Navigația aplicației folosește stilul SwiftUI implicit, cu un singur set de modificatori aplicat consistent în toate view-urile. Nu există logică condiționată per platformă pentru controlul navigației.

## Deviații de la comportamentul SwiftUI implicit

### 1. Titlu inline (`.navigationBarTitleDisplayMode(.inline)`)

**Aplicat pe:** toate view-urile care au `.navigationTitle(...)`.

**Motivație:** Implicit, SwiftUI afișează titlul mare (`.large`) în prima fereastră a unui NavigationStack sau NavigationView. Stilul large nu se potrivește layoutului aplicației, care folosește un tab bar custom imediat sub navigation bar — titlul mare consumă spațiu vertical fără beneficiu. Stilul inline plasează titlul centrat în toolbar, aliniind aspectul pe iPhone, iPad și Mac Catalyst.

**Fișiere afectate:**
- `Views/Meter/MeterView.swift` — live body și offline body
- `Views/ChargedDevices/Details/ChargedDeviceDetailView.swift`
- `Views/ChargedDevices/Sessions/ChargeSessionDetailView.swift`
- `Views/ChargedDevices/Sessions/ChargedDeviceSessionsView.swift`
- `Views/Meter/Tabs/Live/ChargerStandbyPowerWizardView.swift`
- `Views/MeterMappingDebugView.swift`
- `Views/DeviceHelpView.swift`
- Sheets (deja aveau `.inline`): `ChargedDeviceEditorScaffoldView`, `SidebarChargedDeviceLibraryView`, și altele

### 2. Font titlu navigation bar (19pt semibold)

**Aplicat în:** `AppDelegate.configureNavigationBarAppearance()` via `UINavigationBarAppearance`.

**Motivație:** Fontul implicit al titlului inline este `.headline` (17pt semibold), perceput ca prea mic față de densitatea vizuală a conținutului. 19pt semibold oferă mai multă prezență fără a afecta spațiul disponibil, întrucât titlul rămâne pe un singur rând.

**Configurare:**
```swift
let titleFont = UIFont.systemFont(ofSize: 19, weight: .semibold)
let appearance = UINavigationBarAppearance()
appearance.configureWithDefaultBackground()
appearance.titleTextAttributes = [.font: titleFont]
UINavigationBar.appearance().standardAppearance = appearance
UINavigationBar.appearance().scrollEdgeAppearance = appearance
UINavigationBar.appearance().compactAppearance = appearance
```

## Ce NU s-a schimbat față de implicit

- `NavigationView` cu `.navigationViewStyle(.stack)` pe iPhone și `.navigationViewStyle(.columns)` pe iPad/Mac — arhitectural, nu cosmetic
- Toolbar items (`.toolbar { }`) — plasate standard pe `.navigationBarTrailing` / `.cancellationAction` / `.confirmationAction`
- Fundalul navigation bar — `configureWithDefaultBackground()` păstrează comportamentul implicit al sistemului (translucid/blur)

## Istoric

Anterior existau mai multe straturi de modificatori conflictuali adăugați în tentative de a obține un layout compact "Nav Control – Title – Tools" pe Mac Catalyst și iPad:
- `navigationBarHidden(landscape)` — ascundea bara în landscape pe Catalyst
- `IOSOnlyNavBar` (ViewModifier) — aplica titlu și toolbar condițional pe `!isTrueMacApp`
- `macNavigationHeader` și `offlineMacHeader` — headere custom inline în VStack care dublau controalele când bara de sistem era vizibilă
- `ToolbarItemGroup(placement: .primaryAction) {}` gol pe Catalyst — crea artefacte vizuale

Toate au fost eliminate în aprilie 2026. Soluția corectă a fost `.navigationBarTitleDisplayMode(.inline)` aplicat consistent.
