alpinux.presentations/theme/alpinux.css
Cédrix 02cf82447b Créer le site des présentations d'Alpinux
Un dossier par présentation en Markdown, converti en diaporama HTML autonome
par Marp CLI, et une page d'accueil générée qui les liste toutes.

- scripts/build.mjs : build strict (fiche validée, images vérifiées, aucune
  ressource externe hormis le logo), page d'accueil filtrable,
  presentations.json et .htaccess pour l'en-tête CORS
- theme/alpinux.css : thème commun pour la vidéoprojection, classes titre et demo
- slides/_modele : modèle commenté, non publié
- slides/pdf-signer : « Lire, remplir et signer ses PDF », avec notes d'orateur
- scripts/deploy-presentations.sh et deploy/ : déploiement par webhook Gitea,
  sur le modèle du wiki et de www

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M713yNBL8cssBA1Zri5QLT
2026-10-10 21:44:32 +02:00

297 lines
8.4 KiB
CSS

/* @theme alpinux */
/* @auto-scaling true */
/* @size 16:9 1280px 720px */
/* @size 4:3 960px 720px */
/*
* Thème Marp des présentations d'Alpinux.
*
* Pensé pour la vidéoprojection : gros corps de texte, fort contraste, aucune
* ressource externe hormis le logo, servi par static.alpinux.org. Les polices sont
* celles du système — rien n'est téléchargé.
*
* Deux classes à poser sur une diapo avec <!-- _class: nom --> :
* titre la diapo d'ouverture (et les intercalaires de partie) ;
* demo une diapo qui annonce une démonstration en direct.
*/
:root {
--bleu: #1a6bbf;
--bleu-fonce: #0f4e8f;
--nuit: #12263f;
--encre: #1a1a2e;
--encre-douce: #4a5568;
--papier: #ffffff;
--papier-teinte: #f3f6fb;
--trait: #c9d6e8;
--alerte: #b45309;
--logo: url("https://static.alpinux.org/logo/alpinux-logo-512.png");
}
/* ── La diapo ─────────────────────────────────────────────────────────── */
section {
width: 1280px;
height: 720px;
box-sizing: border-box;
padding: 48px 72px 92px;
display: flex;
flex-direction: column;
justify-content: flex-start;
background: var(--papier);
color: var(--encre);
font-family: "Inter", "Noto Sans", "Ubuntu", "DejaVu Sans", "Segoe UI", system-ui, sans-serif;
font-size: 32px;
line-height: 1.4;
letter-spacing: 0.005em;
}
section > *:first-child { margin-top: 0; }
section > *:last-child { margin-bottom: 0; }
/* ── Titres ───────────────────────────────────────────────────────────── */
h1, h2, h3, h4 {
margin: 0 0 0.55em;
line-height: 1.15;
font-weight: 700;
color: var(--bleu-fonce);
}
h1 { font-size: 1.75em; }
h2 {
font-size: 1.4em;
padding-bottom: 0.25em;
border-bottom: 4px solid var(--bleu);
}
h3 { font-size: 1.1em; color: var(--encre); }
h4 { font-size: 1em; color: var(--encre-douce); }
/* ── Texte ────────────────────────────────────────────────────────────── */
p, ul, ol, blockquote, pre, table { margin: 0 0 0.6em; }
ul, ol { padding-left: 1.2em; }
li { margin-bottom: 0.25em; }
li > ul, li > ol { margin: 0.2em 0 0; font-size: 0.9em; }
ul > li::marker { color: var(--bleu); }
ol > li::marker { color: var(--bleu); font-weight: 700; }
strong { color: var(--bleu-fonce); font-weight: 700; }
em { font-style: italic; }
a { color: var(--bleu); text-decoration: underline; text-underline-offset: 0.15em; }
mark { background: #ffe066; color: var(--encre); padding: 0 0.15em; border-radius: 4px; }
/* Une citation sert d'encadré « à retenir » ou « piège ». */
blockquote {
padding: 0.5em 0.9em;
border-left: 10px solid var(--bleu);
background: var(--papier-teinte);
border-radius: 0 10px 10px 0;
font-size: 0.92em;
}
blockquote > *:last-child { margin-bottom: 0; }
kbd {
display: inline-block;
padding: 0.05em 0.4em;
border: 2px solid var(--encre-douce);
border-bottom-width: 4px;
border-radius: 8px;
background: var(--papier);
font-family: inherit;
font-size: 0.82em;
line-height: 1.3;
white-space: nowrap;
}
img { max-width: 100%; max-height: 100%; }
/* ── Code ─────────────────────────────────────────────────────────────── */
code {
font-family: "JetBrains Mono", "DejaVu Sans Mono", "Ubuntu Mono", "Liberation Mono", monospace;
font-size: 0.86em;
padding: 0.08em 0.3em;
border-radius: 6px;
background: #e4ecf7;
color: #0b2e55;
}
pre {
padding: 0.7em 0.9em;
border-radius: 12px;
border-left: 10px solid var(--bleu);
background: var(--nuit);
color: #f1f5fb;
font-size: 0.8em;
line-height: 1.45;
overflow: hidden;
}
pre code {
padding: 0;
background: none;
color: inherit;
font-size: 1em;
}
/* Coloration syntaxique (highlight.js) — teintes claires sur fond nuit, toutes
au-dessus de 7:1 de contraste. */
.hljs-comment, .hljs-quote { color: #a8b8cc; font-style: italic; }
.hljs-keyword, .hljs-selector-tag, .hljs-built_in, .hljs-name, .hljs-tag { color: #8cc4ff; }
.hljs-string, .hljs-attr, .hljs-symbol, .hljs-bullet, .hljs-addition { color: #a5e3a0; }
.hljs-number, .hljs-literal, .hljs-variable, .hljs-template-variable { color: #ffc98a; }
.hljs-title, .hljs-section, .hljs-type, .hljs-meta { color: #f7e08a; }
.hljs-deletion { color: #ffb0a8; }
.hljs-emphasis { font-style: italic; }
.hljs-strong { font-weight: 700; }
/* ── Tableaux ─────────────────────────────────────────────────────────── */
table {
width: 100%;
border-collapse: collapse;
font-size: 0.86em;
}
th, td {
padding: 0.32em 0.7em;
text-align: left;
vertical-align: top;
border-bottom: 2px solid var(--trait);
}
thead th {
background: var(--bleu-fonce);
color: #fff;
font-weight: 700;
border-bottom: none;
}
thead th:first-child { border-radius: 10px 0 0 0; }
thead th:last-child { border-radius: 0 10px 0 0; }
tbody tr:nth-child(even) { background: var(--papier-teinte); }
tbody td:first-child { font-weight: 600; }
/* ── Pied de diapo : logo, texte libre, numéro de page ────────────────── */
section::before {
content: "";
position: absolute;
left: 40px;
bottom: 22px;
width: 52px;
height: 52px;
background: var(--logo) center / contain no-repeat;
}
header, footer {
position: absolute;
left: 108px;
right: 160px;
font-size: 0.55em;
color: var(--encre-douce);
}
header { top: 22px; left: 72px; }
footer { bottom: 36px; }
section::after {
content: attr(data-marpit-pagination) " / " attr(data-marpit-pagination-total);
position: absolute;
right: 44px;
bottom: 34px;
/* Marpit donne à ce pseudo-élément le remplissage de la diapo : on l'annule. */
padding: 0;
font-size: 0.6em;
font-weight: 600;
font-variant-numeric: tabular-nums;
color: var(--encre-douce);
}
/* ── Classe « titre » : ouverture et intercalaires ────────────────────── */
section.titre {
justify-content: center;
padding: 72px 96px 120px;
background: var(--bleu);
color: #fff;
}
section.titre h1,
section.titre h2,
section.titre h3,
section.titre strong { color: #fff; }
section.titre h1 { font-size: 2.3em; margin-bottom: 0.3em; }
section.titre h2 {
border-bottom: none;
padding-bottom: 0;
font-size: 1.25em;
font-weight: 400;
}
section.titre p { font-size: 0.82em; color: #e6f0fb; }
section.titre a { color: #fff; }
section.titre code { background: var(--bleu-fonce); color: #fff; }
section.titre footer,
section.titre header,
section.titre::after { color: #e6f0fb; }
/* Le logo est bleu : sur fond bleu, on le pose sur une pastille blanche. */
section.titre::before {
width: 72px;
height: 72px;
left: 96px;
bottom: 40px;
background-color: #fff;
background-size: 84%;
border-radius: 14px;
}
section.titre footer { left: 190px; bottom: 62px; }
/* ── Classe « demo » : on quitte le diaporama pour montrer ────────────── */
section.demo {
justify-content: center;
background: var(--nuit);
color: #f1f5fb;
}
section.demo h1,
section.demo h2,
section.demo h3 { color: #fff; }
section.demo h2 { border-bottom-color: #ffc857; }
section.demo strong { color: #ffc857; }
section.demo a { color: #9fd0ff; }
section.demo ul > li::marker,
section.demo ol > li::marker { color: #ffc857; }
section.demo code { background: #24456e; color: #fff; }
section.demo pre { background: #0a1728; border-left-color: #ffc857; }
section.demo blockquote { background: #1c3a5e; border-left-color: #ffc857; color: #f1f5fb; }
section.demo kbd { background: #1c3a5e; border-color: #9fb3cc; color: #fff; }
section.demo footer,
section.demo header,
section.demo::after { color: #c5d3e6; }
section.demo h2::before {
content: "Démonstration";
display: block;
width: fit-content;
margin-bottom: 0.5em;
padding: 0.15em 0.7em;
border-radius: 999px;
background: #ffc857;
color: var(--nuit);
font-size: 0.5em;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
}
section.demo::before {
background-color: #fff;
background-size: 84%;
border-radius: 10px;
}