radiantrh/Bootstrap_new/css/style_office.css
2025-12-24 19:37:36 +00:00

860 lines
19 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* ============================================
STYLE OFFICE POUR LE PORTAIL RH - VERSION CORRIGÉE
Encodage: UTF-8 sans BOM
============================================ */
: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;
--office-primary-light: rgba(183, 71, 42, 0.08);
--office-primary-lighter: rgba(183, 71, 42, 0.04);
--office-primary-border: rgba(183, 71, 42, 0.15);
--office-warm-bg: #fefcfb;
--office-card-highlight: #fff9f8;
--content-margin-left: calc(var(--sidebar-width) + 24px);
--content-margin-right: 24px;
--container-max: 1400px;
--container-pad: 24px;
}
/* ============================================
BASE STYLES & RESET
============================================ */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
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;
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); /* 70px */
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;
}
.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);
}
/* Quand sidebar réduite */
.app-sidebar.collapsed {
width: var(--sidebar-collapsed);
}
.app-main.collapsed {
margin-left: var(--sidebar-collapsed);
}
.app-main.sidebar-open {
margin-left: var(--sidebar-width);
}
/* ============================================
NAVIGATION TABS
============================================ */
.nav-bar {
background-color: white;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
border: 1px solid var(--office-border);
position: fixed;
top: var(--header-height); /* Directement sous le header */
left: var(--sidebar-width); /* Commence après la sidebar */
right: 0;
z-index: 1000;
height: 56px;
display: flex;
align-items: center;
padding: 0;
margin: 0;
transition: left var(--transition-speed) ease;
}
/* Conteneur pour centrer le contenu */
.nav-bar > .nav-tabs {
width: 100%;
max-width: var(--container-max);
margin: 0 auto;
padding: 0 var(--container-pad);
height: 100%;
display: flex;
align-items: center;
gap: 4px;
overflow-x: auto;
}
.nav-tab {
display: inline-flex;
align-items: center;
padding: 10px 18px;
background-color: transparent;
color: var(--office-dark);
text-decoration: none;
border-radius: 6px;
font-size: 14px;
font-weight: 500;
white-space: nowrap;
transition: all 0.2s ease;
border: 1px solid transparent;
height: 40px;
}
.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 card */
.content-card {
background: var(--office-card);
border-radius: 8px;
box-shadow: 0 2px 6px rgba(0,0,0,.05);
margin-top: 8px; /* Ajout pour rapprocher visuellement la carte de la nav-bar */
}
.content-area {
padding: calc(var(--header-height) + 56px) 24px 24px 24px; /* supprime le +8px */
max-width: 1400px;
margin: 24px auto !important;
}
/* Sidebar collapsée (tablette) */
@media (max-width: 1200px) {
.nav-bar { left: var(--sidebar-collapsed); }
.content-area { padding-left: 24px; padding-right: 24px; }
}
.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;
background-color: var(--office-card);
}
/* ============================================
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: 15px;
height: 15px;
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;
background-color: #d0d0d0 !important;
}
.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;
}
@keyframes pulse {
0% { opacity: 1; }
50% { opacity: 0.7; }
100% { opacity: 1; }
}
/* ============================================
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%;
}
}
/* Mobile — UNE SEULE définition */
@media (max-width: 768px) {
.app-sidebar { transform: translateX(-100%); width: var(--sidebar-width); }
.app-sidebar.show { transform: translateX(0); }
.app-main { margin-left: 0; }
.nav-bar { left: 0; border-radius: 0; top: var(--header-height); }
.nav-bar > .nav-tabs { padding: 0 16px; }
/* Garder +8px ici pour fermer lécart (rouge) */
.content-area { padding: calc(var(--header-height) + 56px + 8px) 16px 16px 16px; max-width: 100%; }
.content-card { border-radius: 8px; margin: 8px 0 16px 0; /* 8px en haut, 16px en bas */ }
.header-content { padding: 0 16px; }
.user-info { display: none; }
}
/* Écrans larges : mêmes insets pour nav-tabs et content-area */
@media (min-width: 1400px) {
.nav-bar > .nav-tabs {
padding-left: calc((100vw - 1400px) / 2);
padding-right: calc((100vw - 1400px) / 2);
}
.content-area {
padding-left: calc((100vw - 1400px) / 2);
padding-right: calc((100vw - 1400px) / 2);
}
}
/* ============================================
SCROLLBAR STYLING
============================================ */
.app-sidebar::-webkit-scrollbar,
.context-body::-webkit-scrollbar {
width: 6px;
}
.app-sidebar::-webkit-scrollbar-track,
.context-body::-webkit-scrollbar-track {
background: rgba(255, 255, 255, 0.1);
border-radius: 3px;
}
.app-sidebar::-webkit-scrollbar-thumb,
.context-body::-webkit-scrollbar-thumb {
background: rgba(255, 255, 255, 0.3);
border-radius: 3px;
}
.app-sidebar::-webkit-scrollbar-thumb:hover,
.context-body::-webkit-scrollbar-thumb:hover {
background: rgba(255, 255, 255, 0.4);
}
/* ============================================
STYLE DE SCROLLBAR POUR NAV-TABS
============================================ */
.nav-tabs::-webkit-scrollbar {
height: 4px;
}
.nav-tabs::-webkit-scrollbar-track {
background: rgba(0, 0, 0, 0.05);
border-radius: 2px;
}
.nav-tabs::-webkit-scrollbar-thumb {
background: rgba(0, 0, 0, 0.2);
border-radius: 2px;
}
.nav-tabs::-webkit-scrollbar-thumb:hover {
background: rgba(0, 0, 0, 0.3);
}
/*Accueil*/
.container { padding: 0 25px 25px 25px 25px; }
h1 { margin-bottom: 20px; }
.kpis { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; }
.card {
background: #fff;
padding: 20px;
border-radius: 8px;
box-shadow: 0 2px 6px rgba(0,0,0,.05);
}
.card h3 { margin: 0 0 10px; font-size: 14px; color: #666; }
.card .value { font-size: 1.0rem; font-weight: bold; }
.grid-1{display:grid; grid-template-rows:auto; margin-top:25px;}
.grid-2 { display:grid; grid-template-columns: 1fr 1fr; gap:20px; margin-top:25px; }
ul { list-style:none; padding:0; margin:0; }
li { padding:10px 0; border-bottom:1px solid #eee; }
li i { margin-right:10px; color:#007bff; }
.alert i { color:#ff9800; }
.chart {
height: auto;
background:#eef2f7;
border-radius:6px;
display:flex;
align-items:center;
justify-content:center;
color:#888;
font-style:italic;
min-height: 280px;
padding: 32px 0;
}
/* Style pour les sous-détails dans les KPIs */
.sub-values {
margin-top: 10px;
padding-top: 10px;
border-top: 1px solid #eee; /* Fine séparation pour l'harmonie */
}
.sub-item {
display: flex;
justify-content: space-between;
font-size: 12px; /* Plus petit pour ne pas voler la vedette au KPI principal */
color: #666;
line-height: 1.6;
}
.sub-item strong {
color: #333;
}