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
```
### 3) Picker Overlays Nimbus (Responsive)
```typescript
// Desktop: Overlay centrΓ©
// Mobile: Picker full-screen
```
### 4) Outline Contextuel Nimbus (Responsive)
```typescript
// Desktop: Panneau droit fixe
// Mobile: Bouton flottant + overlay
```
---
## π¨ 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
// 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...
   
  
 
// Mobile: Stack vertical
  
    π
    
      Document Title
      First few lines of content as preview...
      
     
   
 
```
---
## π 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.