Ludovic
V4
0985ce8
/* 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); }
}