ICO/styles-admin.css

1100 lines
19 KiB
CSS

/* Reset et styles de base pour l'admin */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Segoe UI', system-ui, sans-serif;
background-color: #121212;
color: #ffffff;
min-height: 100vh;
overflow-x: hidden;
}
/* Page d'administration */
.admin-page {
background-color: #121212;
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
padding: 2rem;
}
/* Page de connexion */
.admin-login {
width: 90%;
max-width: 400px;
margin: auto;
background-color: #1e1e1e;
padding: 2rem;
border-radius: 1rem;
box-shadow: 0 4px 24px rgba(0, 0, 0, 0.2);
}
.admin-login h1 {
font-size: 2rem;
margin-bottom: 2rem;
text-align: center;
}
/* En-tête de l'administration */
.admin-header {
width: 100%;
max-width: 1200px;
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 2rem;
padding-bottom: 1rem;
border-bottom: 1px solid #2a2a2a;
}
.admin-header h1 {
font-size: 2rem;
margin: 0;
}
/* Badge pour les contenus privés */
.private-badge {
display: inline-flex;
align-items: center;
gap: 0.5rem;
background-color: #6c757d;
color: white;
padding: 0.25rem 0.75rem;
border-radius: 1rem;
font-size: 0.9rem;
margin-left: 1rem;
font-weight: normal;
}
.private-badge::before {
content: "🔒";
font-size: 1.1em;
}
/* Zone de contenu principale */
.admin-content {
width: 100%;
max-width: 1200px;
background-color: #1e1e1e;
padding: 2rem;
border-radius: 1rem;
min-height: calc(100vh - 12rem);
box-shadow: 0 4px 24px rgba(0, 0, 0, 0.2);
}
/* Boutons d'action */
.admin-actions {
display: flex;
gap: 1rem;
}
.action-button {
display: inline-flex;
align-items: center;
gap: 0.5rem;
padding: 0.8rem 1.5rem;
background-color: #2196f3;
color: white;
border: none;
border-radius: 2rem;
cursor: pointer;
font-size: 1rem;
text-decoration: none;
transition: all 0.3s ease;
}
.action-button:hover {
background-color: #1976d2;
transform: translateY(-2px);
}
.action-button-success {
background-color: #28a745;
}
.action-button-success:hover {
background-color: #218838;
}
.action-button-danger {
background-color: #dc3545;
}
.action-button-danger:hover {
background-color: #c82333;
}
.action-button-secondary {
background-color: #6c757d;
}
.action-button-secondary:hover {
background-color: #5a6268;
}
.action-button-warning {
background-color: #ffc107;
color: #000;
}
.action-button-warning:hover {
background-color: #e0a800;
}
.form-select {
width: 100%;
padding: 0.8rem;
border: none;
border-radius: 0.5rem;
background-color: #2a2a2a;
color: white;
font-size: 1rem;
cursor: pointer;
}
.form-select:focus {
outline: 2px solid #2196f3;
background-color: #333;
}
.form-select option {
background-color: #2a2a2a;
color: white;
padding: 0.5rem;
}
/* Menu administration */
.admin-menu {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
gap: 2rem;
padding: 1rem;
}
.admin-menu-item {
aspect-ratio: 1;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
background: #1e1e1e;
border: 2px solid #333;
border-radius: 1.5rem;
text-decoration: none;
color: white;
padding: 2rem;
transition: all 0.3s ease;
position: relative;
overflow: hidden;
}
.admin-menu-item:hover {
transform: translateY(-5px);
border-color: #2196f3;
box-shadow: 0 5px 20px rgba(33, 150, 243, 0.15);
}
.menu-icon {
margin-bottom: 1rem;
}
.menu-icon svg {
width: 64px;
height: 64px;
stroke: #fff;
transition: all 0.3s ease;
}
.admin-menu-item:hover .menu-icon svg {
stroke: #2196f3;
transform: scale(1.1);
}
.menu-content h2 {
font-size: 1.2rem;
font-weight: 500;
margin: 0;
}
.menu-content p {
position: absolute;
left: 0;
right: 0;
bottom: -100%;
padding: 1rem;
background: rgba(33, 150, 243, 0.95);
color: white;
font-size: 0.9rem;
transition: 0.3s ease;
}
.admin-menu-item:hover .menu-content p {
bottom: 0;
}
/* Styles pour la table des utilisateurs */
.admin-table {
width: 100%;
border-collapse: collapse;
margin-top: 1rem;
background: #1e1e1e;
border-radius: 0.5rem;
overflow: hidden;
}
.admin-table th,
.admin-table td {
padding: 1rem;
text-align: left;
border-bottom: 1px solid #2a2a2a;
}
.admin-table th {
background-color: #2a2a2a;
font-weight: 500;
color: #ffffff;
}
.admin-table tr:hover {
background-color: #2a2a2a;
}
.table-actions {
display: flex;
gap: 0.5rem;
}
.admin-table tr.main-admin {
background-color: rgba(33, 150, 243, 0.1);
}
.admin-table tr.main-admin:hover {
background-color: rgba(33, 150, 243, 0.15);
}
.admin-badge {
display: inline-flex;
align-items: center;
gap: 0.5rem;
padding: 0.25rem 0.5rem;
border-radius: 1rem;
font-size: 0.8rem;
font-weight: 500;
background-color: #2196f3;
color: white;
margin-left: 0.5rem;
}
.admin-badge .icon {
width: 12px;
height: 12px;
}
/* Formulaires */
.form-group {
margin-bottom: 1.5rem;
}
.form-help {
display: block;
margin-top: 0.5rem;
color: #888;
font-size: 0.9rem;
}
/* Toggle pour contenu mature */
.toggle-label {
display: flex;
align-items: center;
gap: 0.5rem;
cursor: pointer;
user-select: none;
}
.toggle-label input[type="checkbox"] {
position: relative;
width: 3rem;
height: 1.5rem;
appearance: none;
background-color: #2a2a2a;
border-radius: 1.5rem;
cursor: pointer;
transition: all 0.3s ease;
}
.toggle-label input[type="checkbox"]::before {
content: "";
position: absolute;
top: 0.2rem;
left: 0.2rem;
width: 1.1rem;
height: 1.1rem;
background-color: white;
border-radius: 50%;
transition: all 0.3s ease;
}
.toggle-label input[type="checkbox"]:checked {
background-color: #dc3545;
}
.toggle-label input[type="checkbox"]:checked::before {
left: 1.7rem;
}
.toggle-text {
color: #e0e0e0;
}
.toggle-warning {
font-size: 1.2rem;
opacity: 0.7;
}
.form-group label {
display: block;
margin-bottom: 0.5rem;
color: #e0e0e0;
}
.form-group input {
width: 100%;
padding: 0.8rem;
border: none;
border-radius: 0.5rem;
background-color: #2a2a2a;
color: white;
font-size: 1rem;
}
.form-group input:focus {
outline: 2px solid #2196f3;
background-color: #333;
}
.form-container {
max-width: 500px;
margin: 0 auto;
}
.form-actions {
margin-top: 2rem;
display: flex;
justify-content: flex-end;
gap: 1rem;
}
.form-textarea {
width: 100%;
padding: 0.8rem;
border: none;
border-radius: 0.5rem;
background-color: #2a2a2a;
color: white;
font-size: 1rem;
min-height: 100px;
resize: vertical;
}
.form-textarea:focus {
outline: 2px solid #2196f3;
background-color: #333;
}
/* Styles spécifiques pour l'onglet de mise à jour */
.admin-menu-item.update-available {
position: relative;
overflow: visible;
}
.admin-menu-item.update-available::after {
content: "";
position: absolute;
top: -8px;
right: -8px;
width: 16px;
height: 16px;
background-color: #ff8c00;
border-radius: 50%;
border: 2px solid #1e1e1e;
animation: pulse 2s infinite;
}
.admin-menu-item.disabled {
opacity: 0.5;
cursor: not-allowed;
pointer-events: none;
}
.admin-menu-item.disabled .menu-icon svg {
stroke: #666;
}
.admin-menu-item.disabled:hover {
transform: none;
border-color: #333;
box-shadow: none;
}
/* Styles pour le contenu spécifique à la mise à jour */
.admin-menu-item .update-status {
margin-top: 1rem;
padding: 1rem;
border-radius: 0.5rem;
background-color: rgba(255, 140, 0, 0.1);
border: 1px solid rgba(255, 140, 0, 0.3);
}
.admin-menu-item .update-status.no-update {
background-color: rgba(40, 167, 69, 0.1);
border-color: rgba(40, 167, 69, 0.3);
}
.admin-menu-item .update-info {
display: flex;
align-items: center;
gap: 1rem;
margin-top: 1rem;
}
.admin-menu-item .version-label {
background-color: rgba(0, 0, 0, 0.2);
padding: 0.25rem 0.75rem;
border-radius: 1rem;
font-size: 0.9rem;
}
@keyframes pulse {
0% {
transform: scale(1);
box-shadow: 0 0 0 0 rgba(255, 140, 0, 0.7);
}
70% {
transform: scale(1.1);
box-shadow: 0 0 0 10px rgba(255, 140, 0, 0);
}
100% {
transform: scale(1);
box-shadow: 0 0 0 0 rgba(255, 140, 0, 0);
}
}
/* Messages */
.message {
padding: 1rem;
border-radius: 0.5rem;
margin-bottom: 1.5rem;
text-align: center;
}
.success-message {
background-color: #28a745;
color: white;
}
.error-message {
background-color: #dc3545;
color: white;
}
/* Styles pour l'arborescence */
.tree-container {
padding: 1rem;
background: #2a2a2a;
border-radius: 0.5rem;
}
.tree-list {
list-style: none;
padding-left: 1.5rem;
}
.tree-item {
margin: 0.5rem 0;
}
.tree-item-content {
position: relative;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0.5rem;
border-radius: 0.25rem;
background: #1e1e1e;
}
.tree-item.active > .tree-item-content {
background: #2196f3;
}
.tree-link {
color: white;
text-decoration: none;
display: flex;
align-items: center;
gap: 0.5rem;
}
/* Style spécifique pour le dossier racine */
.root-folder > .tree-item-content {
background: rgba(33, 150, 243, 0.2);
border-left: 4px solid #2196f3;
margin-bottom: 1rem;
padding: 1rem;
}
.root-folder > .tree-item-content .folder-icon {
font-size: 1.4rem;
}
.root-folder > .tree-item-content .tree-link {
font-size: 1.2rem;
font-weight: 500;
color: #ffffff;
}
/* Styles pour le bouton top */
.tree-button-top {
background-color: rgba(33, 150, 243, 0.7) !important;
}
.tree-button-top:hover {
background-color: rgba(33, 150, 243, 0.9) !important;
}
/* Styles pour le dossier carousel */
.carousel-folder > .tree-item-content {
background: rgba(255, 140, 0, 0.1);
border-left: 4px solid #ff8c00;
margin-bottom: 1rem;
padding: 1rem;
transition: all 0.3s ease;
}
.carousel-folder > .tree-item-content:hover {
background: rgba(255, 140, 0, 0.2);
}
.carousel-folder .tree-link {
color: #ff8c00;
font-weight: 500;
}
.carousel-folder .folder-icon {
color: #ff8c00;
font-size: 1.2rem;
}
.carousel-button {
background: rgba(255, 140, 0, 0.2) !important;
color: #ff8c00 !important;
padding: 0.5rem !important;
border-radius: 0.5rem !important;
transition: all 0.3s ease !important;
text-decoration: none !important;
}
.carousel-button:hover {
background: rgba(255, 140, 0, 0.3) !important;
transform: scale(1.1) !important;
}
.folder-icon {
font-size: 1.2rem;
}
.tree-actions {
display: flex;
gap: 0.5rem;
}
.tree-button {
background: none;
border: none;
color: white;
cursor: pointer;
padding: 0.25rem;
border-radius: 0.25rem;
font-size: 1rem;
}
.tree-button:hover {
background: rgba(255, 255, 255, 0.1);
}
.tree-button-danger:hover {
background: rgba(220, 53, 69, 0.2);
}
.image-actions .tree-button {
background-color: rgba(0, 0, 0, 0.7);
padding: 0.5rem;
border-radius: 0.5rem;
transition: all 0.3s ease;
}
.image-actions .tree-button:hover {
background-color: rgba(220, 53, 69, 0.9);
transform: scale(1.1);
}
.tree-button-danger {
background-color: rgba(220, 53, 69, 0.7);
}
/* Styles pour le toggle des sous-dossiers */
.tree-item-content {
position: relative;
display: flex;
align-items: center;
gap: 0.5rem;
padding: 0.5rem;
border-radius: 0.25rem;
background: #1e1e1e;
margin: 0.25rem 0;
}
.toggle-btn {
background: none;
border: none;
padding: 0.25rem;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
color: #fff;
transition: transform 0.3s ease;
}
.toggle-btn.active {
transform: rotate(90deg);
}
.toggle-spacer {
width: 24px;
}
.toggle-icon {
width: 16px;
height: 16px;
transition: transform 0.3s ease;
}
.subtree {
max-height: 0;
overflow: hidden;
transition: max-height 0.3s ease-out;
opacity: 0;
}
.subtree.active {
max-height: 1000px;
opacity: 1;
transition: max-height 0.3s ease-in, opacity 0.3s ease-in;
}
/* Ajuster les marges et le padding pour une meilleure hiérarchie visuelle */
.tree-list {
list-style: none;
padding-left: 1.5rem;
margin: 0;
}
.tree-list:first-child {
padding-left: 0;
}
/* Animation pour le hover des boutons */
.toggle-btn:hover {
color: #2196f3;
background: rgba(33, 150, 243, 0.1);
border-radius: 4px;
}
/* Styles pour les modales */
.modal {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.8);
z-index: 1000;
}
.modal-content {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background: #1e1e1e;
padding: 2rem;
border-radius: 1rem;
min-width: 300px;
max-width: 500px;
width: 90%;
}
.modal h2 {
margin-bottom: 1.5rem;
}
/* Styles pour les listes d'images */
.images-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 1rem;
padding: 1rem;
}
.image-item {
position: relative;
width: 100%;
padding-bottom: 100%;
background-color: #2a2a2a;
border-radius: 0.5rem;
overflow: hidden;
}
.image-wrapper {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.image-item:hover {
transform: translateY(-5px);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
z-index: 1;
}
.image-item img {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
}
.image-item:hover img {
transform: scale(1.1);
}
.image-actions {
position: absolute;
top: 0.5rem;
right: 0.5rem;
z-index: 2;
display: flex;
gap: 0.5rem;
}
.image-checkbox {
position: absolute;
top: 0.5rem;
left: 0.5rem;
z-index: 3;
width: 24px;
height: 24px;
cursor: pointer;
accent-color: #2196f3;
opacity: 0.8;
}
.image-checkbox:hover {
transform: scale(1.1);
opacity: 1;
}
.image-actions {
position: absolute;
top: 0.5rem;
right: 0.5rem;
z-index: 2;
display: flex;
gap: 0.5rem;
}
.upload-zone {
border: 2px dashed #2196f3;
border-radius: 1rem;
padding: 2rem;
text-align: center;
margin: 1rem;
background-color: rgba(33, 150, 243, 0.1);
}
.upload-zone.drag-over {
background-color: rgba(33, 150, 243, 0.2);
border-color: #1976d2;
}
.modal-upload {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
z-index: 1000;
}
.modal-content {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-color: #121212;
color: #ffffff;
padding: 20px;
border-radius: 5px;
text-align: center;
border: 1px solid #3a3a3a;
}
.modal-content {
text-align: left;
}
.spinner {
border: 4px solid #3a3a3a;
border-top: 4px solid #ffffff;
border-radius: 50%;
width: 40px;
height: 40px;
animation: spin 1s linear infinite;
margin: 10px auto;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
/* Style de la modale des clés de partage */
.tree-button-share {
background-color: rgba(33, 150, 243, 0.2) !important;
color: #2196f3 !important;
}
.tree-button-share:hover {
background-color: rgba(33, 150, 243, 0.4) !important;
}
.action-button-share {
background-color: #2196f3 !important;
}
.action-button-share:hover {
background-color: #1976d2 !important;
}
.share-info {
margin-bottom: 1.5rem;
padding: 1rem;
background-color: rgba(33, 150, 243, 0.1);
border-radius: 0.5rem;
border-left: 4px solid #2196f3;
}
/* Styles pour la page de gestion des clefs de partage */
.filters {
display: flex;
gap: 1rem;
margin-bottom: 2rem;
background: #2a2a2a;
padding: 1rem;
border-radius: 0.5rem;
}
.filter-group {
display: flex;
align-items: center;
gap: 0.5rem;
}
.share-url {
display: flex;
gap: 0.5rem;
align-items: center;
}
.share-url-input {
background: #2a2a2a;
border: none;
padding: 0.5rem;
border-radius: 0.25rem;
color: white;
width: 300px;
font-size: 0.9rem;
}
.expired-text {
color: #dc3545;
font-style: italic;
}
.expired-key {
opacity: 0.7;
}
.no-data {
text-align: center;
padding: 2rem;
color: #666;
}
.tree-button.copied {
background-color: #28a745 !important;
}
@media (max-width: 768px) {
.filters {
flex-direction: column;
}
.share-url-input {
width: 200px;
}
}
.share-url-container {
margin-top: 0.5rem;
display: flex;
gap: 0.5rem;
align-items: center;
}
.share-url-input {
flex: 1;
background: #2a2a2a;
border: none;
padding: 0.5rem;
border-radius: 0.25rem;
color: white;
font-size: 0.9rem;
}
.share-url-input:focus {
outline: 2px solid #2196f3;
background-color: #333;
}
.tree-button.copied {
background-color: #28a745 !important;
}
/* Styles spécifiques pour la page de gestion du carrousel */
body[data-page="carrousel"] .upload-zone {
border-color: #ff8c00;
background-color: rgba(255, 140, 0, 0.1);
}
body[data-page="carrousel"] .action-button-success {
background-color: #ff8c00;
}
body[data-page="carrousel"] .action-button-success:hover {
background-color: #ff7700;
}
body[data-page="carrousel"] .admin-header {
border-bottom-color: rgba(255, 140, 0, 0.3);
}
#imageUploadForm {
display: none;
}
/* Styles pour les logs */
.filter-form {
display: flex;
gap: 1rem;
align-items: flex-end;
}
.pagination {
margin-top: 2rem;
display: flex;
justify-content: center;
gap: 0.5rem;
}
.pagination-link {
padding: 0.5rem 1rem;
background-color: #2a2a2a;
color: white;
text-decoration: none;
border-radius: 0.25rem;
transition: all 0.3s ease;
}
.pagination-link:hover {
background-color: #3a3a3a;
}
.pagination-link.active {
background-color: #2196f3;
}
.logs-list {
margin-top: 2rem;
}
/* Media Queries */
@media (max-width: 768px) {
.admin-page {
padding: 1rem;
}
.admin-header {
flex-direction: column;
gap: 1rem;
text-align: center;
}
.admin-actions {
flex-direction: column;
width: 100%;
}
.action-button {
width: 100%;
justify-content: center;
}
.admin-menu {
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
gap: 1rem;
}
}
/* Accessibilité */
a:focus-visible,
button:focus-visible,
input:focus-visible {
outline: 2px solid #2196f3;
outline-offset: 2px;
}
@media (prefers-reduced-motion: reduce) {
* {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}