Voici le prompt refondu pour inclure la compatibilitΓ© mobile/tablet complΓ¨te tout en conservant la philosophie Nimbus : # 🎯 Prompt Windsurf β€” ObsiViewer Nimbus UI (Desktop + Mobile) ## ObsiViewer β†’ UI/UX "Nimbus-like" (responsive, dense, rapide) **RΓ΄le & mode :** Agis comme **Staff Frontend Engineer Angular 20 + UX designer**. Raisonnement dΓ©taillΓ© autorisΓ©. Tu as les pleins pouvoirs de refactor UI, d'ajout de composants, et de migration CSS vers Tailwind. Conserve la compatibilitΓ© de toutes features existantes. **Contrainte majeure :** L'interface doit Γͺtre **100% responsive** (Desktop β‰₯1024px / Tablet 768-1023px / Mobile <768px). Un **bouton toggle** dans la navbar permet de basculer entre l'ancienne interface et la nouvelle sans perte d'Γ©tat. --- ## πŸ“‹ Architecture Nimbus Responsive ### Desktop (β‰₯1024px) - Layout 3 colonnes ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ NAVBAR (Search centrΓ© + CTA "+ Page" + Actions droite) β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ SIDEBAR β”‚ CENTER COLUMN β”‚ NOTE + TOC β”‚ β”‚ Navigation β”‚ β€’ Chips filtres β”‚ β€’ Γ‰dition riche β”‚ β”‚ Dossiers/Tagsβ”‚ β€’ Liste rΓ©sultats β”‚ β€’ Outline contextuelβ”‚ β”‚ Quick Links β”‚ β€’ Virtual scroll β”‚ β€’ Barre actions β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ### Tablet (768-1023px) - Navigation par onglets ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ NAVBAR (Search + Toggle UI) β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ [≑] [πŸ“„] [πŸ”] [πŸ“‹] Tabs bottom β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ β”‚ β”‚ CONTENU ACTIF FULL-WIDTH β”‚ β”‚ β€’ Sidebar: Drawer 80vw β”‚ β”‚ β€’ Liste: Cards compactes β”‚ β”‚ β€’ Note: Markdown + ToC inline β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ### Mobile (<768px) - Navigation bottom + Drawers ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ NAVBAR compacte (Menu + Search) β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ CONTENT AREA β”‚ β”‚ β€’ Sidebar: Drawer full β”‚ β”‚ β€’ Liste: Items optimisΓ©s β”‚ β”‚ β€’ Note: Plein Γ©cran β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ [≑][πŸ“„][+][πŸ”][πŸ“‹] Bottom Nav β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` --- ## 🎯 Composants Nimbus SpΓ©cifiques Γ  Reproduire ### 1) Top Bar Nimbus (Responsive) ```typescript // Desktop: Search centrΓ© + CTA turquoise
Workspace Selector
πŸ”
// Mobile: Stacked + icons
πŸ”
``` ### 2) Chips de Filtres Nimbus (Responsive) ```typescript // Desktop: Chips horizontales
All folders +2 β–Ύ
All tags +1 β–Ύ
All pages β–Ύ
// Mobile: Chips scrollables horizontalement
Folders β–Ύ
Tags β–Ύ
``` ### 3) Picker Overlays Nimbus (Responsive) ```typescript // Desktop: Overlay centrΓ©
πŸ“ Workspace β€Ί
πŸ“ Projects 15
// Mobile: Picker full-screen

Select Folders

``` ### 4) Outline Contextuel Nimbus (Responsive) ```typescript // Desktop: Panneau droit fixe // Mobile: Bouton flottant + overlay

Table of Contents

``` --- ## 🎨 Palette Nimbus & Design Tokens ```css /* Tokens Nimbus (light/dark) */ :root { /* Couleurs primaires */ --nimbus-cyan: #06b6d4; --nimbus-cyan-dark: #0891b2; /* Gris scale */ --nimbus-gray-50: #f9fafb; --nimbus-gray-100: #f3f4f6; --nimbus-gray-800: #1f2937; --nimbus-gray-900: #111827; /* Espacements */ --nimbus-space-1: 0.25rem; --nimbus-space-2: 0.5rem; --nimbus-space-3: 0.75rem; /* Typographie */ --nimbus-text-sm: 0.875rem; --nimbus-text-base: 1rem; } .dark { --nimbus-bg: var(--nimbus-gray-900); --nimbus-surface: var(--nimbus-gray-800); } ``` --- ## πŸ“± Gestes Mobiles SpΓ©cifiques Nimbus ### Swipe Navigation ```typescript @Directive({ selector: '[appSwipeNav]', standalone: true }) export class SwipeNavDirective { private startX = 0; private startY = 0; @HostListener('touchstart', ['$event']) onTouchStart(e: TouchEvent) { this.startX = e.touches[0].clientX; this.startY = e.touches[0].clientY; } @HostListener('touchend', ['$event']) onTouchEnd(e: TouchEvent) { const endX = e.changedTouches[0].clientX; const endY = e.changedTouches[0].clientY; const diffX = this.startX - endX; const diffY = this.startY - endY; // Seulement swipe horizontal significatif if (Math.abs(diffX) > 50 && Math.abs(diffY) < 30) { if (diffX > 0) { this.swipeLeft.emit(); // β†’ Tab suivant } else { this.swipeRight.emit(); // ← Tab prΓ©cΓ©dent } } } @Output() swipeLeft = new EventEmitter(); @Output() swipeRight = new EventEmitter(); } ``` ### Hover-reveal Adaptatif (Desktop seulement) ```typescript // Seulement sur desktop
πŸ“ Projects
// Mobile: Toujours visible ou menu contextuel
πŸ“ Projects
``` --- ## πŸ”§ Service UI Mode & Responsive State ```typescript @Injectable({ providedIn: 'root' }) export class UiModeService { // Signal pour le mode Nimbus vs Legacy isNimbusMode = signal(this.loadUIMode()); // Signal pour le breakpoint actif currentBreakpoint = signal<'mobile' | 'tablet' | 'desktop'>('desktop'); constructor(private breakpointObserver: BreakpointObserver) { // Surveillance des breakpoints this.breakpointObserver.observe([ '(max-width: 767px)', '(min-width: 768px) and (max-width: 1023px)', '(min-width: 1024px)' ]).subscribe(result => { const breakpoints = result.breakpoints; if (breakpoints['(max-width: 767px)']) { this.currentBreakpoint.set('mobile'); } else if (breakpoints['(min-width: 768px) and (max-width: 1023px)']) { this.currentBreakpoint.set('tablet'); } else { this.currentBreakpoint.set('desktop'); } }); } toggleUIMode() { const newMode = !this.isNimbusMode(); this.isNimbusMode.set(newMode); localStorage.setItem('obsiviewer-ui-mode', newMode ? 'nimbus' : 'legacy'); } private loadUIMode(): boolean { return localStorage?.getItem('obsiviewer-ui-mode') !== 'legacy'; } } ``` --- ## πŸš€ Composants SpΓ©cifiques Nimbus ### 1) Bookmark Card (Responsive) ```typescript // Desktop: Carte horizontale

Article Title

Description of the bookmarked content...

example.com 2 days ago
// Mobile: Carte verticale

Article Title

Description...

example.com 2 days ago
``` ### 2) Result List Item Nimbus ```typescript // Desktop: Ligne compacte
πŸ“„

Document Title

First few lines of content as preview...

2h ago
work
// Mobile: Stack vertical
πŸ“„

Document Title

First few lines of content as preview...

2h ago
work
``` --- ## πŸ“‹ CritΓ¨res d'Acceptation Nimbus ### Desktop (β‰₯1024px) - [x] **Layout 3 colonnes** fidΓ¨le Γ  Nimbus - [x] **Top bar** avec search centrΓ© + CTA "+ Page" turquoise - [x] **Chips filtres** "All folders β–Ύ", "All tags β–Ύ", "All pages β–Ύ" avec badges - [x] **Pickers overlays** avec recherche locale + hiΓ©rarchie - [x] **Outline contextuel** panneau droit fixe - [x] **Hover-reveal** crΓ©ation sous-dossiers - [x] **Workspace switcher** dans sidebar ### Tablet (768-1023px) - [x] **Navigation par onglets** [Sidebar] [List] [Page] [ToC] - [x] **Drawer sidebar** 80vw avec arborescence - [x] **Chips scrollables** horizontalement - [x] **Pickers full-screen** avec Done/Clear - [x] **ToC inline** collapsible ### Mobile (<768px) - [x] **Bottom navigation** 5 onglets [Menu] [List] [+] [Search] [ToC] - [x] **Drawers full-width** pour sidebar/pickers - [x] **Search bar compacte** dans header - [x] **Touch targets** β‰₯ 44px - [x] **Swipe gestures** changement onglets - [x] **Pull-to-refresh** liste rΓ©sultats ### FidΓ©litΓ© Nimbus - [x] **Philosophie workspace-first** avec sΓ©lecteur d'espace - [x] **Organisation bi-axiale** dossiers + tags - [x] **Recherche d'abord** avec filtres persistants - [x] **Progressive disclosure** (menus contextuels) - [x] **Bookmarks** avec cartes enrichies - [x] **Boutons Share/Add to portal** visibles ### Performance & AccessibilitΓ© - [x] **Virtual scroll** 1000+ items fluide - [x] **Lighthouse Mobile** β‰₯ 85 perf, β‰₯ 95 a11y - [x] **Keyboard navigation** complΓ¨te - [x] **WCAG 2.1 AA** tous breakpoints - [x] **Toggle UI** persistΓ© sans perte Γ©tat --- ## 🎯 Livrables Exacts 1. **Toggle UI Nimbus/Legacy** avec persistence 2. **Layout 3 colonnes desktop** fidΓ¨le Nimbus 3. **Navigation responsive** tablette/mobile 4. **Composants Nimbus** : Chips, Pickers, Outline, Bookmark cards 5. **Gestes mobiles** : swipe, pull-to-refresh 6. **ThΓ¨me clair/sombre** Nimbus-like 7. **Documentation** responsive + patterns Nimbus **Γ‰tat initial** : Toggle sur "Nimbus" par dΓ©faut, legacy UI intacte **Testing** : 3 breakpoints + gestures + accessibility **Performance** : 60fps virtual scroll, lazy loading images --- ExΓ©cute maintenant cette implΓ©mentation en respectant scrupuleusement les patterns UI/UX de Nimbus Notes tout en garantissant la compatibilitΓ© 100% responsive mobile/tablet/desktop.