Nouveau thème pour 2026
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -11,3 +11,4 @@ content/stats/images
|
|||||||
.venv
|
.venv
|
||||||
__pycache__
|
__pycache__
|
||||||
.env
|
.env
|
||||||
|
.codex
|
||||||
@@ -48,6 +48,10 @@ Il s'agit d'un site statique généré avec Hugo, dont la version peut être vé
|
|||||||
|
|
||||||
- S'assurer de l'harmonisation des entrées/sorties
|
- S'assurer de l'harmonisation des entrées/sorties
|
||||||
- Toujours utiliser le français dans les interactions avec l'utilisateur
|
- Toujours utiliser le français dans les interactions avec l'utilisateur
|
||||||
|
- Pour toute vérification locale avec Hugo, l'agent doit isoler son instance de celle de l'utilisateur
|
||||||
|
- En mode serveur: `hugo server --port 1314 --renderToDisk --destination .codex/public`
|
||||||
|
- En mode build: `hugo --cleanDestinationDir --destination .codex/public`
|
||||||
|
- Ne pas utiliser `public/` pour ces vérifications afin d'éviter les conflits de cache
|
||||||
|
|
||||||
### Python
|
### Python
|
||||||
|
|
||||||
|
|||||||
@@ -6,4 +6,7 @@ copyright: "© Richard Dern"
|
|||||||
disableHugoGeneratorInject: true
|
disableHugoGeneratorInject: true
|
||||||
enableEmoji: true
|
enableEmoji: true
|
||||||
timeZone: Europe/Paris
|
timeZone: Europe/Paris
|
||||||
theme: ["default", 42]
|
theme: ["2026"]
|
||||||
|
params:
|
||||||
|
lists:
|
||||||
|
layout: spotlight
|
||||||
|
|||||||
@@ -6,16 +6,12 @@ title: Statistiques
|
|||||||
|
|
||||||
## Visites
|
## Visites
|
||||||
|
|
||||||
<div class="stats">
|
<dl>
|
||||||
<div class="panel stat">
|
<dt>Pages vues</dt>
|
||||||
<strong>Pages vues</strong>
|
<dd>{{< stats-var key="pageviews_per_month" >}}</dd>
|
||||||
<span>{{< stats-var key="pageviews_per_month" >}}</span>
|
<dt>Visiteurs uniques</dt>
|
||||||
</div>
|
<dd>{{< stats-var key="unique_visitors_per_month_value" >}}</dd>
|
||||||
<div class="panel stat">
|
</dl>
|
||||||
<strong>Visiteurs uniques</strong>
|
|
||||||
<span>{{< stats-var key="unique_visitors_per_month_value" >}}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
Ces statistiques sont extraites des journaux de [mon serveur web](https://caddyserver.com) _uniquement_ et passées à l'outil [GoAccess](https://goaccess.io/) qui les anonymise (option `--anonymize-ip`).
|
Ces statistiques sont extraites des journaux de [mon serveur web](https://caddyserver.com) _uniquement_ et passées à l'outil [GoAccess](https://goaccess.io/) qui les anonymise (option `--anonymize-ip`).
|
||||||
Elles sont construites à partir d'agrégats globaux **sur 30 jours glissants**.
|
Elles sont construites à partir d'agrégats globaux **sur 30 jours glissants**.
|
||||||
@@ -34,16 +30,12 @@ L'essentiel des accès à mon site se fait donc via le flux RSS.
|
|||||||
|
|
||||||
## Habitudes d'écriture
|
## Habitudes d'écriture
|
||||||
|
|
||||||
<div class="stats">
|
<dl>
|
||||||
<div class="panel stat">
|
<dt>Record</dt>
|
||||||
<strong>Record</strong>
|
<dd>{{< stats-var key="most_prolific_month" >}}</dd>
|
||||||
<span>{{< stats-var key="most_prolific_month" >}}</span>
|
<dt>Articles par mois</dt>
|
||||||
</div>
|
<dd>{{< stats-var key="articles_avg_per_month" >}}</dd>
|
||||||
<div class="panel stat">
|
</dl>
|
||||||
<strong>Articles par mois</strong>
|
|
||||||
<span>{{< stats-var key="articles_avg_per_month" >}}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|||||||
304
themes/2026/assets/css/article-header.css
Normal file
304
themes/2026/assets/css/article-header.css
Normal file
@@ -0,0 +1,304 @@
|
|||||||
|
/* En-tête d’article (pages). */
|
||||||
|
|
||||||
|
.article-header {
|
||||||
|
--article-meta-vertical-space: var(--space-2);
|
||||||
|
gap: var(--space-4);
|
||||||
|
padding-bottom: var(--space-6);
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header > h1 {
|
||||||
|
margin-top: var(--space-5);
|
||||||
|
margin-bottom: var(--space-5);
|
||||||
|
max-width: 30ch;
|
||||||
|
width: 100%;
|
||||||
|
margin-inline: auto;
|
||||||
|
font-size: clamp(1.9rem, 3.6vw, 3.5rem);
|
||||||
|
line-height: 1.05;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.01em;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header > .article-meta-block {
|
||||||
|
margin-top: 0;
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: minmax(0, 1.7fr) minmax(0, 1fr);
|
||||||
|
gap: var(--space-6);
|
||||||
|
align-items: stretch;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header > .article-meta-block.article-meta-block--without-cover {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header > .article-meta-block.article-meta-block--without-cover > .article-meta {
|
||||||
|
width: min(100%, var(--max-width-reading));
|
||||||
|
margin-inline: auto;
|
||||||
|
align-items: center;
|
||||||
|
border-left: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header > .article-meta-block.article-meta-block--without-cover .article-meta-main {
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header > .article-meta-block.article-meta-block--without-cover .breadcrumbs > ol,
|
||||||
|
.article-header > .article-meta-block.article-meta-block--without-cover .article-publication,
|
||||||
|
.article-header > .article-meta-block.article-meta-block--without-cover .page-links > ul {
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header > .article-meta-block.article-meta-block--without-cover .cover-meta {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .article-cover {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .article-cover > a {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .article-cover img {
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .article-meta {
|
||||||
|
margin-top: 0;
|
||||||
|
border-left: 1px solid var(--color-border-strong);
|
||||||
|
padding-left: var(--space-6);
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: var(--space-3);
|
||||||
|
min-height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .article-meta-main {
|
||||||
|
margin-top: 0;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 0;
|
||||||
|
flex: 1 1 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .article-meta-main > * + * {
|
||||||
|
margin-top: var(--article-meta-vertical-space);
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .breadcrumbs li,
|
||||||
|
.article-header .article-publication {
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
font-size: 0.86rem;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .breadcrumbs {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .article-publication {
|
||||||
|
margin-top: var(--article-meta-vertical-space);
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: var(--space-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .article-publication > time {
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .page-links {
|
||||||
|
margin-top: var(--article-meta-vertical-space);
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .page-links a {
|
||||||
|
min-height: 2.35rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .article-origin-link {
|
||||||
|
margin-top: var(--article-meta-vertical-space);
|
||||||
|
border-left: var(--border-width-regular) solid var(--color-section-divider-1);
|
||||||
|
padding: var(--space-3);
|
||||||
|
background-color: rgba(231, 184, 63, 0.14);
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .article-origin-link-kicker {
|
||||||
|
margin-top: 0;
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
font-size: 0.82rem;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.08em;
|
||||||
|
color: var(--color-heading);
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .article-origin-link-hint {
|
||||||
|
margin-top: var(--space-2);
|
||||||
|
font-size: 1rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
color: var(--color-text);
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .article-origin-link-button {
|
||||||
|
margin-top: var(--space-3);
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .article-origin-link-button > a {
|
||||||
|
width: 100%;
|
||||||
|
min-height: 2.8rem;
|
||||||
|
padding: 0.5rem 1rem;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: flex-start;
|
||||||
|
justify-content: flex-start;
|
||||||
|
gap: var(--space-1);
|
||||||
|
font-family: var(--font-body);
|
||||||
|
font-size: 1rem;
|
||||||
|
text-transform: none;
|
||||||
|
letter-spacing: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .article-origin-link-button > a.ui-button {
|
||||||
|
border-color: color-mix(in srgb, var(--color-section-divider-1) 62%, var(--color-border-strong));
|
||||||
|
background: linear-gradient(180deg, rgba(217, 122, 63, 0.36) 0%, rgba(17, 27, 42, 0.94) 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .article-origin-link-button > a.ui-button:is(:hover, :focus-visible) {
|
||||||
|
background: linear-gradient(180deg, rgba(217, 122, 63, 0.52) 0%, rgba(17, 27, 42, 0.98) 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .article-origin-link-button > a.ui-button:visited {
|
||||||
|
color: var(--color-heading);
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .article-origin-link-button > a.ui-button:hover .article-origin-link-button-url,
|
||||||
|
.article-header .article-origin-link-button > a.ui-button:focus-visible .article-origin-link-button-url {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .article-origin-link-button-label {
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
font-size: 0.92rem;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.06em;
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .article-origin-link-button-url {
|
||||||
|
font-size: 0.84rem;
|
||||||
|
line-height: 1.35;
|
||||||
|
word-break: break-all;
|
||||||
|
color: inherit;
|
||||||
|
text-transform: none;
|
||||||
|
letter-spacing: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .cover-meta {
|
||||||
|
margin-top: auto;
|
||||||
|
border-top: var(--border-width-regular) solid var(--color-accent-2);
|
||||||
|
padding-top: var(--space-4);
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .cover-meta > h2 {
|
||||||
|
margin-top: 0;
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
font-size: 0.86rem;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .cover-meta > p {
|
||||||
|
color: var(--color-heading);
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .cover-title,
|
||||||
|
main > article figure.figure-media > figcaption.cover-meta .cover-title {
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
font-size: 1.36rem;
|
||||||
|
line-height: 1.15;
|
||||||
|
letter-spacing: 0.01em;
|
||||||
|
font-weight: 400;
|
||||||
|
text-transform: none;
|
||||||
|
color: var(--color-heading);
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .cover-description,
|
||||||
|
main > article figure.figure-media > figcaption.cover-meta .cover-description {
|
||||||
|
font-family: var(--font-body);
|
||||||
|
font-size: 0.95rem;
|
||||||
|
letter-spacing: normal;
|
||||||
|
text-transform: none;
|
||||||
|
color: var(--color-text);
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .cover-meta > * + * {
|
||||||
|
margin-top: var(--article-meta-vertical-space);
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .cover-attribution,
|
||||||
|
main > article figure.figure-media > figcaption.cover-meta .cover-attribution {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: var(--space-1);
|
||||||
|
align-items: baseline;
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
font-size: 0.86rem;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .cover-attribution > strong,
|
||||||
|
main > article figure.figure-media > figcaption.cover-meta .cover-attribution > strong {
|
||||||
|
font: inherit;
|
||||||
|
color: var(--color-heading);
|
||||||
|
background-image: none;
|
||||||
|
padding: 0;
|
||||||
|
box-decoration-break: slice;
|
||||||
|
-webkit-box-decoration-break: slice;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .cover-meta > details {
|
||||||
|
margin-top: var(--article-meta-vertical-space);
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .cover-meta > details > summary,
|
||||||
|
main > article figure.figure-media > figcaption.cover-meta details > summary {
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
font-size: 0.86rem;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .cover-meta > details > p,
|
||||||
|
main > article figure.figure-media > figcaption.cover-meta details > p {
|
||||||
|
margin-top: var(--space-2);
|
||||||
|
font-family: var(--font-body);
|
||||||
|
font-size: 0.95rem;
|
||||||
|
letter-spacing: normal;
|
||||||
|
text-transform: none;
|
||||||
|
color: var(--color-text);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 1100px) {
|
||||||
|
.article-header > .article-meta-block {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article-header .article-meta {
|
||||||
|
border-left: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 800px) {
|
||||||
|
.article-header > h1 {
|
||||||
|
font-size: clamp(1.6rem, 8.4vw, 2.4rem);
|
||||||
|
}
|
||||||
|
}
|
||||||
257
themes/2026/assets/css/base.css
Normal file
257
themes/2026/assets/css/base.css
Normal file
@@ -0,0 +1,257 @@
|
|||||||
|
html {
|
||||||
|
color-scheme: dark;
|
||||||
|
font-size: max(100%, var(--font-size-root-min));
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: var(--font-body);
|
||||||
|
font-size: var(--font-size-body);
|
||||||
|
line-height: 1.7;
|
||||||
|
background: linear-gradient(
|
||||||
|
170deg,
|
||||||
|
color-mix(in srgb, var(--color-background-wash) 16%, var(--color-background-alt)) 0%,
|
||||||
|
color-mix(in srgb, var(--color-background-wash) 8%, var(--color-background-alt)) 46%,
|
||||||
|
color-mix(in srgb, var(--color-background-wash) 4%, var(--color-background-deep)) 100%
|
||||||
|
);
|
||||||
|
color: var(--color-text);
|
||||||
|
padding: var(--space-4);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > header,
|
||||||
|
body > main,
|
||||||
|
body > footer {
|
||||||
|
width: min(100%, var(--max-width));
|
||||||
|
margin-inline: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main,
|
||||||
|
body > footer {
|
||||||
|
margin-bottom: var(--space-6);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: minmax(0, 1fr);
|
||||||
|
gap: var(--space-6);
|
||||||
|
}
|
||||||
|
|
||||||
|
main > article {
|
||||||
|
min-width: 0;
|
||||||
|
width: min(100%, var(--max-width-reading));
|
||||||
|
}
|
||||||
|
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3 {
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
line-height: 1.15;
|
||||||
|
color: var(--color-heading);
|
||||||
|
text-wrap: balance;
|
||||||
|
letter-spacing: 0.01em;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: clamp(2rem, 4.2vw, 4rem);
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: clamp(1.35rem, 2.2vw, 2rem);
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-size: clamp(1.05rem, 1.7vw, 1.35rem);
|
||||||
|
}
|
||||||
|
|
||||||
|
main > article :is(strong, b) {
|
||||||
|
font-weight: 800;
|
||||||
|
color: var(--color-heading);
|
||||||
|
text-shadow: none;
|
||||||
|
background-image: linear-gradient(
|
||||||
|
to bottom,
|
||||||
|
color-mix(in srgb, var(--color-strong-highlight) 82%, var(--color-background-deep)) 0%,
|
||||||
|
color-mix(in srgb, var(--color-strong-highlight) 92%, var(--color-background-deep)) 100%
|
||||||
|
);
|
||||||
|
background-size: 100% 1em;
|
||||||
|
background-position: 0 52%;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
padding: 0 0.12em;
|
||||||
|
box-decoration-break: clone;
|
||||||
|
-webkit-box-decoration-break: clone;
|
||||||
|
}
|
||||||
|
|
||||||
|
p,
|
||||||
|
ul,
|
||||||
|
ol,
|
||||||
|
figure,
|
||||||
|
pre,
|
||||||
|
blockquote,
|
||||||
|
table,
|
||||||
|
section,
|
||||||
|
article,
|
||||||
|
aside,
|
||||||
|
nav,
|
||||||
|
details,
|
||||||
|
dl {
|
||||||
|
margin-top: var(--space-3);
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: var(--color-link);
|
||||||
|
text-decoration: underline;
|
||||||
|
text-decoration-thickness: 1px;
|
||||||
|
text-decoration-color: color-mix(in srgb, currentColor 72%, transparent);
|
||||||
|
text-underline-offset: 0.15em;
|
||||||
|
word-break: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover,
|
||||||
|
a:focus-visible {
|
||||||
|
color: var(--color-link-hover);
|
||||||
|
text-decoration-thickness: 2px;
|
||||||
|
text-decoration-color: currentColor;
|
||||||
|
text-underline-offset: 0.2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.link-external:not(.link-affiliated) {
|
||||||
|
color: var(--color-link-external);
|
||||||
|
}
|
||||||
|
|
||||||
|
a.link-external:not(.link-affiliated):is(:hover, :focus-visible) {
|
||||||
|
color: var(--color-link-external-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
a.link-affiliated {
|
||||||
|
color: var(--color-link-affiliated);
|
||||||
|
}
|
||||||
|
|
||||||
|
a.link-affiliated:is(:hover, :focus-visible) {
|
||||||
|
color: var(--color-link-affiliated-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
img,
|
||||||
|
video,
|
||||||
|
audio,
|
||||||
|
svg {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
figure img {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
time,
|
||||||
|
sub,
|
||||||
|
small {
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
border: 0;
|
||||||
|
border-top: 1px solid var(--color-border);
|
||||||
|
margin-top: var(--space-5);
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
font-size: 1.03rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
th,
|
||||||
|
td {
|
||||||
|
border: 1px solid var(--color-border);
|
||||||
|
padding: var(--space-2);
|
||||||
|
text-align: left;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
|
||||||
|
thead th {
|
||||||
|
color: var(--color-heading);
|
||||||
|
background: rgba(255, 255, 255, 0.03);
|
||||||
|
}
|
||||||
|
|
||||||
|
dt {
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
dd {
|
||||||
|
color: var(--color-heading);
|
||||||
|
}
|
||||||
|
|
||||||
|
details > summary {
|
||||||
|
cursor: pointer;
|
||||||
|
color: var(--color-heading);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Habillage commun des boutons contextuels (Sommaire, liens d'en-tête, oeuvres). */
|
||||||
|
.ui-button {
|
||||||
|
list-style: none;
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
gap: var(--space-2);
|
||||||
|
min-height: 2.35rem;
|
||||||
|
padding: 0.45rem 0.85rem;
|
||||||
|
border: 1px solid var(--color-border-strong);
|
||||||
|
background: linear-gradient(180deg, rgba(118, 167, 215, 0.22) 0%, rgba(17, 27, 42, 0.9) 100%);
|
||||||
|
color: var(--color-heading);
|
||||||
|
text-decoration: none;
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
font-size: 0.82rem;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.08em;
|
||||||
|
line-height: 1.2;
|
||||||
|
cursor: pointer;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-button:is(:hover, :focus-visible) {
|
||||||
|
border-color: color-mix(in srgb, var(--color-accent-1) 62%, var(--color-border-strong));
|
||||||
|
background: linear-gradient(180deg, rgba(118, 167, 215, 0.32) 0%, rgba(17, 27, 42, 0.96) 100%);
|
||||||
|
color: #ffffff;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.ui-button:visited,
|
||||||
|
a.ui-button.link-external:not(.link-affiliated),
|
||||||
|
a.ui-button.link-affiliated {
|
||||||
|
color: var(--color-heading);
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-button--vertical {
|
||||||
|
width: 2.25rem;
|
||||||
|
min-height: 7.2rem;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-button--vertical > span {
|
||||||
|
display: inline-block;
|
||||||
|
transform: rotate(90deg);
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
main > section,
|
||||||
|
main > aside,
|
||||||
|
main > article {
|
||||||
|
border-top: var(--border-width-regular) solid var(--color-border);
|
||||||
|
padding-top: var(--space-4);
|
||||||
|
}
|
||||||
|
|
||||||
|
main > section:nth-of-type(3n+1) {
|
||||||
|
border-top-color: var(--color-section-divider-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
main > article {
|
||||||
|
border-top-color: var(--color-accent-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
main > section:nth-of-type(3n+2) {
|
||||||
|
border-top-color: var(--color-section-divider-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
main > section:nth-of-type(3n),
|
||||||
|
main > aside:last-child {
|
||||||
|
border-top-color: var(--color-section-divider-3);
|
||||||
|
}
|
||||||
1029
themes/2026/assets/css/content.css
Normal file
1029
themes/2026/assets/css/content.css
Normal file
File diff suppressed because it is too large
Load Diff
161
themes/2026/assets/css/footer.css
Normal file
161
themes/2026/assets/css/footer.css
Normal file
@@ -0,0 +1,161 @@
|
|||||||
|
body > footer {
|
||||||
|
--color-footer-text: #c6d2e0;
|
||||||
|
--color-footer-muted: #95a4b8;
|
||||||
|
--color-footer-soft: #8796aa;
|
||||||
|
display: grid;
|
||||||
|
gap: var(--space-2);
|
||||||
|
border-top: 0;
|
||||||
|
padding: var(--space-3) var(--space-3) var(--space-4);
|
||||||
|
background: var(--color-footer-background);
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > footer > * {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > footer h2 {
|
||||||
|
margin-top: 0;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.08em;
|
||||||
|
font-size: 0.82rem;
|
||||||
|
color: var(--color-footer-soft);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > footer > nav {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > footer > nav > ul {
|
||||||
|
list-style: none;
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
gap: 0.35rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > footer > nav > ul > li {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
align-items: baseline;
|
||||||
|
justify-content: center;
|
||||||
|
gap: 0.15rem 0.65rem;
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > footer > nav h2 a,
|
||||||
|
body > footer > nav h2 span {
|
||||||
|
text-decoration: none;
|
||||||
|
color: var(--color-footer-muted);
|
||||||
|
font-size: 0.78rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > footer > nav ul ul {
|
||||||
|
list-style: none;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: center;
|
||||||
|
row-gap: 0.15rem;
|
||||||
|
column-gap: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > footer > nav ul ul a,
|
||||||
|
body > footer > nav ul ul span {
|
||||||
|
color: var(--color-footer-muted);
|
||||||
|
text-decoration: none;
|
||||||
|
font-size: 0.84rem;
|
||||||
|
line-height: 1.25;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > footer > nav ul ul > li {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > footer > nav ul ul a:is(:hover, :focus-visible) {
|
||||||
|
color: var(--color-link-hover);
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > footer > nav ul ul > li + li::before {
|
||||||
|
content: "•";
|
||||||
|
margin-inline: 0.45rem;
|
||||||
|
color: var(--color-border-strong);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > footer > section:nth-of-type(1) {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > footer > section:nth-of-type(1) > dl {
|
||||||
|
margin-top: 0.2rem;
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
gap: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > footer > section:nth-of-type(1) > dl > div {
|
||||||
|
margin-top: 0;
|
||||||
|
border-left: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > footer > section:nth-of-type(1) dt {
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.05em;
|
||||||
|
font-size: 0.72rem;
|
||||||
|
color: var(--color-footer-soft);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > footer > section:nth-of-type(1) dd {
|
||||||
|
margin-top: 0.2rem;
|
||||||
|
color: var(--color-footer-text);
|
||||||
|
font-size: 0.88rem;
|
||||||
|
line-height: 1.3;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > footer > section:nth-of-type(1) dd > a {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > footer > section:nth-of-type(1) dd > a:is(:hover, :focus-visible) {
|
||||||
|
color: var(--color-link-hover);
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > footer > section:nth-of-type(1) dd > time {
|
||||||
|
display: block;
|
||||||
|
margin-top: 0.2rem;
|
||||||
|
color: var(--color-footer-soft);
|
||||||
|
font-size: 0.72rem;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > footer > p {
|
||||||
|
margin-top: var(--space-1);
|
||||||
|
border-top: 1px solid var(--color-border);
|
||||||
|
padding-top: var(--space-2);
|
||||||
|
color: var(--color-footer-soft);
|
||||||
|
font-size: 0.8rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > footer > p > span {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > footer > p > span + span {
|
||||||
|
margin-top: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > footer > p a {
|
||||||
|
color: var(--color-footer-text);
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > footer > p a:is(:hover, :focus-visible) {
|
||||||
|
color: var(--color-link-hover);
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
218
themes/2026/assets/css/header.css
Normal file
218
themes/2026/assets/css/header.css
Normal file
@@ -0,0 +1,218 @@
|
|||||||
|
body > header {
|
||||||
|
position: relative;
|
||||||
|
padding-bottom: var(--space-5);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > header:has(> h1) {
|
||||||
|
display: grid;
|
||||||
|
gap: var(--space-3);
|
||||||
|
padding-bottom: var(--space-6);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > header:has(> h1)::before {
|
||||||
|
content: "";
|
||||||
|
width: min(18rem, 40vw);
|
||||||
|
height: 0.55rem;
|
||||||
|
background:
|
||||||
|
linear-gradient(90deg, var(--color-accent-1) 0%, var(--color-accent-2) 50%, var(--color-accent-3) 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > header > section:first-of-type {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
align-items: center;
|
||||||
|
gap: var(--space-3);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > header > section:first-of-type > a {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: var(--space-3);
|
||||||
|
text-decoration: none;
|
||||||
|
color: var(--color-heading);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > header > section:first-of-type > a strong {
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
font-size: clamp(1.6rem, 3vw, 2.3rem);
|
||||||
|
font-weight: 700;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.03em;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > header > section:first-of-type > a img {
|
||||||
|
width: 3.5rem;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > header > section.site-stats {
|
||||||
|
margin-top: var(--space-5);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > header > section.site-stats > h2 {
|
||||||
|
font-size: 1.02rem;
|
||||||
|
letter-spacing: 0.11em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > header > section.site-stats > ul {
|
||||||
|
list-style: none;
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||||
|
gap: var(--space-4);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > header > section.site-stats li {
|
||||||
|
border-top: 1px solid var(--color-border);
|
||||||
|
padding-top: var(--space-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > header > section.site-stats span {
|
||||||
|
display: block;
|
||||||
|
font-size: 0.88rem;
|
||||||
|
letter-spacing: 0.06em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > header > section.site-stats strong {
|
||||||
|
display: block;
|
||||||
|
margin-top: var(--space-1);
|
||||||
|
font-size: 1.38rem;
|
||||||
|
color: var(--color-heading);
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > header .breadcrumbs {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.breadcrumbs > ol {
|
||||||
|
list-style: none;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: var(--space-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.breadcrumbs li {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: var(--space-2);
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
font-size: 0.9rem;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
|
.breadcrumbs li::after {
|
||||||
|
content: ">";
|
||||||
|
color: var(--color-border-strong);
|
||||||
|
}
|
||||||
|
|
||||||
|
.breadcrumbs li:last-child::after {
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
|
||||||
|
body > header > p {
|
||||||
|
margin-top: var(--space-2);
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: var(--space-2);
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > header:has(> h1) > h1 {
|
||||||
|
max-width: 18ch;
|
||||||
|
margin-top: 0;
|
||||||
|
font-size: clamp(2rem, 5.4vw, 4.6rem);
|
||||||
|
line-height: 0.95;
|
||||||
|
letter-spacing: 0.02em;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > header:has(> h1) > p:has(time) {
|
||||||
|
margin-top: 0;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: var(--space-2);
|
||||||
|
font-size: 0.88rem;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.09em;
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > header:has(> h1) > p:not(:has(time)) {
|
||||||
|
margin-top: var(--space-1);
|
||||||
|
max-width: 64ch;
|
||||||
|
font-size: 1.14rem;
|
||||||
|
color: var(--color-text);
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-links > ul {
|
||||||
|
list-style: none;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: var(--space-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-links a {
|
||||||
|
display: inline-block;
|
||||||
|
text-decoration: none;
|
||||||
|
border: 1px solid var(--color-border);
|
||||||
|
padding: 0.35rem 0.65rem;
|
||||||
|
color: var(--color-text);
|
||||||
|
font-size: 0.94rem;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.05em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-links a:hover {
|
||||||
|
color: var(--color-heading);
|
||||||
|
border-color: var(--color-accent-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-links a.ui-button {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
min-height: 2.35rem;
|
||||||
|
padding: 0.45rem 0.85rem;
|
||||||
|
border: 1px solid var(--color-border-strong);
|
||||||
|
color: var(--color-heading);
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
font-size: 0.82rem;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.08em;
|
||||||
|
line-height: 1.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-links a.ui-button:is(:hover, :focus-visible) {
|
||||||
|
border-color: color-mix(in srgb, var(--color-accent-1) 62%, var(--color-border-strong));
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.listing-page) > header {
|
||||||
|
gap: var(--space-2);
|
||||||
|
padding-bottom: var(--space-4);
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.listing-page) > header:has(> h1)::before {
|
||||||
|
content: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main:not(.listing-page)) > header:has(> h1)::before {
|
||||||
|
content: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.listing-page) > header:has(> h1) > h1 {
|
||||||
|
max-width: 100%;
|
||||||
|
font-size: clamp(1.75rem, 3.1vw, 2.8rem);
|
||||||
|
text-transform: none;
|
||||||
|
letter-spacing: 0.01em;
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.listing-page) > header .breadcrumbs li {
|
||||||
|
font-size: 0.84rem;
|
||||||
|
letter-spacing: 0.03em;
|
||||||
|
}
|
||||||
948
themes/2026/assets/css/home.css
Normal file
948
themes/2026/assets/css/home.css
Normal file
@@ -0,0 +1,948 @@
|
|||||||
|
body > main.home-main > section.home-critiques-category {
|
||||||
|
border-top-color: var(--color-border);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > header > h2 > a,
|
||||||
|
body > main.home-main:has(> section.home-spotlight > div.spotlight > article) > aside.home-watch > header > h2 > a,
|
||||||
|
body > main.home-main > section.home-collections.collections-section > div > article > h3 > a {
|
||||||
|
color: var(--color-heading);
|
||||||
|
text-decoration: underline;
|
||||||
|
text-decoration-thickness: 1px;
|
||||||
|
text-underline-offset: 0.15em;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > header > h2 > a:is(:hover, :focus-visible),
|
||||||
|
body > main.home-main:has(> section.home-spotlight > div.spotlight > article) > aside.home-watch > header > h2 > a:is(:hover, :focus-visible),
|
||||||
|
body > main.home-main > section.home-collections.collections-section > div > article > h3 > a:is(:hover, :focus-visible) {
|
||||||
|
color: var(--color-link-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: minmax(0, 1.7fr) minmax(0, 1fr);
|
||||||
|
gap: var(--space-6);
|
||||||
|
margin-top: var(--space-4);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight {
|
||||||
|
align-items: start;
|
||||||
|
overflow: hidden;
|
||||||
|
overflow: clip;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > article {
|
||||||
|
display: none;
|
||||||
|
grid-column: 1;
|
||||||
|
grid-row: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > article:first-of-type {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight:has(> aside > ol > li:is(:hover, :focus-within)) > article {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight:has(> aside > ol > li:nth-child(1):is(:hover, :focus-within)) > article:nth-of-type(1),
|
||||||
|
body > main > section > div.spotlight:has(> aside > ol > li:nth-child(2):is(:hover, :focus-within)) > article:nth-of-type(2),
|
||||||
|
body > main > section > div.spotlight:has(> aside > ol > li:nth-child(3):is(:hover, :focus-within)) > article:nth-of-type(3),
|
||||||
|
body > main > section > div.spotlight:has(> aside > ol > li:nth-child(4):is(:hover, :focus-within)) > article:nth-of-type(4),
|
||||||
|
body > main > section > div.spotlight:has(> aside > ol > li:nth-child(5):is(:hover, :focus-within)) > article:nth-of-type(5),
|
||||||
|
body > main > section > div.spotlight:has(> aside > ol > li:nth-child(6):is(:hover, :focus-within)) > article:nth-of-type(6),
|
||||||
|
body > main > section > div.spotlight:has(> aside > ol > li:nth-child(7):is(:hover, :focus-within)) > article:nth-of-type(7),
|
||||||
|
body > main > section > div.spotlight:has(> aside > ol > li:nth-child(8):is(:hover, :focus-within)) > article:nth-of-type(8) {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight.spotlight-aside-first {
|
||||||
|
grid-template-columns: minmax(0, 1fr) minmax(0, 1.7fr);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > aside {
|
||||||
|
grid-column: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight.spotlight-aside-first > aside:first-child {
|
||||||
|
grid-column: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight.spotlight-aside-first > article {
|
||||||
|
grid-column: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > article {
|
||||||
|
margin-top: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
border-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > article > a {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > article figure {
|
||||||
|
margin-top: 0;
|
||||||
|
min-height: 21rem;
|
||||||
|
border: 1px solid var(--color-border);
|
||||||
|
background: linear-gradient(150deg, rgba(118, 167, 215, 0.18) 0%, rgba(93, 134, 173, 0.12) 50%, rgba(195, 208, 223, 0.1) 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > article figure img {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
object-fit: cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > article h3 {
|
||||||
|
margin-top: var(--space-4);
|
||||||
|
font-size: clamp(1.65rem, 3.2vw, 3rem);
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.01em;
|
||||||
|
line-height: 1.05;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > article > p:nth-of-type(1) {
|
||||||
|
font-size: 1.14rem;
|
||||||
|
max-width: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > article > p:nth-of-type(2) {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: var(--space-2);
|
||||||
|
font-size: 0.86rem;
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > aside {
|
||||||
|
margin-top: 0;
|
||||||
|
border-left: 1px solid var(--color-border-strong);
|
||||||
|
padding-left: var(--space-6);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > aside > h3 {
|
||||||
|
margin-top: 0;
|
||||||
|
font-size: 0.96rem;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.13em;
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > aside > h3 + ol {
|
||||||
|
margin-top: var(--space-3);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > aside > ol {
|
||||||
|
list-style: none;
|
||||||
|
margin-top: 0;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: var(--space-4);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > aside > ol > li {
|
||||||
|
border-top: 1px solid var(--color-border);
|
||||||
|
padding-top: var(--space-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > aside > ol > li {
|
||||||
|
position: relative;
|
||||||
|
padding-left: var(--space-3);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > aside > ol {
|
||||||
|
gap: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > aside > ol > li::before {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
inset-block: 0.05rem 0.05rem;
|
||||||
|
inset-inline-start: 0;
|
||||||
|
width: var(--border-width-regular);
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > aside > ol > li:first-child::before,
|
||||||
|
body > main > section > div.spotlight > aside > ol > li:is(:hover, :focus-within)::before {
|
||||||
|
background: var(--color-accent-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight:has(> aside > ol > li:not(:first-child):is(:hover, :focus-within)) > aside > ol > li:first-child::before {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > aside > ol > li > a {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: var(--space-3);
|
||||||
|
padding-block: var(--space-2);
|
||||||
|
cursor: pointer;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > aside > ol > li > a::before {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
inset-block: -100vh;
|
||||||
|
inset-inline-start: -62rem;
|
||||||
|
inset-inline-end: 100%;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight.spotlight-aside-first > aside > ol > li > a::before {
|
||||||
|
inset-inline-start: 100%;
|
||||||
|
inset-inline-end: -62rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > aside > ol > li:is(:hover, :focus-within) > a::before {
|
||||||
|
pointer-events: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > aside > ol > li > a > span:first-child {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > aside > ol > li > a > span:last-child {
|
||||||
|
font-size: 0.86rem;
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: var(--space-1);
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > aside > ol > li:first-child {
|
||||||
|
border-top: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > aside > ol > li > a,
|
||||||
|
body > main.home-main > section.home-rubrics > div > article > ul > li > a {
|
||||||
|
text-decoration: none;
|
||||||
|
color: var(--color-heading);
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
line-height: 1.15;
|
||||||
|
letter-spacing: 0.01em;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > aside > ol > li > a {
|
||||||
|
font-size: 1.36rem;
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > article > a > h3 {
|
||||||
|
transition: color 0.16s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > article:is(:hover, :focus-within) > a > h3 {
|
||||||
|
color: var(--color-link-hover);
|
||||||
|
text-decoration: underline;
|
||||||
|
text-decoration-thickness: 1px;
|
||||||
|
text-underline-offset: 0.15em;
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li article > a:is(:hover, :focus-visible) > h3,
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li article > header > h3 > a:is(:hover, :focus-visible),
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li article:has(> header > a:is(:hover, :focus-visible)) > header > h3 > a {
|
||||||
|
color: var(--color-link-hover);
|
||||||
|
text-decoration: underline;
|
||||||
|
text-decoration-thickness: 1px;
|
||||||
|
text-underline-offset: 0.15em;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > article:is(:hover, :focus-within) > a > h3,
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li article > a:is(:hover, :focus-visible) > h3,
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li article > header > h3 > a:is(:hover, :focus-visible),
|
||||||
|
body > main > section > div.spotlight > aside > ol > li > a:is(:hover, :focus-visible),
|
||||||
|
body > main.home-main > section.home-rubrics > div > article > h3 > a:is(:hover, :focus-visible),
|
||||||
|
body > main.home-main > section.home-rubrics > div > article > ul > li > a:is(:hover, :focus-visible),
|
||||||
|
body > main.home-main:has(> section.home-spotlight > div.spotlight > article) > aside.home-watch > div > article > div > h3 > a:is(:hover, :focus-visible) {
|
||||||
|
color: var(--color-link-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight:has(> aside > ol > li:nth-child(1):is(:hover, :focus-within)) > article:nth-of-type(1) > a > h3,
|
||||||
|
body > main > section > div.spotlight:has(> aside > ol > li:nth-child(2):is(:hover, :focus-within)) > article:nth-of-type(2) > a > h3,
|
||||||
|
body > main > section > div.spotlight:has(> aside > ol > li:nth-child(3):is(:hover, :focus-within)) > article:nth-of-type(3) > a > h3,
|
||||||
|
body > main > section > div.spotlight:has(> aside > ol > li:nth-child(4):is(:hover, :focus-within)) > article:nth-of-type(4) > a > h3,
|
||||||
|
body > main > section > div.spotlight:has(> aside > ol > li:nth-child(5):is(:hover, :focus-within)) > article:nth-of-type(5) > a > h3,
|
||||||
|
body > main > section > div.spotlight:has(> aside > ol > li:nth-child(6):is(:hover, :focus-within)) > article:nth-of-type(6) > a > h3,
|
||||||
|
body > main > section > div.spotlight:has(> aside > ol > li:nth-child(7):is(:hover, :focus-within)) > article:nth-of-type(7) > a > h3,
|
||||||
|
body > main > section > div.spotlight:has(> aside > ol > li:nth-child(8):is(:hover, :focus-within)) > article:nth-of-type(8) > a > h3 {
|
||||||
|
color: var(--color-link-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > aside > ol > li > p {
|
||||||
|
margin-top: var(--space-1);
|
||||||
|
font-size: 0.86rem;
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: var(--space-1);
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > aside:first-child {
|
||||||
|
border-left: 0;
|
||||||
|
border-right: 1px solid var(--color-border-strong);
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: var(--space-4);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-books > div {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fit, minmax(18rem, 22rem));
|
||||||
|
justify-content: center;
|
||||||
|
gap: var(--space-5);
|
||||||
|
margin-top: var(--space-3);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-books > header > p {
|
||||||
|
margin-top: var(--space-2);
|
||||||
|
width: 100%;
|
||||||
|
border-left: var(--border-width-regular) solid var(--color-accent-2);
|
||||||
|
padding: 0.62rem 0.9rem;
|
||||||
|
background: linear-gradient(90deg, rgba(93, 134, 173, 0.16) 0%, rgba(93, 134, 173, 0.04) 100%);
|
||||||
|
color: var(--color-heading);
|
||||||
|
font-size: clamp(1.08rem, 0.98rem + 0.45vw, 1.28rem);
|
||||||
|
font-weight: 400;
|
||||||
|
line-height: 1.3;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-books > div > section {
|
||||||
|
margin-top: 0;
|
||||||
|
width: 100%;
|
||||||
|
max-width: 22rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-books > div > section > article {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
margin-top: 0;
|
||||||
|
border-top: var(--border-width-regular) solid var(--color-border-strong);
|
||||||
|
padding-top: var(--space-3);
|
||||||
|
background: var(--color-surface-soft);
|
||||||
|
padding-inline: var(--space-3);
|
||||||
|
padding-bottom: var(--space-3);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-books > div > section:nth-child(2n+1) > article {
|
||||||
|
border-top-color: var(--color-accent-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-books > div > section:nth-child(2n) > article {
|
||||||
|
border-top-color: var(--color-accent-3);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-books > div > section figure {
|
||||||
|
margin-top: 0;
|
||||||
|
width: min(13rem, 100%);
|
||||||
|
align-self: center;
|
||||||
|
aspect-ratio: 2 / 3;
|
||||||
|
border: 1px solid var(--color-border);
|
||||||
|
background: rgba(255, 255, 255, 0.02);
|
||||||
|
min-height: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-books > div > section figure img {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
object-fit: cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-books > div > section h2 {
|
||||||
|
font-size: clamp(1.12rem, 1.8vw, 1.38rem);
|
||||||
|
margin-top: var(--space-3);
|
||||||
|
line-height: 1.2;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-books > div > section p {
|
||||||
|
margin-top: 0;
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-books > div > section p:last-child {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: center;
|
||||||
|
gap: var(--space-2);
|
||||||
|
margin-top: var(--space-3);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-books > div > section p:last-child > a.ui-button {
|
||||||
|
width: 100%;
|
||||||
|
min-height: 2.35rem;
|
||||||
|
border-color: color-mix(in srgb, var(--color-link-external) 58%, var(--color-border-strong));
|
||||||
|
background: linear-gradient(
|
||||||
|
180deg,
|
||||||
|
color-mix(in srgb, var(--color-link-external) 38%, var(--color-background-alt)) 0%,
|
||||||
|
color-mix(in srgb, var(--color-link-external) 12%, var(--color-background-alt)) 100%
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-books > div > section p:last-child > a.ui-button:is(:hover, :focus-visible) {
|
||||||
|
border-color: color-mix(in srgb, var(--color-link-external-hover) 70%, var(--color-border-strong));
|
||||||
|
background: linear-gradient(
|
||||||
|
180deg,
|
||||||
|
color-mix(in srgb, var(--color-link-external-hover) 44%, var(--color-background-alt)) 0%,
|
||||||
|
color-mix(in srgb, var(--color-link-external) 18%, var(--color-background-alt)) 100%
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol {
|
||||||
|
grid-template-columns: repeat(12, minmax(0, 1fr));
|
||||||
|
grid-auto-flow: row dense;
|
||||||
|
gap: var(--space-6);
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list {
|
||||||
|
--articles-deep-flow-gap: 0.78rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list article {
|
||||||
|
border-top: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li article > header > a {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li article > header > p {
|
||||||
|
margin-top: var(--articles-deep-flow-gap);
|
||||||
|
font-size: 0.84rem;
|
||||||
|
letter-spacing: 0.05em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li article > header > p > a {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li article > header > p > a:is(:hover, :focus-visible) {
|
||||||
|
color: var(--color-link-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li article > header > h3 {
|
||||||
|
margin-top: var(--articles-deep-flow-gap);
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li article h3 {
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li article > header:has(> p) > h3 {
|
||||||
|
margin-top: calc(var(--articles-deep-flow-gap) * 0.4);
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li article > p:nth-of-type(1) {
|
||||||
|
margin-top: var(--articles-deep-flow-gap);
|
||||||
|
font-size: 1.14rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li article > p:last-child {
|
||||||
|
margin-top: var(--articles-deep-flow-gap);
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: var(--space-1);
|
||||||
|
font-size: 0.86rem;
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li article > p:last-child > a {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: underline;
|
||||||
|
text-decoration-thickness: 1px;
|
||||||
|
text-underline-offset: 0.15em;
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li article > p:last-child > a:is(:hover, :focus-visible) {
|
||||||
|
color: inherit;
|
||||||
|
filter: brightness(1.28);
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li {
|
||||||
|
grid-column: span 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+1) {
|
||||||
|
grid-column: 1 / span 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+2),
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+4) {
|
||||||
|
grid-column: 4 / span 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+3),
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+5) {
|
||||||
|
grid-column: 7 / span 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+3) {
|
||||||
|
grid-column: 1 / span 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+5) {
|
||||||
|
grid-row: span 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+6) {
|
||||||
|
grid-column: 1 / span 6;
|
||||||
|
grid-row: span 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+7),
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+9) {
|
||||||
|
grid-column: 7 / span 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+8),
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+10) {
|
||||||
|
grid-column: 10 / span 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+5) article figure,
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+6) article figure {
|
||||||
|
min-height: 19rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+1) article figure,
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+2) article figure,
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+3) article figure,
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+4) article figure,
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+7) article figure,
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+8) article figure,
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+9) article figure,
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+10) article figure {
|
||||||
|
min-height: 9rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+5) article h3,
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+6) article h3 {
|
||||||
|
font-size: clamp(1.46rem, 2.45vw, 2.05rem);
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+1) article h3,
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+2) article h3,
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+3) article h3,
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+4) article h3,
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+7) article h3,
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+8) article h3,
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+9) article h3,
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+10) article h3 {
|
||||||
|
font-size: 1.36rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+1) article > p:last-child,
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+2) article > p:last-child,
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+3) article > p:last-child,
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+4) article > p:last-child,
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+7) article > p:last-child,
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+8) article > p:last-child,
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+9) article > p:last-child,
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+10) article > p:last-child {
|
||||||
|
margin-top: var(--space-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+1) article > p:nth-of-type(1),
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+2) article > p:nth-of-type(1),
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+3) article > p:nth-of-type(1),
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+4) article > p:nth-of-type(1),
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+7) article > p:nth-of-type(1),
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+8) article > p:nth-of-type(1),
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+9) article > p:nth-of-type(1),
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li:nth-child(10n+10) article > p:nth-of-type(1) {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-rubrics > div {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||||
|
gap: var(--space-4);
|
||||||
|
margin-top: var(--space-3);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-rubrics > div > article {
|
||||||
|
margin-top: 0;
|
||||||
|
padding-top: var(--space-3);
|
||||||
|
border-top: var(--border-width-regular) solid var(--color-border-strong);
|
||||||
|
background: var(--color-surface-soft);
|
||||||
|
padding-inline: var(--space-3);
|
||||||
|
padding-bottom: var(--space-3);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-rubrics > div > article:nth-child(3n+1) {
|
||||||
|
border-top-color: var(--color-accent-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-rubrics > div > article:nth-child(3n+2) {
|
||||||
|
border-top-color: var(--color-accent-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-rubrics > div > article:nth-child(3n+3) {
|
||||||
|
border-top-color: var(--color-accent-3);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-rubrics > div > article > header {
|
||||||
|
margin-top: 0;
|
||||||
|
display: flex;
|
||||||
|
align-items: baseline;
|
||||||
|
justify-content: space-between;
|
||||||
|
gap: var(--space-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-rubrics > div > article > header > h3 {
|
||||||
|
margin-top: 0;
|
||||||
|
min-width: 0;
|
||||||
|
flex: 1 1 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-rubrics > div > article > header > h3 > a {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: underline;
|
||||||
|
text-decoration-thickness: 1px;
|
||||||
|
text-underline-offset: 0.15em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.05em;
|
||||||
|
font-size: 1.13rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-rubrics > div > article > header > h3 > a:is(:hover, :focus-visible) {
|
||||||
|
color: var(--color-link-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-rubrics > div > article > header > p {
|
||||||
|
margin-top: 0;
|
||||||
|
flex: 0 0 auto;
|
||||||
|
font-size: 0.78rem;
|
||||||
|
letter-spacing: 0.05em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-rubrics > div > article > ul {
|
||||||
|
list-style: none;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-rubrics > div > article > ul > li {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr auto;
|
||||||
|
gap: var(--space-2);
|
||||||
|
align-items: baseline;
|
||||||
|
border-top: 1px solid var(--color-border);
|
||||||
|
padding-top: var(--space-2);
|
||||||
|
margin-top: var(--space-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-rubrics > div > article > ul > li > a {
|
||||||
|
font-size: 1.08rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-rubrics > div > article > ul > li > a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-rubrics > div > article > ul > li > p {
|
||||||
|
grid-column: 1 / -1;
|
||||||
|
margin-top: 0;
|
||||||
|
font-size: 0.82rem;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-rubrics > div > article > ul > li > p > a {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-rubrics > div > article > ul > li > p > a:is(:hover, :focus-visible) {
|
||||||
|
color: var(--color-link-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-rubrics > div > article > ul > li > time {
|
||||||
|
font-size: 0.86rem;
|
||||||
|
white-space: nowrap;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main:has(> section.home-spotlight > div.spotlight > article) > aside.home-watch {
|
||||||
|
border-top-color: var(--color-accent-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main:has(> section.home-spotlight > div.spotlight > article) > aside.home-watch > header {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: var(--space-3);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main:has(> section.home-spotlight > div.spotlight > article) > aside.home-watch > div {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||||
|
gap: var(--space-3);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main:has(> section.home-spotlight > div.spotlight > article) > aside.home-watch > div > article {
|
||||||
|
margin-top: 0;
|
||||||
|
border: 1px solid var(--color-border);
|
||||||
|
padding: var(--space-3);
|
||||||
|
background:
|
||||||
|
linear-gradient(160deg, rgba(118, 167, 215, 0.1) 0%, rgba(118, 167, 215, 0.02) 28%, rgba(93, 134, 173, 0.1) 100%);
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: auto minmax(0, 1fr);
|
||||||
|
gap: var(--space-3);
|
||||||
|
align-items: start;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main:has(> section.home-spotlight > div.spotlight > article) > aside.home-watch > div > article > a {
|
||||||
|
display: block;
|
||||||
|
text-decoration: none;
|
||||||
|
color: var(--color-heading);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main:has(> section.home-spotlight > div.spotlight > article) > aside.home-watch > div > article > a > figure {
|
||||||
|
margin-top: 0;
|
||||||
|
min-height: 0;
|
||||||
|
border: 1px solid var(--color-border);
|
||||||
|
background: rgba(0, 0, 0, 0.22);
|
||||||
|
overflow: hidden;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main:has(> section.home-spotlight > div.spotlight > article) > aside.home-watch > div > article > a > figure img {
|
||||||
|
width: auto;
|
||||||
|
max-width: 100%;
|
||||||
|
height: auto;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main:has(> section.home-spotlight > div.spotlight > article) > aside.home-watch > div > article > div {
|
||||||
|
display: grid;
|
||||||
|
align-content: start;
|
||||||
|
gap: var(--space-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main:has(> section.home-spotlight > div.spotlight > article) > aside.home-watch > div > article > div > h3 {
|
||||||
|
margin-top: 0;
|
||||||
|
font-size: 1.08rem;
|
||||||
|
line-height: 1.2;
|
||||||
|
text-transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main:has(> section.home-spotlight > div.spotlight > article) > aside.home-watch > div > article > div > h3 > a {
|
||||||
|
text-decoration: none;
|
||||||
|
color: var(--color-heading);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main:has(> section.home-spotlight > div.spotlight > article) > aside.home-watch > div > article > div > h3 > a:is(:hover, :focus-visible),
|
||||||
|
body > main.home-main:has(> section.home-spotlight > div.spotlight > article) > aside.home-watch > div > article:has(> a:is(:hover, :focus-visible)) > div > h3 > a {
|
||||||
|
color: var(--color-link-hover);
|
||||||
|
text-decoration: underline;
|
||||||
|
text-decoration-thickness: 1px;
|
||||||
|
text-underline-offset: 0.15em;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main:has(> section.home-spotlight > div.spotlight > article) > aside.home-watch > div > article > div > p {
|
||||||
|
margin-top: 0;
|
||||||
|
font-size: 0.93rem;
|
||||||
|
line-height: 1.45;
|
||||||
|
color: var(--color-text);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main:has(> section.home-spotlight > div.spotlight > article) > aside.home-watch > div > article > div > footer {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main:has(> section.home-spotlight > div.spotlight > article) > aside.home-watch > div > article > div > footer > p {
|
||||||
|
margin-top: 0;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: var(--space-1);
|
||||||
|
align-items: center;
|
||||||
|
font-size: 0.86rem;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main:has(> section.home-spotlight > div.spotlight > article) > aside.home-watch > div > article > div > footer > p + p {
|
||||||
|
margin-top: 0.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main:has(> section.home-spotlight > div.spotlight > article) > aside.home-watch > div > article > div > footer > p > a {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: underline;
|
||||||
|
text-decoration-thickness: 1px;
|
||||||
|
text-underline-offset: 0.15em;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main:has(> section.home-spotlight > div.spotlight > article) > aside.home-watch > div > article > div > footer > p > a:is(:hover, :focus-visible) {
|
||||||
|
color: var(--color-link-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main:has(> section.home-spotlight > div.spotlight > article) > aside.home-watch > div > article > div > footer > p > strong {
|
||||||
|
border: 1px solid var(--color-border);
|
||||||
|
padding: 0.2rem 0.48rem;
|
||||||
|
font-size: 0.75rem;
|
||||||
|
letter-spacing: 0.06em;
|
||||||
|
color: var(--color-heading);
|
||||||
|
background: rgba(29, 45, 64, 0.32);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main:has(> section.home-spotlight > div.spotlight > article) > aside.home-watch > div > article > div > footer > p > strong[data-state="ok"] {
|
||||||
|
border-color: rgba(118, 167, 215, 0.6);
|
||||||
|
color: #b8d8f8;
|
||||||
|
background: rgba(48, 84, 122, 0.28);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main:has(> section.home-spotlight > div.spotlight > article) > aside.home-watch > div > article > div > footer > p > strong[data-state="warn"] {
|
||||||
|
border-color: rgba(212, 172, 102, 0.7);
|
||||||
|
color: #f2d59e;
|
||||||
|
background: rgba(110, 78, 24, 0.32);
|
||||||
|
box-shadow: inset 0 0 0 1px rgba(246, 214, 155, 0.12);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main:has(> section.home-spotlight > div.spotlight > article) > aside.home-watch > div > article > div > footer > p > strong[data-state="dead"] {
|
||||||
|
border-color: rgba(219, 126, 147, 0.72);
|
||||||
|
color: #ffd4df;
|
||||||
|
background: rgba(124, 39, 62, 0.36);
|
||||||
|
box-shadow: inset 0 0 0 1px rgba(255, 212, 223, 0.14);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main:has(> section.home-spotlight > div.spotlight > article) > aside.home-watch > div > article > div > footer > p > strong:is([data-state="warn"], [data-state="dead"]) {
|
||||||
|
cursor: help;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-collections.collections-section > div {
|
||||||
|
margin-top: var(--space-3);
|
||||||
|
display: grid;
|
||||||
|
gap: var(--space-3);
|
||||||
|
min-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-collections.collections-section > div > article {
|
||||||
|
margin-top: 0;
|
||||||
|
border-top: 1px solid var(--color-border);
|
||||||
|
padding-top: var(--space-2);
|
||||||
|
width: 100%;
|
||||||
|
min-width: 0;
|
||||||
|
overflow-x: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-collections.collections-section > div > article > h3 {
|
||||||
|
margin-top: 0;
|
||||||
|
font-size: clamp(1.04rem, 1.35vw, 1.18rem);
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.03em;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-collections.collections-section > div > article > h3 > a:is(:hover, :focus-visible) {
|
||||||
|
color: var(--color-link-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-collections.collections-section > div > article > ul {
|
||||||
|
list-style: none;
|
||||||
|
margin-top: var(--space-2);
|
||||||
|
margin-inline: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
width: 100%;
|
||||||
|
max-width: 100%;
|
||||||
|
min-width: 0;
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
gap: var(--space-1);
|
||||||
|
overflow-x: auto;
|
||||||
|
overflow-y: hidden;
|
||||||
|
overscroll-behavior-x: contain;
|
||||||
|
-webkit-overflow-scrolling: touch;
|
||||||
|
padding-bottom: 0.2rem;
|
||||||
|
scrollbar-width: thin;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-collections.collections-section > div > article > ul > li {
|
||||||
|
flex: 0 0 auto;
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-collections.collections-section > div > article > ul > li > a {
|
||||||
|
display: block;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-collections.collections-section > div > article > ul > li > a > figure {
|
||||||
|
margin-top: 0;
|
||||||
|
width: max-content;
|
||||||
|
border: 1px solid var(--color-border);
|
||||||
|
background: linear-gradient(145deg, rgba(118, 167, 215, 0.12) 0%, rgba(93, 134, 173, 0.09) 100%);
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-collections.collections-section > div > article > ul > li > a > figure img {
|
||||||
|
width: auto;
|
||||||
|
height: 128px;
|
||||||
|
max-width: none;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-collections.collections-section > div > article > ul > li > a:is(:hover, :focus-visible) > figure {
|
||||||
|
border-color: var(--color-link-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-collections.collections-section > div > article > p {
|
||||||
|
margin-top: var(--space-1);
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: var(--space-2);
|
||||||
|
font-size: 0.8rem;
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-collections.collections-section > div > article > p > a {
|
||||||
|
text-transform: none;
|
||||||
|
letter-spacing: 0;
|
||||||
|
color: var(--color-text);
|
||||||
|
text-decoration: none;
|
||||||
|
border: 1px solid var(--color-border);
|
||||||
|
padding: 0.1rem 0.4rem;
|
||||||
|
font-size: 0.84rem;
|
||||||
|
line-height: 1.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-collections.collections-section > div > article > p > a:is(:hover, :focus-visible) {
|
||||||
|
color: var(--color-link-hover);
|
||||||
|
border-color: var(--color-link-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Le carrousel des collections ne doit pas élargir le viewport mobile. */
|
||||||
|
html:has(body > main.home-main > section.home-collections.collections-section),
|
||||||
|
body:has(> main.home-main > section.home-collections.collections-section) {
|
||||||
|
overflow-x: clip;
|
||||||
|
}
|
||||||
10
themes/2026/assets/css/index.css
Normal file
10
themes/2026/assets/css/index.css
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
@import "variables.css";
|
||||||
|
@import "reset.css";
|
||||||
|
@import "base.css";
|
||||||
|
@import "header.css";
|
||||||
|
@import "article-header.css";
|
||||||
|
@import "content.css";
|
||||||
|
@import "list.css";
|
||||||
|
@import "home.css";
|
||||||
|
@import "footer.css";
|
||||||
|
@import "responsive.css";
|
||||||
387
themes/2026/assets/css/list.css
Normal file
387
themes/2026/assets/css/list.css
Normal file
@@ -0,0 +1,387 @@
|
|||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol {
|
||||||
|
grid-template-columns: repeat(12, minmax(0, 1fr));
|
||||||
|
grid-auto-flow: row dense;
|
||||||
|
gap: var(--space-6);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list {
|
||||||
|
--articles-deep-flow-gap: 0.78rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list article {
|
||||||
|
border-top: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li article > header > a {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li article > header > p {
|
||||||
|
margin-top: var(--articles-deep-flow-gap);
|
||||||
|
font-size: 0.84rem;
|
||||||
|
letter-spacing: 0.05em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li article > header > p > a {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li article > header > p > a:is(:hover, :focus-visible) {
|
||||||
|
color: var(--color-link-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li article > header > h3 {
|
||||||
|
margin-top: var(--articles-deep-flow-gap);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li article > header:has(> p) > h3 {
|
||||||
|
margin-top: calc(var(--articles-deep-flow-gap) * 0.4);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li article > p:nth-of-type(1) {
|
||||||
|
margin-top: var(--articles-deep-flow-gap);
|
||||||
|
font-size: 1.14rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li article > p:last-child {
|
||||||
|
margin-top: var(--articles-deep-flow-gap);
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: var(--space-1);
|
||||||
|
font-size: 0.86rem;
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li article > p:last-child > a {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: underline;
|
||||||
|
text-decoration-thickness: 1px;
|
||||||
|
text-underline-offset: 0.15em;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li article > p:last-child > a:is(:hover, :focus-visible) {
|
||||||
|
color: inherit;
|
||||||
|
filter: brightness(1.28);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li article > footer.external-link-meta {
|
||||||
|
margin-top: var(--articles-deep-flow-gap);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li article > footer.external-link-meta > p {
|
||||||
|
margin-top: 0;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: var(--space-1);
|
||||||
|
align-items: center;
|
||||||
|
font-size: 0.86rem;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li article > footer.external-link-meta > p + p {
|
||||||
|
margin-top: 0.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li article > footer.external-link-meta > p > a {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: underline;
|
||||||
|
text-decoration-thickness: 1px;
|
||||||
|
text-underline-offset: 0.15em;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li article > footer.external-link-meta > p > a:is(:hover, :focus-visible) {
|
||||||
|
color: var(--color-link-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li article > footer.external-link-meta > p > strong {
|
||||||
|
border: 1px solid var(--color-border);
|
||||||
|
padding: 0.2rem 0.48rem;
|
||||||
|
font-size: 0.75rem;
|
||||||
|
letter-spacing: 0.06em;
|
||||||
|
color: var(--color-heading);
|
||||||
|
background: rgba(29, 45, 64, 0.32);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li article > footer.external-link-meta > p > strong[data-state="ok"] {
|
||||||
|
border-color: rgba(118, 167, 215, 0.6);
|
||||||
|
color: #b8d8f8;
|
||||||
|
background: rgba(48, 84, 122, 0.28);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li article > footer.external-link-meta > p > strong[data-state="warn"] {
|
||||||
|
border-color: rgba(212, 172, 102, 0.7);
|
||||||
|
color: #f2d59e;
|
||||||
|
background: rgba(110, 78, 24, 0.32);
|
||||||
|
box-shadow: inset 0 0 0 1px rgba(246, 214, 155, 0.12);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li article > footer.external-link-meta > p > strong[data-state="dead"] {
|
||||||
|
border-color: rgba(219, 126, 147, 0.72);
|
||||||
|
color: #ffd4df;
|
||||||
|
background: rgba(124, 39, 62, 0.36);
|
||||||
|
box-shadow: inset 0 0 0 1px rgba(255, 212, 223, 0.14);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li article > footer.external-link-meta > p > strong:is([data-state="warn"], [data-state="dead"]) {
|
||||||
|
cursor: help;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li {
|
||||||
|
grid-column: span 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+1) {
|
||||||
|
grid-column: 1 / span 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+2),
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+4) {
|
||||||
|
grid-column: 4 / span 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+3),
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+5) {
|
||||||
|
grid-column: 7 / span 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+3) {
|
||||||
|
grid-column: 1 / span 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+5) {
|
||||||
|
grid-row: span 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+6) {
|
||||||
|
grid-column: 1 / span 6;
|
||||||
|
grid-row: span 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+7),
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+9) {
|
||||||
|
grid-column: 7 / span 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+8),
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+10) {
|
||||||
|
grid-column: 10 / span 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+5) article figure,
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+6) article figure {
|
||||||
|
min-height: 19rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+1) article figure,
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+2) article figure,
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+3) article figure,
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+4) article figure,
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+7) article figure,
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+8) article figure,
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+9) article figure,
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+10) article figure {
|
||||||
|
min-height: 9rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+5) article h3,
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+6) article h3 {
|
||||||
|
font-size: clamp(1.46rem, 2.45vw, 2.05rem);
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+1) article h3,
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+2) article h3,
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+3) article h3,
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+4) article h3,
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+7) article h3,
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+8) article h3,
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+9) article h3,
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+10) article h3 {
|
||||||
|
font-size: 1.36rem;
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+1) article > p:nth-of-type(1),
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+2) article > p:nth-of-type(1),
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+3) article > p:nth-of-type(1),
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+4) article > p:nth-of-type(1),
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+7) article > p:nth-of-type(1),
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+8) article > p:nth-of-type(1),
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+9) article > p:nth-of-type(1),
|
||||||
|
body > main.listing-page > section.listing-articles > nav.articles-list > ol > li:nth-child(10n+10) article > p:nth-of-type(1) {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-timeline > ol {
|
||||||
|
list-style: none;
|
||||||
|
margin-top: var(--space-4);
|
||||||
|
padding-left: 0;
|
||||||
|
display: grid;
|
||||||
|
gap: var(--space-4);
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-timeline > ol::before {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
inset-block: 0 0;
|
||||||
|
inset-inline-start: 0.58rem;
|
||||||
|
width: 1px;
|
||||||
|
background: var(--color-border-strong);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-timeline > ol > li {
|
||||||
|
position: relative;
|
||||||
|
margin-top: 0;
|
||||||
|
padding-inline-start: var(--space-5);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-timeline > ol > li::before {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
inset-inline-start: 0.2rem;
|
||||||
|
inset-block-start: 1.05rem;
|
||||||
|
width: 0.72rem;
|
||||||
|
height: 0.72rem;
|
||||||
|
border: var(--border-width-regular) solid var(--color-accent-2);
|
||||||
|
border-radius: 999px;
|
||||||
|
background: var(--color-background-alt);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-timeline > ol > li > article {
|
||||||
|
margin-top: 0;
|
||||||
|
border: 1px solid var(--color-border);
|
||||||
|
background: var(--color-surface-soft);
|
||||||
|
padding: var(--space-3);
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: minmax(7.2rem, 9.5rem) minmax(0, 1fr);
|
||||||
|
gap: var(--space-3);
|
||||||
|
align-items: start;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-timeline > ol > li > article:not(:has(> a)) {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-timeline > ol > li > article > a {
|
||||||
|
display: block;
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-timeline > ol > li > article > a > figure {
|
||||||
|
margin-top: 0;
|
||||||
|
min-height: 6.2rem;
|
||||||
|
border: 1px solid var(--color-border);
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-timeline > ol > li > article > a > figure img {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
object-fit: cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-timeline > ol > li > article > div {
|
||||||
|
display: grid;
|
||||||
|
gap: var(--space-2);
|
||||||
|
align-content: start;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-timeline > ol > li > article > div > header {
|
||||||
|
margin-top: 0;
|
||||||
|
display: grid;
|
||||||
|
gap: var(--space-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-timeline > ol > li > article > div > header > p:first-of-type {
|
||||||
|
margin-top: 0;
|
||||||
|
font-size: 0.86rem;
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-timeline > ol > li > article > div > header > p + p {
|
||||||
|
margin-top: 0;
|
||||||
|
font-size: 0.84rem;
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-timeline > ol > li > article > div > header > p + p > a {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-timeline > ol > li > article > div > header > p + p > a:is(:hover, :focus-visible) {
|
||||||
|
color: var(--color-link-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-timeline > ol > li > article > div > header > h3 {
|
||||||
|
margin-top: 0;
|
||||||
|
font-size: clamp(1.25rem, 1.8vw, 1.65rem);
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-timeline > ol > li > article > div > header > h3 > a {
|
||||||
|
color: var(--color-heading);
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-timeline > ol > li > article > div > header > h3 > a:is(:hover, :focus-visible),
|
||||||
|
body > main.listing-page > section.listing-timeline > ol > li > article:has(> a:is(:hover, :focus-visible)) > div > header > h3 > a {
|
||||||
|
color: var(--color-link-hover);
|
||||||
|
text-decoration: underline;
|
||||||
|
text-decoration-thickness: 1px;
|
||||||
|
text-underline-offset: 0.15em;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-timeline > ol > li > article > div > p {
|
||||||
|
margin-top: 0;
|
||||||
|
font-size: 1rem;
|
||||||
|
color: var(--color-text);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-timeline > ol > li > article > div > footer {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-timeline > ol > li > article > div > footer > p {
|
||||||
|
margin-top: 0;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: var(--space-1);
|
||||||
|
font-size: 0.86rem;
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-timeline > ol > li > article > div > footer > p > a {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: underline;
|
||||||
|
text-decoration-thickness: 1px;
|
||||||
|
text-underline-offset: 0.15em;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page > section.listing-timeline > ol > li > article > div > footer > p > a:is(:hover, :focus-visible) {
|
||||||
|
color: inherit;
|
||||||
|
filter: brightness(1.28);
|
||||||
|
}
|
||||||
5
themes/2026/assets/css/reset.css
Normal file
5
themes/2026/assets/css/reset.css
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
* {
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
247
themes/2026/assets/css/responsive.css
Normal file
247
themes/2026/assets/css/responsive.css
Normal file
@@ -0,0 +1,247 @@
|
|||||||
|
@media (max-width: 1100px) {
|
||||||
|
body > header > section.site-stats > ul {
|
||||||
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > article,
|
||||||
|
body > main > section > div.spotlight.spotlight-aside-first > article {
|
||||||
|
grid-column: 1;
|
||||||
|
grid-row: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > aside,
|
||||||
|
body > main > section > div.spotlight.spotlight-aside-first > aside:first-child {
|
||||||
|
grid-column: 1;
|
||||||
|
grid-row: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > aside {
|
||||||
|
border-left: 0;
|
||||||
|
border-right: 0;
|
||||||
|
border-top: 1px solid var(--color-border);
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-top: var(--space-4);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > aside > ol {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||||
|
gap: var(--space-3);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > aside > ol {
|
||||||
|
gap: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > aside > ol > li,
|
||||||
|
body > main > section > div.spotlight > aside > ol > li:first-child {
|
||||||
|
border-top: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-books > div {
|
||||||
|
grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-books > div > section {
|
||||||
|
max-width: 22rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-rubrics > div {
|
||||||
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol {
|
||||||
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li {
|
||||||
|
grid-column: auto;
|
||||||
|
grid-row: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li article figure {
|
||||||
|
min-height: 12rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li article > p:nth-of-type(1) {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page.listing-mode-spotlight > section.listing-articles > nav.articles-list > ol {
|
||||||
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page.listing-mode-spotlight > section.listing-articles > nav.articles-list > ol > li {
|
||||||
|
grid-column: auto;
|
||||||
|
grid-row: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page.listing-mode-spotlight > section.listing-articles > nav.articles-list > ol > li article figure {
|
||||||
|
min-height: 12rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page.listing-mode-spotlight > section.listing-articles > nav.articles-list > ol > li article > p:nth-of-type(1) {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page.listing-mode-timeline > section.listing-timeline > ol > li > article {
|
||||||
|
grid-template-columns: minmax(6.4rem, 8rem) minmax(0, 1fr);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main:has(> article:first-child):has(> aside) {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main:has(> article:first-child):has(> aside) > article:first-child {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main:has(> article:first-child):has(> aside) > aside {
|
||||||
|
border-top: 1px solid var(--color-border);
|
||||||
|
padding-top: var(--space-4);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main:has(> section.home-spotlight > div.spotlight > article) > aside.home-watch > div {
|
||||||
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||||
|
}
|
||||||
|
|
||||||
|
body > footer > section:nth-of-type(1) > dl {
|
||||||
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 800px) {
|
||||||
|
body {
|
||||||
|
font-size: var(--font-size-body-mobile);
|
||||||
|
padding: var(--space-3);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main,
|
||||||
|
body > footer {
|
||||||
|
margin-bottom: var(--space-5);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > header > section.site-stats > ul {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > header:has(> h1) > h1 {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
main nav.articles-list > ol {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > article figure {
|
||||||
|
min-height: 14rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > article h3 {
|
||||||
|
font-size: clamp(1.4rem, 8vw, 2.1rem);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main > section > div.spotlight > aside > ol {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-books > div > section figure {
|
||||||
|
min-height: 0;
|
||||||
|
width: min(11rem, 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-rubrics > div {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main > section.home-rubrics > div > article > ul > li {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
body:has(> main.home-main > section.home-spotlight > div.spotlight > article) > main.home-main > section.home-deep > nav.articles-list > ol > li article figure {
|
||||||
|
min-height: 10rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page.listing-mode-spotlight > section.listing-articles > nav.articles-list > ol {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page.listing-mode-spotlight > section.listing-articles > nav.articles-list > ol > li article figure {
|
||||||
|
min-height: 10rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page.listing-mode-timeline > section.listing-timeline > ol::before {
|
||||||
|
inset-inline-start: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page.listing-mode-timeline > section.listing-timeline > ol > li {
|
||||||
|
padding-inline-start: var(--space-4);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page.listing-mode-timeline > section.listing-timeline > ol > li::before {
|
||||||
|
inset-inline-start: -0.35rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page.listing-mode-timeline > section.listing-timeline > ol > li > article {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.listing-page.listing-mode-timeline > section.listing-timeline > ol > li > article > a > figure {
|
||||||
|
min-height: 9rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main:has(> section.home-spotlight > div.spotlight > article) > aside.home-watch > div {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main:has(> section.home-spotlight > div.spotlight > article) > aside.home-watch > div > article {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main.home-main:has(> section.home-spotlight > div.spotlight > article) > aside.home-watch > div > article > a > figure {
|
||||||
|
min-height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main:has(> article:first-child):has(> aside) > article:first-child {
|
||||||
|
font-size: 1.14rem;
|
||||||
|
line-height: 1.82;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > main:has(> article:first-child):has(> aside) > article:first-child > * {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > footer {
|
||||||
|
padding-top: var(--space-3);
|
||||||
|
padding-inline: var(--space-1);
|
||||||
|
gap: var(--space-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > footer > section:nth-of-type(1) > dl {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > footer > section:nth-of-type(1) > dl > div {
|
||||||
|
border-left: 0;
|
||||||
|
border-top: 1px solid var(--color-border);
|
||||||
|
padding-left: 0;
|
||||||
|
padding-top: var(--space-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
body > footer > section:nth-of-type(1) > dl > div:first-child {
|
||||||
|
border-top: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
47
themes/2026/assets/css/variables.css
Normal file
47
themes/2026/assets/css/variables.css
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
:root {
|
||||||
|
--color-background: #060c14;
|
||||||
|
--color-background-alt: #111b2a;
|
||||||
|
--color-background-deep: #040914;
|
||||||
|
--color-footer-background: #02050d;
|
||||||
|
--color-surface-soft: rgba(255, 255, 255, 0.025);
|
||||||
|
--color-border: #273446;
|
||||||
|
--color-border-strong: #3b536d;
|
||||||
|
--color-text: #e7edf6;
|
||||||
|
--color-text-muted: #a5b3c4;
|
||||||
|
--color-heading: #f7fbff;
|
||||||
|
--color-link: #ffd369;
|
||||||
|
--color-link-hover: #fff1b8;
|
||||||
|
--color-link-external: #6de0b8;
|
||||||
|
--color-link-external-hover: #9ef7d6;
|
||||||
|
--color-link-affiliated: #e792ff;
|
||||||
|
--color-link-affiliated-hover: #f3b8ff;
|
||||||
|
--color-accent-1: #76a7d7;
|
||||||
|
--color-accent-2: #5d86ad;
|
||||||
|
--color-accent-3: #c3d0df;
|
||||||
|
--color-background-wash-light: #76a7d7;
|
||||||
|
--color-background-wash-mid: #5d86ad;
|
||||||
|
--color-background-wash-deep: #273446;
|
||||||
|
--color-background-wash: var(--color-background-wash-mid);
|
||||||
|
--color-section-divider-1: #e7b83f;
|
||||||
|
--color-section-divider-2: #8f6ad8;
|
||||||
|
--color-section-divider-3: #d97a3f;
|
||||||
|
--color-strong-highlight: #8f3340;
|
||||||
|
--border-width-regular: 2px;
|
||||||
|
|
||||||
|
--font-body: "Source Sans 3", "Noto Sans", "DejaVu Sans", sans-serif;
|
||||||
|
--font-heading: "Avenir Next Condensed", "Franklin Gothic Medium", "Arial Narrow", sans-serif;
|
||||||
|
--font-size-root-min: 16px;
|
||||||
|
--font-size-body: clamp(1.1875rem, 1.05rem + 0.55vw, 1.3125rem);
|
||||||
|
--font-size-body-mobile: 1.1875rem;
|
||||||
|
--font-size-reading: clamp(1.2rem, 1.08rem + 0.45vw, 1.34rem);
|
||||||
|
|
||||||
|
--space-1: 0.35rem;
|
||||||
|
--space-2: 0.6rem;
|
||||||
|
--space-3: 0.9rem;
|
||||||
|
--space-4: 1.2rem;
|
||||||
|
--space-5: 1.7rem;
|
||||||
|
--space-6: 2.4rem;
|
||||||
|
|
||||||
|
--max-width: 92rem;
|
||||||
|
--max-width-reading: 54rem;
|
||||||
|
}
|
||||||
20
themes/2026/layouts/404.html
Normal file
20
themes/2026/layouts/404.html
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
{{ define "main" }}
|
||||||
|
{{- $recentPages := first 6 (site.RegularPages.ByDate.Reverse) -}}
|
||||||
|
<header>
|
||||||
|
{{ partialCached "header-brand.html" .Site .Site.Title (.Site.Params.logo | default "logo-large.png") }}
|
||||||
|
<h1>Page introuvable</h1>
|
||||||
|
</header>
|
||||||
|
<main>
|
||||||
|
<article>
|
||||||
|
<p>Le contenu que vous recherchez n'existe pas.</p>
|
||||||
|
<p>Si vous pensez qu'il s'agit d'une erreur, je vous invite à <a href="/contact/">me contacter</a> en me communiquant l'adresse visitée et l'adresse ciblée.</p>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
{{ if gt (len $recentPages) 0 }}
|
||||||
|
<section>
|
||||||
|
<header><h2>Derniers articles</h2></header>
|
||||||
|
{{ partial "articles-list.html" (dict "Pages" $recentPages "Context" .) }}
|
||||||
|
</section>
|
||||||
|
{{ end }}
|
||||||
|
</main>
|
||||||
|
{{ end }}
|
||||||
1
themes/2026/layouts/_markup/render-image.html
Normal file
1
themes/2026/layouts/_markup/render-image.html
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{{- partial "media/render-image.html" . -}}
|
||||||
1
themes/2026/layouts/_markup/render-link.html
Normal file
1
themes/2026/layouts/_markup/render-link.html
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{{- partial "render/link.html" . -}}
|
||||||
49
themes/2026/layouts/_partials/article-footer.html
Normal file
49
themes/2026/layouts/_partials/article-footer.html
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
{{- $page := . -}}
|
||||||
|
{{- with $page.Params.dossier -}}
|
||||||
|
{{- $dossierID := index . 0 -}}
|
||||||
|
{{- if $dossierID -}}
|
||||||
|
{{- $group := where site.RegularPages "Params.dossier" "intersect" (slice $dossierID) -}}
|
||||||
|
{{- $sorted := sort $group "RelPermalink" "asc" -}}
|
||||||
|
{{- $sorted = sort $sorted "Date" "asc" -}}
|
||||||
|
{{- $sorted = sort $sorted "Weight" "asc" -}}
|
||||||
|
{{- if gt (len $sorted) 1 -}}
|
||||||
|
{{- $scratch := newScratch -}}
|
||||||
|
{{- $scratch.Set "index" -1 -}}
|
||||||
|
{{- range $i, $item := $sorted -}}
|
||||||
|
{{- if eq $item.Permalink $page.Permalink -}}
|
||||||
|
{{- $scratch.Set "index" $i -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- $index := $scratch.Get "index" -}}
|
||||||
|
{{- if ge $index 0 -}}
|
||||||
|
{{- $prev := false -}}
|
||||||
|
{{- $next := false -}}
|
||||||
|
{{- if gt $index 0 -}}
|
||||||
|
{{- $prev = index $sorted (sub $index 1) -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if lt (add $index 1) (len $sorted) -}}
|
||||||
|
{{- $next = index $sorted (add $index 1) -}}
|
||||||
|
{{- end -}}
|
||||||
|
<footer class="article-footer">
|
||||||
|
<nav class="article-footer-dossier-nav" aria-label="Navigation dans le dossier">
|
||||||
|
<p class="article-footer-dossier-nav-label"><span>Dossier</span><strong>{{ $dossierID }}</strong></p>
|
||||||
|
<div class="article-footer-dossier-nav-links">
|
||||||
|
{{- with $prev -}}
|
||||||
|
<p class="article-footer-dossier-nav-link article-footer-dossier-nav-link-prev">
|
||||||
|
<span>Page précédente</span>
|
||||||
|
<a href="{{ .RelPermalink }}" title="{{ .Title }}">{{ .Title }}</a>
|
||||||
|
</p>
|
||||||
|
{{- end -}}
|
||||||
|
{{- with $next -}}
|
||||||
|
<p class="article-footer-dossier-nav-link article-footer-dossier-nav-link-next">
|
||||||
|
<span>Page suivante</span>
|
||||||
|
<a href="{{ .RelPermalink }}" title="{{ .Title }}">{{ .Title }}</a>
|
||||||
|
</p>
|
||||||
|
{{- end -}}
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
</footer>
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
189
themes/2026/layouts/_partials/article-header.html
Normal file
189
themes/2026/layouts/_partials/article-header.html
Normal file
@@ -0,0 +1,189 @@
|
|||||||
|
{{- $page := .Page -}}
|
||||||
|
{{- $coverPath := .Params.cover -}}
|
||||||
|
{{- $isInterestingLink := strings.HasPrefix .RelPermalink "/interets/liens-interessants/" -}}
|
||||||
|
{{- $showCover := and $coverPath (not $isInterestingLink) -}}
|
||||||
|
{{- $linksParam := .Params.links -}}
|
||||||
|
{{- $links := slice -}}
|
||||||
|
{{- if $linksParam -}}
|
||||||
|
{{- $type := printf "%T" $linksParam -}}
|
||||||
|
{{- if hasPrefix $type "[]" -}}
|
||||||
|
{{- $links = $linksParam -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $links = slice $linksParam -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $originLink := dict -}}
|
||||||
|
{{- if $isInterestingLink -}}
|
||||||
|
{{- range $links -}}
|
||||||
|
{{- if and (eq (len $originLink) 0) .url -}}
|
||||||
|
{{- $rawLabel := default "" (default .name .text) -}}
|
||||||
|
{{- $normalizedLabel := lower (replace (replace (printf "%v" $rawLabel) "'" "") "’" "") -}}
|
||||||
|
{{- if eq $normalizedLabel "page dorigine" -}}
|
||||||
|
{{- $originLink = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if and (eq (len $originLink) 0) (gt (len $links) 0) -}}
|
||||||
|
{{- range $links -}}
|
||||||
|
{{- if and (eq (len $originLink) 0) .url -}}
|
||||||
|
{{- $originLink = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $originURL := "" -}}
|
||||||
|
{{- $originLabel := "Page d'origine" -}}
|
||||||
|
{{- if gt (len $originLink) 0 -}}
|
||||||
|
{{- $originURL = default "" (index $originLink "url") -}}
|
||||||
|
{{- with (default (index $originLink "name") (index $originLink "text")) -}}
|
||||||
|
{{- $originLabel = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- $originIsExternal := strings.HasPrefix $originURL "http" -}}
|
||||||
|
|
||||||
|
{{- $remainingLinks := $links -}}
|
||||||
|
{{- if and $isInterestingLink (ne $originURL "") -}}
|
||||||
|
{{- $remainingLinks = slice -}}
|
||||||
|
{{- range $links -}}
|
||||||
|
{{- if and .url (ne .url $originURL) -}}
|
||||||
|
{{- $remainingLinks = $remainingLinks | append . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $coverData := dict -}}
|
||||||
|
{{- if $coverPath -}}
|
||||||
|
{{- $coverName := path.Base $coverPath | replaceRE "\\.[^.]+$" "" -}}
|
||||||
|
{{- $coverDataFile := $page.Resources.Get (printf "data/images/%s.yaml" $coverName) -}}
|
||||||
|
{{- if not $coverDataFile -}}
|
||||||
|
{{- $coverDataFile = $page.Resources.Get (printf "data/%s.yaml" $coverName) -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if $coverDataFile -}}
|
||||||
|
{{- $coverData = $coverDataFile.Content | transform.Unmarshal -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $coverImage := false -}}
|
||||||
|
{{- $coverDisplay := false -}}
|
||||||
|
{{- if $showCover -}}
|
||||||
|
{{- $coverImage = $page.Resources.GetMatch $coverPath -}}
|
||||||
|
{{- if $coverImage -}}
|
||||||
|
{{- $coverDisplay = $coverImage -}}
|
||||||
|
{{- if and (ne $coverDisplay.MediaType.SubType "svg") (gt $coverDisplay.Width 1480) -}}
|
||||||
|
{{- $coverDisplay = $coverImage.Resize "1480x" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $coverImageTitle := default .Title (index $coverData "title") -}}
|
||||||
|
{{- $coverTitle := index $coverData "title" -}}
|
||||||
|
{{- $coverDescription := index $coverData "description" -}}
|
||||||
|
{{- $coverAttribution := index $coverData "attribution" -}}
|
||||||
|
{{- $coverPrompt := index $coverData "prompt" -}}
|
||||||
|
{{- $hasCoverImage := and $showCover $coverImage -}}
|
||||||
|
{{- $hasCoverMeta := or $coverTitle $coverDescription $coverAttribution $coverPrompt -}}
|
||||||
|
{{- $showReadingTime := ge .ReadingTime 5 -}}
|
||||||
|
{{- $hasPublication := $showReadingTime -}}
|
||||||
|
{{- with .Date -}}
|
||||||
|
{{- $hasPublication = true -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- $breadcrumbsMarkup := partial "breadcrumbs.html" . -}}
|
||||||
|
{{- $hasBreadcrumbs := ne (strings.TrimSpace $breadcrumbsMarkup) "" -}}
|
||||||
|
{{- $pageLinksMarkup := partial "page-links.html" (dict
|
||||||
|
"Page" .
|
||||||
|
"CommentsURL" .Params.comments_url
|
||||||
|
"CommentsLabel" "Commentaires"
|
||||||
|
"LinkClass" "ui-button"
|
||||||
|
"Links" $remainingLinks
|
||||||
|
) -}}
|
||||||
|
{{- $hasPageLinks := ne (strings.TrimSpace $pageLinksMarkup) "" -}}
|
||||||
|
{{- $hasOriginCallout := and $isInterestingLink (ne $originURL "") -}}
|
||||||
|
{{- $hasMetaMain := or $hasBreadcrumbs $hasPublication $hasPageLinks $hasOriginCallout -}}
|
||||||
|
{{- $showCoverMeta := and (not $isInterestingLink) $coverPath $hasCoverMeta -}}
|
||||||
|
{{- $hasMetaBlock := or $hasCoverImage $hasMetaMain $showCoverMeta -}}
|
||||||
|
|
||||||
|
<header class="article-header{{ if $isInterestingLink }} article-header--interesting-link{{ end }}">
|
||||||
|
{{ partialCached "header-brand.html" .Site .Site.Title (.Site.Params.logo | default "logo-large.png") }}
|
||||||
|
<h1>{{ .Title }}</h1>
|
||||||
|
|
||||||
|
{{- if $hasMetaBlock -}}
|
||||||
|
<section class="article-meta-block{{ if not $hasCoverImage }} article-meta-block--without-cover{{ end }}">
|
||||||
|
{{- if $hasCoverImage -}}
|
||||||
|
<figure class="article-cover">
|
||||||
|
<a href="{{ $coverImage.RelPermalink }}" title="Cliquez pour agrandir l'image d'en-tête">
|
||||||
|
<img src="{{ $coverDisplay.RelPermalink }}" alt="{{ $coverImageTitle }}" title="{{ $coverImageTitle }}">
|
||||||
|
</a>
|
||||||
|
</figure>
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
<section class="article-meta">
|
||||||
|
<section class="article-meta-main">
|
||||||
|
{{- if $hasBreadcrumbs -}}
|
||||||
|
{{- $breadcrumbsMarkup | safeHTML -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if $hasPublication -}}
|
||||||
|
<p class="article-publication">
|
||||||
|
{{ with .Date }}
|
||||||
|
{{- $timePart := . | time.Format "15:04:05" -}}
|
||||||
|
<time datetime="{{ . }}">
|
||||||
|
{{- if eq $timePart "00:00:00" -}}
|
||||||
|
{{ . | time.Format "02/01/2006" }}
|
||||||
|
{{- else -}}
|
||||||
|
{{ . | time.Format "02/01/2006 à 15:04" }}
|
||||||
|
{{- end -}}
|
||||||
|
</time>
|
||||||
|
{{- if $showReadingTime -}}
|
||||||
|
<span>·</span>
|
||||||
|
{{- end -}}
|
||||||
|
{{ end }}
|
||||||
|
{{- if $showReadingTime -}}
|
||||||
|
<span>{{ .ReadingTime }} min</span>
|
||||||
|
{{- end -}}
|
||||||
|
</p>
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if $hasOriginCallout -}}
|
||||||
|
<section class="article-origin-link" aria-label="Lien d'origine">
|
||||||
|
<p class="article-origin-link-kicker">À lire avant mon commentaire</p>
|
||||||
|
<p class="article-origin-link-hint">Ce billet n'est qu'une note de lecture. Lisez d'abord la source pour avoir le contexte complet.</p>
|
||||||
|
<p class="article-origin-link-button">
|
||||||
|
<a href="{{ $originURL }}" class="ui-button{{ if $originIsExternal }} link-external{{ end }}"{{ if $originIsExternal }} rel="noreferrer noopener"{{ end }} title="Lire la page d'origine">
|
||||||
|
<span class="article-origin-link-button-label">{{ $originLabel }}</span>
|
||||||
|
<span class="article-origin-link-button-url">{{ $originURL }}</span>
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if $hasPageLinks -}}
|
||||||
|
{{- $pageLinksMarkup | safeHTML -}}
|
||||||
|
{{- end -}}
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{{- if $showCoverMeta -}}
|
||||||
|
<section class="cover-meta">
|
||||||
|
<h2>Image d'en-tête</h2>
|
||||||
|
{{- with $coverTitle -}}
|
||||||
|
<p class="cover-title">{{ . | markdownify }}</p>
|
||||||
|
{{- end -}}
|
||||||
|
{{- with $coverDescription -}}
|
||||||
|
<p class="cover-description">{{ . | markdownify }}</p>
|
||||||
|
{{- end -}}
|
||||||
|
{{- with $coverAttribution -}}
|
||||||
|
<p class="cover-attribution"><strong>Attribution:</strong> <span>{{ . | markdownify }}</span></p>
|
||||||
|
{{- end -}}
|
||||||
|
{{- with $coverPrompt -}}
|
||||||
|
<details>
|
||||||
|
<summary>Prompt</summary>
|
||||||
|
<p>{{ . | markdownify }}</p>
|
||||||
|
</details>
|
||||||
|
{{- end -}}
|
||||||
|
</section>
|
||||||
|
{{- end -}}
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
{{- end -}}
|
||||||
|
</header>
|
||||||
38
themes/2026/layouts/_partials/articles-list.html
Normal file
38
themes/2026/layouts/_partials/articles-list.html
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
{{- $pages := slice -}}
|
||||||
|
{{- $showDossierBeforeTitle := false -}}
|
||||||
|
{{- $showInterestingLinksMeta := false -}}
|
||||||
|
{{- $externalLinksReport := dict -}}
|
||||||
|
{{- if reflect.IsMap . -}}
|
||||||
|
{{- with .Pages -}}
|
||||||
|
{{- $pages = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if isset . "ShowDossierBeforeTitle" -}}
|
||||||
|
{{- $showDossierBeforeTitle = index . "ShowDossierBeforeTitle" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if isset . "ShowInterestingLinksMeta" -}}
|
||||||
|
{{- $showInterestingLinksMeta = index . "ShowInterestingLinksMeta" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if isset . "ExternalLinksReport" -}}
|
||||||
|
{{- $externalLinksReport = index . "ExternalLinksReport" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if gt (len $pages) 0 -}}
|
||||||
|
<nav class="articles-list" aria-label="Liste d articles">
|
||||||
|
<ol>
|
||||||
|
{{- range $index, $page := $pages -}}
|
||||||
|
{{- $thumbnailSize := "small" -}}
|
||||||
|
{{- $positionInBlock := mod (add $index 1) 10 -}}
|
||||||
|
{{- if or (eq $positionInBlock 5) (eq $positionInBlock 6) -}}
|
||||||
|
{{- $thumbnailSize = "large" -}}
|
||||||
|
{{- end -}}
|
||||||
|
<li>{{ partial "card.html" (dict
|
||||||
|
"Page" $page
|
||||||
|
"ShowDossierBeforeTitle" $showDossierBeforeTitle
|
||||||
|
"ShowInterestingLinksMeta" $showInterestingLinksMeta
|
||||||
|
"ExternalLinksReport" $externalLinksReport
|
||||||
|
"ThumbnailSize" $thumbnailSize
|
||||||
|
) }}</li>
|
||||||
|
{{- end -}}
|
||||||
|
</ol>
|
||||||
|
</nav>
|
||||||
|
{{- end -}}
|
||||||
7
themes/2026/layouts/_partials/asides/comments.html
Normal file
7
themes/2026/layouts/_partials/asides/comments.html
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{{- $url := .Params.comments_url -}}
|
||||||
|
{{- if $url -}}
|
||||||
|
<section>
|
||||||
|
<h2>Échanger autour de ce texte</h2>
|
||||||
|
<p>Si vous souhaitez réagir publiquement, <a href="{{ $url }}" target="_blank" rel="noopener">un fil dédié vous attend ici</a>.</p>
|
||||||
|
</section>
|
||||||
|
{{- end -}}
|
||||||
38
themes/2026/layouts/_partials/asides/keywords.html
Normal file
38
themes/2026/layouts/_partials/asides/keywords.html
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
{{- $ctx := . -}}
|
||||||
|
{{- $scratch := newScratch -}}
|
||||||
|
{{- $scratch.Set "blocks" 0 -}}
|
||||||
|
{{- range $taxonomy, $_ := $ctx.Site.Taxonomies -}}
|
||||||
|
{{- with $ctx.Page.GetTerms $taxonomy -}}
|
||||||
|
{{- $scratch.Add "blocks" 1 -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- with $ctx.Params.keywords -}}
|
||||||
|
{{- if gt (len .) 0 -}}
|
||||||
|
{{- $scratch.Add "blocks" 1 -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if gt ($scratch.Get "blocks") 0 -}}
|
||||||
|
<section>
|
||||||
|
<details>
|
||||||
|
<summary>Taxonomies</summary>
|
||||||
|
{{- range $taxonomy, $_ := $ctx.Site.Taxonomies -}}
|
||||||
|
{{- with $ctx.Page.GetTerms $taxonomy -}}
|
||||||
|
<section>
|
||||||
|
{{- $taxonomyPage := $ctx.Site.GetPage "taxonomy" $taxonomy -}}
|
||||||
|
<h2>{{ with $taxonomyPage }}{{ .Title }}{{ else }}{{ humanize $taxonomy }}{{ end }}</h2>
|
||||||
|
{{- partial "keywords.html" . -}}
|
||||||
|
</section>
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- with $ctx.Params.keywords -}}
|
||||||
|
{{- if gt (len .) 0 -}}
|
||||||
|
<section>
|
||||||
|
<h2>Mots-clés libres</h2>
|
||||||
|
{{- partial "keywords.html" . -}}
|
||||||
|
</section>
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
</details>
|
||||||
|
</section>
|
||||||
|
{{- end -}}
|
||||||
10
themes/2026/layouts/_partials/asides/oeuvres.html
Normal file
10
themes/2026/layouts/_partials/asides/oeuvres.html
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{{- $page := . -}}
|
||||||
|
{{- with $page.Params.oeuvres -}}
|
||||||
|
{{- range . -}}
|
||||||
|
{{- if eq . "L'Anankéisme" -}}
|
||||||
|
{{- partial "oeuvres/l-anankeisme.html" $page -}}
|
||||||
|
{{- else if eq . "L'Humain, cette espèce primitive" -}}
|
||||||
|
{{- partial "oeuvres/l-humain-cette-espece-primitive.html" $page -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
30
themes/2026/layouts/_partials/asides/toc.html
Normal file
30
themes/2026/layouts/_partials/asides/toc.html
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
{{- $toc := .TableOfContents -}}
|
||||||
|
{{- $hasTOC := gt (len (findRE "<li>" $toc)) 0 -}}
|
||||||
|
{{- $dossierSummary := partial "dossier-summary.html" (dict "Page" .) -}}
|
||||||
|
{{- $hasDossierSummary := ne (strings.TrimSpace $dossierSummary) "" -}}
|
||||||
|
{{- if or $hasDossierSummary $hasTOC -}}
|
||||||
|
{{- $tocMarkup := "" -}}
|
||||||
|
{{- if $hasTOC -}}
|
||||||
|
{{- $tocMarkup = replace $toc `<nav id="TableOfContents">` `<div class="article-toc-list">` -}}
|
||||||
|
{{- $tocMarkup = replace $tocMarkup `</nav>` `</div>` -}}
|
||||||
|
{{- end -}}
|
||||||
|
<aside class="article-toc">
|
||||||
|
{{- if $hasDossierSummary -}}
|
||||||
|
<details class="article-toc-drawer article-toc-drawer-dossier">
|
||||||
|
<summary class="ui-button ui-button--vertical"><span>Dossier</span></summary>
|
||||||
|
<div class="article-toc-drawer-panel">
|
||||||
|
{{- $dossierSummary | safeHTML -}}
|
||||||
|
</div>
|
||||||
|
</details>
|
||||||
|
{{- end -}}
|
||||||
|
{{- if $hasTOC -}}
|
||||||
|
<details class="article-toc-drawer article-toc-drawer-outline">
|
||||||
|
<summary class="ui-button ui-button--vertical"><span>Sommaire</span></summary>
|
||||||
|
<div class="article-toc-drawer-panel">
|
||||||
|
<h2>Sommaire</h2>
|
||||||
|
{{- $tocMarkup | safeHTML -}}
|
||||||
|
</div>
|
||||||
|
</details>
|
||||||
|
{{- end -}}
|
||||||
|
</aside>
|
||||||
|
{{- end -}}
|
||||||
26
themes/2026/layouts/_partials/breadcrumbs.html
Normal file
26
themes/2026/layouts/_partials/breadcrumbs.html
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
{{- $page := . -}}
|
||||||
|
{{- with .Page }}{{ $page = . }}{{ end -}}
|
||||||
|
{{- $trail := slice -}}
|
||||||
|
{{- if $page -}}
|
||||||
|
{{- range $page.Ancestors.Reverse -}}
|
||||||
|
{{- if ne .RelPermalink "/" -}}
|
||||||
|
{{- $trail = $trail | append . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if eq $page.Kind "term" -}}
|
||||||
|
{{- with site.GetPage "taxonomy" $page.Data.Plural -}}
|
||||||
|
{{- if not (in $trail .) -}}
|
||||||
|
{{- $trail = $trail | append . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if gt (len $trail) 0 -}}
|
||||||
|
<nav class="breadcrumbs" aria-label="Fil d'Ariane">
|
||||||
|
<ol>
|
||||||
|
{{- range $trail -}}
|
||||||
|
<li><a href="{{ .RelPermalink }}">{{ with .LinkTitle }}{{ . }}{{ else }}{{ .Title }}{{ end }}</a></li>
|
||||||
|
{{- end -}}
|
||||||
|
</ol>
|
||||||
|
</nav>
|
||||||
|
{{- end -}}
|
||||||
182
themes/2026/layouts/_partials/card.html
Normal file
182
themes/2026/layouts/_partials/card.html
Normal file
@@ -0,0 +1,182 @@
|
|||||||
|
{{- $page := . -}}
|
||||||
|
{{- $showSection := true -}}
|
||||||
|
{{- $linkSection := true -}}
|
||||||
|
{{- $showMeta := true -}}
|
||||||
|
{{- $showDossierBeforeTitle := false -}}
|
||||||
|
{{- $showInterestingLinksMeta := false -}}
|
||||||
|
{{- $thumbnailSize := "large" -}}
|
||||||
|
{{- $externalLinksReport := dict -}}
|
||||||
|
|
||||||
|
{{- if reflect.IsMap . -}}
|
||||||
|
{{- if isset . "Page" -}}
|
||||||
|
{{- $page = index . "Page" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if isset . "ShowSection" -}}
|
||||||
|
{{- $showSection = index . "ShowSection" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if isset . "LinkSection" -}}
|
||||||
|
{{- $linkSection = index . "LinkSection" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if isset . "ShowMeta" -}}
|
||||||
|
{{- $showMeta = index . "ShowMeta" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if isset . "ShowDossierBeforeTitle" -}}
|
||||||
|
{{- $showDossierBeforeTitle = index . "ShowDossierBeforeTitle" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if isset . "ShowInterestingLinksMeta" -}}
|
||||||
|
{{- $showInterestingLinksMeta = index . "ShowInterestingLinksMeta" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if isset . "ThumbnailSize" -}}
|
||||||
|
{{- $thumbnailSize = index . "ThumbnailSize" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if isset . "ExternalLinksReport" -}}
|
||||||
|
{{- $externalLinksReport = index . "ExternalLinksReport" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $thumbnailTransform := "700x394" -}}
|
||||||
|
{{- if eq $thumbnailSize "small" -}}
|
||||||
|
{{- $thumbnailTransform = "340x191" -}}
|
||||||
|
{{- else if eq $thumbnailSize "spotlight" -}}
|
||||||
|
{{- $thumbnailTransform = "900x506" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $coverPath := $page.Params.cover -}}
|
||||||
|
{{- $image := false -}}
|
||||||
|
{{- if $coverPath -}}
|
||||||
|
{{- if strings.HasSuffix $coverPath ".yaml" -}}
|
||||||
|
{{- $coverAbsPath := printf "%s%s" $page.File.Dir $coverPath -}}
|
||||||
|
{{- $coverRaw := readFile $coverAbsPath -}}
|
||||||
|
{{- $coverData := $coverRaw | transform.Unmarshal -}}
|
||||||
|
{{- with $coverData.file -}}
|
||||||
|
{{- $image = $page.Resources.GetMatch . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $image = $page.Resources.GetMatch $coverPath -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $dossierTitle := "" -}}
|
||||||
|
{{- $dossierFirstPage := false -}}
|
||||||
|
{{- with $page.Params.dossier -}}
|
||||||
|
{{- with index . 0 -}}
|
||||||
|
{{- $dossierTitle = . -}}
|
||||||
|
{{- if $showDossierBeforeTitle -}}
|
||||||
|
{{- $dossierFirstPage = partial "dossier-first-page.html" $page -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $originLink := "" -}}
|
||||||
|
{{- $originHost := "" -}}
|
||||||
|
{{- $statusTone := "unknown" -}}
|
||||||
|
{{- $statusLabel := "État inconnu" -}}
|
||||||
|
{{- $statusTitle := "" -}}
|
||||||
|
{{- $statusChecked := "" -}}
|
||||||
|
{{- if and $showMeta $showInterestingLinksMeta -}}
|
||||||
|
{{- with $page.Params.links -}}
|
||||||
|
{{- range . -}}
|
||||||
|
{{- if and (eq $originLink "") (not .archive) -}}
|
||||||
|
{{- with .url -}}
|
||||||
|
{{- $originLink = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- with partial "external-link-status.html" (dict "URL" $originLink "Report" $externalLinksReport) -}}
|
||||||
|
{{- with index . "Host" -}}
|
||||||
|
{{- $originHost = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- with index . "Tone" -}}
|
||||||
|
{{- $statusTone = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- with index . "Label" -}}
|
||||||
|
{{- $statusLabel = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- with index . "Title" -}}
|
||||||
|
{{- $statusTitle = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- with index . "CheckedAt" -}}
|
||||||
|
{{- $statusChecked = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
<article class="card">
|
||||||
|
{{- if $showDossierBeforeTitle -}}
|
||||||
|
<header>
|
||||||
|
<a href="{{ $page.RelPermalink }}">
|
||||||
|
<figure>
|
||||||
|
{{- with $image -}}
|
||||||
|
{{- $resized := .Fill $thumbnailTransform -}}
|
||||||
|
<img src="{{ $resized.RelPermalink }}" alt="Image de couverture pour {{ $page.Title }}" loading="lazy">
|
||||||
|
{{- end -}}
|
||||||
|
</figure>
|
||||||
|
</a>
|
||||||
|
{{- with $dossierTitle -}}
|
||||||
|
{{- with $dossierFirstPage -}}
|
||||||
|
<p><a href="{{ .RelPermalink }}">{{ $dossierTitle }}</a></p>
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
<h3><a href="{{ $page.RelPermalink }}">{{ $page.Title }}</a></h3>
|
||||||
|
</header>
|
||||||
|
{{- else -}}
|
||||||
|
<a href="{{ $page.RelPermalink }}">
|
||||||
|
<figure>
|
||||||
|
{{- with $image -}}
|
||||||
|
{{- $resized := .Fill $thumbnailTransform -}}
|
||||||
|
<img src="{{ $resized.RelPermalink }}" alt="Image de couverture pour {{ $page.Title }}" loading="lazy">
|
||||||
|
{{- end -}}
|
||||||
|
</figure>
|
||||||
|
<h3>{{ $page.Title }}</h3>
|
||||||
|
</a>
|
||||||
|
{{- end -}}
|
||||||
|
{{- with $page.Summary -}}
|
||||||
|
<p>{{ . | plainify | truncate 180 }}</p>
|
||||||
|
{{- end -}}
|
||||||
|
{{- if $showMeta -}}
|
||||||
|
{{- if $showInterestingLinksMeta -}}
|
||||||
|
<footer class="external-link-meta">
|
||||||
|
<p>
|
||||||
|
{{- with $page.Date -}}<time datetime="{{ . }}">{{ . | time.Format "02/01/2006" }}</time>{{- end -}}
|
||||||
|
{{- if and $page.Date $originHost -}}<span>·</span>{{- end -}}
|
||||||
|
{{- with $originHost -}}
|
||||||
|
{{- if $originLink -}}
|
||||||
|
<a href="{{ $originLink }}" title="Ouvrir le lien externe {{ . }}" rel="noopener noreferrer nofollow">{{ . }}</a>
|
||||||
|
{{- else -}}
|
||||||
|
<span>{{ . }}</span>
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<strong data-state="{{ $statusTone }}"{{ with $statusTitle }} title="{{ . }}"{{ end }}>{{ $statusLabel }}</strong>
|
||||||
|
{{- with $statusChecked -}}<span>·</span><time datetime="{{ . }}">Vérifié {{ . | time.Format "02/01/2006" }}</time>{{- end -}}
|
||||||
|
</p>
|
||||||
|
</footer>
|
||||||
|
{{- else -}}
|
||||||
|
<p>
|
||||||
|
{{- with $page.Date -}}
|
||||||
|
<time datetime="{{ . }}">{{ . | time.Format "02/01/2006" }}</time>
|
||||||
|
{{- end -}}
|
||||||
|
{{- if $showSection -}}
|
||||||
|
{{- with $page.Parent -}}
|
||||||
|
<span>·</span>
|
||||||
|
{{- if $linkSection -}}
|
||||||
|
<a href="{{ .RelPermalink }}">{{ with .LinkTitle }}{{ . }}{{ else }}{{ .Title }}{{ end }}</a>
|
||||||
|
{{- else -}}
|
||||||
|
<span>{{ with .LinkTitle }}{{ . }}{{ else }}{{ .Title }}{{ end }}</span>
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if and (not $showDossierBeforeTitle) $dossierTitle -}}
|
||||||
|
<span>·</span>
|
||||||
|
<strong>{{ $dossierTitle }}</strong>
|
||||||
|
{{- end -}}
|
||||||
|
{{- if and (not $page.IsSection) (ge $page.ReadingTime 5) -}}
|
||||||
|
<span>· {{ $page.ReadingTime }} min</span>
|
||||||
|
{{- end -}}
|
||||||
|
</p>
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
</article>
|
||||||
31
themes/2026/layouts/_partials/dossier-first-page.html
Normal file
31
themes/2026/layouts/_partials/dossier-first-page.html
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
{{- $page := . -}}
|
||||||
|
{{- $firstPage := false -}}
|
||||||
|
|
||||||
|
{{- with $page.Params.dossier -}}
|
||||||
|
{{- $dossierID := index . 0 -}}
|
||||||
|
{{- if $dossierID -}}
|
||||||
|
{{- $group := where site.RegularPages "Params.dossier" "intersect" (slice $dossierID) -}}
|
||||||
|
{{- if gt (len $group) 0 -}}
|
||||||
|
{{- $weighted := slice -}}
|
||||||
|
{{- range $group -}}
|
||||||
|
{{- if isset .Params "weight" -}}
|
||||||
|
{{- $weighted = $weighted | append . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $candidates := $group -}}
|
||||||
|
{{- if gt (len $weighted) 0 -}}
|
||||||
|
{{- $sortedByWeight := sort $weighted "Weight" "asc" -}}
|
||||||
|
{{- $minWeight := (index $sortedByWeight 0).Weight -}}
|
||||||
|
{{- $candidates = where $sortedByWeight "Weight" $minWeight -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $sortedByDate := sort $candidates "Date" "asc" -}}
|
||||||
|
{{- $firstDate := (index $sortedByDate 0).Date -}}
|
||||||
|
{{- $sameDate := where $sortedByDate "Date" $firstDate -}}
|
||||||
|
{{- $firstPage = index (sort $sameDate "RelPermalink" "asc") 0 -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- return $firstPage -}}
|
||||||
33
themes/2026/layouts/_partials/dossier-summary.html
Normal file
33
themes/2026/layouts/_partials/dossier-summary.html
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{{- $current := . -}}
|
||||||
|
{{- if reflect.IsMap . -}}
|
||||||
|
{{- with index . "Page" -}}
|
||||||
|
{{- $current = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- with $current.Params.dossier -}}
|
||||||
|
{{- $dossierID := index . 0 -}}
|
||||||
|
{{- if $dossierID -}}
|
||||||
|
{{- $allPages := site.RegularPages -}}
|
||||||
|
{{- $filtered := where $allPages "Params.dossier" "intersect" (slice $dossierID) -}}
|
||||||
|
{{- $sorted := sort $filtered "RelPermalink" "asc" -}}
|
||||||
|
{{- $sorted = sort $sorted "Date" "asc" -}}
|
||||||
|
{{- $sorted = sort $sorted "Weight" "asc" -}}
|
||||||
|
{{- if gt (len $sorted) 1 -}}
|
||||||
|
<nav aria-label="Sommaire du dossier">
|
||||||
|
<p><strong>{{ $dossierID }}</strong></p>
|
||||||
|
<ol>
|
||||||
|
{{- range $sorted -}}
|
||||||
|
<li>
|
||||||
|
{{- if eq .Permalink $current.Permalink -}}
|
||||||
|
<strong>{{ .Title }}</strong>
|
||||||
|
{{- else -}}
|
||||||
|
<a href="{{ .RelPermalink }}">{{ .Title }}</a>
|
||||||
|
{{- end -}}
|
||||||
|
</li>
|
||||||
|
{{- end -}}
|
||||||
|
</ol>
|
||||||
|
</nav>
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
128
themes/2026/layouts/_partials/external-link-status.html
Normal file
128
themes/2026/layouts/_partials/external-link-status.html
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
{{- $url := "" -}}
|
||||||
|
{{- $report := dict -}}
|
||||||
|
{{- if reflect.IsMap . -}}
|
||||||
|
{{- with index . "URL" -}}
|
||||||
|
{{- $url = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- with index . "Report" -}}
|
||||||
|
{{- $report = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $entries := default (dict) (index $report "entries") -}}
|
||||||
|
{{- $deadLinks := default (slice) (index $report "links") -}}
|
||||||
|
|
||||||
|
{{- $host := "" -}}
|
||||||
|
{{- with $url -}}
|
||||||
|
{{- $host = . | replaceRE "^https?://([^/]+).*$" "$1" | replaceRE "^www\\." "" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $lookupURLs := slice -}}
|
||||||
|
{{- with $url -}}
|
||||||
|
{{- $lookupURLs = $lookupURLs | append . -}}
|
||||||
|
{{- if strings.HasSuffix . "/" -}}
|
||||||
|
{{- $withoutSlash := strings.TrimSuffix "/" . -}}
|
||||||
|
{{- if ne $withoutSlash . -}}
|
||||||
|
{{- $lookupURLs = $lookupURLs | append $withoutSlash -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $lookupURLs = $lookupURLs | append (printf "%s/" .) -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $entry := dict -}}
|
||||||
|
{{- range $lookupURLs -}}
|
||||||
|
{{- if and (eq (len $entry) 0) (isset $entries .) -}}
|
||||||
|
{{- $entry = index $entries . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $deadInfo := dict -}}
|
||||||
|
{{- range $lookupURLs -}}
|
||||||
|
{{- if eq (len $deadInfo) 0 -}}
|
||||||
|
{{- $matches := where $deadLinks "url" . -}}
|
||||||
|
{{- if gt (len $matches) 0 -}}
|
||||||
|
{{- $deadInfo = index $matches 0 -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $statusCode := 0 -}}
|
||||||
|
{{- $statusRaw := "" -}}
|
||||||
|
{{- $statusChecked := "" -}}
|
||||||
|
{{- $statusErrorType := "" -}}
|
||||||
|
{{- $statusTone := "unknown" -}}
|
||||||
|
{{- $statusLabel := "État inconnu" -}}
|
||||||
|
{{- $statusTitle := "" -}}
|
||||||
|
|
||||||
|
{{- if gt (len $entry) 0 -}}
|
||||||
|
{{- with index $entry "status" -}}
|
||||||
|
{{- $statusString := printf "%v" . -}}
|
||||||
|
{{- if gt (len (findRE "^[0-9]+$" $statusString)) 0 -}}
|
||||||
|
{{- $statusCode = int $statusString -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $statusRaw = $statusString -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- with index $entry "checkedAt" -}}
|
||||||
|
{{- $statusChecked = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- with index $entry "errorType" -}}
|
||||||
|
{{- $statusErrorType = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if and (eq $statusCode 0) (eq $statusRaw "") (gt (len $deadInfo) 0) -}}
|
||||||
|
{{- with index $deadInfo "status" -}}
|
||||||
|
{{- $statusString := printf "%v" . -}}
|
||||||
|
{{- if gt (len (findRE "^[0-9]+$" $statusString)) 0 -}}
|
||||||
|
{{- $statusCode = int $statusString -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $statusRaw = $statusString -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if and (eq $statusErrorType "") (gt (len $deadInfo) 0) -}}
|
||||||
|
{{- with index $deadInfo "errorType" -}}
|
||||||
|
{{- $statusErrorType = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if gt $statusCode 0 -}}
|
||||||
|
{{- if lt $statusCode 400 -}}
|
||||||
|
{{- $statusTone = "ok" -}}
|
||||||
|
{{- $statusLabel = printf "OK %d" $statusCode -}}
|
||||||
|
{{- else if lt $statusCode 500 -}}
|
||||||
|
{{- $statusTone = "warn" -}}
|
||||||
|
{{- $statusLabel = printf "Erreur %d" $statusCode -}}
|
||||||
|
{{- $statusTitle = printf "Réponse HTTP %d lors de la dernière vérification" $statusCode -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $statusTone = "dead" -}}
|
||||||
|
{{- $statusLabel = printf "Erreur %d" $statusCode -}}
|
||||||
|
{{- $statusTitle = printf "Réponse HTTP %d lors de la dernière vérification" $statusCode -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- else if ne $statusRaw "" -}}
|
||||||
|
{{- $statusTone = "dead" -}}
|
||||||
|
{{- $statusLabel = "Erreur" -}}
|
||||||
|
{{- $statusTitle = printf "Erreur %s lors de la dernière vérification" (upper $statusRaw) -}}
|
||||||
|
{{- else if ne $statusErrorType "" -}}
|
||||||
|
{{- $statusTone = "dead" -}}
|
||||||
|
{{- $statusLabel = "Erreur" -}}
|
||||||
|
{{- $statusTitle = printf "Erreur %s lors de la dernière vérification" (upper $statusErrorType) -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if and (ne $statusTitle "") (ne $statusChecked "") -}}
|
||||||
|
{{- $statusTitle = printf "%s (vérifié le %s)" $statusTitle ((time $statusChecked) | time.Format "02/01/2006") -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- return dict
|
||||||
|
"Host" $host
|
||||||
|
"Code" $statusCode
|
||||||
|
"Raw" $statusRaw
|
||||||
|
"CheckedAt" $statusChecked
|
||||||
|
"ErrorType" $statusErrorType
|
||||||
|
"Tone" $statusTone
|
||||||
|
"Label" $statusLabel
|
||||||
|
"Title" $statusTitle
|
||||||
|
-}}
|
||||||
37
themes/2026/layouts/_partials/footer.html
Normal file
37
themes/2026/layouts/_partials/footer.html
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
<footer>
|
||||||
|
<nav aria-label="Navigation principale">
|
||||||
|
<ul>
|
||||||
|
{{- range site.Menus.main -}}
|
||||||
|
<li>
|
||||||
|
<h2>
|
||||||
|
{{- if .PageRef -}}
|
||||||
|
<a href="{{ .PageRef }}" title="{{ .Title }}">{{ .Name }}</a>
|
||||||
|
{{- else -}}
|
||||||
|
<span>{{ .Name }}</span>
|
||||||
|
{{- end -}}
|
||||||
|
</h2>
|
||||||
|
{{- if gt (len .Children) 0 -}}
|
||||||
|
<ul>
|
||||||
|
{{- range .Children -}}
|
||||||
|
<li>
|
||||||
|
{{- if .PageRef -}}
|
||||||
|
<a href="{{ .PageRef }}" title="{{ .Title }}">{{ .Name }}</a>
|
||||||
|
{{- else -}}
|
||||||
|
<span title="{{ .Title }}">{{ .Name }}</span>
|
||||||
|
{{- end -}}
|
||||||
|
</li>
|
||||||
|
{{- end -}}
|
||||||
|
</ul>
|
||||||
|
{{- end -}}
|
||||||
|
</li>
|
||||||
|
{{- end -}}
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
<p>
|
||||||
|
<span>{{ .Site.Copyright | safeHTML }}</span>
|
||||||
|
<span>
|
||||||
|
Sauf mention contraire, l'intégralité du contenu de ce site est disponible sous licence
|
||||||
|
<a href="https://creativecommons.org/licenses/by-nc-nd/4.0/deed.fr" title="Consulter la licence Creative Commons CC BY-NC-ND 4.0">CC BY-NC-ND</a>.
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
</footer>
|
||||||
14
themes/2026/layouts/_partials/head.html
Normal file
14
themes/2026/layouts/_partials/head.html
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>{{ if .IsHome }}{{ site.Title }}{{ else }}{{ printf "%s | %s" .Title site.Title }}{{ end }}</title>
|
||||||
|
{{ with .Description }}
|
||||||
|
<meta name="description" content="{{ . }}">
|
||||||
|
{{ else }}
|
||||||
|
{{ with site.Params.description }}
|
||||||
|
<meta name="description" content="{{ . }}">
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
<link rel="icon" href="{{ "favicon.ico" | absURL }}" type="image/x-icon">
|
||||||
|
<link rel="shortcut icon" href="{{ "favicon.ico" | absURL }}" type="image/x-icon">
|
||||||
|
<link rel="icon" href="{{ "favicon.png" | absURL }}" type="image/png" sizes="256x256">
|
||||||
|
{{ partialCached "head/css.html" . }}
|
||||||
9
themes/2026/layouts/_partials/head/css.html
Normal file
9
themes/2026/layouts/_partials/head/css.html
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{{- $mainCSS := resources.Get "css/index.css" | postCSS (dict "inlineImports" true) -}}
|
||||||
|
{{- $bundle := slice $mainCSS | resources.Concat "css/bundle.css" -}}
|
||||||
|
{{- if eq hugo.Environment "development" -}}
|
||||||
|
<link rel="stylesheet" href="{{ $bundle.RelPermalink }}" type="text/css">
|
||||||
|
{{- else -}}
|
||||||
|
{{- with $bundle | minify | fingerprint -}}
|
||||||
|
<link rel="stylesheet" href="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous" type="text/css">
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
3
themes/2026/layouts/_partials/header-brand.html
Normal file
3
themes/2026/layouts/_partials/header-brand.html
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<section>
|
||||||
|
{{ partialCached "site-title.html" (dict "Site" .) .Title (.Params.logo | default "logo-large.png") }}
|
||||||
|
</section>
|
||||||
14
themes/2026/layouts/_partials/hero-page.html
Normal file
14
themes/2026/layouts/_partials/hero-page.html
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<header>
|
||||||
|
{{ partialCached "header-brand.html" .Site .Site.Title (.Site.Params.logo | default "logo-large.png") }}
|
||||||
|
{{ partial "breadcrumbs.html" . }}
|
||||||
|
{{ partial "page-meta.html" . }}
|
||||||
|
<h1>{{ .Title }}</h1>
|
||||||
|
{{ with .Description }}
|
||||||
|
<p>{{ . }}</p>
|
||||||
|
{{ else }}
|
||||||
|
{{ with .Summary }}
|
||||||
|
<p>{{ . | plainify | truncate 220 }}</p>
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
{{ partial "page-links.html" . }}
|
||||||
|
</header>
|
||||||
5
themes/2026/layouts/_partials/hero-section.html
Normal file
5
themes/2026/layouts/_partials/hero-section.html
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<header>
|
||||||
|
{{ partialCached "header-brand.html" .Site .Site.Title (.Site.Params.logo | default "logo-large.png") }}
|
||||||
|
{{ partial "breadcrumbs.html" . }}
|
||||||
|
<h1>{{ .Title }}</h1>
|
||||||
|
</header>
|
||||||
3
themes/2026/layouts/_partials/hero.html
Normal file
3
themes/2026/layouts/_partials/hero.html
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<header>
|
||||||
|
{{ partialCached "header-brand.html" .Site .Site.Title (.Site.Params.logo | default "logo-large.png") }}
|
||||||
|
</header>
|
||||||
30
themes/2026/layouts/_partials/is-dossier-lead.html
Normal file
30
themes/2026/layouts/_partials/is-dossier-lead.html
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
{{- $page := . -}}
|
||||||
|
{{- $isLead := true -}}
|
||||||
|
{{- with $page.Params.dossier -}}
|
||||||
|
{{- $dossierID := index . 0 -}}
|
||||||
|
{{- if $dossierID -}}
|
||||||
|
{{- $group := where site.RegularPages "Params.dossier" "intersect" (slice $dossierID) -}}
|
||||||
|
{{- if gt (len $group) 1 -}}
|
||||||
|
{{- $weighted := slice -}}
|
||||||
|
{{- range $group -}}
|
||||||
|
{{- if isset .Params "weight" -}}
|
||||||
|
{{- $weighted = $weighted | append . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $candidates := $group -}}
|
||||||
|
{{- if gt (len $weighted) 0 -}}
|
||||||
|
{{- $sortedByWeight := sort $weighted "Weight" "asc" -}}
|
||||||
|
{{- $minWeight := (index $sortedByWeight 0).Weight -}}
|
||||||
|
{{- $candidates = where $sortedByWeight "Weight" $minWeight -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $sortedByDate := sort $candidates "Date" "asc" -}}
|
||||||
|
{{- $firstDate := (index $sortedByDate 0).Date -}}
|
||||||
|
{{- $sameDate := where $sortedByDate "Date" $firstDate -}}
|
||||||
|
{{- $firstPage := index (sort $sameDate "RelPermalink" "asc") 0 -}}
|
||||||
|
{{- $isLead = eq $firstPage.File.Path $page.File.Path -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if $isLead -}}true{{- end -}}
|
||||||
25
themes/2026/layouts/_partials/keywords.html
Normal file
25
themes/2026/layouts/_partials/keywords.html
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{{- $items := . -}}
|
||||||
|
{{- if gt (len $items) 0 -}}
|
||||||
|
<ul>
|
||||||
|
{{- $type := printf "%T" $items -}}
|
||||||
|
{{- $isTextList := hasPrefix $type "[]string" -}}
|
||||||
|
{{- if $isTextList -}}
|
||||||
|
{{- range sort $items -}}
|
||||||
|
<li>{{ . }}</li>
|
||||||
|
{{- end -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- range sort $items "Title" -}}
|
||||||
|
{{- $itemType := printf "%T" . -}}
|
||||||
|
{{- $isPage := or (strings.HasPrefix $itemType "*hugolib.") (strings.HasPrefix $itemType "page.") -}}
|
||||||
|
{{- if $isPage -}}
|
||||||
|
<li>
|
||||||
|
<a href="{{ .RelPermalink }}">{{ with .LinkTitle }}{{ . }}{{ else }}{{ .Title }}{{ end }}</a>
|
||||||
|
{{ with .Pages }}<sub>{{ len . }}</sub>{{ else }}<sub>0</sub>{{ end }}
|
||||||
|
</li>
|
||||||
|
{{- else -}}
|
||||||
|
<li>{{ . }}</li>
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
</ul>
|
||||||
|
{{- end -}}
|
||||||
76
themes/2026/layouts/_partials/liens-morts/report.html
Normal file
76
themes/2026/layouts/_partials/liens-morts/report.html
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
{{- $defaultReportPath := "tools/cache/external_links.yaml" -}}
|
||||||
|
{{- $reportPath := default $defaultReportPath .ReportPath -}}
|
||||||
|
{{- $report := default (dict) .Report -}}
|
||||||
|
{{- if or (eq (len $report) 0) (not (isset $report "links")) -}}
|
||||||
|
{{- if fileExists $reportPath -}}
|
||||||
|
{{- $report = transform.Unmarshal (readFile $reportPath) -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- warnf "Rapport des liens morts introuvable (%s)" $reportPath -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $allPages := where site.Pages ".File" "!=" nil -}}
|
||||||
|
{{- $links := default (slice) $report.links -}}
|
||||||
|
{{- $generatedLabel := "" -}}
|
||||||
|
{{- with $report.generatedAt -}}
|
||||||
|
{{- $generatedLabel = (time .).Format "02/01/2006" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt>Dernière mise à jour</dt>
|
||||||
|
<dd>{{ $generatedLabel }}</dd>
|
||||||
|
<dt>Liens morts détectés</dt>
|
||||||
|
<dd>{{ len $links }}</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>URL</th>
|
||||||
|
<th>Emplacements</th>
|
||||||
|
<th>Statut</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{{- range $links -}}
|
||||||
|
<tr>
|
||||||
|
<td><a href="{{ .url }}" rel="noreferrer noopener" target="_blank">{{ .url }}</a></td>
|
||||||
|
<td>
|
||||||
|
{{- $locations := default (slice) .locations -}}
|
||||||
|
{{- if gt (len $locations) 0 -}}
|
||||||
|
{{- range $locations -}}
|
||||||
|
{{- $file := .file -}}
|
||||||
|
{{- $line := .line -}}
|
||||||
|
{{- $pagePath := .page -}}
|
||||||
|
{{- $matchedPage := false -}}
|
||||||
|
{{- if $pagePath -}}
|
||||||
|
{{- $candidate := site.GetPage $pagePath -}}
|
||||||
|
{{- if $candidate -}}
|
||||||
|
{{- $matchedPage = $candidate -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if and (not $matchedPage) $file -}}
|
||||||
|
{{- $normalized := replaceRE "^content/" "" $file -}}
|
||||||
|
{{- $candidates := where $allPages "File.Path" $normalized -}}
|
||||||
|
{{- if gt (len $candidates) 0 -}}
|
||||||
|
{{- $matchedPage = index $candidates 0 -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if $matchedPage -}}
|
||||||
|
<a href="{{ $matchedPage.RelPermalink }}">{{ $matchedPage.Title }}</a>
|
||||||
|
{{- else if $file -}}
|
||||||
|
<code>{{ $file }}{{ if $line }}:{{ $line }}{{ end }}</code>
|
||||||
|
{{- else -}}
|
||||||
|
<em>Emplacement inconnu</em>
|
||||||
|
{{- end -}}
|
||||||
|
<br>
|
||||||
|
{{- end -}}
|
||||||
|
{{- else -}}
|
||||||
|
<em>Emplacements inconnus</em>
|
||||||
|
{{- end -}}
|
||||||
|
</td>
|
||||||
|
<td><code>{{ .status }}</code></td>
|
||||||
|
</tr>
|
||||||
|
{{- end -}}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
136
themes/2026/layouts/_partials/list-layout.html
Normal file
136
themes/2026/layouts/_partials/list-layout.html
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
{{- $pages := .Pages -}}
|
||||||
|
{{- $context := .Context -}}
|
||||||
|
{{- $spotlightTitle := default "À la une" .SpotlightTitle -}}
|
||||||
|
{{- $showInterestingLinksMeta := false -}}
|
||||||
|
{{- $excludeInterestingLinks := false -}}
|
||||||
|
{{- $groupBySubSections := false -}}
|
||||||
|
{{- $subSections := slice -}}
|
||||||
|
{{- $externalLinksReport := dict -}}
|
||||||
|
{{- if fileExists "tools/cache/external_links.yaml" -}}
|
||||||
|
{{- $externalLinksReport = transform.Unmarshal (readFile "tools/cache/external_links.yaml") -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- with $context -}}
|
||||||
|
{{- if eq (strings.TrimSuffix "/" .RelPermalink) "/interets" -}}
|
||||||
|
{{- $excludeInterestingLinks = true -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if and (eq .Kind "section") (gt (len .Sections) 0) -}}
|
||||||
|
{{- $groupBySubSections = true -}}
|
||||||
|
{{- range .Sections -}}
|
||||||
|
{{- $subSections = $subSections | append . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if eq .RelPermalink "/interets/liens-interessants/" -}}
|
||||||
|
{{- $showInterestingLinksMeta = true -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if $excludeInterestingLinks -}}
|
||||||
|
{{- $filteredPages := slice -}}
|
||||||
|
{{- range $pages -}}
|
||||||
|
{{- if not (strings.HasPrefix .RelPermalink "/interets/liens-interessants/") -}}
|
||||||
|
{{- $filteredPages = $filteredPages | append . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- $pages = $filteredPages -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- $spotlightPages := first 8 $pages -}}
|
||||||
|
{{- $spotlightPermalinks := slice -}}
|
||||||
|
{{- range $spotlightPages -}}
|
||||||
|
{{- $spotlightPermalinks = $spotlightPermalinks | append .RelPermalink -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- $remainingPages := $pages -}}
|
||||||
|
{{- if gt (len $spotlightPermalinks) 0 -}}
|
||||||
|
{{- $remainingPages = where $pages "RelPermalink" "not in" $spotlightPermalinks -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if gt (len $spotlightPages) 0 -}}
|
||||||
|
<section class="listing-spotlight">
|
||||||
|
<header>
|
||||||
|
<h2>{{ $spotlightTitle }}</h2>
|
||||||
|
</header>
|
||||||
|
{{ partial "spotlight-block.html" (dict
|
||||||
|
"Cards" $spotlightPages
|
||||||
|
"FeedPages" $spotlightPages
|
||||||
|
"ShowFeedTitle" false
|
||||||
|
"FeedRich" true
|
||||||
|
"ShowSection" true
|
||||||
|
"AsideFirst" false
|
||||||
|
) }}
|
||||||
|
</section>
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if gt (len $remainingPages) 0 -}}
|
||||||
|
{{- if and $groupBySubSections (gt (len $subSections) 0) -}}
|
||||||
|
{{- $groupedPermalinks := slice -}}
|
||||||
|
{{- $groupedSections := slice -}}
|
||||||
|
{{- range $subSections -}}
|
||||||
|
{{- $subSection := . -}}
|
||||||
|
{{- $subSectionPages := slice -}}
|
||||||
|
{{- range $remainingPages -}}
|
||||||
|
{{- if strings.HasPrefix .RelPermalink $subSection.RelPermalink -}}
|
||||||
|
{{- $subSectionPages = $subSectionPages | append . -}}
|
||||||
|
{{- $groupedPermalinks = $groupedPermalinks | append .RelPermalink -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if gt (len $subSectionPages) 0 -}}
|
||||||
|
{{- $latestDateKey := "00000000000000" -}}
|
||||||
|
{{- with index $subSectionPages 0 -}}
|
||||||
|
{{- $latestDateKey = .Date.Format "20060102150405" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- $groupedSections = $groupedSections | append (dict
|
||||||
|
"Section" $subSection
|
||||||
|
"Pages" $subSectionPages
|
||||||
|
"LatestDateKey" $latestDateKey
|
||||||
|
) -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- $groupedSections = sort $groupedSections "LatestDateKey" "desc" -}}
|
||||||
|
{{- range $groupedSections -}}
|
||||||
|
{{- $subSection := index . "Section" -}}
|
||||||
|
{{- $subSectionPages := index . "Pages" -}}
|
||||||
|
<section class="listing-articles">
|
||||||
|
<header>
|
||||||
|
<h2>{{ with $subSection.LinkTitle }}{{ . }}{{ else }}{{ $subSection.Title }}{{ end }}</h2>
|
||||||
|
</header>
|
||||||
|
{{ partial "articles-list.html" (dict
|
||||||
|
"Pages" $subSectionPages
|
||||||
|
"Context" $context
|
||||||
|
"ShowDossierBeforeTitle" true
|
||||||
|
"ShowInterestingLinksMeta" $showInterestingLinksMeta
|
||||||
|
"ExternalLinksReport" $externalLinksReport
|
||||||
|
) }}
|
||||||
|
</section>
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $ungroupedPages := $remainingPages -}}
|
||||||
|
{{- if gt (len $groupedPermalinks) 0 -}}
|
||||||
|
{{- $ungroupedPages = where $remainingPages "RelPermalink" "not in" $groupedPermalinks -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if gt (len $ungroupedPages) 0 -}}
|
||||||
|
<section class="listing-articles">
|
||||||
|
<header>
|
||||||
|
<h2>Autres articles</h2>
|
||||||
|
</header>
|
||||||
|
{{ partial "articles-list.html" (dict
|
||||||
|
"Pages" $ungroupedPages
|
||||||
|
"Context" $context
|
||||||
|
"ShowDossierBeforeTitle" true
|
||||||
|
"ShowInterestingLinksMeta" $showInterestingLinksMeta
|
||||||
|
"ExternalLinksReport" $externalLinksReport
|
||||||
|
) }}
|
||||||
|
</section>
|
||||||
|
{{- end -}}
|
||||||
|
{{- else -}}
|
||||||
|
<section class="listing-articles">
|
||||||
|
<header>
|
||||||
|
<h2>Tous les articles</h2>
|
||||||
|
</header>
|
||||||
|
{{ partial "articles-list.html" (dict
|
||||||
|
"Pages" $remainingPages
|
||||||
|
"Context" $context
|
||||||
|
"ShowDossierBeforeTitle" true
|
||||||
|
"ShowInterestingLinksMeta" $showInterestingLinksMeta
|
||||||
|
"ExternalLinksReport" $externalLinksReport
|
||||||
|
) }}
|
||||||
|
</section>
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
51
themes/2026/layouts/_partials/media/render-image.html
Normal file
51
themes/2026/layouts/_partials/media/render-image.html
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
{{- $imgPath := .Destination -}}
|
||||||
|
{{- $imgName := path.Base $imgPath | replaceRE "\\.[^.]+$" "" -}}
|
||||||
|
{{- $dataPath := printf "data/images/%s.yaml" $imgName -}}
|
||||||
|
{{- $dataFile := .Page.Resources.Get $dataPath -}}
|
||||||
|
{{- $data := dict -}}
|
||||||
|
{{- if $dataFile -}}
|
||||||
|
{{- $data = $dataFile.Content | transform.Unmarshal -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- $alt := .PlainText | default $data.title | default "" -}}
|
||||||
|
{{- $title := .Title | default $data.title | default .Page.Title -}}
|
||||||
|
{{- $description := $data.description | default "" -}}
|
||||||
|
{{- $image := .Page.Resources.GetMatch $imgPath -}}
|
||||||
|
{{- if not $image -}}
|
||||||
|
{{- return -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- $display := $image -}}
|
||||||
|
{{- if and (ne $display.MediaType.SubType "svg") (gt $display.Height 810) -}}
|
||||||
|
{{- $display = $image.Resize "x810" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- $metaTitle := index $data "title" -}}
|
||||||
|
{{- $hasMeta := or $metaTitle (or $description (or $data.attribution $data.prompt)) -}}
|
||||||
|
<figure class="figure-media{{ if $hasMeta }} figure-media-with-meta{{ else }} figure-media-without-meta{{ end }}">
|
||||||
|
<a href="{{ $image.RelPermalink }}" title="Cliquez pour agrandir l'image">
|
||||||
|
<img src="{{ $display.RelPermalink }}" alt="{{ $alt }}" title="{{ $title }}">
|
||||||
|
</a>
|
||||||
|
{{- if $hasMeta -}}
|
||||||
|
<figcaption class="figure-media-meta cover-meta">
|
||||||
|
<div class="figure-media-meta-main">
|
||||||
|
{{- with $metaTitle -}}
|
||||||
|
<p class="figure-title cover-title">{{ . | markdownify }}</p>
|
||||||
|
{{- end -}}
|
||||||
|
{{- with $description -}}
|
||||||
|
<p class="figure-description cover-description">{{ . | markdownify }}</p>
|
||||||
|
{{- end -}}
|
||||||
|
</div>
|
||||||
|
{{- if or $data.attribution $data.prompt -}}
|
||||||
|
<div class="figure-media-meta-extra">
|
||||||
|
{{- with $data.attribution -}}
|
||||||
|
<p class="figure-attribution cover-attribution"><strong>Attribution :</strong> <span>{{ . | markdownify }}</span></p>
|
||||||
|
{{- end -}}
|
||||||
|
{{- with $data.prompt -}}
|
||||||
|
<details>
|
||||||
|
<summary>Prompt</summary>
|
||||||
|
<p>{{ . | markdownify }}</p>
|
||||||
|
</details>
|
||||||
|
{{- end -}}
|
||||||
|
</div>
|
||||||
|
{{- end -}}
|
||||||
|
</figcaption>
|
||||||
|
{{- end -}}
|
||||||
|
</figure>
|
||||||
18
themes/2026/layouts/_partials/oeuvres/l-anankeisme.html
Normal file
18
themes/2026/layouts/_partials/oeuvres/l-anankeisme.html
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<section>
|
||||||
|
<article>
|
||||||
|
<figure>
|
||||||
|
{{- $assetPath := "images/oeuvres/l-anankeisme.png" -}}
|
||||||
|
{{- $source := resources.Get $assetPath -}}
|
||||||
|
{{- if $source -}}
|
||||||
|
{{- $img := $source.Resize "320x" -}}
|
||||||
|
<img src="{{ $img.RelPermalink }}" width="{{ $img.Width }}" height="{{ $img.Height }}" alt="Couverture de L'Anankéisme" loading="lazy">
|
||||||
|
{{- end -}}
|
||||||
|
</figure>
|
||||||
|
<h2>L'Anankéisme</h2>
|
||||||
|
<p><em>L'Anankéisme</em> propose un cadre axiomatique en dix propositions pour penser un déterminisme absolu, une vérité indépendante de toute cognition et une définition rigoureuse du vivant.</p>
|
||||||
|
<p>
|
||||||
|
<a class="ui-button" href="https://librairie.bod.fr/lanankeisme-richard-dern-9782322634903">Acheter le livre</a>
|
||||||
|
<a class="ui-button" href="https://anankeisme.fr/">Découvrir le site dédié à l'Anankéisme</a>
|
||||||
|
</p>
|
||||||
|
</article>
|
||||||
|
</section>
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
<section>
|
||||||
|
<article>
|
||||||
|
<figure>
|
||||||
|
{{- $assetPath := "images/oeuvres/l-humain-cette-espece-primitive.jpeg" -}}
|
||||||
|
{{- $source := resources.Get $assetPath -}}
|
||||||
|
{{- if $source -}}
|
||||||
|
{{- $img := $source.Resize "320x" -}}
|
||||||
|
<img src="{{ $img.RelPermalink }}" width="{{ $img.Width }}" height="{{ $img.Height }}" alt="Couverture de L'Humain, cette espèce primitive" loading="lazy">
|
||||||
|
{{- end -}}
|
||||||
|
</figure>
|
||||||
|
<h2>L'Humain, cette espèce primitive</h2>
|
||||||
|
<p><em>L'Humain, cette espèce primitive</em> est un essai dans lequel vous explorez plusieurs facettes de ce que nous appelons notre évolution, en adoptant la perspective de l'exploration spatiale.</p>
|
||||||
|
<p>
|
||||||
|
<a class="ui-button" href="https://www.amazon.fr/dp/B08VF4D2NT">Acheter la version numérique</a>
|
||||||
|
<a class="ui-button" href="/interets/philosophie/2023/05/18/lhumain-cette-espece-primitive-lhumain-cette-espece-primitive/">Lire le livre en ligne</a>
|
||||||
|
</p>
|
||||||
|
</article>
|
||||||
|
</section>
|
||||||
96
themes/2026/layouts/_partials/page-links.html
Normal file
96
themes/2026/layouts/_partials/page-links.html
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
{{- $page := . -}}
|
||||||
|
{{- $commentsURL := "" -}}
|
||||||
|
{{- $commentsLabel := "Commentaires" -}}
|
||||||
|
{{- $linkClass := "" -}}
|
||||||
|
{{- $linksParam := $page.Params.links -}}
|
||||||
|
|
||||||
|
{{- if reflect.IsMap . -}}
|
||||||
|
{{- if isset . "Page" -}}
|
||||||
|
{{- $page = index . "Page" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if isset . "CommentsURL" -}}
|
||||||
|
{{- with (index . "CommentsURL") -}}
|
||||||
|
{{- $commentsURL = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if isset . "CommentsLabel" -}}
|
||||||
|
{{- with (index . "CommentsLabel") -}}
|
||||||
|
{{- $commentsLabel = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if isset . "LinkClass" -}}
|
||||||
|
{{- with (index . "LinkClass") -}}
|
||||||
|
{{- $linkClass = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if isset . "Links" -}}
|
||||||
|
{{- $linksParam = index . "Links" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $links := slice -}}
|
||||||
|
{{- if $linksParam -}}
|
||||||
|
{{- $type := printf "%T" $linksParam -}}
|
||||||
|
{{- if hasPrefix $type "[]" -}}
|
||||||
|
{{- $links = $linksParam -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $links = slice $linksParam -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $hasWikipediaLink := false -}}
|
||||||
|
{{- range $links -}}
|
||||||
|
{{- if and (not $hasWikipediaLink) (and .url (in .url "wikipedia.org")) -}}
|
||||||
|
{{- $hasWikipediaLink = true -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $addWikiLink := false -}}
|
||||||
|
{{- if and (eq $page.Kind "term") (not $hasWikipediaLink) -}}
|
||||||
|
{{- $addWikiLink = true -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if or (ne $commentsURL "") (gt (len $links) 0) $addWikiLink -}}
|
||||||
|
<nav class="page-links" aria-label="Liens associés">
|
||||||
|
<ul>
|
||||||
|
{{- with $commentsURL -}}
|
||||||
|
<li>
|
||||||
|
{{- partial "render/link.html" (dict
|
||||||
|
"Destination" .
|
||||||
|
"Title" "Voir les commentaires"
|
||||||
|
"Text" $commentsLabel
|
||||||
|
"Class" $linkClass
|
||||||
|
"Page" $page
|
||||||
|
) -}}
|
||||||
|
</li>
|
||||||
|
{{- end -}}
|
||||||
|
{{- range $links -}}
|
||||||
|
{{- $text := default .name .text -}}
|
||||||
|
{{- $title := default $text .title -}}
|
||||||
|
<li>
|
||||||
|
{{- partial "render/link.html" (dict
|
||||||
|
"Destination" .url
|
||||||
|
"Title" $title
|
||||||
|
"Text" $text
|
||||||
|
"Class" $linkClass
|
||||||
|
"Page" $page
|
||||||
|
) -}}
|
||||||
|
</li>
|
||||||
|
{{- end -}}
|
||||||
|
{{- if $addWikiLink -}}
|
||||||
|
{{- $lang := default "fr" $page.Site.Language.Lang -}}
|
||||||
|
{{- $query := urlquery $page.Title -}}
|
||||||
|
{{- $searchUrl := printf "https://%s.wikipedia.org/w/index.php?search=%s" $lang $query -}}
|
||||||
|
<li>
|
||||||
|
{{- partial "render/link.html" (dict
|
||||||
|
"Destination" $searchUrl
|
||||||
|
"Title" (printf "Rechercher %s sur Wikipédia" $page.Title)
|
||||||
|
"Text" (printf "Rechercher %s sur Wikipédia" $page.Title)
|
||||||
|
"Class" $linkClass
|
||||||
|
"Page" $page
|
||||||
|
) -}}
|
||||||
|
</li>
|
||||||
|
{{- end -}}
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
{{- end -}}
|
||||||
8
themes/2026/layouts/_partials/page-meta.html
Normal file
8
themes/2026/layouts/_partials/page-meta.html
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<p>
|
||||||
|
{{ with .Date }}
|
||||||
|
<time datetime="{{ . }}">{{ . | time.Format "02/01/2006" }}</time>
|
||||||
|
{{ end }}
|
||||||
|
{{ if ge .ReadingTime 5 }}
|
||||||
|
<span>{{ .ReadingTime }} min de lecture</span>
|
||||||
|
{{ end }}
|
||||||
|
</p>
|
||||||
115
themes/2026/layouts/_partials/render/link.html
Normal file
115
themes/2026/layouts/_partials/render/link.html
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
{{- $isExternal := strings.HasPrefix .Destination "http" -}}
|
||||||
|
{{- $parsed := urls.Parse .Destination -}}
|
||||||
|
{{- $host := $parsed.Host -}}
|
||||||
|
{{- $path := $parsed.Path -}}
|
||||||
|
{{- $query := $parsed.RawQuery -}}
|
||||||
|
{{- $page := .Page -}}
|
||||||
|
{{- $site := $page.Site -}}
|
||||||
|
{{- $aff := index $site.Data.affiliates.sites $host -}}
|
||||||
|
{{- $isAffiliated := false -}}
|
||||||
|
{{- $newURL := .Destination -}}
|
||||||
|
{{- $customClass := "" -}}
|
||||||
|
|
||||||
|
{{- if reflect.IsMap . -}}
|
||||||
|
{{- if isset . "Class" -}}
|
||||||
|
{{- with (index . "Class") -}}
|
||||||
|
{{- $customClass = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if and $isExternal $aff -}}
|
||||||
|
{{- $isAffiliated = true -}}
|
||||||
|
{{- if $query -}}
|
||||||
|
{{- $newURL = printf "%s://%s%s?%s&%s=%s" $parsed.Scheme $host $path $query $aff.param $aff.value -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $newURL = printf "%s://%s%s?%s=%s" $parsed.Scheme $host $path $aff.param $aff.value -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $internalPage := "" -}}
|
||||||
|
{{- $internalPageFound := false -}}
|
||||||
|
{{- if not $isExternal -}}
|
||||||
|
{{- if strings.HasPrefix .Destination "/" -}}
|
||||||
|
{{- with $site.GetPage .Destination -}}
|
||||||
|
{{- $internalPage = . -}}
|
||||||
|
{{- $internalPageFound = true -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- else if and $path (ne $path "") -}}
|
||||||
|
{{- with $page.GetPage $path -}}
|
||||||
|
{{- $internalPage = . -}}
|
||||||
|
{{- $internalPageFound = true -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if and (not $internalPageFound) $path (ne $path "") -}}
|
||||||
|
{{- with $site.GetPage $path -}}
|
||||||
|
{{- $internalPage = . -}}
|
||||||
|
{{- $internalPageFound = true -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $report := dict -}}
|
||||||
|
{{- if fileExists "tools/cache/external_links.yaml" -}}
|
||||||
|
{{- $report = transform.Unmarshal (readFile "tools/cache/external_links.yaml") -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- $deadList := default (slice) (index $report "links") -}}
|
||||||
|
{{- $entriesMap := default (dict) (index $report "entries") -}}
|
||||||
|
{{- $cacheEntry := index $entriesMap .Destination -}}
|
||||||
|
{{- $deadInfo := dict -}}
|
||||||
|
{{- $isDeadLink := false -}}
|
||||||
|
{{- with (first 1 (where $deadList "url" .Destination)) -}}
|
||||||
|
{{- $deadInfo = index . 0 -}}
|
||||||
|
{{- $isDeadLink = true -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $titleParts := slice -}}
|
||||||
|
{{- if $isAffiliated -}}
|
||||||
|
{{- $titleParts = $titleParts | append "Lien affilié" -}}
|
||||||
|
{{- else if $isExternal -}}
|
||||||
|
{{- $titleParts = $titleParts | append "Lien externe" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if and (not $isExternal) $internalPageFound -}}
|
||||||
|
{{- $internalTitle := $internalPage.LinkTitle | default $internalPage.Title -}}
|
||||||
|
{{- with $internalPage.Date -}}
|
||||||
|
{{- $internalTitle = printf "%s (%s)" $internalTitle (. | time.Format "02/01/2006") -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- $titleParts = $titleParts | append $internalTitle -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- with .Title -}}
|
||||||
|
{{- $titleParts = $titleParts | append . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if $isDeadLink -}}
|
||||||
|
{{- $deadDetails := slice -}}
|
||||||
|
{{- with (index $cacheEntry "checkedAt") -}}
|
||||||
|
{{- $deadDetails = $deadDetails | append (printf "inaccessible depuis le %s" (time.Format "02/01/2006" (time .))) -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- with (index $cacheEntry "errorType") -}}
|
||||||
|
{{- $deadDetails = $deadDetails | append (printf "raison %s" .) -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- with (index $deadInfo "status") -}}
|
||||||
|
{{- $deadDetails = $deadDetails | append (printf "statut %v" .) -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if gt (len $deadDetails) 0 -}}
|
||||||
|
{{- $titleParts = $titleParts | append (printf "(%s)" (delimit $deadDetails " ; ")) -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $titleValue := delimit $titleParts " - " -}}
|
||||||
|
{{- $linkClasses := slice -}}
|
||||||
|
{{- if $isExternal -}}
|
||||||
|
{{- $linkClasses = $linkClasses | append "link-external" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if $isAffiliated -}}
|
||||||
|
{{- $linkClasses = $linkClasses | append "link-affiliated" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- with $customClass -}}
|
||||||
|
{{- range (split . " ") -}}
|
||||||
|
{{- if ne . "" -}}
|
||||||
|
{{- $linkClasses = $linkClasses | append . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- $classValue := delimit $linkClasses " " -}}
|
||||||
|
<a href="{{- $newURL -}}"{{ with $classValue }} class="{{- . -}}"{{ end }}{{ with $titleValue }} title="{{- . -}}"{{ end }}{{ if $isExternal }} rel="noreferrer noopener"{{ end }}>{{- strings.TrimSpace .Text | safeHTML -}}</a>{{- "" -}}
|
||||||
81
themes/2026/layouts/_partials/render/weather.html
Normal file
81
themes/2026/layouts/_partials/render/weather.html
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
{{- $w := .Params.weather -}}
|
||||||
|
{{- if or (not $w) (eq (len $w) 0) -}}
|
||||||
|
{{- return -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $date := .Date -}}
|
||||||
|
{{- $hour := (time $date).Hour -}}
|
||||||
|
{{- $isNight := false -}}
|
||||||
|
{{- if or (lt $hour 6) (ge $hour 18) -}}
|
||||||
|
{{- $isNight = true -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $precip := $w.precipitations -}}
|
||||||
|
{{- $wind := $w.wind_speed -}}
|
||||||
|
{{- $humidity := $w.humidity -}}
|
||||||
|
{{- $illum := $w.illuminance -}}
|
||||||
|
|
||||||
|
{{- $icon := "clear-day.svg" -}}
|
||||||
|
{{- if $isNight -}}
|
||||||
|
{{- $icon = "clear-night.svg" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if $precip -}}
|
||||||
|
{{- $icon = "rain.svg" -}}
|
||||||
|
{{- else if and $wind (ge $wind 45) -}}
|
||||||
|
{{- $icon = "wind.svg" -}}
|
||||||
|
{{- else if and $humidity (ge $humidity 90) (or (not $illum) (lt $illum 80)) -}}
|
||||||
|
{{- $icon = "fog.svg" -}}
|
||||||
|
{{- else if and $humidity (ge $humidity 75) -}}
|
||||||
|
{{- if $isNight -}}
|
||||||
|
{{- $icon = "partly-cloudy-night.svg" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $icon = "cloudy.svg" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $label := "Météo" -}}
|
||||||
|
{{- if eq $icon "clear-day.svg" -}}{{- $label = "Grand soleil" -}}{{- end -}}
|
||||||
|
{{- if eq $icon "clear-night.svg" -}}{{- $label = "Ciel dégagé" -}}{{- end -}}
|
||||||
|
{{- if eq $icon "partly-cloudy-day.svg" -}}{{- $label = "Partiellement nuageux" -}}{{- end -}}
|
||||||
|
{{- if eq $icon "partly-cloudy-night.svg" -}}{{- $label = "Partiellement nuageux" -}}{{- end -}}
|
||||||
|
{{- if eq $icon "cloudy.svg" -}}{{- $label = "Nuageux" -}}{{- end -}}
|
||||||
|
{{- if eq $icon "drizzle.svg" -}}{{- $label = "Bruine" -}}{{- end -}}
|
||||||
|
{{- if eq $icon "rain.svg" -}}{{- $label = "Pluvieux" -}}{{- end -}}
|
||||||
|
{{- if eq $icon "snow.svg" -}}{{- $label = "Neige" -}}{{- end -}}
|
||||||
|
{{- if eq $icon "thunderstorms-day.svg" -}}{{- $label = "Orage" -}}{{- end -}}
|
||||||
|
{{- if eq $icon "fog.svg" -}}{{- $label = "Brouillard" -}}{{- end -}}
|
||||||
|
{{- if eq $icon "wind.svg" -}}{{- $label = "Vent fort" -}}{{- end -}}
|
||||||
|
|
||||||
|
{{- $sources := slice -}}
|
||||||
|
{{- with $w.source -}}
|
||||||
|
{{- if reflect.IsSlice . -}}
|
||||||
|
{{- $sources = . -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $sources = slice . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<h2>Météo observée</h2>
|
||||||
|
<p>
|
||||||
|
<img src="/icons/weather/{{ $icon }}" alt="{{ $label }}" title="{{ $label }}" loading="lazy">
|
||||||
|
<strong>{{ printf "%s à %s" (time.Format "02/01/2006" $date) (time.Format ":time_short" $date) }}</strong>
|
||||||
|
</p>
|
||||||
|
<dl>
|
||||||
|
{{- with $w.temperature -}}<div><dt>Température</dt><dd>{{ printf "%.1f" (mul . 1.0) }} °C</dd></div>{{- end -}}
|
||||||
|
{{- with $w.humidity -}}<div><dt>Humidité</dt><dd>{{ printf "%.0f" (mul . 1.0) }} %</dd></div>{{- end -}}
|
||||||
|
{{- with $w.pressure -}}<div><dt>Pression</dt><dd>{{ printf "%.0f" (mul . 1.0) }} hPa</dd></div>{{- end -}}
|
||||||
|
{{- with $w.illuminance -}}<div><dt>Luminosité</dt><dd>{{ printf "%.0f" (mul . 1.0) }} lx</dd></div>{{- end -}}
|
||||||
|
{{- with $w.wind_speed -}}<div><dt>Vent</dt><dd>{{ printf "%.1f" (mul . 1.0) }} km/h</dd></div>{{- end -}}
|
||||||
|
{{- with $w.wind_direction -}}<div><dt>Direction</dt><dd>{{ printf "%.0f" (mul . 1.0) }}°</dd></div>{{- end -}}
|
||||||
|
</dl>
|
||||||
|
{{- if gt (len $sources) 0 -}}
|
||||||
|
<p>
|
||||||
|
Sources:
|
||||||
|
{{- range $i, $source := $sources -}}
|
||||||
|
{{- if gt $i 0 -}}, {{- end -}}{{ $source }}
|
||||||
|
{{- end -}}
|
||||||
|
</p>
|
||||||
|
{{- end -}}
|
||||||
|
</section>
|
||||||
17
themes/2026/layouts/_partials/site-stats.html
Normal file
17
themes/2026/layouts/_partials/site-stats.html
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{{- $allSections := where .Site.Pages "Kind" "section" -}}
|
||||||
|
{{- $allSections = where $allSections "RelPermalink" "!=" "/" -}}
|
||||||
|
{{- $leafSections := slice -}}
|
||||||
|
{{- range $allSections -}}
|
||||||
|
{{- if eq (len .Sections) 0 -}}
|
||||||
|
{{- $leafSections = $leafSections | append . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- $lastMod := .Site.Lastmod | time.Format "02/01/2006" -}}
|
||||||
|
<section class="site-stats">
|
||||||
|
<h2>Statistiques</h2>
|
||||||
|
<ul>
|
||||||
|
<li><span>Articles publiés</span><strong>{{ len .Site.RegularPages }}</strong></li>
|
||||||
|
<li><span>Thématiques</span><strong>{{ len $leafSections }}</strong></li>
|
||||||
|
<li><span>Dernière mise à jour</span><strong>{{ $lastMod }}</strong></li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
13
themes/2026/layouts/_partials/site-title.html
Normal file
13
themes/2026/layouts/_partials/site-title.html
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{{- $site := .Site -}}
|
||||||
|
{{- if not $site -}}
|
||||||
|
{{- $site = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- $logoPath := $site.Params.logo | default "logo-large.png" -}}
|
||||||
|
{{- $logo := resources.GetMatch $logoPath -}}
|
||||||
|
<a href="{{ "/" | relURL }}" aria-label="Revenir à l'accueil">
|
||||||
|
{{- with $logo -}}
|
||||||
|
{{- $resized := .Resize "64x" -}}
|
||||||
|
<img src="{{ $resized.RelPermalink }}" alt="">
|
||||||
|
{{- end -}}
|
||||||
|
<strong>{{ $site.Title }}</strong>
|
||||||
|
</a>
|
||||||
38
themes/2026/layouts/_partials/spotlight-block.html
Normal file
38
themes/2026/layouts/_partials/spotlight-block.html
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
{{- $cards := slice -}}
|
||||||
|
{{- with .Cards -}}
|
||||||
|
{{- $cards = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $feedPages := slice -}}
|
||||||
|
{{- with .FeedPages -}}
|
||||||
|
{{- $feedPages = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $asideFirst := false -}}
|
||||||
|
{{- with .AsideFirst -}}
|
||||||
|
{{- $asideFirst = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $showSection := false -}}
|
||||||
|
{{- with .ShowSection -}}
|
||||||
|
{{- $showSection = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $spotlightClass := "spotlight" -}}
|
||||||
|
{{- if $asideFirst -}}
|
||||||
|
{{- $spotlightClass = printf "%s spotlight-aside-first" $spotlightClass -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
<div class="spotlight-block {{ $spotlightClass }}">
|
||||||
|
{{- if and $asideFirst (gt (len $feedPages) 0) -}}
|
||||||
|
{{ partial "spotlight-feed.html" . }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- range $cards -}}
|
||||||
|
{{ partial "card.html" (dict "Page" . "ShowSection" $showSection "LinkSection" false "ShowMeta" false "ThumbnailSize" "spotlight") }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if and (not $asideFirst) (gt (len $feedPages) 0) -}}
|
||||||
|
{{ partial "spotlight-feed.html" . }}
|
||||||
|
{{- end -}}
|
||||||
|
</div>
|
||||||
85
themes/2026/layouts/_partials/spotlight-feed.html
Normal file
85
themes/2026/layouts/_partials/spotlight-feed.html
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
{{- $feedTitle := "Fil" -}}
|
||||||
|
{{- with .FeedTitle -}}
|
||||||
|
{{- $feedTitle = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $showFeedTitle := true -}}
|
||||||
|
{{- if isset . "ShowFeedTitle" -}}
|
||||||
|
{{- $showFeedTitle = index . "ShowFeedTitle" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $feedPages := slice -}}
|
||||||
|
{{- with .FeedPages -}}
|
||||||
|
{{- $feedPages = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $feedRich := false -}}
|
||||||
|
{{- with .FeedRich -}}
|
||||||
|
{{- $feedRich = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $showSection := false -}}
|
||||||
|
{{- with .ShowSection -}}
|
||||||
|
{{- $showSection = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
<aside class="spotlight-feed">
|
||||||
|
{{- if $showFeedTitle -}}
|
||||||
|
<h3>{{ $feedTitle }}</h3>
|
||||||
|
{{- end -}}
|
||||||
|
<ol>
|
||||||
|
{{- range $feedPages -}}
|
||||||
|
<li>
|
||||||
|
{{- if $feedRich -}}
|
||||||
|
<a href="{{ .RelPermalink }}">
|
||||||
|
<span>{{ .Title }}</span>
|
||||||
|
<span>
|
||||||
|
{{- with .Date -}}
|
||||||
|
<time datetime="{{ . }}">{{ . | time.Format "02/01/2006" }}</time>
|
||||||
|
{{- end -}}
|
||||||
|
{{- if $showSection -}}
|
||||||
|
{{- with .Parent -}}
|
||||||
|
<span>·</span>
|
||||||
|
<span>{{ with .LinkTitle }}{{ . }}{{ else }}{{ .Title }}{{ end }}</span>
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- with .Params.dossier -}}
|
||||||
|
{{- with index . 0 -}}
|
||||||
|
<span>·</span>
|
||||||
|
<strong>{{ . }}</strong>
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if and (not .IsSection) (ge .ReadingTime 5) -}}
|
||||||
|
<span>·</span>
|
||||||
|
<span>{{ .ReadingTime }} min</span>
|
||||||
|
{{- end -}}
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
{{- else -}}
|
||||||
|
<a href="{{ .RelPermalink }}">{{ .Title }}</a>
|
||||||
|
<p>
|
||||||
|
{{- with .Date -}}
|
||||||
|
<time datetime="{{ . }}">{{ . | time.Format "02/01/2006" }}</time>
|
||||||
|
{{- end -}}
|
||||||
|
{{- if $showSection -}}
|
||||||
|
{{- with .Parent -}}
|
||||||
|
<span>·</span>
|
||||||
|
<span>{{ with .LinkTitle }}{{ . }}{{ else }}{{ .Title }}{{ end }}</span>
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- with .Params.dossier -}}
|
||||||
|
{{- with index . 0 -}}
|
||||||
|
<span>·</span>
|
||||||
|
<strong>{{ . }}</strong>
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if and (not .IsSection) (ge .ReadingTime 5) -}}
|
||||||
|
<span>·</span>
|
||||||
|
<span>{{ .ReadingTime }} min</span>
|
||||||
|
{{- end -}}
|
||||||
|
</p>
|
||||||
|
{{- end -}}
|
||||||
|
</li>
|
||||||
|
{{- end -}}
|
||||||
|
</ol>
|
||||||
|
</aside>
|
||||||
14
themes/2026/layouts/_partials/terms.html
Normal file
14
themes/2026/layouts/_partials/terms.html
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{{- $page := .page -}}
|
||||||
|
{{- $taxonomy := .taxonomy -}}
|
||||||
|
|
||||||
|
{{- with $page.GetTerms $taxonomy -}}
|
||||||
|
{{- $label := (index . 0).Parent.LinkTitle -}}
|
||||||
|
<section>
|
||||||
|
<h3>{{ $label }}</h3>
|
||||||
|
<ul>
|
||||||
|
{{- range . -}}
|
||||||
|
<li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li>
|
||||||
|
{{- end -}}
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
{{- end -}}
|
||||||
78
themes/2026/layouts/_partials/timeline-list.html
Normal file
78
themes/2026/layouts/_partials/timeline-list.html
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
{{- $pages := .Pages -}}
|
||||||
|
{{- if gt (len $pages) 0 -}}
|
||||||
|
<section class="listing-timeline">
|
||||||
|
<header>
|
||||||
|
<h2>Chronologie</h2>
|
||||||
|
</header>
|
||||||
|
<ol>
|
||||||
|
{{- range $pages -}}
|
||||||
|
{{- $page := . -}}
|
||||||
|
{{- $coverPath := $page.Params.cover -}}
|
||||||
|
{{- $image := false -}}
|
||||||
|
{{- if $coverPath -}}
|
||||||
|
{{- if strings.HasSuffix $coverPath ".yaml" -}}
|
||||||
|
{{- $coverAbsPath := printf "%s%s" $page.File.Dir $coverPath -}}
|
||||||
|
{{- $coverRaw := readFile $coverAbsPath -}}
|
||||||
|
{{- $coverData := $coverRaw | transform.Unmarshal -}}
|
||||||
|
{{- with $coverData.file -}}
|
||||||
|
{{- $image = $page.Resources.GetMatch . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $image = $page.Resources.GetMatch $coverPath -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $dossierTitle := "" -}}
|
||||||
|
{{- $dossierFirstPage := false -}}
|
||||||
|
{{- with $page.Params.dossier -}}
|
||||||
|
{{- with index . 0 -}}
|
||||||
|
{{- $dossierTitle = . -}}
|
||||||
|
{{- $dossierFirstPage = partial "dossier-first-page.html" $page -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<article>
|
||||||
|
{{- with $image -}}
|
||||||
|
<a href="{{ $page.RelPermalink }}">
|
||||||
|
<figure>
|
||||||
|
{{- $resized := .Fill "600x340" -}}
|
||||||
|
<img src="{{ $resized.RelPermalink }}" alt="Image de couverture pour {{ $page.Title }}" loading="lazy">
|
||||||
|
</figure>
|
||||||
|
</a>
|
||||||
|
{{- end -}}
|
||||||
|
<div>
|
||||||
|
<header>
|
||||||
|
<p>
|
||||||
|
{{- with $page.Date -}}
|
||||||
|
<time datetime="{{ . }}">{{ . | time.Format "02/01/2006" }}</time>
|
||||||
|
{{- end -}}
|
||||||
|
</p>
|
||||||
|
{{- with $dossierFirstPage -}}
|
||||||
|
{{- with $dossierTitle -}}
|
||||||
|
<p><a href="{{ $dossierFirstPage.RelPermalink }}">{{ $dossierTitle }}</a></p>
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
<h3><a href="{{ $page.RelPermalink }}">{{ $page.Title }}</a></h3>
|
||||||
|
</header>
|
||||||
|
{{- with $page.Summary -}}
|
||||||
|
<p>{{ . | plainify | truncate 240 }}</p>
|
||||||
|
{{- end -}}
|
||||||
|
<footer>
|
||||||
|
<p>
|
||||||
|
{{- with $page.Parent -}}
|
||||||
|
<a href="{{ .RelPermalink }}">{{ with .LinkTitle }}{{ . }}{{ else }}{{ .Title }}{{ end }}</a>
|
||||||
|
{{- end -}}
|
||||||
|
{{- if and $page.Parent (ge $page.ReadingTime 5) -}}<span>·</span>{{- end -}}
|
||||||
|
{{- if ge $page.ReadingTime 5 -}}
|
||||||
|
<span>{{ $page.ReadingTime }} min</span>
|
||||||
|
{{- end -}}
|
||||||
|
</p>
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
</li>
|
||||||
|
{{- end -}}
|
||||||
|
</ol>
|
||||||
|
</section>
|
||||||
|
{{- end -}}
|
||||||
34
themes/2026/layouts/_shortcodes/extimage.html
Normal file
34
themes/2026/layouts/_shortcodes/extimage.html
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{{- $imageURL := .Get 0 -}}
|
||||||
|
{{- $title := .Get 2 | default "" -}}
|
||||||
|
{{- $description := .Get 3 | default "" -}}
|
||||||
|
{{- $attribution := .Get 4 | default "" -}}
|
||||||
|
{{- $remoteURL := printf "%s?raw=true" $imageURL -}}
|
||||||
|
{{- $remoteImage := resources.GetRemote $remoteURL -}}
|
||||||
|
{{- $hash := md5 $remoteURL -}}
|
||||||
|
{{- $extension := path.Ext $remoteURL -}}
|
||||||
|
{{- $cleanFilename := printf "%s%s" $hash $extension | replace "?raw=true" "" -}}
|
||||||
|
{{- $localImage := $remoteImage | resources.Copy (printf "remote-images/%s" $cleanFilename) -}}
|
||||||
|
{{- $resizedImage := $localImage.Resize "1024x" -}}
|
||||||
|
{{- $hasMeta := or $title (or $description $attribution) -}}
|
||||||
|
<figure class="figure-media{{ if $hasMeta }} figure-media-with-meta{{ else }} figure-media-without-meta{{ end }}">
|
||||||
|
<a href="{{ $localImage.RelPermalink }}" title="Cliquez pour agrandir l'image">
|
||||||
|
<img src="{{ $resizedImage.RelPermalink }}" alt="{{ $title }}" title="{{ $title }}">
|
||||||
|
</a>
|
||||||
|
{{- if $hasMeta -}}
|
||||||
|
<figcaption class="figure-media-meta cover-meta">
|
||||||
|
<div class="figure-media-meta-main">
|
||||||
|
{{- with $title -}}
|
||||||
|
<p class="figure-title cover-title">{{ . | markdownify }}</p>
|
||||||
|
{{- end -}}
|
||||||
|
{{- with $description -}}
|
||||||
|
<p class="figure-description cover-description">{{ . | markdownify }}</p>
|
||||||
|
{{- end -}}
|
||||||
|
</div>
|
||||||
|
{{- with $attribution -}}
|
||||||
|
<div class="figure-media-meta-extra">
|
||||||
|
<p class="figure-attribution cover-attribution"><strong>Attribution :</strong> <span>{{ . | markdownify }}</span></p>
|
||||||
|
</div>
|
||||||
|
{{- end -}}
|
||||||
|
</figcaption>
|
||||||
|
{{- end -}}
|
||||||
|
</figure>
|
||||||
21
themes/2026/layouts/_shortcodes/sound.html
Normal file
21
themes/2026/layouts/_shortcodes/sound.html
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{{- $soundData := .Get 0 -}}
|
||||||
|
{{- $dataFile := .Page.Resources.Get (printf "data/sounds/%s.yaml" $soundData) -}}
|
||||||
|
{{- if $dataFile -}}
|
||||||
|
{{- $data := $dataFile.Content | transform.Unmarshal -}}
|
||||||
|
{{- $audio := .Page.Resources.Get $data.file -}}
|
||||||
|
{{- if $audio -}}
|
||||||
|
<figure>
|
||||||
|
<audio controls preload="metadata">
|
||||||
|
<source src="{{ $audio.RelPermalink }}">
|
||||||
|
Votre navigateur ne prend pas en charge la lecture audio.
|
||||||
|
</audio>
|
||||||
|
{{- if or $data.title (or $data.description $data.attribution) -}}
|
||||||
|
<figcaption>
|
||||||
|
{{- with $data.title -}}<p><strong>{{ . }}</strong></p>{{- end -}}
|
||||||
|
{{- with $data.description -}}<p>{{ . | markdownify }}</p>{{- end -}}
|
||||||
|
{{- with $data.attribution -}}<p><strong>Attribution :</strong> <em>{{ . | markdownify }}</em></p>{{- end -}}
|
||||||
|
</figcaption>
|
||||||
|
{{- end -}}
|
||||||
|
</figure>
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
40
themes/2026/layouts/_shortcodes/video.html
Normal file
40
themes/2026/layouts/_shortcodes/video.html
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
{{- $videoData := .Get 0 -}}
|
||||||
|
{{- $dataFile := .Page.Resources.Get (printf "data/videos/%s.yaml" $videoData) -}}
|
||||||
|
{{- if $dataFile -}}
|
||||||
|
{{- $data := $dataFile.Content | transform.Unmarshal -}}
|
||||||
|
{{- $video := .Page.Resources.Get $data.file -}}
|
||||||
|
{{- if $video -}}
|
||||||
|
{{- $hasMeta := or $data.title (or $data.description (or $data.attribution $data.prompt)) -}}
|
||||||
|
<figure class="figure-media{{ if $hasMeta }} figure-media-with-meta{{ else }} figure-media-without-meta{{ end }}">
|
||||||
|
<video controls preload="metadata" width="100%">
|
||||||
|
<source src="{{ $video.RelPermalink }}" type="video/mp4">
|
||||||
|
Votre navigateur ne prend pas en charge la lecture des videos.
|
||||||
|
</video>
|
||||||
|
{{- if $hasMeta -}}
|
||||||
|
<figcaption class="figure-media-meta cover-meta">
|
||||||
|
<div class="figure-media-meta-main">
|
||||||
|
{{- with $data.title -}}
|
||||||
|
<p class="figure-title cover-title">{{ . | markdownify }}</p>
|
||||||
|
{{- end -}}
|
||||||
|
{{- with $data.description -}}
|
||||||
|
<p class="figure-description cover-description">{{ . | markdownify }}</p>
|
||||||
|
{{- end -}}
|
||||||
|
</div>
|
||||||
|
{{- if or $data.attribution $data.prompt -}}
|
||||||
|
<div class="figure-media-meta-extra">
|
||||||
|
{{- with $data.attribution -}}
|
||||||
|
<p class="figure-attribution cover-attribution"><strong>Attribution :</strong> <span>{{ . | markdownify }}</span></p>
|
||||||
|
{{- end -}}
|
||||||
|
{{- with $data.prompt -}}
|
||||||
|
<details>
|
||||||
|
<summary>Prompt</summary>
|
||||||
|
<p>{{ . | markdownify }}</p>
|
||||||
|
</details>
|
||||||
|
{{- end -}}
|
||||||
|
</div>
|
||||||
|
{{- end -}}
|
||||||
|
</figcaption>
|
||||||
|
{{- end -}}
|
||||||
|
</figure>
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
10
themes/2026/layouts/baseof.html
Normal file
10
themes/2026/layouts/baseof.html
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="{{ site.Language.LanguageCode }}" dir="{{ or site.Language.LanguageDirection `ltr` }}">
|
||||||
|
<head>
|
||||||
|
{{ partial "head.html" . }}
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
{{ block "main" . }}{{ end }}
|
||||||
|
{{ partial "footer.html" . }}
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
23
themes/2026/layouts/contact/single.html
Normal file
23
themes/2026/layouts/contact/single.html
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{{ define "main" }}
|
||||||
|
{{ partial "article-header.html" . }}
|
||||||
|
<main>
|
||||||
|
<article>
|
||||||
|
{{ .Content }}
|
||||||
|
|
||||||
|
{{- with .Params.oeuvres -}}
|
||||||
|
<section class="article-books">
|
||||||
|
<header>
|
||||||
|
<h2>Mes livres</h2>
|
||||||
|
<p>Si vous aimez ce blog, vous apprécierez mes livres. En les achetant, vous m'aidez à continuer de le faire vivre.</p>
|
||||||
|
</header>
|
||||||
|
<div>
|
||||||
|
{{ partial "asides/oeuvres.html" $ }}
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{ partial "article-footer.html" . }}
|
||||||
|
</article>
|
||||||
|
{{ partial "asides/toc.html" . }}
|
||||||
|
</main>
|
||||||
|
{{ end }}
|
||||||
415
themes/2026/layouts/home.html
Normal file
415
themes/2026/layouts/home.html
Normal file
@@ -0,0 +1,415 @@
|
|||||||
|
{{- define "main" -}}
|
||||||
|
{{- $site := .Site -}}
|
||||||
|
{{- $allArticles := $site.RegularPages.ByDate.Reverse -}}
|
||||||
|
{{- $recettesPrefix := "/interets/recettes/" -}}
|
||||||
|
{{- $interestsArticles := slice -}}
|
||||||
|
{{- $recettesArticles := slice -}}
|
||||||
|
{{- $critiquesArticles := slice -}}
|
||||||
|
{{- $veilleArticles := slice -}}
|
||||||
|
{{- range $allArticles -}}
|
||||||
|
{{- if eq (partial "is-dossier-lead.html" .) "true" -}}
|
||||||
|
{{- if strings.Contains .RelPermalink "/interets/liens-interessants/" -}}
|
||||||
|
{{- $veilleArticles = $veilleArticles | append . -}}
|
||||||
|
{{- else if strings.Contains .RelPermalink $recettesPrefix -}}
|
||||||
|
{{- $recettesArticles = $recettesArticles | append . -}}
|
||||||
|
{{- else if and (strings.Contains .RelPermalink "/interets/") (not (strings.Contains .RelPermalink $recettesPrefix)) -}}
|
||||||
|
{{- $interestsArticles = $interestsArticles | append . -}}
|
||||||
|
{{- else if strings.Contains .RelPermalink "/critiques/" -}}
|
||||||
|
{{- $critiquesArticles = $critiquesArticles | append . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $interestsSections := slice -}}
|
||||||
|
{{- with $site.GetPage "/interets" -}}
|
||||||
|
{{- range .Sections -}}
|
||||||
|
{{- if and (not (strings.Contains .RelPermalink "/interets/liens-interessants/")) (not (strings.Contains .RelPermalink $recettesPrefix)) -}}
|
||||||
|
{{- $interestsSections = $interestsSections | append . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $veilleRoot := $site.GetPage "/interets/liens-interessants" -}}
|
||||||
|
{{- $recettesRoot := $site.GetPage "/interets/recettes" -}}
|
||||||
|
{{- $collectionsRoot := $site.GetPage "/collections" -}}
|
||||||
|
{{- $critiquesRoot := $site.GetPage "/critiques" -}}
|
||||||
|
{{- $externalLinksReport := dict -}}
|
||||||
|
{{- if fileExists "tools/cache/external_links.yaml" -}}
|
||||||
|
{{- $externalLinksReport = transform.Unmarshal (readFile "tools/cache/external_links.yaml") -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- partial "hero.html" . -}}
|
||||||
|
|
||||||
|
{{- $interestsUsed := slice -}}
|
||||||
|
{{- $interestsSpotlight := first 8 $interestsArticles -}}
|
||||||
|
{{- range $interestsSpotlight -}}
|
||||||
|
{{- $interestsUsed = $interestsUsed | append .File.Path -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $interestsDeep := slice -}}
|
||||||
|
{{- range $interestsArticles -}}
|
||||||
|
{{- if and (lt (len $interestsDeep) 15) (not (in $interestsUsed .File.Path)) -}}
|
||||||
|
{{- $interestsDeep = $interestsDeep | append . -}}
|
||||||
|
{{- $interestsUsed = $interestsUsed | append .File.Path -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $interestsSectionEntries := slice -}}
|
||||||
|
{{- range $interestsSections -}}
|
||||||
|
{{- $section := . -}}
|
||||||
|
{{- $sectionPages := slice -}}
|
||||||
|
{{- $publishedCount := 0 -}}
|
||||||
|
{{- range $section.RegularPagesRecursive.ByDate.Reverse -}}
|
||||||
|
{{- if eq (partial "is-dossier-lead.html" .) "true" -}}
|
||||||
|
{{- $publishedCount = add $publishedCount 1 -}}
|
||||||
|
{{- if and (lt (len $sectionPages) 5) (not (in $interestsUsed .File.Path)) -}}
|
||||||
|
{{- $sectionPages = $sectionPages | append . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if gt (len $sectionPages) 0 -}}
|
||||||
|
{{- $latestDateKey := "00000000000000" -}}
|
||||||
|
{{- with index $sectionPages 0 -}}
|
||||||
|
{{- $latestDateKey = .Date.Format "20060102150405" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- $interestsSectionEntries = $interestsSectionEntries | append (dict
|
||||||
|
"Section" $section
|
||||||
|
"Pages" $sectionPages
|
||||||
|
"PublishedCount" $publishedCount
|
||||||
|
"LatestDateKey" $latestDateKey
|
||||||
|
) -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- $interestsSectionEntries = sort $interestsSectionEntries "LatestDateKey" "desc" -}}
|
||||||
|
{{- $recettesSpotlight := first 8 $recettesArticles -}}
|
||||||
|
{{- $collectionsEntries := slice -}}
|
||||||
|
{{- with $collectionsRoot -}}
|
||||||
|
{{- range .Sections -}}
|
||||||
|
{{- $section := . -}}
|
||||||
|
{{- $items := $section.RegularPagesRecursive.ByDate.Reverse -}}
|
||||||
|
{{- $latestItems := $items -}}
|
||||||
|
{{- $latestDateKey := "00000000000000" -}}
|
||||||
|
{{- if gt (len $items) 0 -}}
|
||||||
|
{{- with index $items 0 -}}
|
||||||
|
{{- $latestDateKey = .Date.Format "20060102150405" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- $collectionsEntries = $collectionsEntries | append (dict
|
||||||
|
"Section" $section
|
||||||
|
"Items" (len $items)
|
||||||
|
"LatestItems" $latestItems
|
||||||
|
"LatestDateKey" $latestDateKey
|
||||||
|
) -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- $collectionsEntries = sort $collectionsEntries "LatestDateKey" "desc" -}}
|
||||||
|
|
||||||
|
{{- $critiquesDisplayed := slice -}}
|
||||||
|
|
||||||
|
{{- $critiquesCategoryDefs := slice -}}
|
||||||
|
{{- $critiquesCategoryDefs = $critiquesCategoryDefs | append (dict "Path" "/critiques/films") -}}
|
||||||
|
{{- $critiquesCategoryDefs = $critiquesCategoryDefs | append (dict "Path" "/critiques/series") -}}
|
||||||
|
{{- $critiquesCategoryDefs = $critiquesCategoryDefs | append (dict "Path" "/critiques/jeux-video") -}}
|
||||||
|
{{- $critiquesCategoryDefs = $critiquesCategoryDefs | append (dict "Path" "/critiques/livres") -}}
|
||||||
|
|
||||||
|
<main class="home-main">
|
||||||
|
{{- if gt (len $interestsSpotlight) 0 -}}
|
||||||
|
<section class="home-spotlight">
|
||||||
|
<header>
|
||||||
|
<h2>À la une</h2>
|
||||||
|
</header>
|
||||||
|
{{ partial "spotlight-block.html" (dict
|
||||||
|
"Cards" $interestsSpotlight
|
||||||
|
"FeedPages" $interestsSpotlight
|
||||||
|
"FeedTitle" "Fil de publication"
|
||||||
|
"ShowFeedTitle" false
|
||||||
|
"FeedRich" true
|
||||||
|
"ShowSection" true
|
||||||
|
"AsideFirst" false
|
||||||
|
) }}
|
||||||
|
</section>
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if gt (len $interestsDeep) 0 -}}
|
||||||
|
<section class="home-deep">
|
||||||
|
<header>
|
||||||
|
<h2>Articles de fond</h2>
|
||||||
|
</header>
|
||||||
|
{{ partial "articles-list.html" (dict "Pages" $interestsDeep "Context" . "ShowDossierBeforeTitle" true) }}
|
||||||
|
</section>
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
<section class="home-books">
|
||||||
|
<header>
|
||||||
|
<h2>Mes livres</h2>
|
||||||
|
<p>Si vous aimez ce blog, vous apprécierez mes livres. En les achetant, vous m'aidez à continuer de le faire vivre.</p>
|
||||||
|
</header>
|
||||||
|
<div>
|
||||||
|
{{ partial "oeuvres/l-anankeisme.html" . }}
|
||||||
|
{{ partial "oeuvres/l-humain-cette-espece-primitive.html" . }}
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{{- if gt (len $interestsSectionEntries) 0 -}}
|
||||||
|
<section class="home-rubrics">
|
||||||
|
<header>
|
||||||
|
<h2>Rubriques</h2>
|
||||||
|
</header>
|
||||||
|
<div>
|
||||||
|
{{- range $interestsSectionEntries -}}
|
||||||
|
{{- $section := index . "Section" -}}
|
||||||
|
{{- $sectionPages := index . "Pages" -}}
|
||||||
|
{{- $publishedCount := index . "PublishedCount" -}}
|
||||||
|
{{- if gt (len $sectionPages) 0 -}}
|
||||||
|
<article>
|
||||||
|
<header>
|
||||||
|
<h3><a href="{{ $section.RelPermalink }}">{{ with $section.LinkTitle }}{{ . }}{{ else }}{{ $section.Title }}{{ end }}</a></h3>
|
||||||
|
<p>{{ $publishedCount }} {{ if eq $publishedCount 1 }}article{{ else }}articles{{ end }}</p>
|
||||||
|
</header>
|
||||||
|
<ul>
|
||||||
|
{{- range $sectionPages -}}
|
||||||
|
{{- $page := . -}}
|
||||||
|
{{- $dossierTitle := "" -}}
|
||||||
|
{{- $dossierFirstPage := false -}}
|
||||||
|
{{- with $page.Params.dossier -}}
|
||||||
|
{{- with index . 0 -}}
|
||||||
|
{{- $dossierTitle = . -}}
|
||||||
|
{{- $dossierFirstPage = partial "dossier-first-page.html" $page -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
<li>
|
||||||
|
{{- with $dossierFirstPage -}}
|
||||||
|
{{- with $dossierTitle -}}
|
||||||
|
<p><a href="{{ $dossierFirstPage.RelPermalink }}">{{ $dossierTitle }}</a></p>
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
<a href="{{ $page.RelPermalink }}">{{ $page.Title }}</a>
|
||||||
|
{{- with $page.Date -}}<time datetime="{{ . }}">{{ . | time.Format "02/01/2006" }}</time>{{- end -}}
|
||||||
|
</li>
|
||||||
|
{{- end -}}
|
||||||
|
</ul>
|
||||||
|
</article>
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if gt (len $critiquesArticles) 0 -}}
|
||||||
|
<section class="home-critiques-title">
|
||||||
|
<header>
|
||||||
|
<h2>
|
||||||
|
{{- with $critiquesRoot -}}
|
||||||
|
<a href="{{ .RelPermalink }}">{{ with .LinkTitle }}{{ . }}{{ else }}{{ .Title }}{{ end }}</a>
|
||||||
|
{{- else -}}
|
||||||
|
Critiques
|
||||||
|
{{- end -}}
|
||||||
|
</h2>
|
||||||
|
</header>
|
||||||
|
</section>
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- range $critiqueIndex, $critiqueDef := $critiquesCategoryDefs -}}
|
||||||
|
{{- $critiquePath := index $critiqueDef "Path" -}}
|
||||||
|
{{- $critiquePrefix := printf "%s/" (strings.TrimSuffix "/" $critiquePath) -}}
|
||||||
|
{{- $critiqueSection := $site.GetPage $critiquePath -}}
|
||||||
|
{{- $critiquePool := slice -}}
|
||||||
|
{{- range $critiquesArticles -}}
|
||||||
|
{{- if and (strings.Contains .RelPermalink $critiquePrefix) (not (in $critiquesDisplayed .File.Path)) -}}
|
||||||
|
{{- $critiquePool = $critiquePool | append . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $critiqueSpotlight := first 8 $critiquePool -}}
|
||||||
|
{{- range $critiqueSpotlight -}}
|
||||||
|
{{- $critiquesDisplayed = $critiquesDisplayed | append .File.Path -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if gt (len $critiqueSpotlight) 0 -}}
|
||||||
|
<section class="home-critiques-category">
|
||||||
|
<header>
|
||||||
|
<h2>
|
||||||
|
{{- with $critiqueSection -}}
|
||||||
|
<a href="{{ .RelPermalink }}">{{- with .LinkTitle -}}{{ . }}{{- else -}}{{ .Title }}{{- end -}}</a>
|
||||||
|
{{- else -}}
|
||||||
|
Critiques
|
||||||
|
{{- end -}}
|
||||||
|
</h2>
|
||||||
|
</header>
|
||||||
|
{{ partial "spotlight-block.html" (dict
|
||||||
|
"Cards" $critiqueSpotlight
|
||||||
|
"FeedPages" $critiqueSpotlight
|
||||||
|
"FeedTitle" "Dernières critiques"
|
||||||
|
"ShowFeedTitle" false
|
||||||
|
"FeedRich" true
|
||||||
|
"ShowSection" false
|
||||||
|
"AsideFirst" (eq (mod $critiqueIndex 2) 1)
|
||||||
|
) }}
|
||||||
|
</section>
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if gt (len $veilleArticles) 0 -}}
|
||||||
|
<aside class="home-watch">
|
||||||
|
<header>
|
||||||
|
<h2>
|
||||||
|
{{- with $veilleRoot -}}
|
||||||
|
<a href="{{ .RelPermalink }}">Veille</a>
|
||||||
|
{{- else -}}
|
||||||
|
Veille
|
||||||
|
{{- end -}}
|
||||||
|
</h2>
|
||||||
|
</header>
|
||||||
|
<div>
|
||||||
|
{{- range first 10 $veilleArticles -}}
|
||||||
|
{{- $page := . -}}
|
||||||
|
{{- $originLink := "" -}}
|
||||||
|
{{- with $page.Params.links -}}
|
||||||
|
{{- range . -}}
|
||||||
|
{{- if and (eq $originLink "") (not .archive) -}}
|
||||||
|
{{- with .url -}}
|
||||||
|
{{- $originLink = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- $originHost := "" -}}
|
||||||
|
{{- $statusTone := "unknown" -}}
|
||||||
|
{{- $statusLabel := "État inconnu" -}}
|
||||||
|
{{- $statusTitle := "" -}}
|
||||||
|
{{- $statusChecked := "" -}}
|
||||||
|
{{- with partial "external-link-status.html" (dict "URL" $originLink "Report" $externalLinksReport) -}}
|
||||||
|
{{- with index . "Host" -}}
|
||||||
|
{{- $originHost = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- with index . "Tone" -}}
|
||||||
|
{{- $statusTone = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- with index . "Label" -}}
|
||||||
|
{{- $statusLabel = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- with index . "Title" -}}
|
||||||
|
{{- $statusTitle = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- with index . "CheckedAt" -}}
|
||||||
|
{{- $statusChecked = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $image := false -}}
|
||||||
|
{{- with $page.Params.cover -}}
|
||||||
|
{{- $image = $page.Resources.GetMatch . -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
<article>
|
||||||
|
<a href="{{ $page.RelPermalink }}">
|
||||||
|
<figure>
|
||||||
|
{{- with $image -}}
|
||||||
|
{{- $resized := .Fill "166x91" -}}
|
||||||
|
<img src="{{ $resized.RelPermalink }}" alt="Capture du lien {{ $page.Title }}" loading="lazy">
|
||||||
|
{{- end -}}
|
||||||
|
</figure>
|
||||||
|
</a>
|
||||||
|
<div>
|
||||||
|
<h3><a href="{{ $page.RelPermalink }}">{{ $page.Title }}</a></h3>
|
||||||
|
{{- with $page.Summary -}}
|
||||||
|
<p>{{ . | plainify | truncate 140 }}</p>
|
||||||
|
{{- end -}}
|
||||||
|
<footer>
|
||||||
|
<p>
|
||||||
|
{{- with $page.Date -}}<time datetime="{{ . }}">{{ . | time.Format "02/01/2006" }}</time>{{- end -}}
|
||||||
|
{{- if and $page.Date $originHost -}}<span>·</span>{{- end -}}
|
||||||
|
{{- with $originHost -}}
|
||||||
|
{{- if $originLink -}}
|
||||||
|
<a href="{{ $originLink }}" title="Ouvrir le lien externe {{ . }}" rel="noopener noreferrer nofollow">{{ . }}</a>
|
||||||
|
{{- else -}}
|
||||||
|
<span>{{ . }}</span>
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<strong data-state="{{ $statusTone }}"{{ with $statusTitle }} title="{{ . }}"{{ end }}>{{ $statusLabel }}</strong>
|
||||||
|
{{- with $statusChecked -}}<span>·</span><time datetime="{{ . }}">Vérifié {{ . | time.Format "02/01/2006" }}</time>{{- end -}}
|
||||||
|
</p>
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
{{- end -}}
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if gt (len $recettesSpotlight) 0 -}}
|
||||||
|
<section class="home-recipes">
|
||||||
|
<header>
|
||||||
|
<h2>
|
||||||
|
{{- with $recettesRoot -}}
|
||||||
|
<a href="{{ .RelPermalink }}">{{ with .LinkTitle }}{{ . }}{{ else }}{{ .Title }}{{ end }}</a>
|
||||||
|
{{- else -}}
|
||||||
|
Recettes
|
||||||
|
{{- end -}}
|
||||||
|
</h2>
|
||||||
|
</header>
|
||||||
|
{{ partial "spotlight-block.html" (dict
|
||||||
|
"Cards" $recettesSpotlight
|
||||||
|
"FeedPages" $recettesSpotlight
|
||||||
|
"FeedTitle" "Dernières recettes"
|
||||||
|
"ShowFeedTitle" false
|
||||||
|
"FeedRich" true
|
||||||
|
"ShowSection" false
|
||||||
|
"AsideFirst" false
|
||||||
|
) }}
|
||||||
|
</section>
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if gt (len $collectionsEntries) 0 -}}
|
||||||
|
<section class="home-collections collections-section">
|
||||||
|
<header>
|
||||||
|
<h2>
|
||||||
|
{{- with $collectionsRoot -}}
|
||||||
|
<a href="{{ .RelPermalink }}">{{ with .LinkTitle }}{{ . }}{{ else }}{{ .Title }}{{ end }}</a>
|
||||||
|
{{- else -}}
|
||||||
|
Collections
|
||||||
|
{{- end -}}
|
||||||
|
</h2>
|
||||||
|
</header>
|
||||||
|
<div>
|
||||||
|
{{- range $collectionsEntries -}}
|
||||||
|
{{- $section := index . "Section" -}}
|
||||||
|
{{- $latestItems := index . "LatestItems" -}}
|
||||||
|
<article>
|
||||||
|
<h3><a href="{{ $section.RelPermalink }}" title="{{ with $section.LinkTitle }}{{ . }}{{ else }}{{ $section.Title }}{{ end }}">{{ with $section.LinkTitle }}{{ . }}{{ else }}{{ $section.Title }}{{ end }}</a></h3>
|
||||||
|
{{- if gt (len $latestItems) 0 -}}
|
||||||
|
<ul>
|
||||||
|
{{- range $latestItems -}}
|
||||||
|
{{- $item := . -}}
|
||||||
|
{{- $itemImage := false -}}
|
||||||
|
{{- with $item.Params.cover -}}
|
||||||
|
{{- $itemImage = $item.Resources.GetMatch . -}}
|
||||||
|
{{- end -}}
|
||||||
|
<li>
|
||||||
|
<a href="{{ $item.RelPermalink }}" title="{{ $item.Title }}">
|
||||||
|
<figure>
|
||||||
|
{{- with $itemImage -}}
|
||||||
|
{{- $resized := .Resize "x128" -}}
|
||||||
|
<img src="{{ $resized.RelPermalink }}" alt="{{ $item.Title }}" title="{{ $item.Title }}" loading="lazy">
|
||||||
|
{{- end -}}
|
||||||
|
</figure>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{{- end -}}
|
||||||
|
</ul>
|
||||||
|
{{- end -}}
|
||||||
|
<p>
|
||||||
|
<span>{{ index . "Items" }} objets</span>
|
||||||
|
{{- range $section.Sections.ByTitle -}}
|
||||||
|
<a href="{{ .RelPermalink }}" title="{{ with .LinkTitle }}{{ . }}{{ else }}{{ .Title }}{{ end }}">{{ with .LinkTitle }}{{ . }}{{ else }}{{ .Title }}{{ end }}</a>
|
||||||
|
{{- end -}}
|
||||||
|
</p>
|
||||||
|
</article>
|
||||||
|
{{- end -}}
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
{{- end -}}
|
||||||
|
</main>
|
||||||
|
{{- end -}}
|
||||||
58
themes/2026/layouts/index.rss.xml
Normal file
58
themes/2026/layouts/index.rss.xml
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
{{- $authorEmail := "" -}}
|
||||||
|
{{- $authorName := "" -}}
|
||||||
|
{{- $favicon := "favicon.png" | absURL -}}
|
||||||
|
{{- with site.Params.author -}}
|
||||||
|
{{- if reflect.IsMap . -}}
|
||||||
|
{{- with .email }}{{- $authorEmail = . -}}{{- end -}}
|
||||||
|
{{- with .name }}{{- $authorName = . -}}{{- end -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $authorName = . -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $pctx := . -}}
|
||||||
|
{{- if .IsHome -}}{{- $pctx = .Site -}}{{- end -}}
|
||||||
|
|
||||||
|
{{- $pages := slice -}}
|
||||||
|
{{- if or .IsHome .IsSection -}}
|
||||||
|
{{- $pages = $pctx.RegularPages -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $pages = $pctx.Pages -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $pages = $pages.ByLastmod.Reverse -}}
|
||||||
|
{{- $limit := .Site.Config.Services.RSS.Limit -}}
|
||||||
|
{{- if ge $limit 1 -}}
|
||||||
|
{{- $pages = first $limit $pages -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML -}}
|
||||||
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||||
|
<channel>
|
||||||
|
<title>{{ .Site.Title }}</title>
|
||||||
|
<link>{{ .Permalink }}</link>
|
||||||
|
<description>{{ .Site.Title }}</description>
|
||||||
|
<image>
|
||||||
|
<url>{{ $favicon }}</url>
|
||||||
|
<title>{{ .Site.Title }}</title>
|
||||||
|
<link>{{ .Permalink }}</link>
|
||||||
|
</image>
|
||||||
|
<language>{{ site.Language.LanguageCode }}</language>{{ with $authorEmail }}
|
||||||
|
<managingEditor>{{.}}{{ with $authorName }} ({{ . }}){{ end }}</managingEditor>{{ end }}{{ with $authorEmail }}
|
||||||
|
<webMaster>{{ . }}{{ with $authorName }} ({{ . }}){{ end }}</webMaster>{{ end }}{{ with .Site.Copyright }}
|
||||||
|
<copyright>{{ . }}</copyright>{{ end }}{{ if not .Date.IsZero }}
|
||||||
|
<lastBuildDate>{{ (index $pages.ByLastmod.Reverse 0).Lastmod.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{ end }}
|
||||||
|
{{- with .OutputFormats.Get "RSS" }}
|
||||||
|
{{ printf "<atom:link href=%q rel=\"self\" type=%q />" .Permalink .MediaType | safeHTML }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range $pages }}
|
||||||
|
<item>
|
||||||
|
<title>{{ .Title }}</title>
|
||||||
|
<link>{{ .Permalink }}</link>
|
||||||
|
<pubDate>{{ .PublishDate.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate>
|
||||||
|
{{- with $authorEmail }}<author>{{ . }}{{ with $authorName }} ({{ . }}){{ end }}</author>{{ end }}
|
||||||
|
<guid>{{ .Permalink }}</guid>
|
||||||
|
<description>{{ .Summary | transform.XMLEscape | safeHTML }}</description>
|
||||||
|
</item>
|
||||||
|
{{- end }}
|
||||||
|
</channel>
|
||||||
|
</rss>
|
||||||
11
themes/2026/layouts/liens-morts/single.html
Normal file
11
themes/2026/layouts/liens-morts/single.html
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{{ define "main" }}
|
||||||
|
{{ partial "article-header.html" . }}
|
||||||
|
<main>
|
||||||
|
<article>
|
||||||
|
{{ .Content }}
|
||||||
|
{{ partial "liens-morts/report.html" (dict "Page" .) }}
|
||||||
|
{{ partial "article-footer.html" . }}
|
||||||
|
</article>
|
||||||
|
{{ partial "asides/toc.html" . }}
|
||||||
|
</main>
|
||||||
|
{{ end }}
|
||||||
10
themes/2026/layouts/page.html
Normal file
10
themes/2026/layouts/page.html
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{{ define "main" }}
|
||||||
|
{{ partial "article-header.html" . }}
|
||||||
|
<main>
|
||||||
|
<article>
|
||||||
|
{{ .Content }}
|
||||||
|
{{ partial "article-footer.html" . }}
|
||||||
|
</article>
|
||||||
|
{{ partial "asides/toc.html" . }}
|
||||||
|
</main>
|
||||||
|
{{ end }}
|
||||||
13
themes/2026/layouts/section.html
Normal file
13
themes/2026/layouts/section.html
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{{ define "main" }}
|
||||||
|
{{ partial "hero.html" . }}
|
||||||
|
<main class="listing-page listing-mode-spotlight">
|
||||||
|
{{- $pages := .RegularPagesRecursive.ByDate.Reverse -}}
|
||||||
|
{{ with .Content }}
|
||||||
|
<article>
|
||||||
|
{{ . }}
|
||||||
|
</article>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ partial "list-layout.html" (dict "Pages" $pages "Context" . "Site" .Site "SpotlightTitle" .Title) }}
|
||||||
|
</main>
|
||||||
|
{{ end }}
|
||||||
25
themes/2026/layouts/taxonomies/taxonomies.html
Normal file
25
themes/2026/layouts/taxonomies/taxonomies.html
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{{ define "main" }}
|
||||||
|
{{ partial "article-header.html" . }}
|
||||||
|
<main>
|
||||||
|
<article>
|
||||||
|
{{ .Content }}
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<header><h2>Taxonomies</h2></header>
|
||||||
|
<ul>
|
||||||
|
{{- range $taxonomy, $terms := .Site.Taxonomies -}}
|
||||||
|
{{- with $.Site.GetPage $taxonomy -}}
|
||||||
|
<li>
|
||||||
|
<a href="{{ .RelPermalink }}">{{ .Title }}</a>
|
||||||
|
<sub>{{ len $terms }}</sub>
|
||||||
|
</li>
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{{ partial "article-footer.html" . }}
|
||||||
|
</article>
|
||||||
|
{{ partial "asides/toc.html" . }}
|
||||||
|
</main>
|
||||||
|
{{ end }}
|
||||||
63
themes/2026/layouts/taxonomy.html
Normal file
63
themes/2026/layouts/taxonomy.html
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
{{ define "main" }}
|
||||||
|
{{ partial "hero-section.html" . }}
|
||||||
|
<main>
|
||||||
|
{{ with .Content }}
|
||||||
|
<article>
|
||||||
|
{{ . }}
|
||||||
|
</article>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{- $pages := .Pages -}}
|
||||||
|
{{- if gt (len $pages) 0 -}}
|
||||||
|
{{- $sorted := $pages.ByTitle -}}
|
||||||
|
{{- $scratch := newScratch -}}
|
||||||
|
{{- $scratch.Set "group" "" -}}
|
||||||
|
|
||||||
|
{{- range $sorted -}}
|
||||||
|
{{- $title := strings.TrimSpace (default .Title .LinkTitle) -}}
|
||||||
|
{{- if $title -}}
|
||||||
|
{{- $firstChar := slicestr $title 0 1 -}}
|
||||||
|
{{- $upper := strings.ToUpper $firstChar -}}
|
||||||
|
{{- $normalized := $upper -}}
|
||||||
|
{{- $normalized = replaceRE "[ÀÁÂÃÄÅĀĂĄÆ]" "A" $normalized -}}
|
||||||
|
{{- $normalized = replaceRE "[ÇĆĈĊČ]" "C" $normalized -}}
|
||||||
|
{{- $normalized = replaceRE "[ÈÉÊËĒĔĖĘĚ]" "E" $normalized -}}
|
||||||
|
{{- $normalized = replaceRE "[ÌÍÎÏĨĪĬĮİ]" "I" $normalized -}}
|
||||||
|
{{- $normalized = replaceRE "[ÑŃŅŇ]" "N" $normalized -}}
|
||||||
|
{{- $normalized = replaceRE "[ÒÓÔÕÖŌŎŐØŒ]" "O" $normalized -}}
|
||||||
|
{{- $normalized = replaceRE "[ÙÚÛÜŨŪŬŮŰŲ]" "U" $normalized -}}
|
||||||
|
{{- $normalized = replaceRE "[ÝŸŶ]" "Y" $normalized -}}
|
||||||
|
|
||||||
|
{{- $letterKey := "#" -}}
|
||||||
|
{{- if gt (len (findRE "^[A-Z]$" $normalized)) 0 -}}
|
||||||
|
{{- $letterKey = $normalized -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- $current := $scratch.Get "group" -}}
|
||||||
|
{{- if ne $letterKey $current -}}
|
||||||
|
{{- if ne $current "" -}}
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
{{- end -}}
|
||||||
|
<section>
|
||||||
|
<header><h2>{{ $letterKey }}</h2></header>
|
||||||
|
<ul>
|
||||||
|
{{- $scratch.Set "group" $letterKey -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<a href="{{ .RelPermalink }}">{{ $title }}</a>
|
||||||
|
{{ with .Pages }}<sub>{{ len . }}</sub>{{ else }}<sub>0</sub>{{ end }}
|
||||||
|
</li>
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if ne ($scratch.Get "group") "" -}}
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
{{- end -}}
|
||||||
|
{{- else -}}
|
||||||
|
<p>Aucun mot-clé disponible pour cette taxonomie.</p>
|
||||||
|
{{- end -}}
|
||||||
|
</main>
|
||||||
|
{{ end }}
|
||||||
13
themes/2026/layouts/term.html
Normal file
13
themes/2026/layouts/term.html
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{{ define "main" }}
|
||||||
|
{{ partial "hero.html" . }}
|
||||||
|
<main class="listing-page listing-mode-spotlight">
|
||||||
|
{{- $pages := .Pages.ByDate.Reverse -}}
|
||||||
|
{{ with .Content }}
|
||||||
|
<article>
|
||||||
|
{{ . }}
|
||||||
|
</article>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ partial "list-layout.html" (dict "Pages" $pages "Context" . "Site" .Site "SpotlightTitle" .Title) }}
|
||||||
|
</main>
|
||||||
|
{{ end }}
|
||||||
Reference in New Issue
Block a user