/* ==========================================================================
   components.css — Blocs réutilisables
   --------------------------------------------------------------------------
   Nomenclature BEM : .bloc, .bloc__element, .bloc--modificateur.
   Intérêt : la spécificité reste plate (une classe = 0,1,0), le nom dit
   à quoi appartient l'élément, et aucun style ne fuit hors de son bloc.
   ========================================================================== */

@layer components {

  /* ======================================================================
     EYEBROW — étiquette au-dessus d'un titre
     ====================================================================== */

  .eyebrow {
    display: block;
    font-family: var(--font-mono);
    font-size: var(--text-xs);
    letter-spacing: 0.04em;
    color: var(--color-accent-dark);
    margin-block-end: var(--space-md);
  }

  /* Le prompt de terminal est purement décoratif : généré en CSS, il
     n'est donc pas lu par les lecteurs d'écran ni copié avec le texte. */
  .eyebrow::before {
    content: ">_ ";
    color: var(--color-accent);
  }

  /* ======================================================================
     TITRES
     ====================================================================== */

  .page-title {
    font-size: var(--text-2xl);
    letter-spacing: -0.03em;
    margin-block-end: var(--space-sm);
  }

  .page-subtitle {
    font-family: var(--font-mono);
    font-size: var(--text-md);
    font-weight: var(--weight-regular);
    line-height: var(--leading-snug);
    color: var(--color-ink-soft);
    max-inline-size: 40ch;
    margin-block-end: var(--space-lg);
  }

  .section-title {
    font-size: var(--text-xl);
    margin-block-end: var(--space-xl);
    scroll-margin-block-start: calc(var(--header-height) + var(--space-lg));
  }

  .section-title::before {
    content: ">_ ";
    color: var(--color-accent);
  }

  /* ======================================================================
     LISTE DE CONTACTS
     ====================================================================== */

  .contact-list {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-xs) var(--space-lg);
    list-style: none;
    margin: 0;
    padding: 0;
    font-family: var(--font-mono);
    font-size: var(--text-sm);
    color: var(--color-ink-faint);
  }

  .contact-list li {
    display: inline-flex;
    align-items: center;
    gap: var(--space-2xs);
  }

  .contact-list__icon {
    inline-size: 0.95rem;
    block-size: 0.95rem;
    stroke: var(--color-accent);
    stroke-width: 1.8;
    fill: none;
    flex-shrink: 0;
  }

  /* ======================================================================
     BOUTONS D'ACTION
     Deux niveaux seulement : principal (plein) et secondaire (contour).
     Au-delà, la hiérarchie visuelle devient illisible.
     ====================================================================== */

  .actions {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-sm);
    margin-block-start: var(--space-lg);
  }

  .button {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--space-xs);
    min-block-size: var(--tap-target);
    padding-inline: var(--space-md);
    font-family: var(--font-mono);
    font-size: var(--text-sm);
    font-weight: var(--weight-medium);
    text-decoration: none;
    border-radius: var(--radius-md);
    border: 1px solid transparent;
    transition: background-color var(--transition-fast),
                border-color var(--transition-fast),
                color var(--transition-fast);
  }

  .button__icon {
    inline-size: 1rem;
    block-size: 1rem;
    stroke: currentcolor;
    stroke-width: 1.9;
    fill: none;
    flex-shrink: 0;
  }

  .button--primary {
    background-color: var(--color-accent-dark);
    color: var(--color-ink-inverse);
  }

  .button--primary:hover {
    background-color: var(--color-ink);
    color: var(--color-ink-inverse);
  }

  .button--secondary {
    background-color: var(--color-surface);
    border-color: var(--color-line-strong);
    color: var(--color-ink-soft);
  }

  .button--secondary:hover {
    border-color: var(--color-accent);
    color: var(--color-accent-dark);
  }

  /* ======================================================================
     INTRODUCTION
     ====================================================================== */

  .intro { padding-block: var(--space-2xl) var(--space-xl); }

  .intro__heading {
    font-size: var(--text-lg);
    line-height: var(--leading-snug);
    max-inline-size: 34ch;
    margin-block-end: var(--space-lg);
  }

  .intro__text {
    color: var(--color-ink-soft);
    max-inline-size: var(--width-prose);
    margin-block-end: var(--space-md);
  }

  .intro__text strong {
    color: var(--color-ink);
    font-weight: var(--weight-semibold);
  }

  /* Dernier paragraphe mis en exergue par un filet latéral plutôt que par
     un fond coloré : plus sobre, et imprimable sans consommer d'encre. */
  .intro__text--highlight {
    border-inline-start: 3px solid var(--color-accent);
    padding-inline-start: var(--space-lg);
    color: var(--color-ink);
  }

  /* ======================================================================
     ENTRÉE DE PARCOURS (timeline)
     ====================================================================== */

  .entry {
    position: relative;
    padding-inline-start: var(--space-lg);
    padding-block-end: var(--space-xl);
    border-inline-start: 2px solid var(--color-line);
  }

  /* La dernière entrée ne prolonge pas le trait dans le vide */
  .entry:last-child {
    padding-block-end: 0;
    border-inline-start-color: transparent;
  }

  /* Pastille de jalon. Décorative : aucune information n'en dépend. */
  .entry::before {
    content: "";
    position: absolute;
    inset-inline-start: -7px;
    inset-block-start: 0.55rem;
    inline-size: 12px;
    block-size: 12px;
    border-radius: 50%;
    background-color: var(--color-bg);
    border: 2px solid var(--color-accent);
  }

  .entry__date {
    display: block;
    font-family: var(--font-mono);
    font-size: var(--text-xs);
    font-weight: var(--weight-medium);
    color: var(--color-accent-dark);
    margin-block-end: var(--space-2xs);
  }

  .entry__role {
    font-size: var(--text-md);
    margin-block-end: var(--space-2xs);
  }

  .entry__org {
    font-family: var(--font-mono);
    font-size: var(--text-sm);
    color: var(--color-ink-faint);
    margin-block-end: var(--space-md);
  }

  .entry__note {
    color: var(--color-ink-soft);
    font-size: var(--text-sm);
    max-inline-size: var(--width-prose);
  }

  /* ======================================================================
     FICHE DE COURS
     ====================================================================== */

  .course {
    background-color: var(--color-surface);
    border: 1px solid var(--color-line);
    border-radius: var(--radius-md);
    padding: var(--space-md);
    margin-block-end: var(--space-xs);
    transition: border-color var(--transition-base);
  }

  .course:last-child { margin-block-end: 0; }
  .course:hover { border-color: var(--color-line-strong); }

  .course__name {
    display: block;
    font-family: var(--font-mono);
    font-size: var(--text-sm);
    font-weight: var(--weight-bold);
    margin-block-end: var(--space-2xs);
  }

  .course__name::before {
    content: "▪ ";
    color: var(--color-accent);
  }

  .course__desc {
    font-size: var(--text-sm);
    color: var(--color-ink-soft);
    line-height: 1.65;
  }

  /* ======================================================================
     LISTE À PUCES PERSONNALISÉE
     Puce en ::before plutôt que list-style-image : couleur pilotable par
     variable, alignement contrôlé au pixel.
     ====================================================================== */

  .marker-list {
    list-style: none;
    margin: 0;
    padding: 0;
    color: var(--color-ink-soft);
    font-size: var(--text-sm);
  }

  .marker-list li {
    position: relative;
    padding-inline-start: var(--space-md);
    margin-block-end: var(--space-xs);
  }

  .marker-list li:last-child { margin-block-end: 0; }

  .marker-list li::before {
    content: "▪";
    position: absolute;
    inset-inline-start: 0;
    color: var(--color-accent);
  }

  /* ======================================================================
     CARTE
     ====================================================================== */

  .card {
    background-color: var(--color-surface);
    border: 1px solid var(--color-line);
    border-radius: var(--radius-md);
    padding: var(--space-lg);
    box-shadow: var(--shadow-sm);
    transition: border-color var(--transition-base),
                transform var(--transition-base),
                box-shadow var(--transition-base);
  }

  .card:hover {
    border-color: var(--color-accent);
    transform: translateY(-2px);
    box-shadow: var(--shadow-md);
  }

  .card__title {
    display: flex;
    align-items: center;
    gap: var(--space-xs);
    font-size: var(--text-base);
    margin-block-end: var(--space-sm);
  }

  .card__icon {
    inline-size: 1.1rem;
    block-size: 1.1rem;
    stroke: var(--color-accent);
    stroke-width: 1.8;
    fill: none;
    flex-shrink: 0;
  }

  /* ======================================================================
     PROJET
     ====================================================================== */

  .project {
    background-color: var(--color-surface);
    border: 1px solid var(--color-line);
    border-radius: var(--radius-md);
    padding: var(--space-lg);
    margin-block-end: var(--space-sm);
    transition: border-color var(--transition-base);
  }

  .project:last-child { margin-block-end: 0; }
  .project:hover { border-color: var(--color-line-strong); }

  .project__header {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: var(--space-2xs) var(--space-sm);
    margin-block-end: var(--space-xs);
  }

  .project__title { font-size: var(--text-base); }

  .project__desc {
    color: var(--color-ink-soft);
    font-size: var(--text-sm);
    max-inline-size: var(--width-prose);
  }

  .project__desc + .project__desc { margin-block-start: var(--space-xs); }

  .project__stack {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-2xs);
    list-style: none;
    margin: var(--space-sm) 0 0;
    padding: 0;
  }

  .project__stack li {
    font-family: var(--font-mono);
    font-size: var(--text-2xs);
    color: var(--color-ink-faint);
    background-color: var(--color-surface-alt);
    border-radius: var(--radius-sm);
    padding: 2px var(--space-xs);
  }

  /* ======================================================================
     BADGE
     ====================================================================== */

  .badge {
    font-family: var(--font-mono);
    font-size: var(--text-xs);
    font-weight: var(--weight-medium);
    color: var(--color-accent-dark);
    background-color: var(--color-accent-wash);
    border: 1px solid var(--color-accent-border);
    border-radius: var(--radius-sm);
    padding: 2px var(--space-xs);
    white-space: nowrap;
  }

  /* Variante neutre : signale un état non abouti sans l'emphase de l'accent */
  .badge--muted {
    color: var(--color-ink-faint);
    background-color: var(--color-surface-alt);
    border-color: var(--color-line-strong);
  }

  /* ======================================================================
     FORMATION
     ====================================================================== */

  .education {
    border-inline-start: 2px solid var(--color-line);
    padding-inline-start: var(--space-lg);
  }

  .education__degree {
    font-size: var(--text-base);
    margin-block-end: var(--space-2xs);
  }

  .education__school {
    font-family: var(--font-mono);
    font-size: var(--text-sm);
    color: var(--color-ink-faint);
  }

  /* ======================================================================
     BLOC DE CONTACT (appel à l'action de fin de page)
     ====================================================================== */

  .contact-block {
    background-color: var(--color-surface);
    border: 1px solid var(--color-line);
    border-radius: var(--radius-md);
    padding: var(--space-xl);
  }

  .contact-block__text {
    color: var(--color-ink-soft);
    max-inline-size: var(--width-prose);
  }
}
