Files
CDN-APP-INSIDER/public/css/dashboard.styles.css
Dinawo 2df1b28962
All checks were successful
continuous-integration/drone/push Build is passing
Update v1.2.0-beta - Dynamic context menu & permissions
 New Features:
- Dynamic permission-based context menus for files and folders
- Support for collaborative folder access control
- Upload to specific folders including shared folders
- Changelog modal for version updates
- Improved dark mode synchronization

🐛 Bug Fixes:
- Fixed context menu displaying incorrect options
- Fixed CSS !important override preventing dynamic menu behavior
- Fixed folder collaboration permission checks
- Fixed breadcrumb navigation with empty segments
- Fixed "Premature close" error loop in attachments
- Fixed missing user variable in admin routes
- Fixed avatar loading COEP policy issues

🔒 Security:
- Added security middleware (CSRF, rate limiting, input validation)
- Fixed collaboration folder access validation
- Improved shared folder permission handling

🎨 UI/UX Improvements:
- Removed Actions column from folder view
- Context menu now properly hides/shows based on permissions
- Better visual feedback for collaborative folders
- Improved upload flow with inline modals

🧹 Code Quality:
- Added collaboration data to folder routes
- Refactored context menu logic for better maintainability
- Added debug logging for troubleshooting
- Improved file upload handling with chunking support
2025-10-25 23:55:51 +02:00

2380 lines
49 KiB
CSS

@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap');
:root {
--background: 0 0% 100%;
--foreground: 222.2 84% 4.9%;
--card: 0 0% 100%;
--card-foreground: 222.2 84% 4.9%;
--popover: 0 0% 100%;
--popover-foreground: 222.2 84% 4.9%;
--primary: 222.2 47.4% 11.2%;
--primary-foreground: 210 40% 98%;
--secondary: 210 40% 96.1%;
--secondary-foreground: 222.2 47.4% 11.2%;
--muted: 210 40% 96.1%;
--muted-foreground: 215.4 16.3% 46.9%;
--accent: 210 40% 96.1%;
--accent-foreground: 222.2 47.4% 11.2%;
--destructive: 0 84.2% 60.2%;
--destructive-foreground: 210 40% 98%;
--border: 214.3 31.8% 91.4%;
--input: 214.3 31.8% 91.4%;
--ring: 222.2 84% 4.9%;
--radius: 0.5rem;
}
.dark {
--background: 222.2 84% 4.9%;
--foreground: 210 40% 98%;
--card: 222.2 84% 4.9%;
--card-foreground: 210 40% 98%;
--popover: 222.2 84% 4.9%;
--popover-foreground: 210 40% 98%;
--primary: 210 40% 98%;
--primary-foreground: 222.2 47.4% 11.2%;
--secondary: 217.2 32.6% 17.5%;
--secondary-foreground: 210 40% 98%;
--muted: 217.2 32.6% 17.5%;
--muted-foreground: 215 20.2% 65.1%;
--accent: 217.2 32.6% 17.5%;
--accent-foreground: 210 40% 98%;
--destructive: 0 62.8% 30.6%;
--destructive-foreground: 210 40% 98%;
--border: 217.2 32.6% 17.5%;
--input: 217.2 32.6% 17.5%;
--ring: 212.7 26.8% 83.9%;
}
.container {
max-width: 90%;
margin: 0 auto;
padding: 2rem;
flex: 1 0 auto;
}
.form-container {
background-color: hsl(var(--card));
border: 1px solid hsl(var(--border));
border-radius: var(--radius);
padding: 2rem;
}
.form-control {
width: 100%;
padding: 0.5rem;
border: 1px solid hsl(var(--border));
border-radius: var(--radius);
background-color: hsl(var(--background));
color: hsl(var(--foreground));
}
.btn {
display: inline-flex;
align-items: center;
justify-content: center;
border-radius: var(--radius);
font-weight: 500;
transition: all 0.3s ease;
cursor: pointer;
padding: 0.5rem 1rem;
}
.btn-primary {
background-color: hsl(var(--primary));
color: hsl(var(--primary-foreground));
}
.btn-primary:hover {
opacity: 0.9;
}
.btn-secondary {
background-color: hsl(var(--secondary));
color: hsl(var(--secondary-foreground));
}
.btn-secondary:hover {
opacity: 0.9;
}
.btn-success {
background-color: hsl(var(--primary));
color: hsl(var(--primary-foreground));
}
.btn-success:hover {
opacity: 0.9;
}
.btn-danger {
background-color: hsl(var(--destructive));
color: hsl(var(--destructive-foreground));
}
.btn-danger:hover {
opacity: 0.9;
}
.animate {
animation: fadeIn 0.5s ease-out;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
.table-responsive {
overflow-x: auto;
}
.table {
width: 100%;
border-collapse: separate;
border-spacing: 0;
}
.table th,
.table td {
padding: 0.75rem;
vertical-align: top;
border-top: 1px solid hsl(var(--border));
}
.table thead th {
vertical-align: bottom;
border-bottom: 2px solid hsl(var(--border));
}
.header {
background-color: hsl(var(--background));
border-bottom: 1px solid hsl(var(--border));
}
.dropdown-menu, .dropdown-menu.show {
background-color: hsl(var(--card));
border: 1px solid hsl(var(--border));
border-radius: 16px !important;
box-shadow: 0 4px 16px rgba(0,0,0,0.18);
min-width: 180px;
padding: 0.5rem 0;
overflow: hidden;
z-index: 1000;
animation: menuFadeIn 0.12s ease-out;
}
.dropdown-item {
border-radius: 12px;
margin: 0 0.5rem;
padding: 0.5rem 1rem;
font-size: 0.95rem;
display: flex;
align-items: center;
gap: 0.75rem;
color: hsl(var(--foreground));
background: none;
transition: background 0.12s, color 0.12s;
}
.dropdown-item:hover {
background-color: hsl(var(--accent));
color: hsl(var(--accent-foreground));
}
.dropdown-item.text-danger {
color: hsl(var(--destructive));
}
.dropdown-item.text-danger:hover {
background-color: hsl(var(--destructive));
color: hsl(var(--destructive-foreground));
}
.dropdown-item.text-warning {
color: #f59e0b;
}
.dropdown-item.text-warning:hover {
background-color: #f59e0b22;
color: #fff;
}
.dropdown-divider {
border-top: 1px solid hsl(var(--border));
margin: 0.25rem 0;
}
/* Correction du positionnement dynamique (haut/bas) */
.dropdown-menu[style*="bottom: 100%"] {
border-radius: 16px 16px 16px 16px !important;
box-shadow: 0 -4px 16px rgba(0,0,0,0.18);
}
.footer {
flex-shrink: 0;
background-color: hsl(var(--background));
border-top: 1px solid hsl(var(--border));
padding: 1rem 0;
}
.modal,
.modal.fade {
display: none !important;
position: fixed !important;
top: 0 !important;
left: 0 !important;
width: 100% !important;
height: 100% !important;
background-color: rgba(0, 0, 0, 0.6) !important;
backdrop-filter: blur(8px) !important;
justify-content: center !important;
align-items: center !important;
z-index: 1050 !important;
animation: fadeIn 0.2s ease !important;
}
.modal.show,
.modal.fade.show {
display: flex !important;
}
.modal-dialog {
position: relative !important;
margin: 0 auto !important;
max-width: 90% !important;
width: 600px !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
}
.modal-dialog-centered {
display: flex !important;
align-items: center !important;
min-height: calc(100% - 1rem) !important;
}
.modal-content {
background-color: hsl(var(--card)) !important;
border-radius: 16px !important;
box-shadow: 0 20px 60px rgba(0,0,0,0.4) !important;
padding: 0 !important;
max-width: 100% !important;
width: 100% !important;
border: 1px solid hsl(var(--border)) !important;
animation: modalSlideIn 0.3s ease !important;
}
.modal-header {
padding: 1.5rem 2rem !important;
border-bottom: 1px solid hsl(var(--border)) !important;
display: flex !important;
align-items: center !important;
justify-content: space-between !important;
}
.modal-body {
padding: 2rem !important;
max-height: 70vh !important;
overflow-y: auto !important;
}
.modal-footer {
padding: 1rem 2rem !important;
border-top: 1px solid hsl(var(--border)) !important;
display: flex !important;
justify-content: flex-end !important;
gap: 0.75rem !important;
}
.modal .modal-title {
font-size: 1.25rem !important;
font-weight: 600 !important;
color: hsl(var(--foreground)) !important;
margin: 0 !important;
}
.modal .close {
font-size: 1.5rem !important;
opacity: 0.6 !important;
transition: all 0.2s ease !important;
background: none !important;
border: none !important;
color: hsl(var(--foreground)) !important;
cursor: pointer !important;
padding: 0.5rem !important;
border-radius: 0.5rem !important;
}
.modal .close:hover {
opacity: 1 !important;
background: hsl(var(--accent)) !important;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes modalSlideIn {
from {
opacity: 0;
transform: translateY(-20px) scale(0.95);
}
to {
opacity: 1;
transform: translateY(0) scale(1);
}
}
.navbar {
padding: 0.5rem 1rem !important;
min-height: 70px !important;
max-height: 70px !important;
position: relative !important;
}
.container-fluid {
display: flex !important;
justify-content: space-between !important;
align-items: center !important;
height: 100% !important;
}
/* Alignement des boutons à droite */
.navbar-nav {
display: flex !important;
align-items: center !important;
margin-left: auto !important;
gap: 0.5rem !important;
position: relative !important;
}
.navbar-nav .nav-item {
position: relative !important;
}
/* Style pour les boutons de la navbar */
.nav-btn {
padding: 0.5rem 1rem !important;
font-size: 0.95rem !important;
line-height: 1.5 !important;
border-radius: 0.5rem !important;
transition: all 0.2s ease !important;
}
/* Style pour l'avatar de l'utilisateur */
.user-avatar {
width: 40px !important;
height: 40px !important;
object-fit: cover !important;
border-radius: 50% !important;
border: 2px solid hsl(var(--border)) !important;
transition: all 0.2s ease !important;
}
.user-avatar:hover {
transform: scale(1.05) !important;
border-color: hsl(var(--primary)) !important;
}
/* Style pour le bouton du dropdown */
#accountDropdownBtn {
padding: 0 !important;
border: none !important;
background: none !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
}
/* Style pour le menu dropdown - IMPORTANT: position absolue */
.navbar .dropdown {
position: relative !important;
}
.navbar .dropdown-menu {
position: absolute !important;
top: calc(100% + 0.5rem) !important;
right: 0 !important;
left: auto !important;
margin: 0 !important;
z-index: 1050 !important;
}
/* Ajustement pour les écrans plus petits */
@media (max-width: 768px) {
.navbar-nav {
flex-direction: row !important;
justify-content: flex-end !important;
width: 100% !important;
}
.navbar-nav .nav-item {
margin-left: 5px !important;
}
}
/* Animation de chargement stylisée */
.initial-loading {
position: fixed;
inset: 0;
background-color: #333;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
z-index: 9999;
transition: background-color 0.3s ease;
}
.initial-loading > .loader {
border: 4px solid #fff;
border-top-color: transparent;
border-radius: 50%;
width: 40px;
height: 40px;
animation: spin 1s linear infinite;
}
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
.initial-loading > .message {
margin-top: 16px;
font-size: 16px;
font-weight: 600;
color: #fff;
}
.success-animation {
position: relative;
display: flex;
flex-direction: column;
align-items: center;
gap: 1.5rem;
}
.success-icon {
width: 64px;
height: 64px;
background-color: #0EA5E9;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
position: relative;
transform: scale(0);
animation: popIn 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
}
.success-icon svg {
width: 32px;
height: 32px;
color: white;
opacity: 0;
transform: scale(0.5);
animation: iconIn 0.3s cubic-bezier(0.34, 1.56, 0.64, 1) forwards 0.2s;
}
.success-text {
display: flex;
flex-direction: column;
align-items: center;
gap: 0.5rem;
opacity: 0;
transform: translateY(10px);
animation: textIn 0.4s cubic-bezier(0.4, 0, 0.2, 1) forwards 0.4s;
}
.success-text h2 {
margin: 0;
color: hsl(var(--foreground));
font-size: 1.5rem;
font-weight: 600;
}
.success-text p {
margin: 0;
color: hsl(var(--muted-foreground));
font-size: 0.875rem;
}
.success-text .loading-message {
color: hsl(var(--muted-foreground));
font-size: 0.75rem;
opacity: 0.8;
margin-top: 0.5rem;
}
.progress-bar {
width: 200px;
height: 4px;
background: hsla(var(--foreground), 0.1);
border-radius: 2px;
overflow: hidden;
margin-top: 1rem;
opacity: 0;
animation: textIn 0.4s cubic-bezier(0.4, 0, 0.2, 1) forwards 0.6s;
}
.progress-bar::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 40%;
height: 100%;
background-color: #10b981;
border-radius: 2px;
animation: loading 1.5s ease-in-out infinite;
}
@keyframes popIn {
from {
transform: scale(0);
}
to {
transform: scale(1);
}
}
@keyframes iconIn {
to {
opacity: 1;
transform: scale(1);
}
}
@keyframes textIn {
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes loading {
0% {
left: -40%;
}
100% {
left: 100%;
}
}
/* Animation de sortie */
.fade-out {
animation: fadeOut 0.3s cubic-bezier(0.4, 0, 0.2, 1) forwards;
}
@keyframes fadeOut {
to {
opacity: 0;
}
}
/* Notifications container */
.notification-container {
position: fixed;
top: 1rem;
right: 1rem;
z-index: 1100;
display: flex;
flex-direction: column;
gap: 0.5rem;
pointer-events: none;
max-width: 100%;
padding: 1rem;
}
/* Individual notification */
.notification {
display: flex;
align-items: center;
background-color: hsl(var(--card));
border: 1px solid hsl(var(--border));
border-radius: var(--radius);
padding: 1rem;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
transform: translateX(120%);
opacity: 0;
transition: all 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);
pointer-events: auto;
max-width: 380px;
margin-bottom: 0.5rem;
}
.notification.show {
transform: translateX(0);
opacity: 1;
}
/* Icon styles */
.notification-icon {
display: flex;
align-items: center;
justify-content: center;
width: 2rem;
height: 2rem;
border-radius: 50%;
margin-right: 1rem;
flex-shrink: 0;
}
/* Notification types */
.notification.success .notification-icon {
background: rgba(16, 185, 129, 0.1);
color: #10B981;
}
.notification.error .notification-icon {
background: rgba(239, 68, 68, 0.1);
color: #EF4444;
}
.notification.warning .notification-icon {
background: rgba(245, 158, 11, 0.1);
color: #F59E0B;
}
.notification.info .notification-icon {
background: rgba(59, 130, 246, 0.1);
color: #3B82F6;
}
/* Content styling */
.notification-content {
flex: 1;
}
.notification-title {
font-weight: 600;
font-size: 0.925rem;
margin-bottom: 0.25rem;
color: hsl(var(--foreground));
}
.notification-message {
font-size: 0.875rem;
color: hsl(var(--muted-foreground));
line-height: 1.4;
}
/* Dark mode adjustments */
.dark .notification {
background-color: hsl(var(--card));
border-color: hsl(var(--border));
}
.dark .notification-title {
color: hsl(var(--foreground));
}
.dark .notification-message {
color: hsl(var(--muted-foreground));
}
/* Animations */
@keyframes slideIn {
from {
transform: translateX(120%);
opacity: 0;
}
to {
transform: translateX(0);
opacity: 1;
}
}
@keyframes slideOut {
from {
transform: translateX(0);
opacity: 1;
}
to {
transform: translateX(120%);
opacity: 0;
}
}
/* File info styles */
.file-info {
padding: 0.5rem;
background: rgba(var(--card), 0.5);
border-radius: var(--radius);
}
.file-info p {
margin-bottom: 0.5rem;
}
.file-info strong {
color: hsl(var(--foreground));
}
/* Metadata info styles */
.metadata-info {
padding: 0.5rem;
background: rgba(var(--card), 0.5);
border-radius: var(--radius);
}
.metadata-info p {
margin-bottom: 0.5rem;
}
.metadata-info strong {
color: hsl(var(--foreground));
}
/* Responsive adjustments */
@media (max-width: 640px) {
.notification-container {
left: 1rem;
right: 1rem;
}
.notification {
max-width: 100%;
}
}
.collaboration-badge {
display: inline-flex;
align-items: center;
gap: 4px;
padding: 4px 8px;
border-radius: 12px;
cursor: pointer;
transition: all 0.3s ease;
}
.collaboration-badge.badge-info {
background-color: #17a2b8;
color: white;
}
.collaboration-badge.badge-secondary {
background-color: #6c757d;
color: white;
}
.toggle-collaboration-btn.active {
background-color: #17a2b8;
border-color: #17a2b8;
color: white;
}
.toggle-collaboration-btn:not(.active) {
background-color: #6c757d;
border-color: #6c757d;
}
.collaboration-details {
max-height: 300px;
overflow-y: auto;
}
.user-item {
display: flex;
align-items: center;
gap: 8px;
padding: 8px;
border-bottom: 1px solid #eee;
}
.user-avatar {
width: 32px;
height: 32px;
border-radius: 50%;
object-fit: cover;
}
/* Styles pour le menu contextuel */
.context-menu {
position: fixed;
z-index: 1000 !important;
background-color: hsl(var(--card)) !important;
border: 1px solid hsl(var(--border)) !important;
border-radius: 12px !important;
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.4) !important;
min-width: 200px;
overflow: hidden;
padding: 0.5rem;
}
/* Style pour les items du menu */
.menu-item,
.dropdown-item,
.context-menu button,
.context-menu a {
display: flex;
align-items: center;
width: 100% !important;
padding: 0.75rem 1rem !important;
border: none !important;
background: none !important;
color: hsl(var(--foreground)) !important;
font-size: 0.9rem !important;
text-align: left !important;
cursor: pointer !important;
transition: all 0.15s ease !important;
text-decoration: none !important;
white-space: nowrap !important;
border-radius: 8px !important;
margin: 0.15rem 0 !important;
}
/* Hover pour mode clair et sombre */
.menu-item:hover,
.dropdown-item:hover,
.context-menu button:hover,
.context-menu a:hover {
background-color: hsl(var(--accent)) !important;
color: hsl(var(--accent-foreground)) !important;
transform: translateX(2px);
}
.dark .menu-item:hover,
.dark .dropdown-item:hover,
.dark .context-menu button:hover,
.dark .context-menu a:hover {
background-color: hsl(var(--accent)) !important;
color: hsl(var(--accent-foreground)) !important;
transform: translateX(2px);
}
/* Alignement des icônes */
.menu-item i,
.dropdown-item i,
.context-menu button i,
.context-menu a i {
width: 20px !important;
margin-right: 0.75rem !important;
text-align: center !important;
font-size: 0.95rem !important;
}
/* Style pour les items destructifs (suppression) */
.menu-item.destructive,
.dropdown-item.destructive {
color: hsl(var(--destructive));
}
.menu-item.destructive:hover,
.dropdown-item.destructive:hover {
background-color: hsl(var(--destructive));
color: hsl(var(--destructive-foreground));
}
/* Style pour le séparateur */
.menu-separator,
.dropdown-divider {
height: 1px !important;
background-color: hsl(var(--border)) !important;
margin: 0.5rem 0 !important;
border: none !important;
}
/* Menu déroulant */
.dropdown-menu {
background-color: hsl(var(--card));
border: 1px solid hsl(var(--border));
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
border-radius: var(--radius);
overflow: hidden;
min-width: 180px;
}
/* Animation */
@keyframes menuFadeIn {
from {
opacity: 0;
transform: scale(0.95);
}
to {
opacity: 1;
transform: scale(1);
}
}
.context-menu,
.dropdown-menu.show {
animation: menuFadeIn 0.1s ease-out;
}
/* Dark mode hover fix */
.dark .table tr:hover {
background-color: hsl(var(--muted)) !important;
}
/* Dropdown animation fix */
.dropdown-menu {
display: none;
opacity: 0;
transform: translateY(-10px);
transition: opacity 0.15s ease-out, transform 0.15s ease-out;
}
.dropdown-menu.show {
display: block;
opacity: 1;
transform: translateY(0);
}
/* Double-click styles */
tr[data-type="folder"], tr[data-type="shared-folder"] {
cursor: pointer;
}
tr[data-type="folder"]:active, tr[data-type="shared-folder"]:active {
background-color: hsl(var(--accent));
}
/* === VUE GRILLE ULTRAMODERNE === */
.grid-view {
display: grid !important;
grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)) !important;
gap: 1.25rem !important;
padding: 1.5rem !important;
width: 100% !important;
max-width: 100% !important;
box-sizing: border-box !important;
animation: gridFadeIn 0.4s ease-out !important;
}
.grid-view > tr {
display: flex !important;
flex-direction: column !important;
align-items: center !important;
justify-content: flex-start !important;
position: relative !important;
background: hsl(var(--card)) !important;
border: 1px solid hsl(var(--border)) !important;
border-radius: 16px !important;
padding: 1.5rem 1rem !important;
text-align: center !important;
cursor: pointer !important;
transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1) !important;
min-height: 160px !important;
overflow: visible !important;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06) !important;
}
.grid-view tr:hover {
transform: translateY(-6px) scale(1.02) !important;
box-shadow: 0 12px 35px rgba(0, 0, 0, 0.18) !important;
border-color: hsl(var(--primary) / 0.5) !important;
}
.grid-view td {
display: block !important;
padding: 0 !important;
border: none !important;
}
.grid-view td:not(:first-child) {
display: none !important;
}
.grid-view .icon-container {
display: flex !important;
flex-direction: column !important;
align-items: center !important;
justify-content: center !important;
gap: 1rem !important;
padding: 0 !important;
position: relative !important;
width: 100% !important;
}
.grid-view .icon {
width: 72px !important;
height: 72px !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
background: linear-gradient(135deg, hsl(var(--primary) / 0.12), hsl(var(--accent) / 0.08)) !important;
border-radius: 16px !important;
margin-bottom: 0 !important;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05) !important;
}
.grid-view tr:hover .icon {
transform: scale(1.15) rotate(-5deg) !important;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.12) !important;
}
.grid-view .icon i {
font-size: 2.25rem !important;
color: hsl(var(--primary)) !important;
transition: all 0.2s ease !important;
}
.grid-view .icon i.fa-folder,
.grid-view .icon i.fa-folder-open {
color: #f59e0b !important;
}
.grid-view .icon i.fa-file {
color: #3b82f6 !important;
}
.grid-view .icon i.fa-image {
color: #10b981 !important;
}
.grid-view .icon i.fa-film {
color: #ef4444 !important;
}
.grid-view .icon i.fa-file-pdf {
color: #dc2626 !important;
}
.grid-view .icon i.fa-file-archive {
color: #8b5cf6 !important;
}
.grid-view .icon i.fa-file-code {
color: #06b6d4 !important;
}
.grid-view .label {
font-size: 0.875rem !important;
font-weight: 600 !important;
color: hsl(var(--foreground)) !important;
margin: 0 !important;
overflow: hidden !important;
text-overflow: ellipsis !important;
display: -webkit-box !important;
-webkit-line-clamp: 2 !important;
line-clamp: 2 !important;
-webkit-box-orient: vertical !important;
max-width: 100% !important;
line-height: 1.4 !important;
min-height: 2.4rem !important;
text-align: center !important;
word-break: break-word !important;
padding: 0 0.5rem !important;
}
.grid-view .details {
font-size: 0.7rem !important;
color: hsl(var(--muted-foreground)) !important;
margin: 0 !important;
padding: 0.4rem 0.75rem !important;
background: hsl(var(--muted) / 0.4) !important;
border-radius: 12px !important;
width: auto !important;
text-align: center !important;
font-weight: 500 !important;
border: 1px solid hsl(var(--border) / 0.5) !important;
}
/* Actions pour la vue grille */
.grid-view .grid-dropdown {
position: absolute;
top: 0.5rem;
right: 0.5rem;
opacity: 0;
transition: all 0.2s ease;
z-index: 10;
}
.grid-view tr:hover .grid-dropdown {
opacity: 1;
}
.grid-view .grid-dropdown .dropdown-toggle {
background: rgba(255, 255, 255, 0.9);
border: 1px solid hsl(var(--border));
border-radius: 6px;
padding: 0.25rem 0.5rem;
font-size: 0.75rem;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.grid-view .grid-dropdown .dropdown-menu {
font-size: 0.85rem;
min-width: 140px;
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}
/* Badge de collaboration pour la vue grille */
.grid-view .collaboration-badge {
position: absolute;
top: 0.75rem;
left: 0.75rem;
font-size: 0.65rem;
padding: 0.25rem 0.5rem;
border-radius: 8px;
background: hsl(var(--primary));
color: hsl(var(--primary-foreground));
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
/* Styles améliorés pour la vue liste */
.table:not(.grid-view) tr {
transition: background-color 0.2s ease;
}
.table:not(.grid-view) td {
vertical-align: middle;
padding: 1rem 0.75rem;
}
.table:not(.grid-view) td:first-child {
display: flex;
align-items: center;
gap: 0.75rem;
}
.table:not(.grid-view) .icon i {
font-size: 1.2rem;
width: 24px;
text-align: center;
}
/* Bouton de basculement vue grille/liste */
.view-toggle-btn {
background: hsl(var(--secondary));
color: hsl(var(--secondary-foreground));
border: 1px solid hsl(var(--border));
padding: 0.5rem;
border-radius: var(--radius);
cursor: pointer;
transition: all 0.2s ease;
}
.view-toggle-btn:hover {
background: hsl(var(--accent));
color: hsl(var(--accent-foreground));
}
.view-toggle-btn i {
font-size: 1.1rem;
}
/* Animation de transition entre les vues */
.table tbody {
transition: all 0.3s ease;
}
/* Animations pour la vue grille */
@keyframes gridFadeIn {
from {
opacity: 0;
transform: scale(0.95);
}
to {
opacity: 1;
transform: scale(1);
}
}
@keyframes itemSlideIn {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.grid-view tr {
animation: itemSlideIn 0.3s ease-out backwards;
}
.grid-view tr:nth-child(1) { animation-delay: 0.05s; }
.grid-view tr:nth-child(2) { animation-delay: 0.1s; }
.grid-view tr:nth-child(3) { animation-delay: 0.15s; }
.grid-view tr:nth-child(4) { animation-delay: 0.2s; }
.grid-view tr:nth-child(5) { animation-delay: 0.25s; }
.grid-view tr:nth-child(6) { animation-delay: 0.3s; }
/* Responsive adjustments */
@media (max-width: 768px) {
.grid-view {
grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
gap: 1rem;
padding: 1rem;
justify-content: center;
}
.grid-view .icon {
width: 48px;
height: 48px;
}
.grid-view .icon i {
font-size: 1.5rem;
}
.grid-view .label {
font-size: 0.85rem;
}
.grid-view .details {
font-size: 0.7rem;
}
}
@media (max-width: 480px) {
.grid-view {
grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
gap: 0.75rem;
padding: 0.75rem;
justify-content: center;
}
.grid-view .icon-container {
padding: 1rem 0.5rem 0.75rem;
}
}
/* Conteneur du tableau pour éviter l'espace vide */
#fileTable {
width: 100%;
table-layout: auto;
}
.grid-view.table {
table-layout: unset;
width: auto;
max-width: 100%;
}
/* Dark mode adjustments */
.dark .grid-view tr {
background: hsl(var(--card));
border-color: hsl(var(--border));
}
.dark .grid-view tr:hover {
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.3);
}
.dark .grid-view .grid-dropdown .dropdown-toggle {
background: rgba(0, 0, 0, 0.8);
color: hsl(var(--foreground));
}
/* Correction pour éviter l'espace vide à droite */
.table.grid-view {
display: grid !important;
table-layout: unset;
border-collapse: unset;
}
.table-responsive .grid-view {
overflow: visible;
}
.grid-view tbody {
display: contents;
}
.grid-view thead,
.grid-view tbody tr:empty {
display: none;
}
@keyframes fadeScale {
from {
opacity: 0;
transform: scale(0.98);
}
to {
opacity: 1;
transform: scale(1);
}
}
.grid-view {
animation: fadeScale 0.2s ease-out;
}
/* Modal Collaboration - Design moderne */
.collaboration-modal {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background: rgba(0, 0, 0, 0.5);
backdrop-filter: blur(8px);
display: flex;
align-items: center;
justify-content: center;
z-index: 1050;
opacity: 0;
visibility: hidden;
transition: all 0.3s ease;
}
.collaboration-modal.show {
opacity: 1;
visibility: visible;
}
.collaboration-modal .modal-content {
background: hsl(var(--card));
border: 1px solid hsl(var(--border));
border-radius: 16px;
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25), 0 0 0 1px rgba(255, 255, 255, 0.05);
padding: 24px;
max-width: 90%;
width: 600px;
position: relative;
overflow: hidden;
animation: contentShow 0.15s cubic-bezier(0.16, 1, 0.3, 1);
}
.collaboration-modal .modal-header {
padding: 2rem 2rem 1rem 2rem;
border-bottom: 1px solid hsl(var(--border));
display: flex;
align-items: center;
justify-content: space-between;
}
.collaboration-modal .modal-title {
font-size: 1.5rem;
font-weight: 600;
color: hsl(var(--foreground));
margin: 0;
display: flex;
align-items: center;
gap: 0.75rem;
}
.collaboration-modal .modal-title i {
color: hsl(var(--primary));
}
.collaboration-modal .close {
background: none;
border: none;
font-size: 1.5rem;
cursor: pointer;
color: hsl(var(--muted-foreground));
padding: 0.5rem;
border-radius: 8px;
transition: all 0.2s ease;
}
.collaboration-modal .close:hover {
background: hsl(var(--accent));
color: hsl(var(--accent-foreground));
}
.collaboration-modal .modal-body {
padding: 1.5rem 2rem;
max-height: 60vh;
overflow-y: auto;
}
.collaboration-modal .modal-footer {
padding: 1rem 2rem 2rem 2rem;
border-top: 1px solid hsl(var(--border));
display: flex;
justify-content: space-between;
align-items: center;
gap: 1rem;
}
/* Section des utilisateurs collaborateurs */
.collaboration-users {
margin-bottom: 2rem;
}
.collaboration-users h6 {
font-size: 1rem;
font-weight: 600;
color: hsl(var(--foreground));
margin-bottom: 1rem;
display: flex;
align-items: center;
gap: 0.5rem;
}
.collaboration-user-item {
display: flex;
align-items: center;
justify-content: space-between;
padding: 1rem;
background: hsl(var(--muted) / 0.3);
border: 1px solid hsl(var(--border));
border-radius: 12px;
margin-bottom: 0.75rem;
transition: all 0.2s ease;
}
.collaboration-user-item:hover {
background: hsl(var(--muted) / 0.5);
transform: translateY(-1px);
}
.collaboration-user-info {
display: flex;
align-items: center;
gap: 1rem;
}
.collaboration-user-avatar {
width: 40px;
height: 40px;
border-radius: 50%;
object-fit: cover;
border: 2px solid hsl(var(--border));
}
.collaboration-user-details h6 {
margin: 0;
font-size: 0.95rem;
font-weight: 500;
color: hsl(var(--foreground));
}
.collaboration-user-details small {
color: hsl(var(--muted-foreground));
font-size: 0.8rem;
}
.collaboration-user-status {
display: flex;
align-items: center;
gap: 0.5rem;
}
.status-indicator {
width: 8px;
height: 8px;
border-radius: 50%;
background: hsl(var(--primary));
animation: pulse 2s infinite;
}
.status-indicator.offline {
background: hsl(var(--muted-foreground));
animation: none;
}
@keyframes pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.5; }
}
/* Section d'ajout de collaborateur */
.add-collaborator {
padding: 1.5rem;
background: hsl(var(--accent) / 0.1);
border: 1px dashed hsl(var(--border));
border-radius: 12px;
}
.add-collaborator h6 {
font-size: 1rem;
font-weight: 600;
color: hsl(var(--foreground));
margin-bottom: 1rem;
display: flex;
align-items: center;
gap: 0.5rem;
}
.search-input-group {
position: relative;
margin-bottom: 1rem;
}
.search-input-group input {
width: 100%;
padding: 0.75rem 1rem 0.75rem 2.5rem;
border: 1px solid hsl(var(--border));
border-radius: 8px;
background: hsl(var(--background));
color: hsl(var(--foreground));
font-size: 0.9rem;
transition: all 0.2s ease;
}
.search-input-group input:focus {
outline: none;
border-color: hsl(var(--primary));
box-shadow: 0 0 0 3px hsl(var(--primary) / 0.1);
}
.search-input-group i {
position: absolute;
left: 0.75rem;
top: 50%;
transform: translateY(-50%);
color: hsl(var(--muted-foreground));
font-size: 0.9rem;
}
.search-results {
max-height: 200px;
overflow-y: auto;
border: 1px solid hsl(var(--border));
border-radius: 8px;
background: hsl(var(--background));
margin-top: 0.5rem;
}
.user-result {
padding: 0.75rem 1rem;
border-bottom: 1px solid hsl(var(--border));
transition: background 0.2s ease;
}
.user-result:last-child {
border-bottom: none;
}
.user-result:hover {
background: hsl(var(--accent) / 0.2);
}
.user-result .user-info {
display: flex;
align-items: center;
justify-content: space-between;
}
.user-result .user-avatar {
width: 32px;
height: 32px;
border-radius: 50%;
margin-right: 0.75rem;
object-fit: cover;
}
.user-result .user-name {
font-weight: 500;
color: hsl(var(--foreground));
}
.user-result .btn {
padding: 0.4rem 0.8rem;
font-size: 0.8rem;
border-radius: 6px;
}
/* État vide */
.empty-state {
text-align: center;
padding: 2rem 1rem;
color: hsl(var(--muted-foreground));
}
.empty-state i {
font-size: 2.5rem;
margin-bottom: 1rem;
opacity: 0.5;
}
.empty-state p {
margin: 0;
font-size: 0.9rem;
}
/* Context Menu amélioré */
.context-menu {
min-width: 220px;
padding: 0.5rem;
}
.context-menu .menu-item {
border-radius: var(--radius);
margin: 0.2rem 0;
}
/* Style du menu contextuel en mode sombre */
.dark .context-menu {
background-color: hsl(var(--card));
border-color: hsl(var(--border));
}
.dark .context-menu .menu-item {
color: hsl(var(--foreground));
}
.dark .context-menu .menu-item:hover {
background-color: hsl(var(--accent));
color: hsl(var(--accent-foreground));
}
/* Correction des modales en mode sombre */
.dark .modal-content {
background-color: hsl(var(--card));
color: hsl(var(--foreground));
}
.dark .modal-header {
border-bottom-color: hsl(var(--border));
}
.dark .modal-footer {
border-top-color: hsl(var(--border));
}
.dark .modal .close {
color: hsl(var(--foreground));
}
.dark .modal-body {
color: hsl(var(--foreground));
}
.dark .form-control {
background-color: hsl(var(--background));
border-color: hsl(var(--border));
color: hsl(var(--foreground));
}
/* SweetAlert2 Dark Mode */
.dark .swal2-popup {
background-color: hsl(var(--card)) !important;
color: hsl(var(--foreground)) !important;
}
.dark .swal2-title {
color: hsl(var(--foreground)) !important;
}
.dark .swal2-content {
color: hsl(var(--foreground)) !important;
}
.dark .swal2-input {
background-color: hsl(var(--background)) !important;
border-color: hsl(var(--border)) !important;
color: hsl(var(--foreground)) !important;
}
/* Nouveau style pour le bouton de copie de lien */
.copy-link-btn {
display: flex;
align-items: center;
gap: 0.5rem;
width: 100%;
padding: 0.5rem 1rem;
color: hsl(var(--foreground));
background: none;
border: none;
cursor: pointer;
transition: all 0.2s ease;
}
.copy-link-btn:hover {
background-color: hsl(var(--accent));
color: hsl(var(--accent-foreground));
}
.copy-link-btn i {
width: 20px;
text-align: center;
}
/* =================== MODAL COLLABORATION MODERNE =================== */
.collaboration-modal {
display: none !important;
position: fixed !important;
top: 0 !important;
left: 0 !important;
width: 100% !important;
height: 100% !important;
z-index: 1050 !important;
background-color: rgba(0, 0, 0, 0.6) !important;
backdrop-filter: blur(12px) !important;
-webkit-backdrop-filter: blur(12px) !important;
animation: overlayShow 0.15s cubic-bezier(0.16, 1, 0.3, 1) !important;
justify-content: center !important;
align-items: center !important;
}
.collaboration-modal.show,
.collaboration-modal[style*="display: block"] {
display: flex !important;
}
.collaboration-modal .modal-dialog {
position: relative !important;
width: 90vw !important;
max-width: 580px !important;
max-height: 85vh !important;
margin: 0 !important;
transform: none !important;
}
.collaboration-modal .modal-content {
background: hsl(var(--card)) !important;
border-radius: 16px !important;
border: 1px solid hsl(var(--border)) !important;
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25), 0 0 0 1px rgba(255, 255, 255, 0.05) !important;
animation: contentShow 0.15s cubic-bezier(0.16, 1, 0.3, 1) !important;
overflow: hidden !important;
position: relative !important;
width: 100% !important;
}
.collaboration-modal .modal-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 20px 24px 16px;
border-bottom: 1px solid hsl(var(--border));
background: hsl(var(--card));
}
.collaboration-modal .modal-title-wrapper {
display: flex;
align-items: center;
gap: 12px;
}
.collaboration-modal .modal-icon {
width: 24px;
height: 24px;
color: hsl(var(--primary));
font-size: 20px;
}
.collaboration-modal .modal-title {
margin: 0;
font-size: 18px;
font-weight: 600;
color: hsl(var(--foreground));
}
.collaboration-modal .close {
background: none;
border: none;
color: hsl(var(--muted-foreground));
width: 32px;
height: 32px;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.15s ease;
cursor: pointer;
font-size: 16px;
padding: 0;
}
.collaboration-modal .close:hover {
background: hsl(var(--accent));
color: hsl(var(--accent-foreground));
}
.collaboration-modal .modal-body {
padding: 24px;
max-height: calc(85vh - 140px);
overflow-y: auto;
display: flex;
flex-direction: column;
gap: 24px;
}
/* Sections */
.collaboration-section {
background: hsl(var(--background));
border-radius: 12px;
border: 1px solid hsl(var(--border));
overflow: hidden;
}
.collaboration-section-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 16px 20px;
background: hsl(var(--muted) / 0.3);
border-bottom: 1px solid hsl(var(--border));
}
.section-title-group {
display: flex;
align-items: center;
gap: 10px;
}
.section-icon {
width: 18px;
height: 18px;
color: hsl(var(--primary));
font-size: 16px;
}
.collaboration-section-title {
margin: 0;
font-size: 16px;
font-weight: 600;
color: hsl(var(--foreground));
}
.collaboration-count-badge {
background: hsl(var(--primary));
color: hsl(var(--primary-foreground));
padding: 4px 8px;
border-radius: 12px;
font-size: 12px;
font-weight: 600;
min-width: 24px;
text-align: center;
}
/* Liste des utilisateurs */
.collaboration-users-list {
padding: 16px 20px;
}
.collaboration-user-item {
display: flex;
align-items: center;
gap: 16px;
padding: 16px;
background: hsl(var(--card));
border: 1px solid hsl(var(--border));
border-radius: 12px;
margin-bottom: 12px;
transition: all 0.2s ease;
}
.collaboration-user-item:last-child {
margin-bottom: 0;
}
.collaboration-user-item:hover {
transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
border-color: hsl(var(--primary) / 0.5);
}
.user-avatar-wrapper {
position: relative;
flex-shrink: 0;
}
.user-avatar {
width: 48px;
height: 48px;
border-radius: 50%;
object-fit: cover;
border: 2px solid hsl(var(--border));
}
.user-status-indicator {
position: absolute;
bottom: 2px;
right: 2px;
width: 14px;
height: 14px;
background: #10b981;
border: 2px solid hsl(var(--card));
border-radius: 50%;
animation: pulse 2s infinite;
}
.user-details {
flex: 1;
min-width: 0;
}
.user-name {
font-size: 16px;
font-weight: 600;
color: hsl(var(--foreground));
margin-bottom: 4px;
}
.user-role {
display: flex;
align-items: center;
gap: 6px;
font-size: 13px;
color: hsl(var(--muted-foreground));
}
.user-role i {
font-size: 12px;
color: hsl(var(--primary));
}
.user-actions {
display: flex;
gap: 8px;
}
.action-btn {
width: 36px;
height: 36px;
border: none;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
transition: all 0.15s ease;
font-size: 14px;
}
.remove-btn {
background: rgba(239, 68, 68, 0.1);
color: #ef4444;
}
.remove-btn:hover {
background: #ef4444;
color: white;
transform: scale(1.05);
}
/* État vide */
.collaboration-empty-state {
text-align: center;
padding: 40px 20px;
color: hsl(var(--muted-foreground));
}
.empty-icon {
font-size: 48px;
color: hsl(var(--muted-foreground));
margin-bottom: 16px;
opacity: 0.5;
}
.collaboration-empty-state p {
font-size: 16px;
font-weight: 500;
margin: 0 0 8px 0;
color: hsl(var(--foreground));
}
.collaboration-empty-state span {
font-size: 14px;
color: hsl(var(--muted-foreground));
}
/* Conteneur de recherche */
.collaboration-search-container {
padding: 20px;
}
.search-input-group {
display: flex;
gap: 12px;
margin-bottom: 16px;
}
.search-input-wrapper {
position: relative;
flex: 1;
}
.search-icon {
position: absolute;
left: 12px;
top: 50%;
transform: translateY(-50%);
color: hsl(var(--muted-foreground));
font-size: 14px;
}
.search-input {
width: 100%;
padding: 12px 12px 12px 40px;
border: 1px solid hsl(var(--border));
border-radius: 8px;
background: hsl(var(--card));
color: hsl(var(--foreground));
font-size: 14px;
outline: none;
transition: all 0.15s ease;
}
.search-input:focus {
border-color: hsl(var(--primary));
box-shadow: 0 0 0 3px hsl(var(--primary) / 0.1);
}
.search-input::placeholder {
color: hsl(var(--muted-foreground));
}
.search-btn {
padding: 12px 20px;
border: none;
border-radius: 8px;
background: hsl(var(--primary));
color: hsl(var(--primary-foreground));
font-size: 14px;
font-weight: 500;
cursor: pointer;
transition: all 0.15s ease;
display: flex;
align-items: center;
gap: 8px;
white-space: nowrap;
}
.search-btn:hover {
background: hsl(var(--primary) / 0.9);
transform: translateY(-1px);
}
/* Résultats de recherche */
.search-results {
min-height: 60px;
}
.search-loading,
.search-no-result,
.search-error {
display: flex;
align-items: center;
justify-content: center;
gap: 12px;
padding: 24px;
background: hsl(var(--muted) / 0.3);
border-radius: 8px;
color: hsl(var(--muted-foreground));
font-size: 14px;
}
.search-loading i {
color: hsl(var(--primary));
}
.search-error {
color: #ef4444;
}
.search-result-item {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
padding: 16px;
background: hsl(var(--card));
border: 1px solid hsl(var(--border));
border-radius: 8px;
animation: slideInUp 0.3s ease;
}
.result-user-info {
display: flex;
align-items: center;
gap: 12px;
flex: 1;
}
.result-avatar-wrapper {
flex-shrink: 0;
}
.result-avatar {
width: 40px;
height: 40px;
border-radius: 50%;
object-fit: cover;
border: 2px solid hsl(var(--border));
}
.result-details {
flex: 1;
}
.result-name {
font-size: 14px;
font-weight: 600;
color: hsl(var(--foreground));
margin-bottom: 2px;
}
.result-status {
display: flex;
align-items: center;
gap: 6px;
font-size: 12px;
color: hsl(var(--muted-foreground));
}
.result-status i {
color: #10b981;
font-size: 11px;
}
.add-user-btn {
padding: 8px 16px;
border: none;
border-radius: 6px;
background: hsl(var(--primary));
color: hsl(var(--primary-foreground));
font-size: 13px;
font-weight: 500;
cursor: pointer;
transition: all 0.15s ease;
display: flex;
align-items: center;
gap: 6px;
white-space: nowrap;
}
.add-user-btn:hover {
background: hsl(var(--primary) / 0.9);
transform: translateY(-1px);
}
/* Footer et boutons */
.collaboration-modal .modal-footer {
border-top: 1px solid hsl(var(--border));
padding: 16px 24px;
display: flex;
justify-content: flex-end;
gap: 12px;
background: hsl(var(--background) / 0.5);
}
.collaboration-modal .btn {
border-radius: 8px;
padding: 10px 16px;
font-weight: 500;
font-size: 14px;
transition: all 0.15s cubic-bezier(0.4, 0, 0.2, 1);
border: none;
cursor: pointer;
display: flex;
align-items: center;
gap: 8px;
}
.collaboration-modal .btn:hover {
transform: translateY(-1px);
}
.collaboration-modal .btn-danger {
background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);
color: white;
}
.collaboration-modal .btn-danger:hover {
background: linear-gradient(135deg, #dc2626 0%, #b91c1c 100%);
box-shadow: 0 4px 12px rgba(239, 68, 68, 0.3);
}
.collaboration-modal .btn-secondary {
background: hsl(var(--secondary));
color: hsl(var(--secondary-foreground));
border: 1px solid hsl(var(--border));
}
.collaboration-modal .btn-secondary:hover {
background: hsl(var(--accent));
color: hsl(var(--accent-foreground));
}
/* Animations */
@keyframes overlayShow {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes contentShow {
from {
opacity: 0;
transform: scale(0.96);
}
to {
opacity: 1;
transform: scale(1);
}
}
@keyframes slideInUp {
from {
opacity: 0;
transform: translateY(10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes pulse {
0%, 100% {
opacity: 1;
transform: scale(1);
}
50% {
opacity: 0.6;
transform: scale(0.95);
}
}
/* Badge de collaboration amélioré */
.collaboration-badge {
background: linear-gradient(135deg, #3b82f6 0%, #1d4ed8 100%);
color: white;
padding: 0.25rem 0.75rem;
border-radius: 20px;
font-size: 0.75rem;
font-weight: 500;
display: inline-flex;
align-items: center;
gap: 0.25rem;
transition: all 0.2s ease;
animation: fadeIn 0.3s ease;
}
.collaboration-badge.badge-secondary {
background: linear-gradient(135deg, #6b7280 0%, #4b5563 100%);
}
.collaboration-badge:hover {
transform: scale(1.05);
}
.active-users-count {
background: rgba(255, 255, 255, 0.2);
border-radius: 10px;
padding: 0.125rem 0.375rem;
font-size: 0.6875rem;
font-weight: 600;
}
/* Mode sombre */
.dark .collaboration-modal .modal-content {
background: hsl(var(--card));
border-color: hsl(var(--border));
box-shadow:
0 25px 50px -12px rgba(0, 0, 0, 0.5),
0 0 0 1px rgba(255, 255, 255, 0.1);
}
.dark .collaboration-section {
background: hsl(var(--background));
border-color: hsl(var(--border));
}
.dark .collaboration-user-item {
background: hsl(var(--background));
border-color: hsl(var(--border));
}
.dark .search-input {
background: hsl(var(--background));
color: hsl(var(--foreground));
border-color: hsl(var(--border));
}
.dark .search-result-item {
background: hsl(var(--background));
border-color: hsl(var(--border));
}
/* Responsive */
@media (max-width: 640px) {
.collaboration-modal .modal-dialog {
width: 95vw;
max-width: none;
margin: 8px;
}
.collaboration-modal .modal-header,
.collaboration-modal .modal-body {
padding-left: 16px;
padding-right: 16px;
}
.collaboration-modal .modal-footer {
padding: 12px 16px;
flex-direction: column;
gap: 8px;
}
.collaboration-modal .btn {
width: 100%;
justify-content: center;
}
.search-input-group {
flex-direction: column;
}
.search-btn {
width: 100%;
justify-content: center;
}
.collaboration-user-item {
padding: 12px;
gap: 12px;
}
.user-avatar {
width: 40px;
height: 40px;
}
.search-result-item {
flex-direction: column;
align-items: stretch;
gap: 12px;
}
.result-user-info {
justify-content: center;
}
.add-user-btn {
width: 100%;
justify-content: center;
}
.user-item {
padding: 10px;
}
.user-avatar {
width: 36px;
height: 36px;
}
}
/* Badge de collaboration amélioré */
.collaboration-badge {
background: linear-gradient(135deg, #3b82f6 0%, #1d4ed8 100%);
color: white;
padding: 0.25rem 0.75rem;
border-radius: 20px;
font-size: 0.75rem;
font-weight: 500;
display: inline-flex;
align-items: center;
gap: 0.25rem;
transition: all 0.2s ease;
animation: fadeIn 0.3s ease;
}
.collaboration-badge.badge-secondary {
background: linear-gradient(135deg, #6b7280 0%, #4b5563 100%);
}
.collaboration-badge:hover {
transform: scale(1.05);
}
.active-users-count {
background: rgba(255, 255, 255, 0.2);
border-radius: 10px;
padding: 0.125rem 0.375rem;
font-size: 0.6875rem;
font-weight: 600;
}