/* ============================================ AJOUTS POUR MENU UNIQUE OUVERT ============================================ */ /* Animation pour les sous-menus */ @keyframes slideDown { from { opacity: 0; transform: translateY(-10px); max-height: 0; } to { opacity: 1; transform: translateY(0); max-height: 500px; } } @keyframes slideUp { from { opacity: 1; transform: translateY(0); max-height: 500px; } to { opacity: 0; transform: translateY(-10px); max-height: 0; } } /* Styles pour le menu unique ouvert */ .nav-submenu { max-height: 0; overflow: hidden; animation: slideUp 0.3s ease forwards; display: none; } .nav-submenu.show { display: block; animation: slideDown 0.3s ease forwards; } /* Désactiver la logique Bootstrap par défaut */ .nav-link[data-bs-toggle="collapse"] { pointer-events: auto; } .nav-link[data-bs-toggle="collapse"].collapsed .nav-arrow { transform: rotate(0deg); } .nav-link[data-bs-toggle="collapse"]:not(.collapsed) .nav-arrow { transform: rotate(90deg); } /* ============================================ AMÉLIORATIONS UX ============================================ */ /* Zone de détection de proximité */ .proximity-hover-area { position: fixed; right: 0; top: 50%; width: 80px; height: 200px; transform: translateY(-50%); z-index: 1005; pointer-events: none; } /* État hors ligne */ body.offline .app-header::after { content: 'Hors ligne'; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); background: #ff6b35; color: white; padding: 4px 12px; border-radius: 4px; font-size: 12px; animation: pulse 2s infinite; } /* Spinner amélioré */ .spinner-responsive { display: flex; justify-content: center; align-items: center; min-height: 300px; } .spinner-responsive i { font-size: 48px; color: var(--office-primary); animation: spin 1s linear infinite; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } /* ============================================ RESPONSIVE AMÉLIORÉ ============================================ */ @media (max-width: 768px) { .app-sidebar { transition: transform 0.3s ease; } .app-sidebar.show { transform: translateX(0); box-shadow: 2px 0 12px rgba(0, 0, 0, 0.15); } .context-toggle { width: 48px; height: 48px; right: 16px; bottom: 16px; } } /* ============================================ ACCESSIBILITÉ ============================================ */ .nav-link:focus { outline: 2px solid var(--office-secondary); outline-offset: -2px; } .context-toggle:focus { outline: 3px solid var(--office-secondary); outline-offset: 2px; } /* High contrast mode */ @media (prefers-contrast: high) { :root { --office-border: #000000; --office-dark: #000000; } .nav-link.active { outline: 3px solid #000; } } /* Reduced motion */ @media (prefers-reduced-motion: reduce) { * { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } }