/* Suniia — Jetons de conception (voir STYLE_GUIDE.md) */

/* fonts.css (Metropolis + Lora @font-face) is disabled — override Olivero font variables
   so any elements using var(--font-sans/serif) get our design fonts instead. */
:root {
  --content-left: 0;
  --font-sans: 'Inter', system-ui, -apple-system, sans-serif;
  --font-serif: 'Playfair Display', Georgia, 'Times New Roman', serif;
}

/* Belt-and-suspenders: directly zero out the reservation in case CSS aggregation
   serves a stale bundle where --content-left is still 5.625rem. */
.main-content {
  width: 100% !important;
  margin-inline-start: 0 !important;
}

/* layout-content-medium.css and layout-content-narrow.css were disabled in W0
   (we use max-width/margin:auto instead of column-span gutters).
   Without grid-column definitions, Olivero's grid blocks default to 1 column
   (~1/14 of the viewport) — causing extremely narrow content.
   Force full span so our own max-width rules take over per-section. */
.layout--pass--content-medium > *,
.layout--pass--content-narrow > * {
  grid-column: 1 / -1 !important;
  width: 100%;
}

/* Fond et couleur de texte globaux pour le thème sombre Suniia */
body {
  background-color: var(--color-obsidian) !important;
  background-image: none !important;
  color: var(--color-pearl);
}

/* Couche de fond lumineuse — position:fixed remplace background-attachment:fixed
   (inopérant sur iOS Safari et la plupart des navigateurs Android)
   Modèle à 4 sources : angle haut-gauche (or) + haut-centre (neutre) + haut-droite (magenta) + bas-gauche (chaleur) */
.suniia-bg-layer {
  position: fixed;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  background-color: var(--color-obsidian);
  background-image:
    /* Source 1 : lumière dorée principale, haut-gauche, zone logo — la plus forte */
    radial-gradient(at 15% 0%,  rgba(var(--color-champagne-rgb), 0.18) 0%, transparent 45%),
    /* Source 2 : lumière neutre diffuse, haut-centre — crée l'amplitude latérale */
    radial-gradient(at 50% -5%, rgba(var(--color-pearl-rgb),     0.05) 0%, transparent 40%),
    /* Source 3 : contre-jour magenta, haut-droite — profondeur chromatique */
    radial-gradient(at 90% 0%,  rgba(var(--color-magenta-rgb),   0.14) 0%, transparent 45%),
    /* Source 4 : chaleur résiduelle bas-gauche — équilibre la composition verticale */
    radial-gradient(at 0% 100%, rgba(var(--color-charcoal-rgb),  0.20) 0%, transparent 50%);
}

/* Mobile : écran étroit, 3 sources distinctes créent un effet trop chargé.
   On fusionne en 1 source centrale + contre-jour droit atténué. */
@media (max-width: 767px) {
  .suniia-bg-layer {
    background-image:
      radial-gradient(at 50% 0%,  rgba(var(--color-champagne-rgb), 0.12) 0%, transparent 50%),
      radial-gradient(at 85% 0%,  rgba(var(--color-magenta-rgb),   0.05) 0%, transparent 35%);
  }
}

:root {
  /* Palette canonique */
  --color-obsidian:  #0F0A12;   /* fond global */
  --color-charcoal:  #1E1B24;   /* fond des cartes */
  --color-magenta:   #B02E6D;   /* couleur de marque */
  --color-champagne: #D4AF37;   /* accent doré */
  --color-pearl:     #E0E0E0;   /* texte principal */

  /* Z轴阴影层级 (STYLE_GUIDE.md) */
  --shadow-level-1: 0 4px 12px rgba(var(--color-obsidian-rgb), 0.5);
  --shadow-level-2: 0 12px 24px rgba(var(--color-obsidian-rgb), 0.7);
  --shadow-level-3: 0 24px 48px rgba(var(--color-obsidian-rgb), 0.9);

  /* Redéfinition des variables texte d'Olivero pour fond sombre
     (--color-text-neutral-medium ≈ #2B3438, --color-text-neutral-loud ≈ #0C0E0F
      sont illisibles sur --color-obsidian #0F0A12) */
  --color-text-neutral-loud:   var(--color-pearl);
  --color-text-neutral-medium: var(--color-pearl);
  --color-text-neutral-soft:   rgba(var(--color-pearl-rgb), 0.65);

  /* Canaux RVB — nécessaires pour rgba() avec opacité variable */
  --color-obsidian-rgb:   15, 10, 18;
  --color-charcoal-rgb:   30, 27, 36;
  --color-magenta-rgb:    176, 46, 109;
  --color-champagne-rgb:  212, 175, 55;
  --color-pearl-rgb:      224, 224, 224;
  --color-black-rgb:      var(--color-obsidian-rgb);  /* 指向 Obsidian 的 RGB 值 */
  --color-black:          var(--color-obsidian);      /* 指向 Obsidian 的颜色值 */
  --color-gold:           var(--color-champagne);     /* alias sémantique — or champagne */

  /* Alias fonctionnels (référencés dans header.css et video.css) */
  --clr-bg-header:  var(--color-obsidian);
  --clr-accent:     var(--color-magenta);
  --clr-text-light: var(--color-pearl);
  --clr-text-dark:  #1A1A1A;                                    /* texte sur fond clair (cas exceptionnels) */
  --clr-text-muted: rgba(var(--color-pearl-rgb), 0.55);         /* texte atténué sur fond sombre */
  --clr-border:     var(--color-obsidian);                       /* interstice de grille sombre */

  /* Mise en page */
  --max-w-header:  1400px;
  --max-w-content: 1200px;
  --header-h:      80px;
}

/* ── Sphères de lumière ambiante (bg-orbs) ──────────────────────────────────
   Deux orbes positionnées en diagonale — coin supérieur gauche (magenta) et
   coin inférieur droit (champagne, plus discret) — pour renforcer la chaleur
   chromatique sans surcharger le suniia-bg-layer existant.
   z-index: -1 : identique à .suniia-bg-layer, derrière tout le contenu. */
.bg-orbs-container {
  position: fixed;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  overflow: hidden;
}

.bg-orb {
  position: absolute;
  width: 700px;
  height: 700px;
  border-radius: 50%;
  filter: blur(520px);
  pointer-events: none;
  animation: orb-float 20s ease-in-out infinite alternate;
}

.orb-1 {
  background: var(--color-magenta);
  opacity: 0.12;
  top: -220px;
  left: -220px;
  animation-delay: 0s;
}

/* Orbe secondaire champagne — intensité réduite pour ne pas rivaliser avec orb-1 */
.orb-2 {
  background: var(--color-champagne);
  opacity: 0.07;
  bottom: -220px;
  right: -220px;
  animation-delay: -10s;
}

/* Dérive lente et douce — amplitude volontairement faible pour rester imperceptible */
@keyframes orb-float {
  from { transform: translate(0,   0); }
  to   { transform: translate(60px, 50px); }
}

/* Liens dans le contenu — champagne gold lisible sur fond sombre */
.main-content a:not(.button):not(.hero-btn):not(.card-link) {
  color: var(--color-champagne);
  text-decoration-color: rgba(var(--color-champagne-rgb), 0.4);
  transition: color 0.2s;
}

.main-content a:not(.button):not(.hero-btn):not(.card-link):hover {
  color: var(--color-pearl);
  text-decoration-color: var(--color-pearl);
}

/* Olivero surcharge les liens dans .text-content en bleu — neutraliser */
.main-content .text-content a:where(:not(.button)) {
  color: var(--color-champagne);
  box-shadow: none;
  text-decoration: underline;
  text-decoration-color: rgba(var(--color-champagne-rgb), 0.4);
}

.main-content .text-content a:where(:not(.button)):hover {
  color: var(--color-pearl);
  text-decoration-color: var(--color-pearl);
}

/* Espacement entre l'en-tête et le contenu principal
   (Olivero applique ce padding sur .main-content__container,
   absent de notre template Twig) */
.main-content {
  padding-block-start: var(--sp3);
}

@media (min-width: 43.75rem) {
  .main-content {
    padding-block-start: var(--sp5);
  }
}

/* Supprimer ce padding sur les pages vidéo (pleine largeur) */
.path-video .main-content {
  padding-block-start: 0;
}

/* Réduire le padding sur la page membership — elle gère son propre espacement */
.path-membership .main-content {
  padding-block-start: 0;
}


/* ── Article full view — mise en page deux colonnes ── */

.node--type-article.node--view-mode-full {
  display: block;
}

.article-layout {
  display: flex;
  align-items: flex-start;
  gap: 40px;
  max-width: 1100px;
  margin: 0 auto;
  padding-inline: var(--sp2);
}

.article-main {
  flex: 1;
  min-width: 0;
  max-width: 720px;
}

.article-sidebar {
  width: 300px;
  flex-shrink: 0;
  position: sticky;
  top: calc(var(--header-h) + var(--sp2));
}

/* Publicité */
.sidebar-ad {
  border-radius: 8px;
  overflow: hidden;
  margin-block-end: var(--sp1-5);
}

/* Conteneur à ratio fixe — carré 1:1 */
.sidebar-ad--image {
  aspect-ratio: 1 / 1;
}

.sidebar-ad--image img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  border-radius: 8px;
}

/* Placeholder si aucun bloc publicitaire n'est configuré */
.sidebar-ad--placeholder {
  background: var(--color-charcoal);
  border: 1px solid rgba(var(--color-champagne-rgb), 0.12);
  aspect-ratio: 1 / 1;
  display: flex;
  align-items: center;
  justify-content: center;
}

.sidebar-ad__label {
  font-size: 0.6875rem;
  color: var(--clr-text-muted);
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

/* Meta (category + tags) dans la barre latérale */
.sidebar-meta {
  margin-block-end: var(--sp1-5);
}

/* En-tête de section latérale */
.sidebar-section {
  margin-block-end: var(--sp2);
}

.sidebar-section__title {
  font-size: 0.6875rem;
  font-weight: 700;
  color: var(--clr-text-muted);
  letter-spacing: 0.09em;
  text-transform: uppercase;
  margin: 0 0 0.5rem;
  padding-block-end: 0.35rem;
  border-bottom: 1px solid rgba(var(--color-champagne-rgb), 0.15);
}

/* Carte vidéo dans la barre latérale — 16:9 cinématique */
.sidebar-video-card {
  display: block;
  text-decoration: none;
  margin-block-end: 1.2rem;
  border-radius: 8px;
  overflow: hidden;
  background: var(--color-obsidian);
  transition: transform 0.4s cubic-bezier(0.165, 0.84, 0.44, 1), box-shadow 0.4s ease;
}

.sidebar-video-card:hover {
  transform: scale(1.03);
  box-shadow: 0 10px 24px rgba(var(--color-black-rgb), 0.55);
}

.sidebar-video-thumb {
  position: relative;
  aspect-ratio: 16 / 9;
  overflow: hidden;
  border-radius: 8px;
  background: var(--color-charcoal);
}

.sidebar-video-thumb img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  opacity: 0.85;
  transition: opacity 0.3s ease;
}

.sidebar-video-card:hover .sidebar-video-thumb img {
  opacity: 1;
}

.sidebar-video-thumb__placeholder {
  width: 100%;
  height: 100%;
  background: var(--color-charcoal);
}

/* Dégradé profond — remonte à 65% de la hauteur pour une lisibilité garantie */
.sidebar-video-thumb::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  height: 65%;
  background: linear-gradient(
    to top,
    rgba(var(--color-black-rgb), 0.90) 0%,
    rgba(var(--color-black-rgb), 0.50) 45%,
    transparent 100%
  );
  z-index: 1;
  pointer-events: none;
}

/* Icône lecture — z-index:3, au-dessus de tout */
.sidebar-video-play {
  position: absolute;
  top: 42%;
  left: 50%;
  transform: translate(-50%, -50%);
  color: rgba(var(--color-pearl-rgb), 0.9);
  opacity: 0;
  z-index: 3;
  transition: opacity 0.2s;
  pointer-events: none;
}

.sidebar-video-card:hover .sidebar-video-play {
  opacity: 1;
}

/* Titre — 2 lignes max, typographie allégée */
.sidebar-video-title {
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  padding: 10px 12px;
  font-size: 0.85rem;
  font-weight: 400;
  color: var(--color-pearl);
  line-height: 1.35;
  z-index: 2;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  pointer-events: none;
}

/* Layout for the two side-rail views (views.css removed — no grid conflict) */
.view-related-videos,
.view-related-articles {
  display: block;
  gap: 0;
}

.view-related-videos .view-content,
.view-related-articles .view-content {
  display: block;
  grid-template-columns: unset;
  background: transparent;
  gap: 0;
  max-width: none;
  margin: 0;
  text-align: left;
}

.view-related-videos .view-content .views-row,
.view-related-articles .view-content .views-row {
  display: block;
  background: transparent;
  outline: none;
  margin: 0;
  padding: 0;
}

/* Liste d'articles liés dans la barre latérale */
.sidebar-article-item {
  display: block;
  padding-block: 0.4rem;
  border-bottom: 1px solid rgba(var(--color-pearl-rgb), 0.07);
  text-decoration: none;
}

.sidebar-article-item:last-child {
  border-bottom: none;
  padding-block-end: 0;
}

.sidebar-article-title {
  display: block;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  font-size: 0.8125rem;
  font-weight: 500;
  color: rgba(var(--color-pearl-rgb), 0.85);
  line-height: 1.4;
  transition: color 0.2s, text-decoration-color 0.2s;
  text-decoration: underline;
  text-decoration-color: rgba(var(--color-pearl-rgb), 0.2);
  text-underline-offset: 2px;
}

.sidebar-article-item:hover .sidebar-article-title {
  color: var(--color-champagne);
  text-decoration-color: rgba(var(--color-champagne-rgb), 0.5);
}

/* Mobile — barre latérale sous le contenu */
@media (max-width: 1023px) {
  .article-layout {
    flex-direction: column;
    gap: var(--sp2);
  }

  .article-sidebar {
    width: 100%;
    position: static;
  }

  .article-main {
    max-width: 100%;
  }
}

/* Titre de l'article — réduit par rapport au h1 global d'Olivero (3.75rem) */
.node--type-article.node--view-mode-full .node__title {
  font-size: 1.5rem;
  font-weight: 700;
  line-height: 1.35;
  letter-spacing: -0.01em;
  color: var(--color-pearl);
  margin-block-start: 0;
  margin-block-end: var(--sp1-5);
}

@media (min-width: 43.75rem) {
  .node--type-article.node--view-mode-full .node__title {
    font-size: 2rem;
    line-height: 1.3;
  }
}

/* ── Article full view — image de couverture ──
   Olivero applique .wide-content (marges négatives) à toutes les images en full view.
   On neutralise ce débordement et on impose un style de présentation cohérent. */
.node--type-article.node--view-mode-full .wide-content {
  width: 100%;
  max-width: 100%;
  margin-inline-start: 0;
  margin-inline-end: 0;
  margin-block-start: 0;
  margin-block-end: var(--sp2);
}

.node--type-article.node--view-mode-full .field--name-field-image img {
  display: block;
  width: 100%;
  max-width: 100%;
  height: auto;
  aspect-ratio: 19 / 9;
  object-fit: cover;
  border-radius: 8px;
}

/* ── Article full view — corps de texte ── */
.node--type-article.node--view-mode-full .field--name-body {
  font-size: 1rem;
  line-height: 1.8;
  color: var(--color-pearl);
  margin-block-end: var(--sp1-5);
}

/* ── Category — label et valeur sur une ligne ── */
.node--type-article.node--view-mode-full .field--name-field-category {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 0.4em;
  margin-block-end: var(--sp0-75);
}

/* Annule les floats d'Olivero sur label-inline */
.node--type-article.node--view-mode-full .field--name-field-category .field__label,
.node--type-article.node--view-mode-full .field--name-field-category .field__items {
  float: none;
  padding-inline-end: 0;
}

.node--type-article.node--view-mode-full .field--name-field-category .field__label {
  font-size: 0.8125rem;
  font-weight: 600;
  color: var(--clr-text-muted);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  white-space: nowrap;
}

.node--type-article.node--view-mode-full .field--name-field-category .field__item a {
  font-size: 0.8125rem;
  font-weight: 600;
  color: var(--color-champagne) !important;
  text-decoration: none !important;
  transition: color 0.2s;
}

.node--type-article.node--view-mode-full .field--name-field-category .field__item a:hover {
  color: var(--color-pearl) !important;
}

/* ── Tags — neutralise le fond gris clair d'Olivero, style pilule sombre ── */
.node--view-mode-full .field--tags {
  background-color: transparent;
  padding: 0;
  margin-block-start: 0;
  margin-block-end: var(--sp1-5);
}

.field--tags__label {
  font-size: 0.8125rem;
  font-weight: 600;
  color: var(--clr-text-muted);
  letter-spacing: 0.04em;
  text-transform: uppercase;
}

.field--tags__item a {
  display: inline-flex;
  align-items: center;
  padding: 0.2em 0.75em;
  border-radius: 999px;
  background-color: rgba(var(--color-magenta-rgb), 0.15);
  border: 1px solid rgba(var(--color-magenta-rgb), 0.45);
  color: var(--color-pearl) !important;
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.03em;
  text-decoration: none !important;
  transition: background-color 0.2s, border-color 0.2s;
}

.field--tags__item a:hover {
  background-color: rgba(var(--color-magenta-rgb), 0.3);
  border-color: var(--color-magenta);
  color: var(--color-pearl) !important;
}

/* Supprime la virgule insérée par Olivero entre les tags */
.field--tags__item:nth-last-child(n + 2)::after {
  content: none;
}

/* Pied de page */
.site-footer {
  background: var(--color-charcoal);
  padding: 24px 2rem 20px;
  text-align: center;
  border-inline-start: none;
}

.site-footer .block,
.site-footer .region {
  margin: 0;
  padding: 0;
}

.site-footer .menu {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  gap: 0.5rem 1.5rem;
  list-style: none;
  margin: 0;
  padding: 0;
}

.site-footer .menu a {
  color: var(--clr-text-muted);
  text-decoration: none;
  font-size: 0.875rem;
  font-weight: 500;
  transition: color 0.2s;
}

@media (max-width: 480px) {
  .site-footer .menu {
    gap: 0.5rem 1rem;
  }

  .site-footer .menu a {
    font-size: 0.9rem;
    min-height: 44px;
    display: inline-flex;
    align-items: center;
  }
}

.site-footer .menu a:hover {
  color: var(--color-pearl);
}

.site-footer__copyright {
  margin: 10px 0 0;
  font-size: 0.75rem;
  color: var(--clr-text-muted);
  text-align: center;
}

/* ── Pagination (full pager) ───────────────────────────────────────────────
   Olivero applique background-color:white sur .pager__item et font-weight:bold
   sur .pager__items — les deux sont incompatibles avec le thème sombre Suniia.
   Toutes les règles ci-dessous gagnent en ordre de chargement (même spécificité
   de classe 0,1,0) car global.css est chargé après les CSS de cœur Olivero. */

/* Écart excessif entre .view-content et .pager :
   annule le gap var(--sp3) = 3.375rem en réduisant l'espace au-dessus du pager */
.view > .pager {
  margin-block: 0 2.5rem;
}

/* Conteneur : centré, espacement entre items, poids léger */
.pager__items {
  justify-content: center;
  gap: 0.2rem;
  font-weight: 300;
}

/* Item de base — Olivero : background-color: var(--color--white) */
.pager__item {
  background-color: transparent;
  color: rgba(var(--color-pearl-rgb), 0.45);
  border-radius: 4px;
}

/* Item actif — Olivero : background-color: var(--color--primary-40) (bleu) */
.pager__item--active {
  background-color: rgba(var(--color-magenta-rgb), 0.18);
  color: var(--color-pearl);
}

/* Lien — Olivero : color: var(--color-text-neutral-soft) */
.pager__link {
  color: rgba(var(--color-pearl-rgb), 0.45);
  border-radius: 4px;
}

/* Hover — Olivero : background-color: var(--color--gray-95) (gris clair) */
.pager__link:hover {
  background-color: rgba(var(--color-champagne-rgb), 0.08);
  color: var(--color-champagne);
}

/* Focus clavier */
.pager__link:focus {
  color: var(--color-champagne);
  outline: solid 2px rgba(var(--color-champagne-rgb), 0.40);
  outline-offset: -2px;
}

/* ── Article body: blockquote + pre (replaces layout-content-narrow.css decorative rules) ── */
.text-content blockquote {
  margin-inline: 0;
  padding-block: 0.75rem;
  padding-inline-start: 1.25rem;
  border-inline-start: 3px solid rgba(var(--color-champagne-rgb), 0.35);
  color: rgba(var(--color-pearl-rgb), 0.75);
  font-style: italic;
}

.text-content blockquote p {
  margin: 0;
}

.text-content pre,
.text-content code {
  font-family: 'SF Mono', 'Fira Code', 'Consolas', monospace;
  font-size: 0.875em;
  background: rgba(var(--color-charcoal-rgb), 0.60);
  border: 1px solid rgba(var(--color-champagne-rgb), 0.10);
  border-radius: 4px;
}

.text-content code {
  padding: 0.15em 0.4em;
}

.text-content pre {
  padding: 1rem 1.25rem;
  overflow-x: auto;
  line-height: 1.6;
}

.text-content pre code {
  background: none;
  border: none;
  padding: 0;
  border-radius: 0;
}
