Voici une version *prête à coller dans Windsurf* qui intègre fidèlement l’interface Nimbus/FuseBase **et** garantit une compatibilité à 100 % Desktop + Mobile (téléphone + tablette). J’ai resserré, clarifié et relié chaque exigence aux patterns “Nimbus” (chips filtrants, pickers Clear/Done, outline latéral, Portals/Share, workspaces, etc.).
---
# 🎯 Prompt Windsurf — ObsiViewer « Nimbus UI » (Desktop + Mobile 100%)
## Rôle & Autorité
Agis comme **Staff Frontend Engineer Angular 20 + UX Designer**. Raisonnement détaillé **autorisé**. Tu peux refactorer, introduire de nouveaux composants, migrer le CSS vers **Tailwind**, et **ne brise aucune feature** existante.
**Garde-fous**
* **Feature flag** : un **toggle** dans la navbar bascule *Nimbus UI* ↔ *Legacy UI* **sans perte d’état** (URL, sélection, filtres).
* **100 % Responsive** : Desktop, Tablet, Mobile (petits smartphones inclus).
* **A11y** : WCAG 2.1 AA, clavier + écran tactile.
---
## ADN Nimbus à reproduire (invariants UX)
1. **3 panneaux stables** : Nav gauche (Quick Links / Folders / Tags), Index central (Recherche + chips **All folders ▾ / All tags ▾ / All pages ▾**), Page à droite (markdown + **outline ToC** dockable).
2. **Recherche d’abord** : top bar centrée, **icône filtre** → options avancées.
3. **Chips persistantes** = *stateful filters* (caret + **badges comptage** + Clear/Done).
4. **Pickers riches** (dossiers hiérarchiques multi-sélection, tags à coches, **barre de recherche locale**).
5. **Progressive disclosure** : menus condensés, pickers/overlays, **hover-reveal “+”** pour créer un sous-dossier.
6. **Workspaces** strictement séparés ; **Share** et **Add to portal** accessibles depuis la barre d’action de la page (si disponibles).
7. **Contenu riche** : markdown, callouts, code, **cartes Bookmark** (titre/desc/vignette).
8. **Outline contextuel** : bouton rond “hamburger” flottant dans la page → rail ToC H1–H6 avec **scroll-to**.
> Référence de conception : Folders/Tags bi-axial, chips visibles en permanence, *Clear partout*, hiérarchie typographique nette, dark/light cohérents.
---
## Objectif Final (résumé)
* **Desktop (≥ 1024px)** : Layout **3 colonnes** (sidebar resizable 240–440px / index virtualisé / page + ToC fixe à droite).
* **Tablet (768–1023px)** : **Bottom tabs** (Sidebar • List • Page • ToC) + **drawer** pour la sidebar.
* **Mobile (< 768px)** : **Bottom nav** (4 icônes), sidebar en **drawer 80vw**, ToC **inline/drawer**, gestes **swipe** pour naviguer entre onglets.
---
## Feature Flag & Toggle (obligatoire)
* **UiModeService** (signal boolean, persistance `localStorage: obsiviewer-ui-mode = nimbus|legacy`).
* **AppShellAdaptiveComponent** sélectionne *Nimbus* vs *Legacy*.
* **Bouton toggle** dans la navbar, accessible (`aria-label`) et **sans reset de l’état** (on conserve : filtres actifs, élément sélectionné, scrolls, URL).
---
## Responsive Design — Stratégie
* **Mobile-first** avec Tailwind (`xs, sm, md, lg, xl, 2xl`).
* **Variants par composant** : `*.desktop.component` (≥ lg) / `*.mobile.component` (< lg).
* **Breakpoints cdk/layout** pour l’injection conditionnelle.
* **Touch targets ≥ 44×44px**, densité **compacte mais respirante** (Nimbus-style).
---
## Composants à livrer (Nimbus-compat)
1. **Left Sidebar** (desktop fixe/resizable, mobile drawer)
* Sections : Quick Links, **Folders** (arbo + *hover-reveal “+”*), **Tags**, Trash.
* **Workspace switcher** + **theme switch** via menu avatar en bas.
2. **Center List**
* **Search bar** (champ centré + icône filtre)
* **Chips** : All folders ▾ / All tags ▾ / All pages ▾ (badges + caret)
* **Pickers overlays** :
* **Folders** multi-sélection hiérarchique, recherche locale, **Clear/Done**, badges *+N*.
* **Tags** alphabétique, **checkmarks**, Clear/Done.
* **Liste virtualisée** (CDK) : titre, date grisée, **snippet** (line-clamp), petites icônes (ex. bookmark).
* État : “Found pages: N” + **Clear** visible si filtres actifs.
3. **Note View + ToC**
* Page markdown (prose), **barre d’actions** à droite : **Ask AI**, **Add to portal**, **Share**, loupe “find in page”, attachements, **plein écran**.
* **ToC Drawer** : fixe à droite (desktop) ; **inline/drawer** (mobile).
* **Bouton flottant ToC** (rond) *dans* la page.
* **Cards Bookmark** (preview URL).
4. **Mobile Shell**
* **Bottom navigation** (Sidebar / List / Page / ToC).
* **Gestures** : swipe gauche/droite pour changer d’onglet, pull-to-refresh (optionnel), long-press menu contextuel.
* **Search compact** (menu, champ, bouton filtres → popover).
---
## Exigences Techniques Clés
* **URL state** : sélection dossier/tag/tri dans l’URL (deep link).
* **Persistences** : chips actives, split sizes, dernier onglet mobile, thème, workspace.
* **Virtual scroll** : item 70–80px, 60 fps sur 1000+ items.
* **Dark/Light** : palette stable, **contrastes sûrs** (Nimbus dark très contrasté).
* **Overlays** : pickers centrés, **Clear/Done** persistants en pied, focus trap + ESC.
* **Perf Mobile** : debounce recherche (300 ms mobile / 150 ms desktop), images lazy, évite CLS (skeletons, `aspect-[ratio]`).
* **A11y** : ARIA, focus visible, nav clavier complète (Tab/Shift+Tab, Arrow), *skip links*.
---
## Livrables (code & docs)
**Code**
1. `UiModeService`, bouton navbar, `AppShellAdaptiveComponent`.
2. Variants responsive : `left-sidebar`, `center-list`, `note-view`, `toc-drawer`, `search-bar`.
3. **BottomNav**, **MobileNavService**, **SwipeNavDirective**.
4. **Pickers** (Folders/Tags) avec recherche locale + Clear/Done.
5. **Resizable handle** (sidebar), **virtual scroll** (index).
**Styling**
* `tailwind.config.js` (breakpoints), tokens light/dark, classes utilitaires mobile-first.
* Prose markdown responsive, badges/chips Nimbus-like, states *hover/selected*.
**Docs**
* `README_UI.md` (diagrammes 3 breakpoints + captures).
* `MOBILE_GUIDE.md` (flow onglets, gestes, drawer).
* `RESPONSIVE_CHECKLIST.md` (tests par breakpoint + devices).
* `DEPLOYMENT.md` (feature flag rollout).
**Tests**
* E2E : toggle persistant, switch sans perte d’état, pickers Clear/Done, deep links.
* Visuel : snapshots Desktop/Tablet/Mobile.
* A11y : axe + audits clavier.
* Perf : 60 fps scroll, TTI < 2.5 s (mobile cold), Lighthouse Mobile ≥ 85 / A11y ≥ 95.
---
## Critères d’Acceptation (DoD)
**Desktop (≥ 1024px)**
* [x] 3 colonnes, sidebar **resizable**, ToC fixe à droite.
* [x] Chips visibles + pickers overlays Clear/Done, **badges comptage**.
* [x] 1000+ items fluide (virtual scroll 60 fps).
* [x] *Ask AI / Add to portal / Share* visibles si feature activée.
**Tablet (768–1023px)**
* [x] **Bottom tabs** + sidebar **drawer** (swipe).
* [x] ToC **inline** repliable.
* [x] Tous contenus **full-width** par onglet.
**Mobile (< 768px)**
* [x] **Bottom nav** (4 onglets), sidebar **drawer 80vw**.
* [x] Search compact + popover filtres, badges actifs scrollables en horizontal.
* [x] Markdown **full-screen**, ToC overlay/inline toggle.
* [x] Touch targets ≥ 44×44px.
**Feature Flag & A11y/Perf**
* [x] Toggle visible, persistant, **sans perte d’état**.
* [x] WCAG 2.1 AA, focus visible, ARIA.
* [x] Lighthouse Mobile ≥ 85 perf, ≥ 95 a11y.
---
## Plan d’Implémentation (ordre conseillé)
1. **Feature Flag infra** (UiModeService + AppShellAdaptive + toggle navbar).
2. **Shell Responsive** (3 colonnes desktop, Tailwind tokens, resizable sidebar).
3. **Mobile Navigation** (BottomNav + MobileNavService + routing/états).
4. **Sidebar Drawer** (anim, backdrop, swipe dismiss, z-index).
5. **Pickers** (Folders/Tags) + chips/overlays + Clear/Done + recherche locale.
6. **ToC Drawer** (fixe desktop / inline mobile) + bouton flottant.
7. **Perf & A11y** (virtual scroll, debounce, lazy, focus trap).
8. **Tests & Docs** (E2E, visuel, a11y, guides).
---
## Squelette de code minimal (extraits)
### Toggle UI (navbar)
```html
```
### Shell adaptatif
```ts
@Component({
selector: 'app-shell-adaptive',
template: `
@if (ui.isNimbusMode()) {