diff --git a/Bootstrap_new/css/style_office.css b/Bootstrap_new/css/style_office.css index 91e96ab..1a2c043 100644 --- a/Bootstrap_new/css/style_office.css +++ b/Bootstrap_new/css/style_office.css @@ -1,163 +1,739 @@ /* ============================================ - AJOUTS POUR MENU UNIQUE OUVERT + STYLE OFFICE POUR LE PORTAIL RH - VERSION CORRIGÉE + Encodage: UTF-8 sans BOM ============================================ */ -/* 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); +:root { + /* PowerPoint/Office 2019 Color Palette */ + --office-primary: #b7472a; /* Sidebar color - PowerPoint accent */ + --office-secondary: #2b579a; /* Header/buttons - Office blue */ + --office-accent: #107c10; /* Success/active states - Excel green */ + --office-light: #f3f2f1; /* Background - Office gray */ + --office-common: #e6e6e6; /* Background - Office gray */ + --office-dark: #323130; /* Text color */ + --office-border: #d0d0d0; /* Borders */ + --office-hover: #f0f0f0; /* Hover states */ + --office-card: #ffffff; /* Card backgrounds */ + + /* Dimensions */ + --sidebar-width: 260px; + --sidebar-collapsed: 70px; + --header-height: 64px; + --transition-speed: 0.3s; + + /* Responsive breakpoints */ + --breakpoint-tablet: 1200px; + --breakpoint-mobile: 768px; } /* ============================================ - AMÉLIORATIONS UX + BASE STYLES & RESET ============================================ */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} -/* Zone de détection de proximité */ -.proximity-hover-area { +body { + font-family: 'Segoe UI', 'Segoe UI Web (West European)', -apple-system, BlinkMacSystemFont, Roboto, 'Helvetica Neue', sans-serif; + background-color: var(--office-common); + color: var(--office-dark); + line-height: 1.5; + overflow-x: hidden; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* ============================================ + HEADER STYLES + ============================================ */ +.app-header { + background-color: var(--office-light) !important; + height: var(--header-height); + border-bottom: 1px solid rgba(255, 255, 255, 0.1); + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); position: fixed; + top: 0; + left: 0; right: 0; - top: 50%; - width: 80px; - height: 200px; - transform: translateY(-50%); - z-index: 1005; + z-index: 1030; +} + +.header-content { + display: flex; + align-items: center; + justify-content: space-between; + height: 100%; + padding: 0 24px; +} + +.logo-container { + display: flex; + align-items: center; + gap: 16px; +} + +.app-logo { + display: flex; + align-items: center; + color: #313c4c; + text-decoration: none; + font-weight: 600; + font-size: 20px; +} + +.app-logo img { + height: 36px; +} + +/* ============================================ + SIDEBAR STYLES + ============================================ */ +.app-sidebar { + width: var(--sidebar-width); + background: linear-gradient(180deg, var(--office-primary) 0%, #a53e24 100%); + position: fixed; + top: var(--header-height); + left: 0; + bottom: 0; + z-index: 1020; + box-shadow: 2px 0 8px rgba(0, 0, 0, 0.1); + transition: width var(--transition-speed) ease; + overflow-y: auto; + overflow-x: hidden; +} + +/* Pattern overlay */ +.app-sidebar::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-image: + radial-gradient(circle at 10% 20%, rgba(255, 255, 255, 0.03) 0%, transparent 20%), + radial-gradient(circle at 90% 80%, rgba(255, 255, 255, 0.03) 0%, transparent 20%); 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; +.sidebar-nav { + padding: 24px 0; +} + +.nav-section { + margin-bottom: 32px; + padding: 0 20px; +} + +.nav-title { + color: rgba(255, 255, 255, 0.7); + font-size: 12px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.5px; + margin-bottom: 12px; + padding: 0 16px; +} + +.nav-item { + margin-bottom: 4px; +} + +.nav-link { + display: flex; + align-items: center; + color: rgba(255, 255, 255, 0.85); + padding: 12px 16px; + text-decoration: none; + border-radius: 6px; + transition: all 0.2s ease; + position: relative; + overflow: hidden; +} + +.nav-link:hover { + background-color: rgba(255, 255, 255, 0.1); color: white; +} + +.nav-link.active { + background-color: rgba(255, 255, 255, 0.15); + color: white; + font-weight: 500; +} + +.nav-link i { + width: 24px; + font-size: 18px; + margin-right: 12px; + text-align: center; +} + +.nav-text { + flex: 1; + font-size: 14px; +} + +.nav-badge { + background-color: var(--office-accent); + color: white; + font-size: 11px; + padding: 2px 6px; + border-radius: 10px; + margin-left: 8px; +} + +.nav-arrow { + font-size: 12px; + opacity: 0.7; + transition: transform 0.2s ease; +} + +.nav-link[aria-expanded="true"] .nav-arrow { + transform: rotate(90deg); +} + +.nav-submenu { + background-color: rgba(0, 0, 0, 0.1); + border-radius: 6px; + margin-top: 4px; + padding: 8px 0; +} + +.nav-submenu .nav-link { + padding: 8px 16px 8px 52px; + font-size: 13px; +} + +.nav-submenu .nav-link::before { + content: '•'; + position: absolute; + left: 36px; + opacity: 0.6; +} + +/* ============================================ + MAIN CONTENT AREA + ============================================ */ +.app-main { + margin-left: var(--sidebar-width); + padding-top: var(--header-height); + min-height: 100vh; + transition: margin-left var(--transition-speed) ease; + background-color: var(--office-light); +} + +.content-area { + padding: 24px; + max-width: 1400px; + margin: 0 auto; +} + +/* ============================================ + NAVIGATION TABS + ============================================ */ +.nav-bar { + background-color: white; + border-radius: 8px; + padding: 16px 24px; + margin-bottom: 24px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); + border: 1px solid var(--office-border); +} + +.nav-tabs { + display: flex; + gap: 8px; + overflow-x: auto; + padding-bottom: 4px; +} + +.nav-tab { + display: inline-flex; + align-items: center; + padding: 8px 16px; + background-color: transparent; + color: var(--office-dark); + text-decoration: none; + border-radius: 4px; + font-size: 14px; + font-weight: 500; + white-space: nowrap; + transition: all 0.2s ease; + border: 1px solid transparent; +} + +.nav-tab:hover { + background-color: var(--office-hover); + color: var(--office-secondary); +} + +.nav-tab.active { + background-color: var(--office-secondary); + color: white; + border-color: var(--office-secondary); +} + +.nav-tab i { + margin-right: 8px; + font-size: 16px; +} + +/* ============================================ + CONTENT CARDS + ============================================ */ +.content-card { + background-color: white; + border-radius: 8px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05); + border: 1px solid var(--office-border); + margin-bottom: 24px; + overflow: hidden; +} + +.card-header { + background-color: #fafafa; + border-bottom: 1px solid var(--office-border); + padding: 20px 24px; + font-weight: 600; + color: var(--office-dark); + font-size: 18px; + display: flex; + align-items: center; + justify-content: space-between; +} + +.card-body { + padding: 24px; +} + +/* ============================================ + HEADER CONTROLS + ============================================ */ +.header-controls { + display: flex; + align-items: center; + gap: 16px; +} + +.header-btn { + background: transparent; + border: none; + color: #313c4c; + padding: 8px; + border-radius: 4px; + cursor: pointer; + position: relative; + transition: background-color 0.2s ease; +} + +.header-btn:hover { + background-color: rgba(255, 255, 255, 0.1); +} + +.notification-badge { + position: absolute; + top: 2px; + right: 2px; + background-color: var(--office-accent); + color: white; + font-size: 10px; + font-weight: 600; + width: 18px; + height: 18px; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; +} + +.user-menu { + display: flex; + align-items: center; + gap: 12px; + cursor: pointer; + padding: 4px 12px; + border-radius: 6px; + transition: background-color 0.2s ease; +} + +.user-menu:hover { + background-color: rgba(255, 255, 255, 0.1); +} + +.user-avatar { + width: 36px; + height: 36px; + border-radius: 50%; + background: linear-gradient(135deg, var(--office-primary), #ff6b35); + color: white; + display: flex; + align-items: center; + justify-content: center; + font-weight: 600; + font-size: 14px; +} + +.user-info { + display: flex; + flex-direction: column; +} + +.user-name { + color: #313c4c; + font-weight: 500; + font-size: 14px; +} + +.user-role { + color: #313c4c; + font-size: 12px; +} + +/* ============================================ + CONTEXT PANEL + ============================================ */ +.context-panel { + position: fixed; + right: -380px; + top: var(--header-height); + bottom: 0; + width: 380px; + background-color: white; + box-shadow: -2px 0 12px rgba(0, 0, 0, 0.1); + z-index: 1015; + transition: right 0.3s ease; + display: flex; + flex-direction: column; + border-left: 1px solid var(--office-border); +} + +.context-panel.open { + right: 0; +} + +.context-header { + background: linear-gradient(135deg, var(--office-primary), #ee6a49); + color: white; + padding: 20px 24px; + display: flex; + align-items: center; + justify-content: space-between; +} + +.context-title { + font-size: 18px; + font-weight: 600; + display: flex; + align-items: center; + gap: 10px; +} + +.context-close { + background: transparent; + border: none; + color: white; + font-size: 20px; + cursor: pointer; + padding: 4px; + border-radius: 4px; + transition: background-color 0.2s ease; +} + +.context-close:hover { + background-color: rgba(255, 255, 255, 0.1); +} + +.context-body { + flex: 1; + padding: 24px; + overflow-y: auto; +} + +.context-section { + margin-bottom: 28px; +} + +.section-title { + font-size: 14px; + font-weight: 600; + color: var(--office-secondary); + margin-bottom: 12px; + text-transform: uppercase; + letter-spacing: 0.5px; + display: flex; + align-items: center; + gap: 8px; +} + +.section-title i { + font-size: 16px; +} + +.info-box { + background-color: #fafafa; + border: 1px solid var(--office-border); + border-radius: 6px; + padding: 16px; + margin-bottom: 12px; +} + +.info-label { + font-size: 12px; + color: #666; + margin-bottom: 4px; +} + +.info-value { + font-size: 15px; + font-weight: 500; + color: var(--office-dark); + line-height: 1.4; +} + +.action-btn { + width: 100%; + padding: 12px; + background-color: white; + border: 1px solid var(--office-border); + border-radius: 6px; + color: var(--office-dark); + font-weight: 500; + text-align: left; + display: flex; + align-items: center; + gap: 10px; + cursor: pointer; + transition: all 0.2s ease; + margin-bottom: 8px; +} + +.action-btn:hover { + background-color: var(--office-hover); + border-color: var(--office-secondary); + color: var(--office-secondary); +} + +.action-btn i { + width: 20px; + text-align: center; + font-size: 18px; +} + +.photo-container { + text-align: center; + padding: 16px; + background-color: #fafafa; + border-radius: 8px; + border: 1px solid var(--office-border); +} + +.patient-photo { + width: 150px; + height: 150px; + border-radius: 8px; + object-fit: cover; + border: 3px solid white; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); + cursor: pointer; + transition: transform 0.3s ease; +} + +.patient-photo:hover { + transform: scale(1.05); +} + +/* ============================================ + CONTEXT TOGGLE BUTTON + ============================================ */ +.context-toggle { + position: fixed; + right: 24px; + bottom: 24px; + width: 56px; + height: 56px; + border-radius: 50%; + background: linear-gradient(135deg, var(--office-primary), #ff6b35); + color: white; + border: none; + box-shadow: 0 4px 12px rgba(183, 71, 42, 0.3); + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + font-size: 20px; + z-index: 1010; + transition: all 0.3s ease; +} + +.context-toggle:hover { + transform: translateY(-2px); + box-shadow: 0 6px 16px rgba(183, 71, 42, 0.4); +} + +/* ============================================ + TEST MODE INDICATOR + ============================================ */ +.test-indicator { + background: linear-gradient(45deg, #ffd700, #ffed4e); + color: #8a6d3b; padding: 4px 12px; border-radius: 4px; font-size: 12px; + font-weight: 600; + display: inline-flex; + align-items: center; + gap: 6px; + margin-left: 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); } +@keyframes pulse { + 0% { opacity: 1; } + 50% { opacity: 0.7; } + 100% { opacity: 1; } } /* ============================================ - RESPONSIVE AMÉLIORÉ + LANGUAGE SELECTOR ============================================ */ +.language-selector { + display: flex; + align-items: center; + gap: 8px; + padding: 6px 12px; + background-color: rgba(255, 255, 255, 0.1); + border-radius: 4px; + cursor: pointer; + transition: background-color 0.2s ease; + color: #313c4c; +} + +.language-selector:hover { + background-color: rgba(255, 255, 255, 0.2); +} + +.language-flag { + width: 24px; + height: 16px; + object-fit: cover; + border-radius: 2px; +} + +/* ============================================ + MODAL CUSTOMIZATION + ============================================ */ +.modal-office .modal-header { + background: linear-gradient(135deg, var(--office-secondary), #1e4a8b); + color: white; + border-bottom: none; +} + +.modal-office .modal-title { + font-weight: 600; +} + +/* ============================================ + RESPONSIVE DESIGN + ============================================ */ +@media (max-width: 1200px) { + .app-sidebar { + width: var(--sidebar-collapsed); + } + + .app-main { + margin-left: var(--sidebar-collapsed); + } + + .nav-text, + .nav-title, + .nav-badge, + .nav-arrow { + display: none; + } + + .nav-link { + justify-content: center; + padding: 16px; + } + + .nav-link i { + margin-right: 0; + font-size: 20px; + } + + .nav-submenu .nav-link { + padding: 12px; + justify-content: center; + } + + .nav-submenu .nav-link::before { + display: none; + } + + .context-panel { + width: 100%; + right: -100%; + } +} @media (max-width: 768px) { .app-sidebar { - transition: transform 0.3s ease; + transform: translateX(-100%); + width: var(--sidebar-width); } - .app-sidebar.show { + .app-sidebar.open { transform: translateX(0); - box-shadow: 2px 0 12px rgba(0, 0, 0, 0.15); } - .context-toggle { - width: 48px; - height: 48px; - right: 16px; - bottom: 16px; + .app-main { + margin-left: 0; + } + + .header-content { + padding: 0 16px; + } + + .content-area { + padding: 16px; + } + + .user-info { + display: none; + } + + .nav-text, + .nav-title, + .nav-badge, + .nav-arrow { + display: block; } } /* ============================================ - ACCESSIBILITÉ + SCROLLBAR STYLING ============================================ */ - -.nav-link:focus { - outline: 2px solid var(--office-secondary); - outline-offset: -2px; +.app-sidebar::-webkit-scrollbar, +.context-body::-webkit-scrollbar { + width: 6px; } -.context-toggle:focus { - outline: 3px solid var(--office-secondary); - outline-offset: 2px; +.app-sidebar::-webkit-scrollbar-track, +.context-body::-webkit-scrollbar-track { + background: rgba(255, 255, 255, 0.1); + border-radius: 3px; } -/* High contrast mode */ -@media (prefers-contrast: high) { - :root { - --office-border: #000000; - --office-dark: #000000; - } - - .nav-link.active { - outline: 3px solid #000; - } +.app-sidebar::-webkit-scrollbar-thumb, +.context-body::-webkit-scrollbar-thumb { + background: rgba(255, 255, 255, 0.3); + border-radius: 3px; } -/* Reduced motion */ -@media (prefers-reduced-motion: reduce) { - * { - animation-duration: 0.01ms !important; - animation-iteration-count: 1 !important; - transition-duration: 0.01ms !important; - } +.app-sidebar::-webkit-scrollbar-thumb:hover, +.context-body::-webkit-scrollbar-thumb:hover { + background: rgba(255, 255, 255, 0.4); } \ No newline at end of file