Spaces:
Running
Running
| /* Réinitialisation de base et variables de couleur */ | |
| :root { | |
| --font-primary: 'Montserrat', sans-serif; | |
| --font-secondary: 'Cormorant Garamond', serif; | |
| --color-text: #333333; /* Un gris foncé doux */ | |
| --color-primary: #0A0A0A; /* Presque noir pour l'élégance */ | |
| --color-secondary: #B08D57; /* Un doré/bronze doux */ | |
| --color-background: #FDFDFD; /* Blanc cassé très clair */ | |
| --color-light-gray: #e9e9e9; | |
| --color-border: #d1d1d1; | |
| } | |
| body { | |
| font-family: var(--font-secondary); /* Police principale pour le corps */ | |
| line-height: 1.7; | |
| margin: 0; | |
| padding: 0; | |
| background-color: var(--color-background); | |
| color: var(--color-text); | |
| font-weight: 400; /* Poids standard pour Cormorant Garamond */ | |
| } | |
| h1, h2, h3, h4, h5, h6 { | |
| font-family: var(--font-primary); /* Police pour les titres */ | |
| font-weight: 500; /* Un peu plus affirmé */ | |
| color: var(--color-primary); | |
| } | |
| header { | |
| background: var(--color-primary); | |
| color: var(--color-background); | |
| padding: 2rem 1rem; /* Plus d'espace */ | |
| text-align: center; | |
| border-bottom: 3px solid var(--color-secondary); | |
| } | |
| header h1 { | |
| font-weight: 300; /* Léger pour le titre principal */ | |
| letter-spacing: 2px; /* Espacement des lettres */ | |
| font-size: 2.5em; | |
| color: var(--color-background); /* S'assurer que le h1 hérite bien */ | |
| } | |
| main { | |
| padding: 30px; | |
| max-width: 900px; /* Un peu plus large */ | |
| margin: 30px auto; | |
| background: #ffffff; /* Blanc pur pour le contenu principal */ | |
| box-shadow: 0 5px 25px rgba(0,0,0,0.05); /* Ombre subtile */ | |
| border-radius: 8px; | |
| } | |
| section { | |
| margin-bottom: 30px; | |
| padding: 25px; | |
| border: 1px solid var(--color-light-gray); | |
| border-radius: 5px; | |
| } | |
| h2 { | |
| font-size: 1.8em; | |
| font-weight: 400; | |
| margin-bottom: 20px; | |
| padding-bottom: 10px; | |
| border-bottom: 1px solid var(--color-light-gray); | |
| color: var(--color-primary); | |
| } | |
| input[type="file"] { | |
| font-family: var(--font-primary); | |
| padding: 10px; | |
| border: 1px solid var(--color-border); | |
| border-radius: 4px; | |
| background-color: #fff; | |
| margin-bottom: 20px; /* Plus d'espace */ | |
| display: block; /* Pour prendre toute la largeur */ | |
| width: calc(100% - 22px); /* Ajuster pour le padding et la bordure */ | |
| } | |
| button[type="submit"] { | |
| font-family: var(--font-primary); | |
| background: var(--color-secondary); | |
| color: white; | |
| border: none; | |
| padding: 12px 25px; | |
| cursor: pointer; | |
| border-radius: 4px; | |
| text-transform: uppercase; /* Lettres capitales pour les boutons */ | |
| font-weight: 500; | |
| letter-spacing: 1px; | |
| transition: background-color 0.3s ease; | |
| } | |
| button[type="submit"]:hover { | |
| background: #9c7b4d; /* Un doré un peu plus foncé au survol */ | |
| } | |
| #message-area { | |
| margin-bottom: 15px; | |
| padding: 15px; | |
| border-radius: 4px; | |
| font-family: var(--font-primary); | |
| font-size: 0.95em; | |
| } | |
| #message-area.success { | |
| background-color: #e6f4ea; /* Vert pastel */ | |
| color: #3d8b50; | |
| border: 1px solid #c3e0c9; | |
| } | |
| #message-area.error { | |
| background-color: #f8d7da; /* Rouge pastel */ | |
| color: #721c24; | |
| border: 1px solid #f5c6cb; | |
| } | |
| /* L'ancienne #file-list n'est plus directement utilisée pour les résultats */ | |
| #file-list { | |
| padding-left: 0; /* Pas de puces par défaut */ | |
| } | |
| #file-list li { | |
| list-style: none; | |
| padding: 10px; | |
| border-bottom: 1px var(--color-light-gray) dashed; | |
| font-size: 0.9em; | |
| font-family: var(--font-secondary); /* Police élégante pour les items */ | |
| } | |
| #file-list li:last-child { | |
| border-bottom: none; | |
| } | |
| footer { | |
| text-align: center; | |
| padding: 20px; | |
| background: var(--color-primary); | |
| color: var(--color-light-gray); | |
| margin-top: 40px; | |
| font-family: var(--font-primary); | |
| font-size: 0.9em; | |
| font-weight: 300; | |
| } | |
| /* Styles pour la barre de progression */ | |
| #progress-container { | |
| margin-top: 20px; | |
| font-family: var(--font-primary); | |
| } | |
| #progress-text { | |
| text-align: center; | |
| margin-bottom: 10px; | |
| color: var(--color-text); | |
| } | |
| .progress-bar-wrapper { | |
| width: 100%; | |
| background-color: var(--color-light-gray); | |
| border-radius: 5px; | |
| padding: 3px; | |
| box-shadow: inset 0 1px 3px rgba(0,0,0,0.1); | |
| } | |
| .progress-bar-fill { | |
| height: 20px; | |
| background-color: var(--color-secondary); | |
| border-radius: 3px; | |
| width: 0%; /* Initialement à 0% */ | |
| /* La transition par défaut est courte, pour les changements rapides (ex: init, fin) */ | |
| transition: width 0.3s ease-out; | |
| text-align: center; | |
| color: white; | |
| font-size: 0.8em; | |
| line-height: 20px; /* Centrer le texte verticalement */ | |
| } | |
| /* Classe pour l'animation de progression pendant le traitement "long" */ | |
| .progress-bar-fill.processing-animation { | |
| /* Transition plus longue pour simuler la progression pendant le traitement IA */ | |
| /* Ajustez la durée (ex: 5s, 10s, 15s) pour correspondre approximativement au temps de traitement serveur. */ | |
| /* La largeur cible sera définie par JavaScript (ex: 90%) */ | |
| transition: width 10s cubic-bezier(0.25, 0.1, 0.25, 1); | |
| } | |
| /* La classe .determinate est principalement pour la sémantique JS, | |
| assure que la transition est celle de base (courte) pour le 100% final. | |
| Elle n'a pas besoin de styles spécifiques si .progress-bar-fill a déjà la transition courte. | |
| */ | |
| .progress-bar-fill.determinate { | |
| /* Assure que la transition est rapide pour le passage à 100% ou 0% si besoin de surcharger .processing-animation */ | |
| transition: width 0.3s ease-out; | |
| } | |
| /* Styles pour l'ancien Spinner / Chargeur (conservé au cas où) */ | |
| #progress-indicator { | |
| /* text-align: center; */ | |
| } | |
| .loader-container { | |
| display: flex; | |
| flex-direction: column; | |
| justify-content: center; | |
| align-items: center; | |
| padding: 20px; | |
| min-height: 100px; | |
| font-family: var(--font-primary); /* Police pour le texte du loader */ | |
| } | |
| .spinner { | |
| border: 6px solid var(--color-light-gray); /* Contour du spinner */ | |
| border-top: 6px solid var(--color-secondary); /* Couleur "active" du spinner (doré) */ | |
| border-radius: 50%; | |
| width: 50px; | |
| height: 50px; | |
| animation: spin 1s linear infinite; | |
| margin-bottom: 15px; | |
| } | |
| @keyframes spin { | |
| 0% { transform: rotate(0deg); } | |
| 100% { transform: rotate(360deg); } | |
| } |