/* Réinitialisation de base */ * { margin: 0; padding: 0; box-sizing: border-box; } /* Corps de la page */ body { background-color: #f7fafc; font-family: Arial, sans-serif; min-height: 100vh; } /* Conteneur principal */ .container { max-width: 1024px; margin: 0 auto; padding: 2rem 1rem; } /* Titre principal */ h1 { font-size: 2rem; font-weight: bold; text-align: center; color: #2d3748; margin-bottom: 1rem; } /* Sous-titre */ .subtitle { text-align: center; color: #718096; margin-bottom: 2rem; } /* Conteneur des onglets */ .tab-container { background-color: #fff; border-radius: 0.5rem; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); overflow: hidden; } /* Navigation des onglets */ .tab-nav { display: flex; border-bottom: 1px solid #e2e8f0; position: relative; } .tab-nav .tab-btn { flex: 1; padding: 1rem; background-color: #f7fafc; border: none; cursor: pointer; transition: background-color 0.3s ease, transform 0.2s ease; text-align: center; font-size: 1rem; } .tab-nav .tab-btn:hover { background-color: #edf2f7; transform: scale(1.05); } .tab-nav .tab-btn.active { background-color: #edf2f7; font-weight: bold; } /* Effet de soulignement dynamique sur les onglets */ .tab-nav .tab-btn { position: relative; } .tab-nav .tab-btn::after { content: ""; position: absolute; left: 50%; bottom: 0; width: 0; height: 3px; background-color: #4299e1; transition: width 0.3s ease, left 0.3s ease; } .tab-nav .tab-btn:hover::after, .tab-nav .tab-btn.active::after { width: 100%; left: 0; } /* Contenu des onglets */ .tab-content-wrapper { padding: 1.5rem; } .tab-content { margin-bottom: 1rem; } /* Masquer les éléments */ .hidden { display: none; } /* Styles des formulaires */ .form { margin-bottom: 1rem; } .form input[type="text"], .form textarea, .form select { width: 100%; padding: 0.5rem; border: 1px solid #cbd5e0; border-radius: 0.25rem; font-size: 1rem; } .textarea { resize: vertical; min-height: 80px; } /* Input type file caché */ .hidden-file { display: none; } /* Label pour le chargement de fichier */ .file-upload { display: block; width: 100%; padding: 1rem; border: 2px dashed #cbd5e0; border-radius: 0.5rem; text-align: center; cursor: pointer; transition: background-color 0.3s ease; margin-bottom: 1rem; } .file-upload:hover { background-color: #f7fafc; } /* Affichage du nom du fichier */ .filename-display { text-align: center; color: #718096; font-size: 0.875rem; margin-bottom: 1rem; } /* Boutons */ .btn { width: 100%; padding: 0.75rem; border: none; border-radius: 0.25rem; color: #fff; cursor: pointer; transition: background-color 0.3s ease; font-size: 1rem; display: flex; align-items: center; justify-content: center; gap: 0.5rem; } /* Boutons de couleur */ .btn-blue { background-color: #4299e1; } .btn-blue:hover { background-color: #3182ce; } .btn-green { background-color: #48bb78; } .btn-green:hover { background-color: #38a169; } .btn-purple { background-color: #9f7aea; } .btn-purple:hover { background-color: #805ad5; } .btn-indigo { background-color: #667eea; } .btn-indigo:hover { background-color: #5a67d8; } .btn-pink { background-color: #ed64a6; } .btn-pink:hover { background-color: #d53f8c; } /* Boîte de résultat */ .result-box { margin-top: 1rem; padding: 1rem; background-color: #f7fafc; border-radius: 0.25rem; min-height: 100px; } /* Placeholder dans la boîte de résultat */ .result-box .placeholder { color: #a0aec0; font-style: italic; } /* Sélecteur de formulaire */ .select { width: 100%; padding: 0.5rem; border: 1px solid #cbd5e0; border-radius: 0.25rem; } /* Styles pour les messages d'erreur et d'information */ .error { color: #e53e3e; font-weight: bold; margin: 0; } .info { color: #3182ce; font-style: italic; margin: 0; } .small { font-size: 0.875rem; color: #718096; margin-top: 0.5rem; } /* Style pour les images dans les visualisations */ .result-box img { max-width: 100%; height: auto; margin-top: 1rem; border-radius: 0.25rem; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); } /* Navbar avec animation d'apparition */ nav { filter: drop-shadow(0.25rem 0.25rem 0.25rem rgba(0, 0, 0, 0.3)); width: 100%; max-width: 14rem; opacity: 0; transform: translateY(-20px); animation: fadeInDown 0.5s ease-out forwards; } /* Animation keyframes pour la navbar */ @keyframes fadeInDown { from { opacity: 0; transform: translateY(-20px); } to { opacity: 1; transform: translateY(0); } } /* Préférence de réduction des animations */ @media (prefers-reduced-motion: reduce) { nav * { transition: 5s !important; animation: 10ms !important; } } /* Responsivité pour petits écrans */ @media (max-width: 768px) { .tab-nav { flex-direction: column; } .tab-nav .tab-btn { padding: 0.75rem; font-size: 0.875rem; } h1 { font-size: 1.5rem; } .container { padding: 1rem; } }