/* ---------- 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 */