# TODO ## CSV importer AP/orientation standardisation - [x] Migration 014: add `Récits et expérimentation` (RE) and `PACS` AP programs; set code `NS` on `Narration Spéculative` - [x] Importer: replace code-only AP lookup with `resolveAP()` — handles full names, aliases (`L.I.E.N.S.`, case variants), code fallback - [x] Importer: replace `orientationMap` code-only lookup with `resolveOrientation()` — handles full names, aliases (`Installation/Performance`, `Arts numériques`, `Design numérique`), legacy 2-letter codes, case-insensitive DB fallback ## Répertoire page fixes - [x] Fix AP and orientation columns returning empty results when clicked - [x] Fix multi-select being blocked (only one entry selectable at a time) - [x] Fix all other columns becoming faded when AP/OR filter is selected - [x] Always show all lookup-table values (ap/or/fi); only fade based on cross-dimension matched data when the column has at least one matched entry (`$colHasMatches` guard) - [x] Make `main` the scrollable element instead of body - [x] `common.css`: body is now `display:flex; flex-direction:column`, `main` gets `flex:1; min-height:0` - [x] `public.css`: removed redundant `main` block, `.home-main` keeps its `overflow-y:auto` - [x] `repertoire.css`: `.search-main` gets `min-height:0` for proper flex scroll containment - [x] `common.css`: `.header-search-wrap` gets `flex-shrink:0` - [x] `Database::getRepertoireFilterData`: `allAp`, `allOr`, `allFi` now sourced from actual published thesis joins (not bare lookup tables), matching the pattern used by years and keywords