File size: 13,080 Bytes
8b468fc | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 | /* LogoLabs design system: warm charcoal ramp, one copper accent, Playfair Display +
* Inter + IBM Plex Mono. Tokens match web/index.html and the design-system zip. */
:root{
--paper:#1a1816;--card:#211f1c;--stage:#141210;--void:#0c0a09;--surface:#2a2724;--highlight:#35322e;
--ink:#faf8f5;--dim:rgba(250,248,245,.75);--faint:rgba(250,248,245,.55);--muted:rgba(250,248,245,.4);
--rule:rgba(250,248,245,.08);--rule2:#2a2724;
--accent:#c9754a;--accent-hover:#d4896a;--accent-ink:#1a1816;--accent-soft:rgba(201,117,74,.12);
--gold:#b8976c;--good:#34d399;--bad:#f87171;
--font-display:"Playfair Display",Georgia,serif;--font-body:"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
--font-mono:"IBM Plex Mono",ui-monospace,SFMono-Regular,Consolas,monospace;
}
*{box-sizing:border-box}
html{color-scheme:dark}
body{margin:0;background:var(--paper);color:var(--ink);font:16px/1.65 var(--font-body);
-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
a{color:var(--accent);text-decoration:none}
a:hover{color:var(--accent-hover)}
::selection{background:rgba(201,117,74,.35)}
/* top bar */
.top{position:sticky;top:0;z-index:10;display:flex;align-items:center;justify-content:space-between;
padding:0 20px;height:56px;background:rgba(26,24,22,.92);backdrop-filter:blur(8px);border-bottom:1px solid var(--rule)}
.brand{display:flex;align-items:center;gap:10px;color:var(--ink)}
.brand img{width:22px;height:22px}
.brand span{font-family:var(--font-display);font-weight:700;font-size:19px;letter-spacing:-.01em}
.toplinks{display:flex;gap:22px;font-size:13.5px;font-weight:500}
.toplinks a{color:var(--dim)}
.toplinks a:hover{color:var(--accent)}
/* shell: sidebar / article / toc rail */
.shell{display:grid;grid-template-columns:240px minmax(0,1fr) 200px;gap:0;max-width:1400px;margin:0 auto}
.side{border-right:1px solid var(--rule);padding:28px 18px 60px 24px;position:sticky;top:56px;
height:calc(100vh - 56px);overflow-y:auto;scrollbar-width:thin}
.side .grp{margin:0 0 22px}
.side .grp h4{margin:0 0 8px;font:500 10.5px/1 var(--font-mono);letter-spacing:.14em;text-transform:uppercase;
color:var(--muted)}
.side a{display:block;padding:4px 8px;margin:1px -8px;border-radius:6px;font-size:13.5px;color:var(--faint)}
.side a:hover{color:var(--ink);background:var(--card)}
.side a[aria-current]{color:var(--accent);background:var(--accent-soft)}
.side a .n{font:500 10.5px/1 var(--font-mono);color:var(--muted);margin-right:7px}
.side a[aria-current] .n{color:var(--accent)}
main{padding:44px 48px 90px;min-width:0}
article{max-width:46rem}
article h1,article h2,article h3,article h4{font-family:var(--font-display);font-weight:600;
letter-spacing:-.01em;line-height:1.2;color:var(--ink);scroll-margin-top:76px}
article h1{font-size:2.1rem;margin:0 0 18px}
article h2{font-size:1.45rem;margin:2.2em 0 .6em;padding-top:.7em;border-top:1px solid var(--rule)}
article h3{font-size:1.12rem;margin:1.8em 0 .5em}
article p{margin:0 0 1em;color:var(--dim)}
article li{color:var(--dim);margin:.3em 0}
article strong{color:var(--ink);font-weight:600}
article hr{border:0;border-top:1px solid var(--rule);margin:2.5em 0}
article img{max-width:100%;border-radius:10px;height:auto}
article a{text-decoration:underline;text-decoration-color:rgba(201,117,74,.35);text-underline-offset:3px}
article a:hover{text-decoration-color:var(--accent)}
.md-anchor{position:relative;top:-70px}
kbd{font-family:var(--font-mono);font-size:.8em;background:var(--surface);color:var(--ink);
border:1px solid var(--highlight);border-bottom-width:2px;border-radius:5px;padding:.05em .4em;white-space:nowrap}
code{font-family:var(--font-mono);font-size:.86em;background:var(--surface);
border:1px solid var(--rule);border-radius:5px;padding:.1em .35em;color:var(--ink)}
.codehilite{background:var(--stage)!important;border:1px solid var(--rule);border-radius:10px;
padding:14px 16px;overflow-x:auto;margin:0 0 1.2em}
.codehilite pre{margin:0;background:transparent!important}
.codehilite code{background:transparent;border:0;padding:0;font-size:13px;line-height:1.6}
table{border-collapse:collapse;width:100%;margin:0 0 1.2em;font-size:14px;display:block;overflow-x:auto}
th,td{border:1px solid var(--rule2);padding:7px 11px;text-align:left;vertical-align:top;color:var(--dim)}
th{background:var(--card);color:var(--ink);font-weight:600;font-size:13px}
tbody tr:nth-child(2n){background:rgba(250,248,245,.02)}
table code{white-space:nowrap}
blockquote{margin:0 0 1.2em;padding:10px 16px;border-left:3px solid var(--accent);
background:var(--accent-soft);border-radius:0 8px 8px 0}
blockquote p{margin:0 0 .5em;color:var(--ink)}
blockquote p:last-child{margin:0}
.math{overflow-x:auto;overflow-y:hidden;padding:6px 2px;margin:0 0 1.2em}
.katex-display{margin:.4em 0!important}
.katex{color:var(--ink)}
/* per-page toc rail */
.rail{padding:52px 20px 60px 0;position:sticky;top:56px;height:calc(100vh - 56px);overflow-y:auto}
.rail h5{margin:0 0 10px;font:500 10.5px/1 var(--font-mono);letter-spacing:.14em;text-transform:uppercase;
color:var(--muted)}
.rail ul{list-style:none;margin:0;padding:0}
.rail ul ul{padding-left:12px}
.rail a{display:block;padding:3px 0;font-size:12.5px;color:var(--muted);line-height:1.45}
.rail a:hover{color:var(--accent)}
.rail .l2>a{color:var(--faint)}
/* index hero */
.hero{padding:8px 0 34px;border-bottom:1px solid var(--rule);margin-bottom:34px}
.eyebrow{font:500 11px/1 var(--font-mono);letter-spacing:.22em;color:var(--accent);margin:0 0 14px}
.hero h1{font-family:var(--font-display);font-size:3.4rem;font-weight:700;letter-spacing:-.02em;margin:0 0 14px;line-height:1.05}
.hero .pitch{font-size:1.14rem;color:var(--faint);max-width:34rem;margin:0 0 24px}
.cta{display:flex;gap:12px;flex-wrap:wrap}
.btn{display:inline-block;padding:10px 20px;border-radius:999px;font-size:14px;font-weight:600;
border:1px solid var(--rule2);color:var(--ink);background:var(--card)}
.btn:hover{border-color:var(--highlight);color:var(--ink)}
.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.btn.primary:hover{background:var(--accent-hover);border-color:var(--accent-hover);color:var(--accent-ink)}
.btn.ghost{background:transparent}
/* pointer to the diagram edition */
.plainlink{margin:-6px 0 1.6em;font-size:14px}
.plainlink a{font-weight:500}
/* the mark before the wordmark in the hero */
.heromark{height:.8em;width:auto;vertical-align:-.08em;margin-right:.22em}
/* about block on the landing page */
.about{margin-top:3.2em;padding-top:1.4em;border-top:1px solid var(--rule)}
.about p{color:var(--faint);max-width:38rem}
/* prev / next */
.pagenav{display:flex;justify-content:space-between;gap:14px;margin-top:3.2em;padding-top:1.2em;
border-top:1px solid var(--rule)}
.pagenav a{flex:1;border:1px solid var(--rule2);background:var(--card);border-radius:10px;padding:11px 15px;
text-decoration:none}
.pagenav a:hover{border-color:rgba(201,117,74,.45)}
.pagenav .dir{display:block;font:500 10.5px/1 var(--font-mono);letter-spacing:.12em;color:var(--muted);margin-bottom:4px}
.pagenav .lbl{color:var(--ink);font-weight:600;font-size:14px}
.pagenav .next{text-align:right}
footer{border-top:1px solid var(--rule);padding:26px 24px;display:flex;justify-content:space-between;
gap:16px;flex-wrap:wrap;font-size:13px;color:var(--muted)}
footer a{color:var(--dim)}
footer a:hover{color:var(--accent)}
@media (max-width:1150px){.rail{display:none}.shell{grid-template-columns:220px minmax(0,1fr)}}
@media (max-width:820px){
.shell{grid-template-columns:minmax(0,1fr)}
.side{position:static;height:auto;border-right:0;border-bottom:1px solid var(--rule);padding:18px 24px}
.side .grp{display:inline-block;vertical-align:top;margin:0 26px 14px 0}
main{padding:30px 22px 70px}
.hero h1{font-size:2.5rem}
}
@font-face{font-family:"Inter";src:url("../fonts/inter-latin.woff2") format("woff2");font-weight:100 900;font-display:swap}
@font-face{font-family:"Playfair Display";src:url("../fonts/playfair-latin.woff2") format("woff2");font-weight:400 900;font-display:swap}
:root{--font-mono:ui-monospace,SFMono-Regular,Consolas,"Liberation Mono",monospace}
.side,.rail{top:0;height:100vh}
.side .guidebrand{display:flex;align-items:center;gap:9px;margin:0 0 22px;color:var(--ink)}
.side .guidebrand img{width:20px;height:20px}
.side .guidebrand span{font-family:var(--font-display);font-weight:700;font-size:17px}
.side .guidebrand:hover{background:none}
.guidenote{font-size:12px;color:var(--muted);margin:26px 0 0;line-height:1.5}
.shell{max-width:1320px}
pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.codehilite .hll { background-color: #2a2724 }
.codehilite { background: ; color: #FAF8F5 }
.codehilite .c { color: #8A837B; font-style: italic } /* Comment */
.codehilite .err { color: #F87171 } /* Error */
.codehilite .k { color: #C9754A } /* Keyword */
.codehilite .n { color: #FAF8F5 } /* Name */
.codehilite .o { color: #C9754A } /* Operator */
.codehilite .p { color: #BFB9B1 } /* Punctuation */
.codehilite .ch { color: #8A837B; font-style: italic } /* Comment.Hashbang */
.codehilite .cm { color: #8A837B; font-style: italic } /* Comment.Multiline */
.codehilite .cp { color: #8A837B; font-style: italic } /* Comment.Preproc */
.codehilite .cpf { color: #8A837B; font-style: italic } /* Comment.PreprocFile */
.codehilite .c1 { color: #8A837B; font-style: italic } /* Comment.Single */
.codehilite .cs { color: #8A837B; font-style: italic } /* Comment.Special */
.codehilite .gd { color: #F87171 } /* Generic.Deleted */
.codehilite .ge { font-style: italic } /* Generic.Emph */
.codehilite .gi { color: #34D399 } /* Generic.Inserted */
.codehilite .gs { font-weight: bold } /* Generic.Strong */
.codehilite .kc { color: #C9754A } /* Keyword.Constant */
.codehilite .kd { color: #C9754A } /* Keyword.Declaration */
.codehilite .kn { color: #C9754A } /* Keyword.Namespace */
.codehilite .kp { color: #C9754A } /* Keyword.Pseudo */
.codehilite .kr { color: #C9754A } /* Keyword.Reserved */
.codehilite .kt { color: #B8976C } /* Keyword.Type */
.codehilite .m { color: #B8976C } /* Literal.Number */
.codehilite .s { color: #34D399 } /* Literal.String */
.codehilite .na { color: #B8976C } /* Name.Attribute */
.codehilite .nb { color: #B8976C } /* Name.Builtin */
.codehilite .nc { color: #D4896A } /* Name.Class */
.codehilite .no { color: #FAF8F5 } /* Name.Constant */
.codehilite .nd { color: #D4896A } /* Name.Decorator */
.codehilite .ni { color: #FAF8F5 } /* Name.Entity */
.codehilite .ne { color: #FAF8F5 } /* Name.Exception */
.codehilite .nf { color: #D4896A } /* Name.Function */
.codehilite .nl { color: #FAF8F5 } /* Name.Label */
.codehilite .nn { color: #FAF8F5 } /* Name.Namespace */
.codehilite .nx { color: #FAF8F5 } /* Name.Other */
.codehilite .py { color: #FAF8F5 } /* Name.Property */
.codehilite .nt { color: #C9754A } /* Name.Tag */
.codehilite .nv { color: #FAF8F5 } /* Name.Variable */
.codehilite .ow { color: #C9754A } /* Operator.Word */
.codehilite .pm { color: #BFB9B1 } /* Punctuation.Marker */
.codehilite .w { color: #FAF8F5 } /* Text.Whitespace */
.codehilite .mb { color: #B8976C } /* Literal.Number.Bin */
.codehilite .mf { color: #B8976C } /* Literal.Number.Float */
.codehilite .mh { color: #B8976C } /* Literal.Number.Hex */
.codehilite .mi { color: #B8976C } /* Literal.Number.Integer */
.codehilite .mo { color: #B8976C } /* Literal.Number.Oct */
.codehilite .sa { color: #34D399 } /* Literal.String.Affix */
.codehilite .sb { color: #34D399 } /* Literal.String.Backtick */
.codehilite .sc { color: #34D399 } /* Literal.String.Char */
.codehilite .dl { color: #34D399 } /* Literal.String.Delimiter */
.codehilite .sd { color: #34D399 } /* Literal.String.Doc */
.codehilite .s2 { color: #34D399 } /* Literal.String.Double */
.codehilite .se { color: #34D399 } /* Literal.String.Escape */
.codehilite .sh { color: #34D399 } /* Literal.String.Heredoc */
.codehilite .si { color: #34D399 } /* Literal.String.Interpol */
.codehilite .sx { color: #34D399 } /* Literal.String.Other */
.codehilite .sr { color: #34D399 } /* Literal.String.Regex */
.codehilite .s1 { color: #34D399 } /* Literal.String.Single */
.codehilite .ss { color: #34D399 } /* Literal.String.Symbol */
.codehilite .bp { color: #B8976C } /* Name.Builtin.Pseudo */
.codehilite .fm { color: #D4896A } /* Name.Function.Magic */
.codehilite .vc { color: #FAF8F5 } /* Name.Variable.Class */
.codehilite .vg { color: #FAF8F5 } /* Name.Variable.Global */
.codehilite .vi { color: #FAF8F5 } /* Name.Variable.Instance */
.codehilite .vm { color: #FAF8F5 } /* Name.Variable.Magic */
.codehilite .il { color: #B8976C } /* Literal.Number.Integer.Long */
|