/* Dossier technique MacLustr — feuille d'impression (A4 paysage) */ @page { size: A4 landscape; margin: 13mm 14mm 15mm 14mm; } :root { --ink: #0f1115; --ink-2: #4b5060; --ink-3: #868b99; --line: #dfe2ea; --line-2: #c9cdd8; --paper: #ffffff; --paper-2: #f5f6f9; --paper-3: #eceef4; --accent: #2563eb; --accent-2: #1d4ed8; --accent-dim: #e8effd; --alt: #7c3aed; --good: #16a34a; --bad: #dc2626; --off: #9aa0ae; --sans: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Helvetica Neue", Inter, Arial, sans-serif; --mono: "SF Mono", ui-monospace, Menlo, Consolas, monospace; } * { box-sizing: border-box; } html, body { margin: 0; padding: 0; } body { font: 9pt/1.42 var(--sans); color: var(--ink); background: var(--paper); -webkit-print-color-adjust: exact; print-color-adjust: exact; } h1, h2, h3, h4 { margin: 0; letter-spacing: -.02em; line-height: 1.12; } p { margin: 0 0 6px; } code { font: 8.4pt var(--mono); background: var(--paper-2); border: 1px solid var(--line); border-radius: 3px; padding: 0 3px; color: var(--accent-2); } strong { font-weight: 650; } .mono { font-family: var(--mono); } .small { font-size: 8pt; } .faint { color: var(--ink-3); } .r { text-align: right; } .nw { white-space: nowrap; } .logo { width: 22px; height: 22px; color: var(--accent); vertical-align: middle; } .brand { display: inline-flex; align-items: center; gap: 8px; font-weight: 700; font-size: 13pt; letter-spacing: -.02em; } .eyebrow { font-size: 7.6pt; text-transform: uppercase; letter-spacing: .14em; color: var(--ink-3); font-weight: 600; margin: 0 0 8px; } /* ---------- couverture ---------- */ body.cover { background: #09090b; color: #f4f4f5; width: 297mm; height: 210mm; overflow: hidden; } .cover .kpi { background: #111114; border: 0; border-radius: 0; } .cover .kpi b { color: #fff; } .cover .kpi span { color: #a1a1aa; } .cover .kpi small { color: #6b6b76; } .cv { position: relative; width: 297mm; height: 210mm; overflow: hidden; padding: 14mm 18mm; display: flex; flex-direction: column; justify-content: space-between; background: radial-gradient(70% 55% at 80% 0%, rgba(96,165,250,.16), transparent 70%), #09090b; } .cv::after { content: ""; position: absolute; inset: 0; background-image: linear-gradient(rgba(255,255,255,.035) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,.035) 1px, transparent 1px); background-size: 14mm 14mm; -webkit-mask-image: radial-gradient(ellipse at 50% 0%, #000 0%, transparent 75%); mask-image: radial-gradient(ellipse at 50% 0%, #000 0%, transparent 75%); pointer-events: none; } .cv > * { position: relative; z-index: 1; } .cv .brand { color: #f4f4f5; } .cv .logo { color: #60a5fa; } .cv-top { display: flex; justify-content: space-between; align-items: center; color: #a1a1aa; font-size: 9pt; } .cv-mid { max-width: 190mm; } .cv .eyebrow { color: #a1a1aa; } .cv h1 { font-size: 52pt; font-weight: 750; letter-spacing: -.04em; line-height: .96; color: #fff; } .cv h1 span { color: #6b6b76; } .cv .sub { margin-top: 7mm; font-size: 11.5pt; line-height: 1.5; color: #c9cbd3; max-width: 160mm; } .cv-facts { display: grid; grid-template-columns: repeat(6, 1fr); border: 1px solid #26262d; border-radius: 10px; overflow: hidden; background: #111114; } .cv-facts .kpi { padding: 5mm 5mm; border-right: 1px solid #26262d; } .cv-facts .kpi:last-child { border-right: 0; } .cv-facts .kpi b { display: block; font: 600 22pt/1.05 var(--mono); letter-spacing: -.03em; color: #fff; } .cv-facts .kpi span { display: block; color: #a1a1aa; font-size: 8.6pt; margin-top: 2px; } .cv-facts .kpi small { display: block; color: #6b6b76; font: 7.6pt var(--mono); margin-top: 4px; } .cv-bot { display: flex; justify-content: space-between; color: #6b6b76; font-size: 8.4pt; } /* ---------- corps ---------- */ .sec { break-before: page; } .sec:first-child { break-before: auto; } .sec-h { display: flex; align-items: baseline; gap: 12px; border-bottom: 2px solid var(--ink); padding-bottom: 6px; margin-bottom: 10px; } .sec-h .num { font: 600 11pt var(--mono); color: var(--accent); } .sec-h h2 { font-size: 20pt; font-weight: 700; } h3 { font-size: 12pt; font-weight: 650; margin: 10px 0 5px; break-after: avoid; display: flex; align-items: baseline; gap: 8px; } h3 .cnt { font: 500 8.5pt var(--mono); color: var(--ink-3); } h4 { font-size: 9.5pt; font-weight: 650; color: var(--ink-2); text-transform: uppercase; letter-spacing: .08em; margin-bottom: 8px; } .lead { color: var(--ink-2); font-size: 9.1pt; max-width: 245mm; margin-bottom: 4px; } .lead.big { font-size: 12pt; line-height: 1.5; color: var(--ink); margin-bottom: 10px; } .note { color: var(--ink-3); font-size: 8.4pt; margin-top: 4px; } .two { display: grid; grid-template-columns: 1fr 1fr; gap: 10mm; align-items: start; } .three-col { display: grid; grid-template-columns: 1.1fr 1fr 1.2fr; gap: 5mm; align-items: start; } .kpis { display: grid; grid-template-columns: repeat(6, 1fr); gap: 4mm; margin: 6px 0 4px; } .kpis.three { grid-template-columns: repeat(3, 1fr); } .kpi { border: 1px solid var(--line); border-radius: 8px; padding: 7px 10px; background: var(--paper); break-inside: avoid; } .kpi b { display: block; font: 600 17pt/1.05 var(--mono); letter-spacing: -.03em; } .kpi span { display: block; color: var(--ink-2); font-size: 8.4pt; margin-top: 2px; } .kpi small { display: block; color: var(--ink-3); font: 7.4pt var(--mono); margin-top: 4px; } .toc { border: 1px solid var(--line); border-radius: 8px; padding: 10px 12px; background: var(--paper-2); } .toc div { display: flex; gap: 10px; padding: 3px 0; border-bottom: 1px dashed var(--line); font-size: 9pt; } .toc div:last-child { border-bottom: 0; } .toc .num { font: 600 8.4pt var(--mono); color: var(--accent); width: 18px; } /* tables */ table.t { width: 100%; border-collapse: collapse; margin: 4px 0 10px; font-size: 8.2pt; break-inside: auto; } table.t th { text-align: left; font-size: 7.4pt; text-transform: uppercase; letter-spacing: .06em; color: var(--ink-3); font-weight: 600; padding: 5px 6px; border-bottom: 1.5px solid var(--ink); white-space: nowrap; } table.t th.r { text-align: right; } table.t td { padding: 4px 6px; border-bottom: 1px solid var(--line); vertical-align: top; overflow-wrap: anywhere; } table.t tr { break-inside: avoid; } table.t thead { display: table-header-group; } table.t td.id { font: 600 8.4pt var(--mono); white-space: nowrap; color: var(--ink); } table.t td.mono, .mono { font-family: var(--mono); } table.t td code { font-size: 7.6pt; } table.t.hw { font-size: 7.5pt; } table.t.hw td { padding: 3px 4px; line-height: 1.3; } table.t.over td:first-child, table.t.models td:first-child { font-weight: 500; } table.t.roles td { font-size: 7.4pt; padding: 3px 5px; line-height: 1.3; } .roles-page { break-before: page; } .keep { break-inside: avoid; } table.t.ovh td { font-size: 7.4pt; line-height: 1.3; } table.t.ovh td:nth-child(6) { min-width: 34mm; } table.t.ovh td code { white-space: normal; word-break: break-all; } .kpis.stack { grid-template-columns: 1fr; gap: 3mm; } table.t.tun td:first-child { font: 600 8pt var(--mono); } table.t.apps td { font-size: 7.8pt; padding: 3px 6px; } .app-group { margin-bottom: 4px; } table.t.heat td, table.t.bars td { vertical-align: middle; } table.t.bars td { padding: 3px 6px; } table.t.bars td small { line-height: 1.1; } td small { color: var(--ink-3); font-size: 7.4pt; } /* barres */ .meter { white-space: nowrap; } .bar { display: inline-block; width: 52%; height: 6px; border-radius: 3px; background: var(--paper-3); vertical-align: middle; overflow: hidden; margin-right: 6px; } .bar i { display: block; height: 100%; background: var(--accent); border-radius: 3px; } .bar.alt i { background: var(--alt); } .meter.wide .bar { width: 58%; } .meter .v { font: 7.8pt var(--mono); color: var(--ink-2); vertical-align: middle; } /* statuts */ .st { display: inline-block; padding: 1px 7px; border-radius: 999px; font-size: 7.2pt; font-weight: 600; border: 1px solid var(--line-2); color: var(--ink-2); white-space: nowrap; } .st::before { content: ""; display: inline-block; width: 5px; height: 5px; border-radius: 50%; background: var(--off); margin-right: 5px; vertical-align: middle; } .st.on { color: #166534; border-color: #bbf7d0; background: #f0fdf4; } .st.on::before { background: var(--good); } .st.bad { color: #991b1b; border-color: #fecaca; background: #fef2f2; } .st.bad::before { background: var(--bad); } .st.off { color: var(--ink-3); background: var(--paper-2); } /* fiches, panneaux */ .fiches p { padding: 6px 9px; border-left: 3px solid var(--accent); background: var(--paper-2); border-radius: 0 6px 6px 0; margin-bottom: 5px; font-size: 8pt; break-inside: avoid; } .panel { border: 1px solid var(--line); border-radius: 8px; padding: 10px 12px; margin-bottom: 8px; break-inside: avoid; } .flow { margin: 0; padding: 0; list-style: none; counter-reset: f; } .flow li { display: grid; grid-template-columns: 20px 1fr; gap: 8px; align-items: start; padding: 5px 0; border-bottom: 1px dashed var(--line); font-size: 8.6pt; } .flow li:last-child { border-bottom: 0; } .flow li::before { counter-increment: f; content: counter(f, decimal-leading-zero); font: 600 8pt var(--mono); color: var(--accent); } .flow li b { display: block; font-weight: 650; } .flow li div span { color: var(--ink-2); display: block; } .gw { display: grid; grid-template-columns: 70px 1fr; gap: 2px 10px; padding: 6px 0; border-bottom: 1px dashed var(--line); font-size: 8.6pt; } .gw:last-child { border-bottom: 0; } .gw b { font: 600 9pt var(--mono); grid-row: span 2; align-self: center; } .gw span { color: var(--ink-2); } .gw .mono { font-size: 7.8pt; color: var(--ink-3); } /* carte et sites */ figure.map { margin: 0 0 8px; break-inside: avoid; } figure.map img { width: 100%; height: 78mm; object-fit: cover; object-position: center 40%; border-radius: 8px; border: 1px solid var(--line); display: block; } figure.map figcaption { font-size: 7.8pt; color: var(--ink-3); margin-top: 4px; } .sites { display: grid; grid-template-columns: repeat(4, 1fr); gap: 3mm; margin-top: 6px; } .site { border: 1px solid var(--line); border-radius: 8px; padding: 7px 9px; break-inside: avoid; } .site .s-h { display: flex; justify-content: space-between; align-items: baseline; gap: 6px; font-size: 9.8pt; } .site .s-h .mono { font-size: 8pt; color: var(--ink-2); } .site .s-r { color: var(--ink-3); font-size: 7.8pt; margin: 2px 0 6px; } .site p { font-size: 7.5pt; color: var(--ink-2); min-height: 20px; margin-bottom: 3px; } .site .s-n { display: flex; flex-wrap: wrap; gap: 3px; } .site .s-n span { font: 7.4pt var(--mono); padding: 1px 5px; border-radius: 4px; background: var(--paper-2); border: 1px solid var(--line); } .end { display: flex; align-items: center; gap: 8px; margin-top: 18px; color: var(--ink-3); font: 8.4pt var(--mono); }