eleven / ocho Public

Clone
git clone https://amadan.net/eleven/ocho

Plain git — no account needed to clone.

Download

Download this file

1/* đŸ¤– Shared stylesheet for the planet-scale operations guide.
2 One file styles every page; edit here and every page follows.
3 Design notes: warm paper + slate-blue ink, serif body for long reading,
4 sans headings, mono for anything typed into a terminal. Light and dark
5 are both first-class (prefers-color-scheme plus a data-theme override). */
6
7:root {
8 --paper: #fbfaf7;
9 --ink: #232f3c;
10 --muted: #5d6b77;
11 --accent: #29618e;
12 --accent-ink: #1d4d75;
13 --accent-soft: rgba(41, 97, 142, 0.09);
14 --signal: #a05a18;
15 --signal-soft: rgba(160, 90, 24, 0.10);
16 --good: #2f7a55;
17 --good-soft: rgba(47, 122, 85, 0.10);
18 --card: #ffffff;
19 --rule: #dfdcd2;
20 --shade: #f2f0e9;
21 --diagram-box: #eef1ec;
22 --mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, monospace;
23 --serif: Charter, "Bitstream Charter", "Iowan Old Style", Georgia, serif;
24 --sans: -apple-system, "Segoe UI", system-ui, sans-serif;
25}
26@media (prefers-color-scheme: dark) {
27 :root {
28 --paper: #141b22;
29 --ink: #d9e2ea;
30 --muted: #8fa0ae;
31 --accent: #7fb3dc;
32 --accent-ink: #9cc6e8;
33 --accent-soft: rgba(127, 179, 220, 0.12);
34 --signal: #dca35c;
35 --signal-soft: rgba(220, 163, 92, 0.12);
36 --good: #6cbf94;
37 --good-soft: rgba(108, 191, 148, 0.12);
38 --card: #1b242e;
39 --rule: #2a3641;
40 --shade: #19222b;
41 --diagram-box: #1e2933;
42 }
43}
44:root[data-theme="dark"] {
45 --paper: #141b22; --ink: #d9e2ea; --muted: #8fa0ae; --accent: #7fb3dc;
46 --accent-ink: #9cc6e8; --accent-soft: rgba(127, 179, 220, 0.12);
47 --signal: #dca35c; --signal-soft: rgba(220, 163, 92, 0.12);
48 --good: #6cbf94; --good-soft: rgba(108, 191, 148, 0.12);
49 --card: #1b242e; --rule: #2a3641; --shade: #19222b; --diagram-box: #1e2933;
50}
51:root[data-theme="light"] {
52 --paper: #fbfaf7; --ink: #232f3c; --muted: #5d6b77; --accent: #29618e;
53 --accent-ink: #1d4d75; --accent-soft: rgba(41, 97, 142, 0.09);
54 --signal: #a05a18; --signal-soft: rgba(160, 90, 24, 0.10);
55 --good: #2f7a55; --good-soft: rgba(47, 122, 85, 0.10);
56 --card: #ffffff; --rule: #dfdcd2; --shade: #f2f0e9; --diagram-box: #eef1ec;
57}
58
59html { background: var(--paper); scroll-behavior: smooth; }
60@media (prefers-reduced-motion: reduce) {
61 html { scroll-behavior: auto; }
62 * { animation: none !important; transition: none !important; }
63}
64body {
65 margin: 0;
66 color: var(--ink);
67 background: var(--paper);
68 font: 17px/1.7 var(--serif);
69 -webkit-text-size-adjust: 100%;
70}
71
72/* ---- page frame: sidebar + content ---- */
73.frame { display: flex; min-height: 100vh; }
74nav.side {
75 width: 250px;
76 flex: none;
77 border-right: 1px solid var(--rule);
78 padding: 28px 20px 40px;
79 box-sizing: border-box;
80 position: sticky;
81 top: 0;
82 align-self: flex-start;
83 max-height: 100vh;
84 overflow-y: auto;
85 font-family: var(--sans);
86}
87nav.side .brand {
88 font: 700 15px/1.3 var(--sans);
89 margin: 0 0 4px;
90 letter-spacing: -0.01em;
91}
92nav.side .brand a { color: var(--ink); text-decoration: none; }
93nav.side .brand-sub {
94 font: 400 12px/1.5 var(--sans);
95 color: var(--muted);
96 margin: 0 0 20px;
97}
98nav.side ol { list-style: none; margin: 0; padding: 0; }
99nav.side li { margin: 0 0 2px; }
100nav.side a {
101 display: flex;
102 gap: 9px;
103 align-items: baseline;
104 padding: 6px 9px;
105 border-radius: 7px;
106 color: var(--ink);
107 text-decoration: none;
108 font: 400 13.5px/1.4 var(--sans);
109}
110nav.side a .num {
111 font: 600 10.5px/1 var(--mono);
112 color: var(--muted);
113 min-width: 16px;
114}
115nav.side a:hover { background: var(--accent-soft); }
116nav.side a[aria-current="page"] {
117 background: var(--accent-soft);
118 color: var(--accent-ink);
119 font-weight: 600;
120}
121nav.side a[aria-current="page"] .num { color: var(--accent-ink); }
122nav.side a:focus-visible,
123a:focus-visible, button:focus-visible, summary:focus-visible {
124 outline: 2px solid var(--accent);
125 outline-offset: 2px;
126}
127
128main.content { flex: 1; min-width: 0; }
129.wrap { max-width: 730px; margin: 0 auto; padding: 0 28px 110px; }
130
131@media (max-width: 900px) {
132 .frame { display: block; }
133 nav.side {
134 position: static;
135 width: auto;
136 max-height: none;
137 border-right: none;
138 border-bottom: 1px solid var(--rule);
139 padding: 18px 20px;
140 }
141 nav.side ol { display: flex; flex-wrap: wrap; gap: 2px 6px; }
142 .wrap { padding: 0 20px 80px; }
143}
144
145/* ---- page header ---- */
146header.top { padding: 54px 0 6px; }
147.eyebrow {
148 font: 600 12px/1.4 var(--sans);
149 letter-spacing: 0.13em;
150 text-transform: uppercase;
151 color: var(--accent);
152 margin: 0 0 14px;
153}
154.eyebrow .robot { letter-spacing: 0; margin-right: 6px; }
155h1 {
156 font: 700 clamp(29px, 4.6vw, 38px)/1.14 var(--sans);
157 letter-spacing: -0.015em;
158 margin: 0 0 14px;
159 text-wrap: balance;
160}
161.thesis {
162 font-size: 19px;
163 line-height: 1.6;
164 color: var(--muted);
165 margin: 0 0 10px;
166 text-wrap: balance;
167}
168.thesis strong { color: var(--ink); font-weight: 600; }
169
170h2 {
171 font: 700 23px/1.28 var(--sans);
172 letter-spacing: -0.01em;
173 margin: 62px 0 12px;
174 text-wrap: balance;
175}
176h3 { font: 650 17.5px/1.35 var(--sans); margin: 36px 0 10px; }
177h4 { font: 650 15px/1.4 var(--sans); margin: 26px 0 8px; }
178p { margin: 0 0 17px; }
179ul, ol { margin: 0 0 17px; padding-left: 26px; }
180li { margin: 0 0 7px; }
181a { color: var(--accent-ink); text-decoration-color: color-mix(in srgb, var(--accent) 45%, transparent); text-underline-offset: 2.5px; }
182a:hover { text-decoration-color: var(--accent); }
183strong { font-weight: 650; }
184hr { border: none; border-top: 1px solid var(--rule); margin: 48px 0; }
185
186/* Anchored headings get a hover ¶ link (added by guide.js). */
187.hlink {
188 margin-left: 8px;
189 font: 400 0.75em var(--sans);
190 color: var(--muted);
191 text-decoration: none;
192 opacity: 0;
193}
194h2:hover .hlink, h3:hover .hlink, .hlink:focus-visible { opacity: 1; }
195
196/* ---- code ---- */
197code {
198 font: 0.85em var(--mono);
199 background: var(--accent-soft);
200 padding: 1px 5px;
201 border-radius: 4px;
202 overflow-wrap: break-word;
203}
204pre {
205 font: 13px/1.65 var(--mono);
206 background: var(--card);
207 border: 1px solid var(--rule);
208 border-radius: 10px;
209 padding: 14px 16px;
210 overflow-x: auto;
211 margin: 16px 0;
212}
213pre code { background: transparent; padding: 0; }
214pre .comment { color: var(--muted); }
215pre .out { color: var(--muted); }
216
217/* A command block with a labelled title bar: where to run it, as whom. */
218figure.cmd { margin: 22px 0; }
219figure.cmd figcaption {
220 font: 600 11.5px/1.4 var(--sans);
221 letter-spacing: 0.08em;
222 text-transform: uppercase;
223 color: var(--muted);
224 background: var(--shade);
225 border: 1px solid var(--rule);
226 border-bottom: none;
227 border-radius: 10px 10px 0 0;
228 padding: 7px 16px;
229}
230figure.cmd pre { margin: 0; border-radius: 0 0 10px 10px; }
231
232/* ---- asides / panels ---- */
233.plain {
234 background: var(--accent-soft);
235 border-left: 3px solid var(--accent);
236 border-radius: 0 10px 10px 0;
237 padding: 14px 18px 4px;
238 margin: 24px 0;
239}
240.plain .label, .warn .label, .why .label {
241 display: block;
242 font: 700 11.5px/1 var(--sans);
243 letter-spacing: 0.11em;
244 text-transform: uppercase;
245 margin: 0 0 9px;
246}
247.plain .label { color: var(--accent-ink); }
248.plain p { margin-bottom: 12px; }
249.warn {
250 background: var(--signal-soft);
251 border-left: 3px solid var(--signal);
252 border-radius: 0 10px 10px 0;
253 padding: 14px 18px 4px;
254 margin: 24px 0;
255}
256.warn .label { color: var(--signal); }
257.warn p { margin-bottom: 12px; }
258.why {
259 background: var(--good-soft);
260 border-left: 3px solid var(--good);
261 border-radius: 0 10px 10px 0;
262 padding: 14px 18px 4px;
263 margin: 24px 0;
264}
265.why .label { color: var(--good); }
266.why p { margin-bottom: 12px; }
267
268/* ---- step-by-step procedures ---- */
269ol.procedure { list-style: none; padding: 0; margin: 26px 0; counter-reset: step; }
270ol.procedure > li {
271 counter-increment: step;
272 position: relative;
273 padding: 0 0 26px 58px;
274 margin: 0;
275}
276ol.procedure > li::before {
277 content: counter(step);
278 position: absolute;
279 left: 0;
280 top: 1px;
281 width: 34px;
282 height: 34px;
283 border-radius: 50%;
284 background: var(--accent-soft);
285 color: var(--accent-ink);
286 font: 700 15px/34px var(--sans);
287 text-align: center;
288}
289ol.procedure > li::after {
290 content: "";
291 position: absolute;
292 left: 16.5px;
293 top: 42px;
294 bottom: 6px;
295 width: 1px;
296 background: var(--rule);
297}
298ol.procedure > li:last-child::after { display: none; }
299ol.procedure > li > .step-title {
300 font: 650 16px/1.4 var(--sans);
301 margin: 5px 0 8px;
302}
303ol.procedure pre { margin: 12px 0; }
304ol.procedure figure.cmd { margin: 12px 0; }
305
306/* ---- tables ---- */
307.tablewrap { overflow-x: auto; margin: 20px 0; }
308table {
309 border-collapse: collapse;
310 width: 100%;
311 font: 14px/1.55 var(--sans);
312}
313th {
314 text-align: left;
315 font: 650 12px/1.4 var(--sans);
316 letter-spacing: 0.07em;
317 text-transform: uppercase;
318 color: var(--muted);
319 border-bottom: 2px solid var(--rule);
320 padding: 8px 14px 8px 0;
321 white-space: nowrap;
322}
323td {
324 border-bottom: 1px solid var(--rule);
325 padding: 9px 14px 9px 0;
326 vertical-align: top;
327}
328td code, th code { white-space: nowrap; }
329td:last-child, th:last-child { padding-right: 0; }
330
331/* ---- the system map (the "you are here" diagram) ---- */
332.sysmap {
333 margin: 30px 0 8px;
334 border: 1px solid var(--rule);
335 border-radius: 12px;
336 background: var(--card);
337 padding: 14px 10px 6px;
338}
339.sysmap svg { display: block; width: 100%; height: auto; }
340.sysmap-caption {
341 font: 13px/1.6 var(--sans);
342 color: var(--muted);
343 margin: 8px 0 26px;
344}
345.sysmap text { font-family: var(--sans); fill: var(--ink); }
346.sysmap .boxlabel { font-size: 11.5px; font-weight: 600; }
347.sysmap .sublabel { font-size: 9.5px; fill: var(--muted); }
348.sysmap .zonelabel { font-size: 9.5px; font-weight: 700; letter-spacing: 0.09em; fill: var(--muted); }
349.sysmap rect.node { fill: var(--diagram-box); stroke: var(--rule); stroke-width: 1; rx: 7; }
350.sysmap rect.zone { fill: none; stroke: var(--rule); stroke-width: 1; stroke-dasharray: 4 4; rx: 10; }
351.sysmap line.wire, .sysmap path.wire { stroke: var(--muted); stroke-width: 1.2; fill: none; }
352.sysmap .here rect.node { fill: var(--accent-soft); stroke: var(--accent); stroke-width: 1.6; }
353.sysmap .here text.boxlabel { fill: var(--accent-ink); }
354
355/* generic figure/diagram captions */
356.caption { font: 13px/1.6 var(--sans); color: var(--muted); margin: 10px 0 24px; }
357figure { margin: 26px 0; }
358figure.diagram {
359 border: 1px solid var(--rule);
360 border-radius: 12px;
361 background: var(--card);
362 padding: 16px 12px 8px;
363}
364figure.diagram svg { display: block; width: 100%; height: auto; }
365figure.diagram text { font-family: var(--sans); fill: var(--ink); }
366figure.diagram figcaption { font: 13px/1.6 var(--sans); color: var(--muted); padding: 8px 8px 6px; }
367
368/* ---- definition lists (for flags, env vars) ---- */
369dl { margin: 0 0 20px; }
370dt { font: 600 14.5px/1.5 var(--sans); margin: 18px 0 4px; }
371dt code { font-size: 13.5px; }
372dd { margin: 0 0 10px 0; padding-left: 18px; border-left: 2px solid var(--rule); }
373
374/* ---- build-status badges: what is real and what is aspirational ---- */
375.status {
376 display: inline-block;
377 font: 700 10.5px/1 var(--sans);
378 letter-spacing: 0.08em;
379 text-transform: uppercase;
380 padding: 4px 9px 3px;
381 border-radius: 999px;
382 vertical-align: 2px;
383 white-space: nowrap;
384}
385.status.built { background: var(--good-soft); color: var(--good); border: 1px solid color-mix(in srgb, var(--good) 40%, transparent); }
386.status.partial { background: var(--signal-soft); color: var(--signal); border: 1px solid color-mix(in srgb, var(--signal) 40%, transparent); }
387.status.planned { background: var(--shade); color: var(--muted); border: 1px dashed color-mix(in srgb, var(--muted) 55%, transparent); }
388
389/* A framed panel for describing designed-but-unbuilt behaviour, so aspirational
390 material never reads as something an operator could run today. */
391.roadmap {
392 border: 1px dashed color-mix(in srgb, var(--muted) 55%, transparent);
393 border-radius: 12px;
394 background: var(--shade);
395 padding: 16px 20px 6px;
396 margin: 24px 0;
397}
398.roadmap .label {
399 display: block;
400 font: 700 11.5px/1 var(--sans);
401 letter-spacing: 0.11em;
402 text-transform: uppercase;
403 color: var(--muted);
404 margin: 0 0 9px;
405}
406.roadmap p { margin-bottom: 12px; }
407
408/* ---- prev / next footer ---- */
409footer.pager {
410 display: flex;
411 gap: 14px;
412 justify-content: space-between;
413 margin: 70px 0 0;
414 padding-top: 26px;
415 border-top: 1px solid var(--rule);
416 font-family: var(--sans);
417}
418footer.pager a {
419 flex: 1;
420 max-width: 48%;
421 border: 1px solid var(--rule);
422 border-radius: 10px;
423 padding: 12px 16px;
424 text-decoration: none;
425 color: var(--ink);
426 background: var(--card);
427}
428footer.pager a:hover { border-color: var(--accent); }
429footer.pager .dir {
430 display: block;
431 font: 600 11px/1 var(--sans);
432 letter-spacing: 0.1em;
433 text-transform: uppercase;
434 color: var(--muted);
435 margin-bottom: 6px;
436}
437footer.pager .dest { font: 600 14px/1.4 var(--sans); color: var(--accent-ink); }
438footer.pager a.next { text-align: right; margin-left: auto; }
439footer.colophon {
440 font: 12.5px/1.7 var(--sans);
441 color: var(--muted);
442 margin-top: 30px;
443}
444footer.colophon a { color: var(--muted); }
445