Ajout du guide PDF HestiaCP réutilisable (HestiaCP 1.10.4)
- 14 chapitres + annexe en Markdown (chapitres/), 99 étapes - Générateur WeasyPrint (build/build.py) : PDF générique ou personnalisé via --vars fichier.conf - PDF générique + PDF personnalisé srv1.skglobalinstitute.com - Commandes v-* vérifiées contre le code source HestiaCP 1.10.4 - 03-bis-hestiacp.md pointe vers le nouveau guide Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018J2PsVQ28oW4xEkWJpcU9G
This commit is contained in:
254
hestiacp/build/style.css
Normal file
254
hestiacp/build/style.css
Normal file
@@ -0,0 +1,254 @@
|
||||
/* ---------- Polices (embarquées, licence OFL) ---------- */
|
||||
@font-face { font-family: "Inter"; font-weight: 400; src: url(fonts/Inter-400.ttf); }
|
||||
@font-face { font-family: "Inter"; font-weight: 500; src: url(fonts/Inter-500.ttf); }
|
||||
@font-face { font-family: "Inter"; font-weight: 600; src: url(fonts/Inter-600.ttf); }
|
||||
@font-face { font-family: "Inter"; font-weight: 700; src: url(fonts/Inter-700.ttf); }
|
||||
@font-face { font-family: "Inter"; font-weight: 800; src: url(fonts/Inter-800.ttf); }
|
||||
@font-face { font-family: "JetBrains Mono"; font-weight: 400; src: url(fonts/JetBrainsMono-400.ttf); }
|
||||
@font-face { font-family: "JetBrains Mono"; font-weight: 600; src: url(fonts/JetBrainsMono-600.ttf); }
|
||||
|
||||
:root {
|
||||
--ink: #0f172a;
|
||||
--text: #1e293b;
|
||||
--muted: #64748b;
|
||||
--line: #e2e8f0;
|
||||
--surface: #f8fafc;
|
||||
--accent: #0f766e;
|
||||
--accent-2: #14b8a6;
|
||||
--accent-soft: #ccfbf1;
|
||||
--code-bg: #0d1117;
|
||||
--var: #b45309;
|
||||
--var-bg: #fef3c7;
|
||||
}
|
||||
|
||||
/* ---------- Pages ---------- */
|
||||
@page {
|
||||
size: A4;
|
||||
margin: 22mm 18mm 20mm 18mm;
|
||||
@top-left {
|
||||
content: string(chapter);
|
||||
font: 500 7.5pt "Inter", sans-serif;
|
||||
color: #94a3b8;
|
||||
vertical-align: bottom;
|
||||
padding-bottom: 4mm;
|
||||
}
|
||||
@top-right {
|
||||
content: "HestiaCP · Ubuntu 24.04";
|
||||
font: 500 7.5pt "Inter", sans-serif;
|
||||
color: #94a3b8;
|
||||
vertical-align: bottom;
|
||||
padding-bottom: 4mm;
|
||||
}
|
||||
@bottom-right {
|
||||
content: counter(page);
|
||||
font: 700 8pt "Inter", sans-serif;
|
||||
color: var(--accent);
|
||||
}
|
||||
@bottom-left {
|
||||
content: "Guide VPS HestiaCP";
|
||||
font: 400 7.5pt "Inter", sans-serif;
|
||||
color: #94a3b8;
|
||||
}
|
||||
}
|
||||
@page cover { margin: 0; @top-left { content: none; } @top-right { content: none; } @bottom-right { content: none; } @bottom-left { content: none; } }
|
||||
@page front { @top-left { content: none; } @top-right { content: none; } }
|
||||
|
||||
html { font-family: "Inter", "DejaVu Sans", sans-serif; font-size: 9.4pt; line-height: 1.55; color: var(--text); }
|
||||
body { margin: 0; }
|
||||
|
||||
/* ---------- Couverture ---------- */
|
||||
.cover {
|
||||
page: cover;
|
||||
height: 297mm;
|
||||
box-sizing: border-box;
|
||||
padding: 34mm 22mm 20mm;
|
||||
background: var(--ink);
|
||||
background-image:
|
||||
radial-gradient(circle at 88% 12%, rgba(20,184,166,.35) 0, rgba(20,184,166,0) 38%),
|
||||
radial-gradient(circle at 5% 95%, rgba(20,184,166,.18) 0, rgba(20,184,166,0) 40%);
|
||||
color: #e2e8f0;
|
||||
position: relative;
|
||||
}
|
||||
.kicker { text-transform: uppercase; letter-spacing: .18em; font-size: 8.5pt; font-weight: 600; color: var(--accent-2); margin: 0 0 8mm; }
|
||||
.cover-title { font-size: 40pt; line-height: 1.05; font-weight: 800; color: #fff; margin: 0; letter-spacing: -.02em; }
|
||||
.cover-title span { color: var(--accent-2); }
|
||||
.cover-sub { font-size: 13pt; color: #94a3b8; margin: 7mm 0 0; font-weight: 500; }
|
||||
.cover-meta { position: absolute; left: 22mm; right: 22mm; bottom: 42mm; border-top: 1px solid #334155; padding-top: 7mm; }
|
||||
.cover-meta div { display: flex; justify-content: space-between; padding: 2.2mm 0; border-bottom: 1px solid #1e293b; font-size: 9.5pt; }
|
||||
.cover-meta span { color: #94a3b8; }
|
||||
.cover-meta strong { color: #f1f5f9; font-weight: 600; text-align: right; max-width: 60%; }
|
||||
.cover-foot { position: absolute; left: 22mm; bottom: 20mm; margin: 0; font-size: 8.5pt; letter-spacing: .06em; color: var(--accent-2); }
|
||||
|
||||
/* ---------- Fiche serveur & sommaire ---------- */
|
||||
.vars-page, .toc { page: front; break-before: page; }
|
||||
h1.plain { font-size: 22pt; font-weight: 800; color: var(--ink); margin: 0 0 5mm; letter-spacing: -.01em; }
|
||||
table.vars td.val { border-bottom: 1px dashed #94a3b8; min-width: 45mm; width: 32%; }
|
||||
table.vars td.val.filled { font-family: "JetBrains Mono", monospace; font-size: 8pt; color: var(--var); border-bottom: 1px solid var(--line); }
|
||||
table.vars td.ex { color: var(--muted); font-size: 8pt; }
|
||||
td:first-child { white-space: nowrap; }
|
||||
td:first-child code { white-space: nowrap; overflow-wrap: normal; }
|
||||
.legend { margin-top: 8mm; background: var(--surface); border: 1px solid var(--line); border-radius: 3mm; padding: 3mm 5mm; }
|
||||
.legend p { margin: 1mm 0; }
|
||||
.legend ul { margin: 1mm 0 1mm; padding-left: 5mm; }
|
||||
|
||||
.toc ol { list-style: none; padding: 0; margin: 0; }
|
||||
.toc a { color: var(--text); text-decoration: none; }
|
||||
.toc a::after { content: leader(dotted) target-counter(attr(href), page); color: var(--muted); }
|
||||
.toc-chap { margin-top: 3.2mm; font-weight: 700; font-size: 10pt; color: var(--ink); break-after: avoid; }
|
||||
.toc-chap a { color: var(--ink); }
|
||||
.toc-chap .n { display: inline-block; width: 8mm; color: var(--accent); }
|
||||
.toc-step { padding-left: 8mm; font-size: 8.6pt; line-height: 1.7; }
|
||||
|
||||
/* ---------- Chapitres ---------- */
|
||||
.chapter { break-before: page; }
|
||||
h1.chapter-title { margin: 0 0 7mm; padding-bottom: 5mm; border-bottom: 2px solid var(--ink); }
|
||||
.chap-no { display: block; text-transform: uppercase; letter-spacing: .16em; font-size: 8pt; font-weight: 700; color: var(--accent); margin-bottom: 1.5mm; }
|
||||
.chap-name { display: block; font-size: 21pt; font-weight: 800; color: var(--ink); line-height: 1.15; letter-spacing: -.01em; string-set: chapter content(); }
|
||||
|
||||
body { counter-reset: step; }
|
||||
h2.step {
|
||||
counter-increment: step;
|
||||
font-size: 12.5pt; font-weight: 700; color: var(--ink);
|
||||
margin: 8mm 0 2.5mm; padding-top: 1mm;
|
||||
break-after: avoid;
|
||||
}
|
||||
h2.step::before {
|
||||
content: "Étape " counter(step);
|
||||
display: inline-block;
|
||||
font-size: 7.5pt; font-weight: 700; letter-spacing: .04em;
|
||||
color: #fff; background: var(--accent);
|
||||
border-radius: 1.2mm; padding: .6mm 2mm; margin-right: 2.5mm;
|
||||
vertical-align: 1.2pt;
|
||||
}
|
||||
h2.step .box { float: right; width: 3.6mm; height: 3.6mm; border: 1.3px solid #94a3b8; border-radius: .8mm; margin-top: 1mm; }
|
||||
.toc-step a::before { content: "Étape " target-counter(attr(href), step) " · "; color: var(--muted); font-weight: 500; }
|
||||
|
||||
h3 { font-size: 10.2pt; font-weight: 700; color: var(--ink); margin: 5mm 0 1.5mm; break-after: avoid; }
|
||||
h4 { font-size: 9.4pt; font-weight: 600; color: var(--accent); margin: 4mm 0 1mm; break-after: avoid; }
|
||||
p { margin: 1.6mm 0 2.4mm; orphans: 3; widows: 3; }
|
||||
ul, ol { margin: 1.5mm 0 2.5mm; padding-left: 5.5mm; }
|
||||
li { margin: .6mm 0; }
|
||||
a { color: var(--accent); text-decoration: none; }
|
||||
strong { color: var(--ink); font-weight: 600; }
|
||||
hr { border: 0; border-top: 1px solid var(--line); margin: 6mm 0; }
|
||||
|
||||
/* ---------- Code ---------- */
|
||||
code, pre, .var { font-variant-ligatures: none; font-feature-settings: "liga" 0, "calt" 0; }
|
||||
code { font-family: "JetBrains Mono", "DejaVu Sans Mono", monospace; font-size: 8pt; }
|
||||
p code, li code, td code {
|
||||
background: #eef2f7; color: #0f172a; border-radius: 1mm; padding: .2mm 1.1mm;
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
.code, pre {
|
||||
background: var(--code-bg); border-radius: 2.2mm;
|
||||
margin: 2mm 0 3.5mm; padding: 3mm 4mm;
|
||||
break-inside: avoid;
|
||||
}
|
||||
.code pre { margin: 0; padding: 0; background: none; }
|
||||
pre, .code pre {
|
||||
color: #e6edf3; font-family: "JetBrains Mono", "DejaVu Sans Mono", monospace; font-size: 7.9pt; line-height: 1.55;
|
||||
white-space: pre-wrap; overflow-wrap: anywhere;
|
||||
}
|
||||
pre code { font-size: inherit; background: none; padding: 0; color: inherit; }
|
||||
|
||||
/* ---------- Variables ---------- */
|
||||
.var { font-family: "JetBrains Mono", monospace; font-size: .92em; color: var(--var); background: var(--var-bg); border-radius: .8mm; padding: 0 .6mm; }
|
||||
pre .var, .code .var { background: rgba(251,191,36,.14); color: #fbbf24; }
|
||||
.var.filled { background: none; padding: 0; }
|
||||
pre .var.filled, .code .var.filled { background: none; color: #fcd34d; }
|
||||
|
||||
/* ---------- Tableaux ---------- */
|
||||
table { width: 100%; border-collapse: collapse; margin: 2.5mm 0 4mm; font-size: 8.6pt; break-inside: auto; }
|
||||
th { text-align: left; font-weight: 700; color: var(--ink); background: var(--surface); border-bottom: 1.5px solid var(--ink); padding: 1.8mm 2.2mm; }
|
||||
td { border-bottom: 1px solid var(--line); padding: 1.6mm 2.2mm; vertical-align: top; }
|
||||
tr { break-inside: avoid; }
|
||||
|
||||
/* ---------- Encadrés ---------- */
|
||||
.callout { border-left: 3px solid; border-radius: 0 2mm 2mm 0; padding: 2.2mm 4mm 1.5mm; margin: 3mm 0 4mm; break-inside: avoid; }
|
||||
.callout p { margin: .8mm 0 1.6mm; }
|
||||
.callout .callout-title { font-weight: 700; font-size: 8pt; text-transform: uppercase; letter-spacing: .08em; margin: 0 0 1mm; }
|
||||
.callout .code { margin: 1.5mm 0 2mm; }
|
||||
.callout.note { background: #eff6ff; border-color: #3b82f6; } .callout.note .callout-title { color: #1d4ed8; }
|
||||
.callout.tip { background: #f0fdfa; border-color: var(--accent-2); } .callout.tip .callout-title { color: var(--accent); }
|
||||
.callout.warning { background: #fffbeb; border-color: #f59e0b; } .callout.warning .callout-title { color: #b45309; }
|
||||
.callout.danger { background: #fef2f2; border-color: #ef4444; } .callout.danger .callout-title { color: #b91c1c; }
|
||||
.callout.check { background: #f0fdf4; border-color: #22c55e; } .callout.check .callout-title { color: #15803d; }
|
||||
|
||||
/* ---------- Coloration syntaxique (Pygments github-dark) ---------- */
|
||||
.code .c { color: #8B949E; font-style: italic } /* Comment */
|
||||
.code .err { color: #F85149 } /* Error */
|
||||
.code .esc { color: #E6EDF3 } /* Escape */
|
||||
.code .g { color: #E6EDF3 } /* Generic */
|
||||
.code .k { color: #FF7B72 } /* Keyword */
|
||||
.code .l { color: #A5D6FF } /* Literal */
|
||||
.code .n { color: #E6EDF3 } /* Name */
|
||||
.code .o { color: #FF7B72; font-weight: bold } /* Operator */
|
||||
.code .x { color: #E6EDF3 } /* Other */
|
||||
.code .p { color: #E6EDF3 } /* Punctuation */
|
||||
.code .ch { color: #8B949E; font-style: italic } /* Comment.Hashbang */
|
||||
.code .cm { color: #8B949E; font-style: italic } /* Comment.Multiline */
|
||||
.code .cp { color: #8B949E; font-weight: bold; font-style: italic } /* Comment.Preproc */
|
||||
.code .cpf { color: #8B949E; font-style: italic } /* Comment.PreprocFile */
|
||||
.code .c1 { color: #8B949E; font-style: italic } /* Comment.Single */
|
||||
.code .cs { color: #8B949E; font-weight: bold; font-style: italic } /* Comment.Special */
|
||||
.code .ge { color: #E6EDF3; font-style: italic } /* Generic.Emph */
|
||||
.code .ges { color: #E6EDF3; font-weight: bold; font-style: italic } /* Generic.EmphStrong */
|
||||
.code .gr { color: #FFA198 } /* Generic.Error */
|
||||
.code .gh { color: #79C0FF; font-weight: bold } /* Generic.Heading */
|
||||
.code .go { color: #8B949E } /* Generic.Output */
|
||||
.code .gp { color: #8B949E } /* Generic.Prompt */
|
||||
.code .gs { color: #E6EDF3; font-weight: bold } /* Generic.Strong */
|
||||
.code .gu { color: #79C0FF } /* Generic.Subheading */
|
||||
.code .gt { color: #FF7B72 } /* Generic.Traceback */
|
||||
.code .g-Underline { color: #E6EDF3; text-decoration: underline } /* Generic.Underline */
|
||||
.code .kc { color: #79C0FF } /* Keyword.Constant */
|
||||
.code .kd { color: #FF7B72 } /* Keyword.Declaration */
|
||||
.code .kn { color: #FF7B72 } /* Keyword.Namespace */
|
||||
.code .kp { color: #79C0FF } /* Keyword.Pseudo */
|
||||
.code .kr { color: #FF7B72 } /* Keyword.Reserved */
|
||||
.code .kt { color: #FF7B72 } /* Keyword.Type */
|
||||
.code .ld { color: #79C0FF } /* Literal.Date */
|
||||
.code .m { color: #A5D6FF } /* Literal.Number */
|
||||
.code .s { color: #A5D6FF } /* Literal.String */
|
||||
.code .na { color: #E6EDF3 } /* Name.Attribute */
|
||||
.code .nb { color: #E6EDF3 } /* Name.Builtin */
|
||||
.code .nc { color: #F0883E; font-weight: bold } /* Name.Class */
|
||||
.code .no { color: #79C0FF; font-weight: bold } /* Name.Constant */
|
||||
.code .nd { color: #D2A8FF; font-weight: bold } /* Name.Decorator */
|
||||
.code .ni { color: #FFA657 } /* Name.Entity */
|
||||
.code .ne { color: #F0883E; font-weight: bold } /* Name.Exception */
|
||||
.code .nf { color: #D2A8FF; font-weight: bold } /* Name.Function */
|
||||
.code .nl { color: #79C0FF; font-weight: bold } /* Name.Label */
|
||||
.code .nn { color: #FF7B72 } /* Name.Namespace */
|
||||
.code .nx { color: #E6EDF3 } /* Name.Other */
|
||||
.code .py { color: #79C0FF } /* Name.Property */
|
||||
.code .nt { color: #7EE787 } /* Name.Tag */
|
||||
.code .nv { color: #79C0FF } /* Name.Variable */
|
||||
.code .ow { color: #FF7B72; font-weight: bold } /* Operator.Word */
|
||||
.code .pm { color: #E6EDF3 } /* Punctuation.Marker */
|
||||
.code .w { color: #6E7681 } /* Text.Whitespace */
|
||||
.code .mb { color: #A5D6FF } /* Literal.Number.Bin */
|
||||
.code .mf { color: #A5D6FF } /* Literal.Number.Float */
|
||||
.code .mh { color: #A5D6FF } /* Literal.Number.Hex */
|
||||
.code .mi { color: #A5D6FF } /* Literal.Number.Integer */
|
||||
.code .mo { color: #A5D6FF } /* Literal.Number.Oct */
|
||||
.code .sa { color: #79C0FF } /* Literal.String.Affix */
|
||||
.code .sb { color: #A5D6FF } /* Literal.String.Backtick */
|
||||
.code .sc { color: #A5D6FF } /* Literal.String.Char */
|
||||
.code .dl { color: #79C0FF } /* Literal.String.Delimiter */
|
||||
.code .sd { color: #A5D6FF } /* Literal.String.Doc */
|
||||
.code .s2 { color: #A5D6FF } /* Literal.String.Double */
|
||||
.code .se { color: #79C0FF } /* Literal.String.Escape */
|
||||
.code .sh { color: #79C0FF } /* Literal.String.Heredoc */
|
||||
.code .si { color: #A5D6FF } /* Literal.String.Interpol */
|
||||
.code .sx { color: #A5D6FF } /* Literal.String.Other */
|
||||
.code .sr { color: #79C0FF } /* Literal.String.Regex */
|
||||
.code .s1 { color: #A5D6FF } /* Literal.String.Single */
|
||||
.code .ss { color: #A5D6FF } /* Literal.String.Symbol */
|
||||
.code .bp { color: #E6EDF3 } /* Name.Builtin.Pseudo */
|
||||
.code .fm { color: #D2A8FF; font-weight: bold } /* Name.Function.Magic */
|
||||
.code .vc { color: #79C0FF } /* Name.Variable.Class */
|
||||
.code .vg { color: #79C0FF } /* Name.Variable.Global */
|
||||
.code .vi { color: #79C0FF } /* Name.Variable.Instance */
|
||||
.code .vm { color: #79C0FF } /* Name.Variable.Magic */
|
||||
.code .il { color: #A5D6FF } /* Literal.Number.Integer.Long */
|
||||
Reference in New Issue
Block a user