/*/* ═══════════════════════════════════════════════════════════ ⚠ Ce fichier COMPLÈTE style.css sans l'écraser. Toutes les règles sont préfixées .nw- ou [data-template="narrative-web"] ═══════════════════════════════════════════════════════════ */ :root { --nw-ink : #1a1a18; --nw-ink-soft : #3d3d38; --nw-ink-muted : #7a7a72; --nw-paper : var(--color-panel-bg); --nw-paper-warm : #f4f1eb; --nw-rule : #d8d4cc; --nw-accent : #5D28E6; --nw-accent-dark : #361192; --nw-tag-bg : #e9e5dc; --nw-max-w : 1280px; --nw-narrow : 720px; --nw-sidenav-w : 220px; --nw-transition : 0.25s ease; } /* ─────────────────────────────────────────── NAVIGATION LATÉRALE ─────────────────────────────────────────── */ .nw-sidenav { position: fixed; top: 50%; right: 2rem; transform: translateY(-50%); z-index: 100; pointer-events: none; } .nw-sidenav__list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.5rem; } .nw-sidenav__item { pointer-events: all; } .nw-sidenav__link { display: flex; align-items: center; gap: 0.6rem; text-decoration: none; color: var(--nw-ink-muted); transition: color var(--nw-transition); justify-content: flex-end; } .nw-sidenav__dot { display: block; width: 8px; height: 8px; border-radius: 50%; background: currentColor; opacity: 0.3; transition: opacity var(--nw-transition), background var(--nw-transition), transform var(--nw-transition); flex-shrink: 0; order: 2; } .nw-sidenav__label { font-family: var(--nw-font-ui); font-size: 0.72rem; font-weight: 500; letter-spacing: 0.04em; text-transform: uppercase; opacity: 0; transform: translateX(6px); transition: opacity var(--nw-transition), transform var(--nw-transition); white-space: nowrap; order: 1; } .nw-sidenav__link:hover .nw-sidenav__label, .nw-sidenav__link.is-active .nw-sidenav__label { opacity: 1; transform: translateX(0); } .nw-sidenav__link:hover .nw-sidenav__dot, .nw-sidenav__link.is-active .nw-sidenav__dot { opacity: 1; background: var(--nw-accent); transform: scale(1.4); } .nw-sidenav__item--map .nw-sidenav__dot { background: #2980b9; } .nw-sidenav__item--geoformat .nw-sidenav__dot { background: var(--nw-accent); } /* ── Sous-items sidenav (marqueurs) ── */ .nw-sidenav__sub { list-style: none; margin: 0.3rem 0 0; padding: 0; display: flex; flex-direction: column; gap: 0.25rem; padding-left: 0; } .nw-sidenav__sub-item { pointer-events: all; } .nw-sidenav__sub-link { display: flex; align-items: center; gap: 0.5rem; text-decoration: none; color: var(--nw-ink-muted); transition: color var(--nw-transition); justify-content: flex-end; opacity: 0.75; } .nw-sidenav__sub-dot { display: block; width: 5px; height: 5px; border-radius: 50%; background: #2980b9; opacity: 0.4; flex-shrink: 0; order: 2; transition: opacity var(--nw-transition), transform var(--nw-transition); } .nw-sidenav__sub-label { font-family: var(--nw-font-ui); font-size: 0.65rem; font-weight: 400; letter-spacing: 0.03em; white-space: nowrap; order: 1; opacity: 0; transform: translateX(4px); transition: opacity var(--nw-transition), transform var(--nw-transition); max-width: 140px; overflow: hidden; text-overflow: ellipsis; } .nw-sidenav__sub-link:hover .nw-sidenav__sub-label, .nw-sidenav__sub-link.is-active .nw-sidenav__sub-label { opacity: 1 !important; transform: translateX(0); } .nw-sidenav__sub-link:hover .nw-sidenav__sub-dot, .nw-sidenav__sub-link.is-active .nw-sidenav__sub-dot { opacity: 1 !important; transform: scale(1.5); background: var(--nw-accent); } /* Afficher les labels sub quand le parent est actif */ .nw-sidenav__item.is-parent-active .nw-sidenav__sub-label { opacity: 0.7; transform: translateX(0); } @media (max-width: 900px) { .nw-sidenav { display: none; } } /* ─────────────────────────────────────────── HERO NARRATIVE ─────────────────────────────────────────── */ .nw-hero { position: relative; min-height: 92vh; display: flex; align-items: flex-end; overflow: hidden; background: var(--nw-ink); } .nw-hero__bg { position: absolute; inset: 0; background-size: cover; background-position: center; filter: grayscale(20%); transform: scale(1.04); transition: transform 8s ease-out; } .nw-hero:hover .nw-hero__bg { transform: scale(1); } .nw-hero__overlay { position: absolute; inset: 0; background: linear-gradient( to bottom, rgba(26,26,24,0.1) 0%, rgba(26,26,24,0.4) 50%, rgba(26,26,24,0.88) 100% ); } .nw-hero__content { position: relative; z-index: 2; padding: 6rem 3rem 4rem; max-width: var(--nw-narrow); margin: 0 auto; width: 100%; } .nw-hero__title { font-family: var(--nw-font-display); font-size: clamp(2.4rem, 5vw, 4.5rem); font-weight: 800; color: #fff; line-height: 1.12; letter-spacing: -0.01em; margin: 0 0 1.25rem; text-shadow: 0 2px 20px rgba(0,0,0,0.3); } .nw-hero__author { font-family: var(--nw-font-ui); font-size: 0.875rem; color: rgba(255,255,255,0.75); letter-spacing: 0.06em; text-transform: uppercase; margin: 0; } .nw-hero__author span { color: #fff; font-weight: 600; } /* Hero sans image de couverture */ .nw-hero:not(:has(.nw-hero__bg)) { background: var(--nw-ink); min-height: 55vh; } /* ─────────────────────────────────────────── INTRODUCTION ─────────────────────────────────────────── */ .nw-introduction { padding: 4rem 1rem; background: var(--nw-paper); } .nw-introduction__body { font-size: 1.25rem; line-height: 1.8; color: var(--nw-ink-soft); font-weight: 300; font-style: italic; border-left: 3px solid var(--nw-accent); padding-left: 2rem; } .nw-introduction__body p:first-child::first-letter { font-family: var(--nw-font-display); font-size: 4.5rem; font-weight: 800; line-height: 0.8; float: left; margin: 0.05em 0.12em 0 0; color: var(--nw-accent); } /* ─────────────────────────────────────────── DIVIDER ─────────────────────────────────────────── */ .nw-divider { text-align: center; padding: 1rem 0; overflow: hidden; } .nw-divider span { display: inline-block; position: relative; width: 4rem; height: 2px; background: var(--nw-accent); } .nw-divider span::before, .nw-divider span::after { content: ''; position: absolute; top: 50%; transform: translateY(-50%); width: 40vw; height: 1px; background: var(--nw-rule); } .nw-divider span::before { right: calc(100% + 1rem); } .nw-divider span::after { left: calc(100% + 1rem); } /* ─────────────────────────────────────────── CONTAINERS ─────────────────────────────────────────── */ .nw-container { max-width: var(--nw-max-w); margin: 0 auto; padding: 0 2rem; } .nw-container--narrow { max-width: var(--nw-narrow); } /* ─────────────────────────────────────────── SECTIONS GÉNÉRIQUES ─────────────────────────────────────────── */ .nw-section { padding: 5rem 0; border-bottom: 1px solid var(--nw-rule); } .nw-section:last-child { border-bottom: none; } .nw-section__header { margin-bottom: 2.5rem; } .nw-section__title { font-family: var(--nw-font-display); font-size: clamp(1.8rem, 3vw, 2.8rem); font-weight: 700; color: var(--nw-ink); line-height: 1.2; margin: 0 0 1rem; } /* ─────────────────────────────────────────── TAGS ─────────────────────────────────────────── */ .nw-tags { display: flex; flex-wrap: wrap; gap: 0.4rem; margin-top: 0.75rem; } .nw-tag { font-family: var(--nw-font-ui); font-size: 0.7rem; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; background: var(--nw-tag-bg); color: var(--nw-ink-soft); padding: 0.25rem 0.65rem; border-radius: 2px; } /* ─────────────────────────────────────────── PROSE (writer fields) ─────────────────────────────────────────── */ .nw-prose { font-size: 1.1rem; line-height: 1.8; color: var(--nw-ink-soft); margin-bottom: 2rem; } .nw-prose p { margin: 0 0 1.25em; } .nw-chapeau { font-size: 1.2rem; line-height: 1.75; color: var(--nw-ink-soft); font-weight: 400; padding: 2rem 0; border-bottom: 1px solid var(--nw-rule); margin-bottom: 2rem; } /* ─────────────────────────────────────────── SECTION MAP ─────────────────────────────────────────── */ .nw-section--map { background: var(--nw-paper-warm); } .nw-section--map .nw-container { margin-bottom: 2rem; } .nw-map-wrap { position: relative; width: 100%; height: clamp(400px, 55vh, 700px); margin: 2rem 0; border-top: 3px solid var(--nw-accent); overflow: hidden; } .nw-map { width: 100%; height: 100%; } /* Popup MapLibre */ .maplibregl-popup-content { font-family: var(--nw-font-body) !important; font-size: 0.95rem !important; line-height: 1.6 !important; color: var(--nw-ink) !important; padding: 0 !important; border-radius: 4px !important; box-shadow: 0 4px 24px rgba(0,0,0,0.18) !important; overflow: hidden; max-width: 280px; } .maplibregl-popup-close-button { color: #fff !important; font-size: 1.1rem !important; padding: 0.25rem 0.5rem !important; z-index: 2; text-shadow: 0 1px 3px rgba(0,0,0,0.5); } /* Image cover dans la popup */ .nw-popup-cover { width: 100%; height: 140px; overflow: hidden; position: relative; } .nw-popup-cover img { width: 100%; height: 100%; object-fit: cover; display: block; filter: brightness(0.92); transition: filter 0.3s ease; } .nw-popup-cover:hover img { filter: brightness(1); } .nw-popup-body { padding: 0.85rem 1rem 1rem; } .nw-popup-title { display: block; font-family: var(--nw-font-display); font-size: 1rem; font-weight: 700; margin-bottom: 0.5rem; color: var(--nw-ink); line-height: 1.3; } /* Lien ancre vers le texte du marqueur */ .nw-popup-anchor { display: inline-flex; align-items: center; gap: 0.3rem; font-family: var(--nw-font-ui); font-size: 0.72rem; font-weight: 600; letter-spacing: 0.06em; text-transform: uppercase; color: var(--nw-accent); text-decoration: none; border-bottom: 1px solid transparent; transition: border-color var(--nw-transition); padding-bottom: 1px; } .nw-popup-anchor:hover { border-bottom-color: var(--nw-accent); } /* Icône marqueur custom */ .nw-marker-icon { background-size: cover; background-position: center; border-radius: 50%; box-shadow: 0 2px 8px rgba(0,0,0,0.3); cursor: pointer; } /* ─────────────────────────────────────────── LISTE DES MARQUEURS (sous la carte) ─────────────────────────────────────────── */ .nw-map-marker-list { padding-top: 4rem; padding-bottom: 2rem; } .nw-map-marker { display: grid; grid-template-columns: 1fr; gap: 0; padding: 3.5rem 0; border-bottom: 1px solid var(--nw-rule); position: relative; scroll-margin-top: 2rem; } /* Paires : alterner cover gauche / droite */ .nw-map-marker:nth-child(odd) { grid-template-columns: 380px 1fr; } .nw-map-marker:nth-child(even) { grid-template-columns: 1fr 380px; } .nw-map-marker:nth-child(even) .nw-map-marker__cover { order: 2; } .nw-map-marker:nth-child(even) .nw-map-marker__body { order: 1; padding-right: 3rem; padding-left: 0; } .nw-map-marker:last-child { border-bottom: none; } /* Cover du marqueur */ .nw-map-marker__cover { position: relative; overflow: hidden; background: var(--nw-ink); max-height: 420px; } .nw-map-marker__cover img { width: 100%; height: 100%; object-fit: cover; display: block; filter: brightness(0.88) grayscale(10%); transition: filter 0.5s ease, transform 0.6s ease; } .nw-map-marker:hover .nw-map-marker__cover img { filter: brightness(1) grayscale(0%); transform: scale(1.02); } /* Numéro sur la cover */ .nw-map-marker__num { position: absolute; top: 1.25rem; left: 1.25rem; font-family: var(--nw-font-display); font-size: 3rem; font-weight: 800; color: rgba(255,255,255,0.9); line-height: 1; text-shadow: 0 2px 12px rgba(0,0,0,0.5); z-index: 2; pointer-events: none; } /* Numéro sans cover */ .nw-map-marker__num--no-cover { position: static; display: block; font-family: var(--nw-font-display); font-size: 4rem; font-weight: 800; color: var(--nw-rule); line-height: 1; margin-bottom: 1rem; } /* Corps texte du marqueur */ .nw-map-marker__body { padding: 2rem 0 2rem 3rem; display: flex; flex-direction: column; justify-content: center; } .nw-map-marker__title { font-family: var(--nw-font-display); font-size: clamp(1.4rem, 2.2vw, 2rem); font-weight: 700; color: var(--nw-ink); line-height: 1.2; margin: 0 0 1.5rem; padding-bottom: 1rem; border-bottom: 2px solid var(--nw-ink); } /* Ligne décorative avant le titre (numéro + trait) */ .nw-map-marker__title::before { content: attr(data-num); } /* Contenu blocks */ .nw-map-marker__content { font-size: 1.05rem; line-height: 1.85; color: var(--nw-ink-soft); } .nw-map-marker__content p { margin: 0 0 1.1em; } .nw-map-marker__content h2, .nw-map-marker__content h3 { font-family: var(--nw-font-display); color: var(--nw-ink); margin: 1.75rem 0 0.5rem; } .nw-map-marker__content h2 { font-size: 1.3rem; } .nw-map-marker__content h3 { font-size: 1.1rem; } .nw-map-marker__content ul, .nw-map-marker__content ol { padding-left: 1.4rem; margin-bottom: 1.1em; } .nw-map-marker__content blockquote { margin: 1.75rem 0; padding: 1rem 1.5rem; border-left: 3px solid var(--nw-accent); background: var(--nw-paper-warm); font-style: italic; font-size: 1.05rem; } .nw-map-marker__content figure { margin: 1.5rem 0; } .nw-map-marker__content figure img { width: 100%; height: auto; display: block; } .nw-map-marker__content figcaption { font-family: var(--nw-font-ui); font-size: 0.78rem; color: var(--nw-ink-muted); font-style: italic; padding-top: 0.4rem; } /* Responsive marqueurs */ @media (max-width: 900px) { .nw-map-marker:nth-child(odd), .nw-map-marker:nth-child(even) { grid-template-columns: 1fr; } .nw-map-marker:nth-child(even) .nw-map-marker__cover { order: 0; } .nw-map-marker:nth-child(even) .nw-map-marker__body { order: 1; padding-right: 0; } .nw-map-marker__cover { max-height: 280px; } .nw-map-marker__body { padding: 1.5rem 0; } } /* ─────────────────────────────────────────── FICHIERS ─────────────────────────────────────────── */ .nw-files { display: flex; flex-wrap: wrap; gap: 0.5rem; padding-top: 1.5rem; } .nw-file { display: inline-flex; align-items: center; gap: 0.4rem; font-family: var(--nw-font-ui); font-size: 0.8rem; font-weight: 500; color: var(--nw-ink-soft); border: 1px solid var(--nw-rule); padding: 0.35rem 0.75rem; text-decoration: none; border-radius: 2px; transition: border-color var(--nw-transition), color var(--nw-transition); } .nw-file:hover { border-color: var(--nw-accent); color: var(--nw-accent); } .nw-file__icon { font-size: 0.9rem; } /* ─────────────────────────────────────────── SECTION GÉOFORMAT ─────────────────────────────────────────── */ .nw-section--geoformat { padding: 0 0 5rem; } .nw-geoformat-hero { position: relative; min-height: 50vh; display: flex; align-items: flex-end; overflow: hidden; background: #2c2c28; margin-bottom: 3rem; } .nw-geoformat-hero__bg { position: absolute; inset: 0; background-size: cover; background-position: center; filter: grayscale(30%) brightness(0.7); } .nw-geoformat-hero__overlay { position: absolute; inset: 0; background: linear-gradient(to bottom, transparent 30%, rgba(26,26,24,0.82) 100%); } .nw-geoformat-hero__content { position: relative; z-index: 2; padding: 3rem 2rem; } .nw-geoformat-hero__title { font-family: var(--nw-font-display); font-size: clamp(1.6rem, 3.5vw, 3rem); font-weight: 700; color: #fff; line-height: 1.15; margin: 0 0 0.5rem; } .nw-geoformat-hero__subtitle { font-family: var(--nw-font-body); font-size: 1.05rem; color: rgba(255,255,255,0.8); font-style: italic; margin: 0 0 0.75rem; } /* Géoformat sans cover */ .nw-geoformat-hero:not(:has(.nw-geoformat-hero__bg)) { min-height: 20vh; background: var(--nw-ink); } /* ─────────────────────────────────────────── NAVIGATION CHAPITRES ─────────────────────────────────────────── */ .nw-chap-nav { display: flex; flex-wrap: wrap; gap: 0.75rem; padding: 1.5rem 0; border-top: 2px solid var(--nw-ink); border-bottom: 1px solid var(--nw-rule); margin-bottom: 3rem; } .nw-chap-nav__link { display: flex; align-items: center; gap: 0.5rem; text-decoration: none; color: var(--nw-ink-soft); font-family: var(--nw-font-ui); font-size: 0.82rem; font-weight: 500; transition: color var(--nw-transition); padding: 0.25rem 0; } .nw-chap-nav__link:hover { color: var(--nw-accent); } .nw-chap-nav__num { display: inline-flex; align-items: center; justify-content: center; width: 1.5rem; height: 1.5rem; background: var(--nw-ink); color: var(--nw-paper); font-size: 0.7rem; font-weight: 700; border-radius: 50%; flex-shrink: 0; transition: background var(--nw-transition); } .nw-chap-nav__link:hover .nw-chap-nav__num { background: var(--nw-accent); } /* ─────────────────────────────────────────── CHAPITRES ─────────────────────────────────────────── */ .nw-chapitre { padding: 3.5rem 0; border-bottom: 1px solid var(--nw-rule); } .nw-chapitre:last-child { border-bottom: none; } .nw-chapitre__header { margin-bottom: 2rem; } .nw-chapitre__num { font-family: var(--nw-font-ui); font-size: 0.72rem; font-weight: 600; letter-spacing: 0.1em; text-transform: uppercase; color: var(--nw-accent); display: block; margin-bottom: 0.5rem; } .nw-chapitre__title { font-family: var(--nw-font-display); font-size: clamp(1.4rem, 2.5vw, 2rem); font-weight: 700; color: var(--nw-ink); line-height: 1.25; margin: 0; } /* Corps des chapitres (blocks Kirby) */ .nw-chapitre__body { font-size: 1.05rem; line-height: 1.85; color: var(--nw-ink-soft); } .nw-chapitre__body h2, .nw-chapitre__body h3 { font-family: var(--nw-font-display); color: var(--nw-ink); margin: 2.5rem 0 0.75rem; line-height: 1.25; } .nw-chapitre__body h2 { font-size: 1.5rem; } .nw-chapitre__body h3 { font-size: 1.2rem; } .nw-chapitre__body p { margin: 0 0 1.25em; } .nw-chapitre__body ul, .nw-chapitre__body ol { padding-left: 1.5rem; margin: 0 0 1.25em; } .nw-chapitre__body li { margin-bottom: 0.4em; } .nw-chapitre__body blockquote { margin: 2.5rem 0; padding: 1.5rem 2rem; border-left: 4px solid var(--nw-accent); background: var(--nw-paper-warm); font-style: italic; font-size: 1.15rem; color: var(--nw-ink); } .nw-chapitre__body blockquote p { margin: 0; } .nw-chapitre__body figure { margin: 2.5rem -1rem; } .nw-chapitre__body figure img { width: 100%; height: auto; display: block; } .nw-chapitre__body figcaption { font-family: var(--nw-font-ui); font-size: 0.8rem; color: var(--nw-ink-muted); padding: 0.5rem 1rem 0; font-style: italic; } .nw-chapitre__body .video-block, .nw-chapitre__body .map-block { margin: 2.5rem 0; } /* Block map dans un chapitre */ .nw-chapitre__body .map-block iframe, .nw-chapitre__body .map-block > div { width: 100%; height: 400px; border: none; display: block; } /* ─────────────────────────────────────────── RESPONSIVE ─────────────────────────────────────────── */ @media (max-width: 768px) { .nw-hero__content { padding: 4rem 1.25rem 2.5rem; } .nw-container { padding: 0 1.25rem; } .nw-map-wrap { height: 320px; } .nw-chapitre__body figure { margin: 1.5rem 0; } .nw-geoformat-hero { min-height: 35vh; } .nw-geoformat-hero__content { padding: 2rem 1.25rem; } .nw-chap-nav { flex-direction: column; } } @media (max-width: 480px) { .nw-introduction__body { padding-left: 1rem; font-size: 1rem; } .nw-section { padding: 3rem 0; } }