/* style.css - Oxford Digital School v3 */

/* --- 1. Variables et Styles Généraux --- */
/*
  Ce bloc définit des variables CSS personnalisées.
  Elles commencent par `--` et sont utilisées pour stocker des valeurs réutilisables comme les couleurs, les dégradés et les ombres.
  Cela rend le code plus facile à maintenir et à modifier : un changement de valeur ici se répercutera sur tous les endroits où cette variable est utilisée.
  Exemple : `--primary-dark-blue` stocke la couleur `#003366`.
*/
:root {
    --primary-dark-blue: #003366;
    --primary-medium-blue: #004c99;
    --primary-bright-blue: #0066cc;
    --accent-blue: #0078ff;
    --accent-cyan: #00bfff;
    --text-dark: #1a1a1a;
    --text-light: #ffffff;
    --bg-light: #f9fbff;
    --bg-light-gradient: linear-gradient(135deg, #e9f1ff, #f9fbff);
    --shadow-light: rgba(0, 0, 0, 0.05);
    --shadow-medium: rgba(0, 0, 0, 0.1);
}

/*
  Définit le comportement de défilement de la page (scroll).
  `scroll-behavior: smooth;` assure que le défilement vers les ancres (liens internes) se fera de manière fluide et non abrupte.
*/
html {
    scroll-behavior: smooth;
}

/*
  Styles de base appliqués à tout le corps de la page (<body>).
  - `margin: 0;`: Supprime la marge par défaut que les navigateurs ajoutent au corps.
  - `font-family`: Définit la police de caractères principale. "Poppins" est privilégiée, sinon "Segoe UI", puis une police sans empattement générique.
  - `background: var(--bg-light);`: Applique la couleur de fond claire définie dans nos variables CSS.
  - `color: var(--text-dark);`: Définit la couleur de texte foncée par défaut pour tous les éléments du corps.
*/
body {
    margin: 0;
    font-family: "Poppins", "Segoe UI", sans-serif;
    background: var(--bg-light);
    color: var(--text-dark);
}

/*
  La classe `.container` est utilisée pour centrer le contenu principal des sections et lui donner une largeur maximale, tout en ajoutant un rembourrage horizontal.
  - `max-width: 1200px;`: Le contenu de ce conteneur ne dépassera jamais 1200 pixels de large.
  - `margin: 0 auto;`: Centre le bloc horizontalement sur la page.
  - `padding: 0 1.5rem;`: Ajoute un rembourrage de 1.5rem (environ 24px) sur les côtés gauche et droit, et pas de rembourrage en haut et en bas.
*/
.container {
    max-width: 1200px;
    margin: 0 auto;
    padding: 0 1.5rem;
}

/* --- 2. Header & Navigation --- */
/*
  Styles de l'en-tête de la page (<header>).
  - `position: sticky; top: 0;`: L'en-tête restera en haut de la fenêtre de défilement lorsqu'il atteint le bord supérieur (fixé en haut).
  - `background: rgba(255, 255, 255, 0.85);`: Un fond blanc semi-transparent (0.85 d'opacité).
  - `backdrop-filter: blur(10px);`: Applique un effet de flou aux éléments situés *derrière* l'en-tête, donnant un effet "verre dépoli" moderne.
  - `box-shadow: 0 2px 10px var(--shadow-light);`: Ajoute une ombre légère en bas de l'en-tête pour le détacher du contenu.
  - `z-index: 1000;`: Assure que l'en-tête reste au-dessus des autres contenus lors du défilement.
  - `padding: 1rem 1.5rem;`: Ajoute un rembourrage interne à l'en-tête.
*/
header {
    position: sticky;
    top: 0;
    background: rgba(255, 255, 255, 0.85);
    backdrop-filter: blur(10px);
    box-shadow: 0 2px 10px var(--shadow-light);
    z-index: 1000;
    padding: 1rem 1.5rem;
}

/*
  Conteneur Flexbox pour les éléments de navigation (logo et menu) à l'intérieur de l'en-tête.
  - `display: flex;`: Utilise Flexbox pour organiser les éléments.
  - `justify-content: space-between;`: Espace les éléments de manière égale, poussant le logo à gauche et le menu à droite.
  - `align-items: center;`: Centre verticalement les éléments enfants (logo et navigation) dans le conteneur.
  - `max-width: 1400px; margin: 0 auto;`: Centre le conteneur `nav-container` lui-même et limite sa largeur.
*/
.nav-container {
    display: flex;
    justify-content: space-between;
    align-items: center;
    max-width: 1400px;
    margin: 0 auto;
}

/*
  Styles du lien du logo (qui contient l'image et le texte "University of Oxford").
  - `display: flex; align-items: center;`: Rend le logo un conteneur Flexbox pour aligner l'image et le texte horizontalement et verticalement.
  - `text-decoration: none;`: Supprime le soulignement par défaut des liens.
  - `color: var(--primary-dark-blue);`: Définit la couleur du texte du logo.
  - `font-size: 1.5rem; font-weight: 600;`: Définit la taille et le poids de la police pour le texte du logo.
*/
.logo {
    display: flex;
    align-items: center;
    text-decoration: none;
    color: var(--primary-dark-blue);
    font-size: 1.5rem;
    font-weight: 600;
}

/*
  Styles pour l'image à l'intérieur du logo.
  - `height: 100px;`: Définit une hauteur fixe pour l'image du logo.
  - `margin-right: 0.75rem;`: Ajoute un petit espace à droite de l'image pour la séparer du texte du logo.
*/
.logo img {
    height: 100px;
    margin-right: 0.75rem;
}

/*
  Styles de la navigation principale (<nav>).
  - `display: flex; align-items: center;`: Utilise Flexbox pour aligner horizontalement les liens du menu et les centrer verticalement.
  - `gap: 1.5rem;`: Crée un espacement de 1.5rem entre chaque élément de navigation.
*/
.main-nav {
    display: flex;
    align-items: center;
    gap: 1.5rem;
}

/*
  Styles des liens individuels dans la navigation principale.
  - `text-decoration: white;`: **Attention : Ceci est une erreur.** `text-decoration` attend une valeur comme `none`, `underline`, `overline`, etc. `white` n'est pas une valeur valide. Il est probable que l'intention était `text-decoration: none;` pour enlever le soulignement, ou définir la couleur du texte. Je vous suggère de corriger cela à `text-decoration: none;`.
  - `color: var(--primary-dark-blue);`: Définit la couleur des liens.
  - `font-weight: 500;`: Poids de la police.
  - `transition: color 0.2s ease;`: Ajoute une transition douce à la couleur du texte lors du survol, pour une meilleure expérience utilisateur.
*/
.main-nav a {
    text-decoration: white; /* ATTENTION: Correction suggérée: 'text-decoration: none;' */
    color: var(--primary-dark-blue);
    font-weight: 500;
    transition: color 0.2s ease;
}

/*
  La case à cocher du menu burger est cachée par défaut. Elle est utilisée pour contrôler l'ouverture/fermeture du menu mobile via CSS.
*/
.burger-menu-checkbox {
    display: none;
}

/*
  Le bouton/icône du menu burger est également caché par défaut. Il ne sera affiché que sur les écrans plus petits via les media queries.
  - `background: none; border: none;`: Supprime le style par défaut du bouton.
  - `font-size: 1.8rem;`: Grande taille de police pour l'icône du burger (le caractère unicode "☰").
  - `cursor: pointer;`: Indique que l'élément est cliquable.
  - `z-index: 1010;`: Assure que le bouton du burger est au-dessus du reste du contenu, y compris l'en-tête.
*/
.burger-menu {
    display: none;
    background: none;
    border: none;
    font-size: 1.8rem;
    cursor: pointer;
    z-index: 1010;
}

/* --- 3. Boutons --- */
/*
  Styles génériques pour tous les boutons (`.btn`).
  - `padding: 0.75rem 1.5rem;`: Rembourrage interne pour la taille du bouton.
  - `border-radius: 30px;`: Bords très arrondis pour un aspect de "pilule".
  - `text-decoration: none;`: Supprime le soulignement si le bouton est un lien.
  - `color: var(--text-light);`: Couleur du texte blanc.
  - `background: var(--accent-blue);`: Couleur de fond du bouton, définie par une variable.
  - `box-shadow`: Ajoute une ombre légère pour donner de la profondeur.
  - `transition`: Anime les changements de `transform` (déplacement) et `box-shadow` au survol, pour une interaction douce.
  - `border: none; cursor: pointer;`: Supprime la bordure par défaut et change le curseur pour indiquer qu'il est cliquable.
  - `font-size: 1rem; font-weight: 600;`: Taille et poids de la police pour le texte du bouton.
*/
.btn {
    padding: 0.75rem 1.5rem;
    border-radius: 30px;
    text-decoration: none;
    color: var(--text-light);
    background: var(--accent-blue);
    box-shadow: 0 4px 15px rgba(0, 120, 255, 0.2);
    transition: transform 0.2s ease, box-shadow 0.2s ease;
    border: none;
    cursor: pointer;
    font-size: 1rem;
    font-weight: 600;
}

/*
  Effets au survol (hover) des boutons.
  - `box-shadow`: L'ombre devient plus prononcée.
  - `transform: translateY(-2px);`: Le bouton se soulève légèrement de 2px, donnant une impression d'interactivité.
*/
.btn:hover {
    box-shadow: 0 6px 20px rgba(0, 120, 255, 0.3);
    transform: translateY(-2px);
}

/* --- 4. Sections & Cartes --- */
/*
  Styles génériques pour les sections (<section>) de la page.
  - `padding: 4rem 0;`: Ajoute un grand rembourrage vertical pour espacer les sections.
*/
.section {
    padding: 4rem 0;
}

/*
  Variante de section avec un fond alternatif.
  - `background: var(--bg-light-gradient);`: Applique un dégradé de fond léger défini dans les variables.
*/
.section.alt-bg {
    background: var(--bg-light-gradient);
}

/*
  Styles pour le titre principal de chaque section.
  - `text-align: center;`: Centre le texte.
  - `font-size: 2.2rem;`: Grande taille de police.
  - `color: var(--primary-dark-blue);`: Couleur du titre.
  - `margin-bottom: 3rem;`: Espace sous le titre.
*/
.section-title {
    text-align: center;
    font-size: 2.2rem;
    color: var(--primary-dark-blue);
    margin-bottom: 3rem;
}

/*
  Conteneur pour un ensemble de cartes, utilisant CSS Grid pour une disposition flexible.
  - `display: grid;`: Utilise Grid pour organiser les cartes.
  - `gap: 1.5rem;`: Crée un espacement de 1.5rem entre les cartes.
  - `grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));`: Définit des colonnes adaptatives. Les cartes auront une largeur minimale de 300px et s'adapteront pour prendre l'espace disponible (1fr), créant autant de colonnes que possible.
*/
.cards-container {
    display: grid;
    gap: 1.5rem;
    grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
}

/*
  Styles génériques pour chaque carte (`<article class="card">`).
  - `background: var(--text-light);`: Fond blanc pour la carte.
  - `border-radius: 16px;`: Bords arrondis.
  - `box-shadow`: Ombre légère pour donner de la profondeur.
  - `padding: 2rem;`: Rembourrage interne.
  - `text-align: center;`: Centre le texte à l'intérieur de la carte.
  - `transition`: Anime `transform` et `box-shadow` au survol.
  - `height: 100%;`: Assure que toutes les cartes d'un même `cards-container` ont la même hauteur, même si leur contenu est différent.
  - `box-sizing: border-box;`: Inclut le padding et la bordure dans la largeur/hauteur totale de l'élément.
*/
.card {
    background: var(--text-light);
    border-radius: 16px;
    box-shadow: 0 4px 20px var(--shadow-light);
    padding: 2rem;
    text-align: center;
    transition: transform 0.2s ease, box-shadow 0.2s ease;
    height: 100%; /* Pour aligner les cartes de même hauteur */
    box-sizing: border-box;
}

/*
  Supprime le style de soulignement et hérite la couleur du texte pour les liens qui englobent une carte.
*/
.card-link {
    text-decoration: none;
    color: inherit;
}

/*
  Effets au survol d'une carte.
  - `transform: translateY(-3px);`: La carte se soulève légèrement de 3px.
  - `box-shadow`: L'ombre devient plus prononcée.
*/
.card:hover {
    transform: translateY(-3px);
    box-shadow: 0 8px 25px var(--shadow-medium);
}

/*
  Styles pour les titres (<h3>) à l'intérieur des cartes.
  - `color: var(--primary-dark-blue);`: Couleur foncée.
  - `margin-top: 0;`: Supprime la marge supérieure par défaut pour un meilleur alignement.
*/
.card h3 {
    color: var(--primary-dark-blue);
    margin-top: 0;
}

/* --- 5. Éléments spécifiques --- */
/*
  Styles de la section "hero" (la grande bannière en haut de la page).
  - `min-height: 80vh;`: Hauteur minimale de 80% de la hauteur de la fenêtre visible (viewport height).
  - `display: flex; flex-direction: column; align-items: center; justify-content: center;`: Utilise Flexbox pour centrer le contenu du hero horizontalement et verticalement.
  - `text-align: center;`: Centre le texte.
  - `color: var(--text-light);`: Couleur de texte blanc.
  - `padding: 2rem;`: Rembourrage interne.
  - `position: relative;`: Nécessaire si des éléments absolument positionnés sont à l'intérieur.
  - `background-size: cover; background-position: center;`: Assure que l'image de fond couvre toute la zone et est centrée.
*/
.hero {
    min-height: 80vh;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    text-align: center;
    color: var(--text-light);
    padding: 2rem;
    position: relative;
    background-size: cover;
    background-position: center;
}

/*
  Styles du titre principal (<h1>) dans la section hero.
*/
.hero h1 {
    font-size: 2.8rem;
    margin-bottom: 1rem;
}

/*
  Styles du paragraphe (<p>) dans la section hero.
  - `max-width: 650px;`: Limite la largeur du paragraphe pour une meilleure lisibilité.
  - `line-height: 1.6;`: Espacement des lignes pour une meilleure lisibilité.
*/
.hero p {
    max-width: 650px;
    line-height: 1.6;
    font-size: 1.1rem;
    margin-bottom: 2rem;
    text-align: center;
    margin-left: auto;
    margin-right: auto;
}

/*
  Conteneur pour les boutons d'action dans la section hero.
  - `display: flex; gap: 1rem; flex-wrap: wrap; justify-content: center;`: Utilise Flexbox pour disposer les boutons avec un espacement, permettre le retour à la ligne sur petits écrans et les centrer.
*/
.hero .actions {
    display: flex;
    gap: 1rem;
    flex-wrap: wrap;
    justify-content: center;
}

/* Processus de candidature (timeline) */
/*
  Styles de la liste non ordonnée représentant la timeline du processus d'admission.
  - `list-style: none; padding: 0;`: Supprime les puces par défaut et le rembourrage de la liste.
  - `max-width: 700px; margin: 2rem auto;`: Centre la timeline et limite sa largeur.
*/
.timeline {
    list-style: none;
    padding: 0;
    max-width: 700px;
    margin: 2rem auto;
}
/*
  Styles pour chaque élément de la timeline (<li>).
  - `position: relative;`: Permet de positionner l'élément pseudo `::before` par rapport à lui-même.
  - `padding: 0.5rem 0 1.5rem 2.5rem;`: Rembourrage pour le contenu de l'étape, laissant de la place pour la ligne verticale et le numéro.
  - `border-left: 2px solid var(--primary-bright-blue);`: La ligne verticale de la timeline.
*/
.timeline li {
    position: relative;
    padding: 0.5rem 0 1.5rem 2.5rem;
    border-left: 2px solid var(--primary-bright-blue);
}
/*
  Pseudo-élément `::before` pour afficher le numéro de l'étape dans la timeline.
  - `content: attr(data-step);`: Récupère le texte du numéro d'étape de l'attribut `data-step` du <li>.
  - `position: absolute; left: -21px; top: 0;`: Positionne le cercle à gauche de la ligne verticale. `-21px` est calculé pour centrer le cercle (moitié de sa largeur + largeur de la bordure).
  - `width: 40px; height: 40px; border-radius: 50%;`: Crée un cercle.
  - `background-color: var(--primary-dark-blue); color: white;`: Fond bleu foncé et texte blanc.
  - `display: flex; align-items: center; justify-content: center;`: Centre le numéro à l'intérieur du cercle.
*/
.timeline li::before {
    content: attr(data-step);
    position: absolute;
    left: -21px; /* (40px width / 2) + 1px border */
    top: 0;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background-color: var(--primary-dark-blue);
    color: white;
    display: flex;
    align-items: center;
    justify-content: center;
    font-weight: 600;
}
/*
  Supprime la bordure gauche pour le dernier élément de la timeline afin qu'elle ne dépasse pas.
*/
.timeline li:last-child {
    border-left: none;
}

/* Cartes de statistiques */
/*
  Styles de base pour les cartes de statistiques.
*/
.stat-card {
    text-align: center;
}
/*
  Styles pour le grand nombre dans une carte de statistique.
  - `font-size: 3.5rem; font-weight: 600; color: var(--accent-blue);`: Grande taille, gras, et couleur d'accent.
*/
.stat-card .number {
    font-size: 3.5rem;
    font-weight: 600;
    color: var(--accent-blue);
}
/*
  Styles pour l'étiquette descriptive sous le nombre dans une carte de statistique.
*/
.stat-card .label {
    font-size: 1.1rem;
    color: var(--primary-dark-blue);
    margin-top: 0.5rem;
}

/* Message de succès du formulaire (caché par défaut) */
/*
  Le message de succès du formulaire est caché par défaut et sera affiché via JavaScript après la soumission réussie du formulaire.
*/
.form-success-message {
    display: none;
}


/* --- 7. Footer --- */
/*
  Styles généraux du pied de page (<footer>).
  - `padding: 3rem 1.5rem;`: Rembourrage interne.
  - `background: var(--primary-dark-blue);`: Fond bleu foncé.
  - `color: var(--text-light);`: Texte blanc.
*/
footer {
    padding: 3rem 1.5rem;
    background: var(--primary-dark-blue);
    color: var(--text-light);
}
/*
  Conteneur Flexbox pour les colonnes du pied de page.
  - `display: flex; flex-wrap: wrap;`: Permet aux colonnes de passer à la ligne sur petits écrans.
  - `justify-content: space-between;`: Espace les colonnes.
  - `gap: 2rem;`: Espacement entre les colonnes.
  - `max-width: 1200px; margin: 0 auto;`: Centre le conteneur et limite sa largeur.
*/
.footer-container {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    gap: 2rem;
    max-width: 1200px;
    margin: 0 auto;
}
/*
  Styles pour chaque colonne du pied de page.
  - `flex: 1;`: Les colonnes s'étendent pour prendre l'espace disponible.
  - `min-width: 220px;`: Largeur minimale avant de passer à la ligne.
*/
.footer-column {
    flex: 1;
    min-width: 220px;
}
/*
  Styles des titres (<h4>) dans le pied de page.
*/
.footer-column h4 {
    margin-top: 0;
    color: var(--accent-cyan);
}
/*
  Styles des liens et paragraphes dans le pied de page.
*/
.footer-column a, .footer-column p {
    color: #eee;
    text-decoration: none;
    line-height: 1.8;
}
/*
  Effet de soulignement au survol des liens du pied de page.
*/
.footer-column a:hover {
    text-decoration: underline;
}
/*
  Styles généraux pour les liens sociaux.
*/
.social-links a {
    color: var(--text-light);
    font-size: 1.5rem;
    margin-right: 1rem;
    text-decoration: none;
}
/*
  Règles pour les logos sociaux (semblent redondantes ou erronées avec .social-logo ci-dessous).
  Ces règles sont soit inactives (si la classe n'est pas utilisée) soit peuvent être simplifiées.
*/
.social_logo a {
    height: auto;  /* conserve les proportions */
    margin: 5px;   /* espace autour du logo */
    max-width: 5%;
}
/*
  Styles spécifiques pour les images des logos sociaux.
*/
img.social-logo {
  width: 32px;
}
/*
  Styles du bas du pied de page (texte de copyright).
  - `text-align: center;`: Centre le texte.
  - `margin-top: 3rem; padding-top: 1.5rem;`: Espace et rembourrage.
  - `border-top: 1px solid var(--primary-medium-blue);`: Ligne de séparation.
*/
.footer-bottom {
    text-align: center;
    margin-top: 3rem;
    padding-top: 1.5rem;
    border-top: 1px solid var(--primary-medium-blue);
    max-width: 1200px;
    margin-left: auto;
    margin-right: auto;
}

/* --- 8. Animations & Responsive --- */
/*
  Cette classe est probablement destinée à être ajoutée dynamiquement (par JS) pour faire apparaître des éléments.
  Elle définit l'état final d'un élément qui doit apparaître en fondu et glisser vers le haut.
  L'état initial (opacity: 0; transform: translateY(20px);) serait défini ailleurs ou par défaut.
*/
.fade-in-element {
    opacity: 1;
    transform: translateY(0);
}


/*
  Media query pour les écrans de taille moyenne (max-width: 992px), typiquement les tablettes en mode portrait.
*/
@media (max-width: 992px) {
    /*
      Le menu de navigation principal (`.main-nav`) devient un menu mobile qui se glisse depuis la droite.
      - `position: fixed; top: 0; right: -100%;`: Fixe le menu en haut à droite, le cachant hors de l'écran initialement.
      - `width: 60%; max-width: 300px; height: 100vh;`: Définit la largeur et la hauteur du menu mobile.
      - `background: var(--bg-light);`: Fond clair.
      - `flex-direction: column; justify-content: center; gap: 2rem;`: Organise les liens du menu verticalement et les centre.
      - `transition: right 0.4s ease-in-out;`: Anime le glissement du menu.
      - `box-shadow: -5px 0 15px rgba(0, 0, 0, 0.1);`: Ajoute une ombre sur le bord gauche du menu.
    */
    .main-nav {
        position: fixed;
        top: 0;
        right: -100%; /* Cache le menu hors de l'écran à droite */
        width: 60%;
        max-width: 300px;
        height: 100vh; /* Prend toute la hauteur de la fenêtre */
        background: var(--bg-light);
        flex-direction: column; /* Les éléments Flexbox s'empilent verticalement */
        justify-content: center; /* Centre les éléments verticalement */
        gap: 2rem;
        transition: right 0.4s ease-in-out; /* Anime le glissement du menu */
        box-shadow: -5px 0 15px rgba(0, 0, 0, 0.1); /* Ombre sur le côté gauche du menu */
    }
    
    /*
      Lorsque la case à cocher du menu burger est cochée, le menu principal (`.main-nav`) est visible.
      - `right: 0;`: Fait glisser le menu depuis la droite pour qu'il soit visible.
    */
    .burger-menu-checkbox:checked ~ .main-nav {
        right: 0;
    }

    /*
      Le bouton du menu burger est affiché sur les écrans de taille moyenne.
    */
    .burger-menu {
        display: block;
    }
}

/*
  Media query pour les écrans de petite taille (max-width: 768px), typiquement les téléphones.
*/
@media (max-width: 768px) {
    /*
      Réduit la taille du titre H1 dans le hero pour les petits écrans.
    */
    .hero h1 {
        font-size: 2.2rem;
    }
    /*
      Réduit la taille du titre de section.
    */
    .section-title {
        font-size: 1.8rem;
    }
    /*
      Les colonnes du pied de page s'empilent verticalement et sont centrées.
    */
    .footer-container {
        flex-direction: column; /* Les colonnes s'empilent verticalement */
        align-items: center; /* Centre les éléments horizontalement */
        text-align: center; /* Centre le texte à l'intérieur des colonnes */
    }
}