返回 DeepSeek-Reasonix
global.css
根目录 / site / src / styles / global.css
1 /* Reasonix site — one accent, hairline borders, tight radii, flat surfaces.
2 Light/dark via [data-theme] on <html>; every color is a token. */
3 @import '@fontsource-variable/inter';
4 @import '@fontsource-variable/jetbrains-mono';
5
6 :root {
7 color-scheme: light;
8 --acc-1: #4f9dff;
9 --acc-2: #7a6bff;
10 --acc-3: #c46bff;
11 --accent: oklch(0.55 0.17 257);
12 --accent-deep: oklch(0.48 0.17 257);
13 --accent-soft: color-mix(in oklch, var(--accent) 8%, var(--bg));
14 --bg: #ffffff;
15 --bg-soft: oklch(0.976 0.0025 247);
16 --ink: oklch(0.21 0.006 260);
17 --ink-2: oklch(0.45 0.008 260);
18 --ink-3: oklch(0.6 0.008 260);
19 --line: oklch(0.905 0.004 247);
20 --card: #ffffff;
21 --term-bg: oklch(0.21 0.006 260);
22 --term-edge: oklch(0.31 0.008 260);
23 --radius: 13px;
24 --radius-sm: 9px;
25 --shadow-1: 0 1px 2px oklch(0.35 0.01 260 / 0.08);
26 --shadow-2: 0 1px 2px oklch(0.35 0.01 260 / 0.06), 0 12px 32px -16px oklch(0.35 0.01 260 / 0.24);
27 --font-sans: "Inter Variable", "Inter", "Helvetica Neue", "PingFang SC", "Microsoft YaHei", sans-serif;
28 --font-mono: "JetBrains Mono Variable", "JetBrains Mono", "SF Mono", Menlo, monospace;
29 --ease: cubic-bezier(0.22, 1, 0.36, 1);
30 }
31
32 :root[data-theme="dark"] {
33 color-scheme: dark;
34 --accent: oklch(0.66 0.16 257);
35 --accent-deep: oklch(0.73 0.14 257);
36 --accent-soft: color-mix(in oklch, var(--accent) 16%, var(--bg));
37 --bg: oklch(0.19 0.006 260);
38 --bg-soft: oklch(0.225 0.008 260);
39 --ink: oklch(0.93 0.004 260);
40 --ink-2: oklch(0.78 0.008 260);
41 --ink-3: oklch(0.63 0.008 260);
42 --line: oklch(0.31 0.008 260);
43 --card: oklch(0.222 0.008 260);
44 --term-bg: oklch(0.155 0.005 260);
45 --term-edge: oklch(0.28 0.008 260);
46 --shadow-1: 0 1px 2px oklch(0 0 0 / 0.3);
47 --shadow-2: 0 1px 2px oklch(0 0 0 / 0.28), 0 12px 32px -16px oklch(0 0 0 / 0.6);
48 }
49
50 * { margin: 0; padding: 0; box-sizing: border-box; }
51
52 html { scroll-behavior: smooth; background: var(--bg); }
53
54 body {
55 font-family: var(--font-sans);
56 font-optical-sizing: auto;
57 font-feature-settings: "cv11", "ss01";
58 background: var(--bg);
59 color: var(--ink);
60 -webkit-font-smoothing: antialiased;
61 overflow-x: hidden;
62 }
63
64 ::selection { background: oklch(0.88 0.05 257); }
65
66 .wrap { max-width: 1180px; margin: 0 auto; padding: 0 40px; }
67
68 /* language switching */
69 body[data-lang="en"] .l-zh { display: none !important; }
70 body[data-lang="zh"] .l-en { display: none !important; }
71 body[data-lang="zh"] h1,
72 body[data-lang="zh"] h2,
73 body[data-lang="zh"] h3 { letter-spacing: 0; }
74 body[data-lang="zh"] .hero h1 { font-size: clamp(38px, 4.6vw, 62px); line-height: 1.24; }
75
76 .lang-switch, .theme-switch {
77 display: inline-flex; gap: 2px; padding: 3px;
78 background: var(--bg-soft); border: 1px solid var(--line); border-radius: 9px;
79 }
80 .lang-switch button, .theme-switch button {
81 font-family: var(--font-sans); font-size: 12.5px; font-weight: 500;
82 color: var(--ink-2); background: transparent; border: none; cursor: pointer;
83 padding: 6px 12px; border-radius: 6px;
84 transition: background 0.2s, color 0.2s, box-shadow 0.2s;
85 }
86 .theme-switch button { display: inline-flex; align-items: center; justify-content: center; }
87 .theme-switch svg { display: block; }
88 .lang-switch button:hover, .theme-switch button:hover { color: var(--ink); }
89 .lang-switch button.active, .theme-switch button.active { background: var(--card); color: var(--accent); box-shadow: var(--shadow-1); }
90
91 /* nav */
92 .nav {
93 position: fixed; top: 0; left: 0; right: 0; z-index: 50;
94 transition: background 0.4s, box-shadow 0.4s;
95 }
96 .nav.scrolled {
97 background: color-mix(in oklch, var(--bg) 92%, transparent);
98 backdrop-filter: blur(16px);
99 -webkit-backdrop-filter: blur(16px);
100 box-shadow: 0 1px 0 var(--line);
101 }
102 .nav-inner {
103 display: flex; align-items: center; gap: 18px;
104 height: 68px; max-width: 1480px; margin: 0 auto; padding: 0 40px;
105 }
106 .brand { display: flex; flex: none; align-items: center; gap: 10px; text-decoration: none; color: var(--ink); }
107 .brand img { width: 28px; height: 28px; border-radius: 8px; display: block; }
108 .brand span { font-size: 17px; font-weight: 600; letter-spacing: -0.01em; }
109 .nav-links { display: flex; min-width: 0; gap: 6px; margin-right: auto; margin-left: 18px; }
110 .nav-links a {
111 flex: none; white-space: nowrap;
112 color: var(--ink-2); text-decoration: none; font-size: 14px; font-weight: 500;
113 padding: 8px 12px; border-radius: 7px;
114 transition: color 0.2s, background 0.2s;
115 }
116 .nav-links a:hover { color: var(--ink); background: var(--bg-soft); }
117 .nav-links a.here { color: var(--accent); background: var(--accent-soft); }
118 .nav-github {
119 display: inline-flex; flex: none; align-items: center; gap: 8px;
120 color: var(--ink-2); text-decoration: none; font-size: 14px; font-weight: 500;
121 padding: 8px 10px; border-radius: 7px;
122 transition: color 0.2s, background 0.2s;
123 }
124 .nav-github svg { width: 18px; height: 18px; display: block; }
125 .nav-github:hover { color: var(--ink); background: var(--bg-soft); }
126 .nav-github:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
127
128 .btn {
129 display: inline-flex; align-items: center; justify-content: center; gap: 8px;
130 font-family: var(--font-sans); font-size: 14.5px; font-weight: 550; letter-spacing: -0.005em;
131 padding: 11px 20px; border-radius: 9px; text-decoration: none; cursor: pointer;
132 border: none; transition: background 0.2s, box-shadow 0.25s, color 0.2s, border-color 0.2s;
133 }
134 .btn-dark { background: var(--accent); color: #fff; }
135 .btn-dark:hover { background: var(--accent-deep); }
136 .btn-ghost { background: transparent; color: var(--ink); border: 1px solid var(--line); }
137 .btn-ghost:hover { border-color: color-mix(in oklch, var(--accent) 45%, var(--line)); color: var(--accent); }
138 .nav .btn { padding: 9px 20px; font-size: 14px; }
139 .nav .btn, .nav .lang-switch, .nav .theme-switch, .nav-acct { flex: none; }
140
141 @media (max-width: 1260px) {
142 .nav-link--secondary { display: none; }
143 }
144
145 @media (max-width: 1100px) {
146 .nav-links { display: none; }
147 .nav-github { margin-left: auto; padding-inline: 8px; }
148 .nav-github-label { display: none; }
149 }
150
151 /* hero */
152 .hero { position: relative; padding: 150px 0 0; text-align: center; }
153
154 .eyebrow {
155 display: inline-flex; align-items: center; gap: 9px;
156 font-family: var(--font-mono); font-size: 12.5px; font-weight: 500;
157 color: var(--accent); margin-bottom: 26px; letter-spacing: 0.01em;
158 }
159 .eyebrow .dot { width: 7px; height: 7px; border-radius: 50%; background: oklch(0.7 0.16 150); box-shadow: 0 0 0 3px oklch(0.7 0.16 150 / 0.18); }
160
161 .hero h1 {
162 max-width: 13em; margin: 0 auto;
163 font-size: clamp(44px, 5.4vw, 76px);
164 line-height: 1.06; letter-spacing: -0.035em; font-weight: 600;
165 text-wrap: balance;
166 }
167 .hero h1 .grad { color: var(--accent); }
168 .hero h1 em { font-style: italic; color: var(--accent); }
169 .hero h1 .tt {
170 color: var(--accent);
171 box-shadow: inset 0 -0.06em 0 color-mix(in oklch, var(--accent) 30%, transparent);
172 }
173 .hero .sub {
174 margin: 26px auto 0; max-width: 640px;
175 font-size: 17.5px; line-height: 1.62; color: var(--ink-2); font-weight: 400;
176 text-wrap: pretty;
177 }
178 .hero .sub b { color: var(--ink); font-weight: 600; }
179
180 .hero-install {
181 --hero-action-height: 46px;
182 --hero-action-width: 178px;
183 width: min(850px, 100%); margin: 40px auto 0;
184 display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px;
185 }
186 .install-option {
187 display: grid; align-content: start; justify-items: start; gap: 12px;
188 min-height: 172px; padding: 20px;
189 border: 1px solid var(--line); border-radius: var(--radius-sm);
190 background: var(--bg-soft);
191 text-align: left;
192 }
193 .install-option--desktop {
194 background: var(--accent-soft);
195 border-color: color-mix(in oklch, var(--accent) 30%, var(--line));
196 }
197 .install-kicker {
198 display: inline-flex; align-items: center; gap: 7px;
199 min-height: 16px; line-height: 16px;
200 font-family: var(--font-mono); font-size: 11.5px; font-weight: 500; letter-spacing: 0.04em;
201 text-transform: uppercase; color: var(--accent);
202 }
203 .install-kicker::before {
204 content: ""; width: 7px; height: 7px; border-radius: 50%; background: var(--accent);
205 }
206 .install-option strong {
207 max-width: 330px; font-size: 15px; line-height: 1.45;
208 font-weight: 600; color: var(--ink);
209 }
210 .install-option .btn { align-self: end; margin-top: auto; }
211 .hero-install .btn,
212 .hero-install .install button {
213 display: inline-flex; align-items: center; justify-content: center;
214 width: var(--hero-action-width); height: var(--hero-action-height);
215 padding: 0 22px; box-sizing: border-box;
216 font-size: 15px; font-weight: 600; line-height: 1;
217 }
218 .install-option .install { align-self: end; margin-top: auto; max-width: 100%; }
219
220 .install {
221 display: inline-flex; align-items: center; gap: 14px; min-width: 0;
222 font-family: var(--font-mono); font-size: 13.5px; color: var(--ink);
223 background: var(--bg-soft); border: 1px solid var(--line); border-radius: var(--radius-sm);
224 padding: 10px 8px 10px 16px;
225 white-space: nowrap;
226 }
227 .install .ps1 { color: var(--accent); user-select: none; }
228 .install button {
229 flex: none;
230 font-family: var(--font-sans); font-size: 12.5px; font-weight: 600;
231 background: var(--card); color: var(--ink-2); border: 1px solid var(--line); cursor: pointer;
232 padding: 6px 13px; border-radius: 6px;
233 transition: background 0.2s, color 0.2s, border-color 0.2s;
234 }
235 .install button:hover { color: var(--accent); border-color: color-mix(in oklch, var(--accent) 45%, var(--line)); }
236 .hero-install .install {
237 height: var(--hero-action-height);
238 padding: 0 6px 0 16px;
239 }
240 .hero-install .install button {
241 width: auto; min-width: 92px; height: 34px;
242 background: var(--accent); color: #fff; border-color: transparent;
243 }
244 .hero-install .install button:hover {
245 background: var(--accent-deep); color: #fff; border-color: transparent;
246 }
247 .install button.copied { background: oklch(0.55 0.14 155); color: #fff; }
248
249 .also {
250 max-width: 940px; margin: 22px auto 0;
251 font-size: 14px; line-height: 1.8; color: var(--ink-2);
252 }
253 .also-row { display: flex; align-items: baseline; justify-content: center; gap: 12px; }
254 .also-label { flex: none; color: var(--ink); font-weight: 600; }
255 .also-links { display: flex; align-items: baseline; justify-content: center; gap: 0 11px; flex-wrap: wrap; }
256 .also-sep { color: var(--ink-3); }
257 .also code { color: var(--ink-2); font-size: 0.92em; }
258 .also a {
259 color: var(--accent); font-weight: 500;
260 text-decoration: underline; text-decoration-color: color-mix(in oklch, var(--accent) 38%, transparent);
261 text-underline-offset: 3px;
262 }
263 .also a:hover { text-decoration-color: currentColor; }
264 .also a:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; border-radius: 3px; }
265
266 /* 404 — CTA row + "gone cold" cache blocks */
267 .hero-cta { margin-top: 38px; display: flex; justify-content: center; gap: 14px; flex-wrap: wrap; }
268 .cold-blocks { display: flex; justify-content: center; gap: 8px; margin-top: 46px; }
269 .cold-blocks i {
270 width: 26px; height: 26px; border-radius: 7px;
271 background: var(--accent-soft);
272 box-shadow: inset 0 0 0 1px color-mix(in oklch, var(--accent) 26%, transparent);
273 }
274 .cold-blocks i.new { background: var(--accent); box-shadow: none; }
275
276 /* terminal */
277 .term-stage { position: relative; margin: 58px auto 0; max-width: 880px; }
278 .fig {
279 font-family: var(--font-mono); font-size: 12px; color: var(--ink-3);
280 margin-bottom: 12px; text-align: left;
281 }
282 .term {
283 position: relative; text-align: left;
284 background: var(--term-bg);
285 border: 1px solid var(--term-edge);
286 border-radius: var(--radius); overflow: hidden;
287 box-shadow: var(--shadow-2);
288 }
289 .term-bar {
290 display: flex; align-items: center; gap: 8px;
291 padding: 14px 20px; border-bottom: 1px solid var(--term-edge);
292 }
293 .term-bar i { width: 10px; height: 10px; border-radius: 50%; background: oklch(0.42 0.008 260); }
294 .term-bar .title {
295 margin: 0 auto; transform: translateX(-20px);
296 font-family: var(--font-mono); font-size: 12px; color: oklch(0.62 0.008 260);
297 }
298 .term-body {
299 padding: 26px 30px 28px; min-height: 312px;
300 font-family: var(--font-mono); font-size: 13.5px; line-height: 2.05;
301 color: oklch(0.9 0.004 260); white-space: pre-wrap;
302 }
303 .term-body .tl { display: block; opacity: 0; transform: translateY(4px); }
304 .term-body .tl.on { opacity: 1; transform: none; transition: opacity 0.4s, transform 0.4s var(--ease); }
305 .t-dim { color: oklch(0.6 0.008 260); }
306 .t-acc { color: var(--acc-1); }
307 .t-vio { color: var(--acc-2); }
308 .t-ok { color: oklch(0.78 0.13 160); }
309 .t-warm{ color: oklch(0.82 0.11 80); }
310 .t-add { color: oklch(0.78 0.13 160); }
311 .caret {
312 display: inline-block; width: 8px; height: 16px; vertical-align: -3px;
313 background: var(--acc-1); animation: blink 1.1s steps(1) infinite;
314 }
315 @keyframes blink { 50% { opacity: 0; } }
316
317 .term-stat {
318 display: flex; gap: 26px; justify-content: space-between; flex-wrap: wrap;
319 border-top: 1px solid var(--term-edge); padding: 14px 30px;
320 font-family: var(--font-mono); font-size: 12px; color: oklch(0.6 0.008 260);
321 }
322 .term-stat b { color: oklch(0.86 0.02 260); font-weight: 500; }
323
324 /* sections */
325 section { padding: 118px 0 0; }
326 .sec-head { max-width: 680px; margin: 0 auto 56px; text-align: center; }
327 .sec-head.center { margin-left: auto; margin-right: auto; text-align: center; }
328 .kicker {
329 font-family: var(--font-mono); font-size: 13.5px; font-weight: 500; letter-spacing: 0.02em;
330 color: var(--accent); display: block; margin-bottom: 18px;
331 }
332 .kicker::before { content: "$ "; color: var(--ink-3); }
333 .sec-head h2 {
334 font-size: clamp(32px, 3.8vw, 48px); line-height: 1.12;
335 letter-spacing: -0.02em; font-weight: 600; text-wrap: balance;
336 }
337 .sec-head h2 .em { color: var(--accent); }
338 .sec-head p { margin-top: 18px; font-size: 17px; line-height: 1.65; color: var(--ink-2); text-wrap: pretty; }
339
340 .sec-head.split {
341 max-width: none; margin: 0 0 56px; text-align: left;
342 display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr);
343 gap: 20px 90px; align-items: end;
344 }
345 .sec-head.split .kicker { grid-column: 1 / -1; margin-bottom: 4px; }
346 .sec-head.split h2 { margin: 0; }
347 .sec-head.split p { margin: 0 0 6px; }
348
349 /* features — bento grid (six cards) */
350 .feat-grid { display: grid; grid-template-columns: repeat(12, 1fr); gap: 20px; }
351 .feat { grid-column: span 6; }
352 .feat:nth-child(1) { grid-column: span 7; }
353 .feat:nth-child(2) { grid-column: span 5; }
354 .feat:nth-child(3) { grid-column: span 5; }
355 .feat:nth-child(4) { grid-column: span 7; }
356 .feat:nth-child(5) { grid-column: span 6; }
357 .feat:nth-child(6) { grid-column: span 6; }
358 .feat-viz { display: flex; gap: 6px; margin-top: 30px; }
359 .feat-viz i {
360 width: 20px; height: 20px; border-radius: 6px;
361 background: var(--accent-soft);
362 box-shadow: inset 0 0 0 1px color-mix(in oklch, var(--accent) 26%, transparent);
363 }
364 .feat-viz i.n { background: var(--accent); box-shadow: none; }
365 .feat-chip {
366 display: inline-block; margin-top: 26px;
367 font-family: var(--font-mono); font-size: 12px;
368 background: var(--bg-soft); border: 1px solid var(--line); border-radius: 7px;
369 padding: 8px 12px; color: var(--ink-2);
370 }
371 .feat {
372 position: relative; overflow: hidden;
373 background: var(--card); border: 1px solid var(--line); border-radius: var(--radius);
374 padding: 30px 30px 32px;
375 transition: border-color 0.25s;
376 }
377 .feat:hover { border-color: color-mix(in oklch, var(--accent) 38%, var(--line)); }
378 .feat .tag {
379 font-family: var(--font-mono); font-size: 11.5px; color: var(--ink-3);
380 letter-spacing: 0.04em; display: block; margin-bottom: 18px;
381 }
382 .feat:hover .tag { color: var(--accent); }
383 .feat h3 { font-size: 20px; letter-spacing: -0.018em; font-weight: 600; margin-bottom: 10px; }
384 .feat p { font-size: 15px; line-height: 1.65; color: var(--ink-2); text-wrap: pretty; }
385 .feat code { font-family: var(--font-mono); font-size: 12.5px; color: var(--ink); }
386
387 /* surfaces */
388 .surf-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 18px; }
389 .surf {
390 display: flex; flex-direction: column; gap: 10px;
391 padding: 20px 20px 24px;
392 border: 1px solid var(--line); border-radius: var(--radius);
393 background: var(--card);
394 transition: border-color 0.25s, transform 0.25s var(--ease);
395 }
396 .surf:hover { border-color: color-mix(in oklch, var(--accent) 38%, var(--line)); transform: translateY(-2px); }
397 .surf h3 { font-size: 17px; font-weight: 600; letter-spacing: -0.01em; }
398 .surf p { flex: 1; font-size: 14px; line-height: 1.6; color: var(--ink-2); text-wrap: pretty; }
399 .surf code {
400 align-self: flex-start;
401 font-family: var(--font-mono); font-size: 12px; color: var(--ink-2);
402 background: var(--bg-soft); border: 1px solid var(--line);
403 border-radius: 7px; padding: 6px 10px;
404 }
405 .surf-art {
406 display: grid; place-items: center;
407 height: 132px; margin-bottom: 4px;
408 border-radius: var(--radius-sm);
409 background: var(--bg-soft); overflow: hidden;
410 }
411 .surf-win {
412 display: grid; grid-template-rows: auto 1fr;
413 width: 78%; height: 88px;
414 border: 1px solid var(--line); border-radius: 8px;
415 background: var(--card); overflow: hidden;
416 }
417 .surf-win .bar { height: 12px; border-bottom: 1px solid var(--line); background: var(--bg-soft); }
418 .surf-win .bar.url { position: relative; }
419 .surf-win .bar.url::after {
420 content: ""; position: absolute; left: 8px; top: 3px;
421 width: 58%; height: 6px; border-radius: 999px;
422 background: color-mix(in oklch, var(--ink) 12%, transparent);
423 }
424 .surf-win .body { display: flex; flex-direction: column; gap: 6px; padding: 9px 10px; }
425 .surf-win .l { height: 5px; width: var(--w, 60%); border-radius: 999px; background: color-mix(in oklch, var(--ink) 14%, transparent); }
426 .surf-win .l.ok { background: color-mix(in oklch, var(--accent) 55%, transparent); }
427 .surf-win .l.add { background: color-mix(in oklch, oklch(0.65 0.15 155) 62%, transparent); }
428 .surf-win .cur { width: 5px; height: 8px; background: var(--accent); }
429 .surf-win.app .body, .surf-win.ide .body { flex-direction: row; gap: 8px; }
430 .surf-win .side, .surf-win .tree {
431 display: flex; flex-direction: column; gap: 5px;
432 width: 24px; flex: none; padding-right: 7px;
433 border-right: 1px solid var(--line);
434 }
435 .surf-win .side i, .surf-win .tree i { height: 5px; width: 100%; border-radius: 999px; background: color-mix(in oklch, var(--ink) 12%, transparent); }
436 .surf-win .side i:first-child { background: color-mix(in oklch, var(--accent) 50%, transparent); }
437 .surf-win .tree i:nth-child(2) { width: 68%; }
438 .surf-win .tree i:nth-child(3) { width: 86%; }
439 .surf-win .main { display: flex; flex-direction: column; gap: 6px; flex: 1; min-width: 0; }
440 .surf-win.cli { background: var(--term-bg); border-color: var(--term-edge); }
441 .surf-win.cli .bar { background: color-mix(in oklch, #fff 6%, var(--term-bg)); border-bottom-color: var(--term-edge); }
442 .surf-win.cli .l { background: color-mix(in oklch, #fff 22%, transparent); }
443 .surf-win.cli .l.ok { background: oklch(0.72 0.13 160); }
444
445 /* steps */
446 .steps { display: grid; grid-template-columns: repeat(4, 1fr); gap: 0; }
447 .step { padding: 6px 40px 6px 0; }
448 .step + .step { padding-left: 40px; border-left: 1px solid var(--line); }
449 .step .num {
450 display: inline-flex; align-items: center; justify-content: center;
451 width: 30px; height: 30px; border-radius: 7px;
452 background: var(--accent-soft);
453 font-family: var(--font-mono); font-size: 12.5px; font-weight: 500; color: var(--accent);
454 margin-bottom: 18px;
455 }
456 .step h3 { font-size: 18px; font-weight: 600; letter-spacing: -0.018em; margin-bottom: 10px; }
457 .step p { font-size: 14.5px; line-height: 1.62; color: var(--ink-2); }
458 .step code {
459 display: inline-block; margin-top: 16px; font-family: var(--font-mono); font-size: 12.5px;
460 background: var(--bg-soft); border: 1px solid var(--line); border-radius: 7px;
461 padding: 7px 12px; color: var(--ink);
462 }
463
464 /* contributors marquee */
465 .crew {
466 margin-top: 8px; display: grid; gap: 18px; overflow: hidden; padding: 24px 0 10px;
467 -webkit-mask-image: linear-gradient(90deg, transparent, #000 10%, #000 90%, transparent);
468 mask-image: linear-gradient(90deg, transparent, #000 10%, #000 90%, transparent);
469 }
470 .crew-row { display: flex; width: max-content; }
471 .crew-set { display: flex; align-items: center; gap: 16px; padding-right: 16px; }
472 @media (prefers-reduced-motion: no-preference) {
473 body[data-motion="rich"] .crew-row { animation: crew-slide 60s linear infinite; }
474 body[data-motion="rich"] .crew-row.rev { animation-duration: 74s; animation-direction: reverse; }
475 .crew-row:hover { animation-play-state: paused !important; }
476 }
477 @keyframes crew-slide { to { transform: translateX(-50%); } }
478
479 .av {
480 position: relative; flex: none; display: flex; align-items: center; justify-content: center;
481 width: 54px; height: 54px; border-radius: 50%;
482 color: #fff; font-size: 14px; font-weight: 600; letter-spacing: 0.02em;
483 border: 2px solid var(--bg); box-shadow: var(--shadow-1);
484 text-decoration: none; overflow: hidden;
485 transition: transform 0.3s var(--ease), box-shadow 0.3s;
486 }
487 .av img { width: 100%; height: 100%; object-fit: cover; }
488 .av.sm { width: 44px; height: 44px; font-size: 12px; }
489 .av.lg { width: 64px; height: 64px; font-size: 16px; }
490 .av:hover { transform: translateY(-6px) scale(1.1); box-shadow: var(--shadow-2); z-index: 2; }
491 .av::after {
492 content: attr(data-h);
493 position: absolute; bottom: calc(100% + 9px); left: 50%; transform: translateX(-50%) translateY(4px);
494 font-size: 12px; font-weight: 500; white-space: nowrap;
495 background: var(--ink); color: var(--bg); padding: 5px 12px; border-radius: 8px;
496 opacity: 0; pointer-events: none;
497 transition: opacity 0.2s, transform 0.2s var(--ease);
498 }
499 .av:hover::after { opacity: 1; transform: translateX(-50%) translateY(0); }
500 .av.you {
501 background: transparent; border: 1.5px dashed var(--ink-3); color: var(--ink-2);
502 font-size: 18px; box-shadow: none;
503 }
504 .av.you:hover { border-color: var(--accent); color: var(--accent); }
505
506 .crew-cta { display: flex; justify-content: center; gap: 14px; margin-top: 38px; flex-wrap: wrap; }
507 .crew-note {
508 margin-top: 26px; text-align: center;
509 font-size: 13.5px; color: var(--ink-3);
510 }
511
512 /* reveal on scroll */
513 @media (prefers-reduced-motion: no-preference) {
514 body[data-motion="rich"] .reveal {
515 opacity: 0; transform: translateY(10px);
516 transition: opacity 0.45s var(--ease), transform 0.45s var(--ease);
517 transition-delay: var(--d, 0s);
518 }
519 body[data-motion="rich"] .reveal.in { opacity: 1; transform: none; }
520 }
521
522 /* FX layers */
523 .os-card::after, .doc-card::after {
524 content: ""; position: absolute; inset: 0; border-radius: inherit; padding: 1px;
525 background: radial-gradient(220px circle at var(--mx, 50%) var(--my, 50%),
526 color-mix(in oklch, var(--accent) 45%, transparent), transparent 70%);
527 -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
528 -webkit-mask-composite: xor;
529 mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
530 mask-composite: exclude;
531 opacity: 0; transition: opacity 0.35s; pointer-events: none;
532 }
533 .os-card:hover::after, .doc-card:hover::after { opacity: 1; }
534
535 /* dividers */
536 .divider { position: relative; height: 24px; margin-top: 84px; pointer-events: none; }
537 .divider + section { padding-top: 52px; }
538 .divider .line {
539 position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);
540 width: min(1100px, calc(100% - 80px)); height: 1px;
541 background: var(--line);
542 -webkit-mask-image: linear-gradient(90deg, transparent, #000 22%, #000 78%, transparent);
543 mask-image: linear-gradient(90deg, transparent, #000 22%, #000 78%, transparent);
544 }
545
546 /* CTA band */
547 .cta {
548 margin-top: 150px; position: relative;
549 background: var(--bg-soft); color: var(--ink); text-align: center;
550 padding: 110px 40px 120px;
551 }
552 .cta h2 { font-size: clamp(34px, 4.2vw, 52px); letter-spacing: -0.02em; font-weight: 600; text-wrap: balance; }
553 .cta h2 .em { color: var(--accent); }
554 .cta p { margin: 20px auto 0; max-width: 560px; font-size: 17px; line-height: 1.65; color: var(--ink-2); }
555 .cta .install { background: var(--card); box-shadow: var(--shadow-1); }
556 .cta .install button { background: var(--accent-soft); box-shadow: none; }
557 .cta .install button:hover { background: color-mix(in oklch, var(--accent) 16%, var(--bg)); }
558 .cta .install button.copied { background: oklch(0.55 0.14 155); color: #fff; }
559
560 /* download tabs */
561 .dl { margin-top: 44px; }
562 .dl-tabs {
563 display: inline-flex; gap: 2px; padding: 3px;
564 background: var(--bg-soft); border: 1px solid var(--line); border-radius: 9px;
565 }
566 .dl-tab {
567 font-family: var(--font-sans); font-size: 13.5px; font-weight: 500;
568 color: var(--ink-2); background: transparent; border: none; cursor: pointer;
569 padding: 8px 18px; border-radius: 6px;
570 transition: background 0.25s, color 0.25s, box-shadow 0.25s;
571 }
572 .dl-tab:hover { color: var(--ink); }
573 .dl-tab.active { background: var(--card); color: var(--accent); box-shadow: var(--shadow-1); }
574
575 .dl-pane { display: none; margin-top: 36px; }
576 .dl-pane.active { display: block; animation: pane-in 0.45s var(--ease); }
577 @keyframes pane-in { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
578
579 .release-channel-switch {
580 display: inline-grid; grid-template-columns: repeat(2, minmax(112px, 1fr)); gap: 3px;
581 padding: 4px; margin: 0 auto 10px;
582 background: color-mix(in oklch, var(--ink) 6%, var(--bg));
583 border: 1px solid var(--line); border-radius: var(--radius-sm);
584 }
585 .release-channel-switch button {
586 min-height: 36px; padding: 7px 18px;
587 border: 0; border-radius: 7px; cursor: pointer;
588 background: transparent; color: var(--ink-2);
589 font-family: var(--font-sans); font-size: 13px; font-weight: 600;
590 transition: background 0.2s, color 0.2s, box-shadow 0.2s;
591 }
592 .release-channel-switch button:hover { color: var(--ink); }
593 .release-channel-switch button.active {
594 background: var(--card); color: var(--accent); box-shadow: var(--shadow-1);
595 }
596 .release-channel-switch button:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
597 .release-channel-summary {
598 min-height: 24px; margin: 0 auto 22px;
599 color: var(--ink-3); font-size: 13px; line-height: 1.55;
600 }
601 .release-upgrade-command { margin: 12px auto 24px; }
602 .cli-os-grid { margin-top: 0; }
603 .install-option__more {
604 align-self: flex-start; color: var(--accent); font-size: 12.5px; font-weight: 600;
605 text-decoration: none;
606 }
607 .install-option__more:hover { text-decoration: underline; }
608
609 .dl-note { margin-top: 22px; font-size: 13px; color: var(--ink-3); }
610 .dl-note .mono { font-family: var(--font-mono); font-size: 12px; color: var(--ink-2); }
611 .dl-note a { color: var(--accent); text-decoration: none; }
612 .dl-note a:hover { text-decoration: underline; }
613
614 /* npm release channels */
615 .chan {
616 max-width: 660px; margin: 26px auto 0; text-align: left;
617 background: var(--card); border: 1px solid var(--line); border-radius: var(--radius-sm); overflow: hidden;
618 }
619 .chan-row {
620 display: flex; align-items: center; gap: 16px; flex-wrap: wrap;
621 padding: 16px 22px; font-size: 13.5px;
622 color: var(--ink-3);
623 }
624 .chan-row + .chan-row { border-top: 1px solid var(--line); }
625 .chan-row code { font-family: var(--font-mono); font-size: 13px; color: var(--ink); width: 185px; flex: none; }
626 .chan-row .v { font-family: var(--font-mono); font-size: 12.5px; color: var(--ink-2); width: 92px; flex: none; }
627 .chan-row .s { flex: 1; min-width: 200px; }
628 .chan-row.rec { background: var(--accent-soft); }
629 .chan-row.rec code { color: var(--accent); font-weight: 500; }
630 .chan-row.rec .s { color: var(--ink-2); }
631 .chan-badge {
632 font-size: 11px; font-weight: 600; letter-spacing: 0.02em;
633 color: #fff; background: var(--accent);
634 padding: 4px 9px; border-radius: 5px; flex: none;
635 }
636 .chan-badge.pre { color: var(--ink-3); background: var(--bg-soft); box-shadow: inset 0 0 0 1px var(--line); }
637 .chan-row:not(.rec) code, .chan-row:not(.rec) .v { text-decoration: line-through; text-decoration-color: var(--ink-3); }
638
639 .os-grid {
640 display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px;
641 max-width: 900px; margin: 0 auto; text-align: left;
642 }
643 .os-card {
644 position: relative; display: flex; flex-direction: column; gap: 10px;
645 background: var(--card); border: 1px solid var(--line); border-radius: var(--radius);
646 padding: 26px 24px 24px;
647 transition: border-color 0.25s;
648 }
649 .os-card:hover { border-color: color-mix(in oklch, var(--accent) 38%, var(--line)); }
650 .os-card h4 { font-size: 19px; font-weight: 600; letter-spacing: -0.018em; color: var(--ink); }
651 .os-card .meta { font-family: var(--font-mono); font-size: 11.5px; line-height: 1.7; color: var(--ink-3); }
652 .os-card .btn { margin-top: 16px; }
653 .os-options {
654 display: flex; flex-wrap: wrap; gap: 8px;
655 margin-top: 4px;
656 }
657 .os-options a {
658 display: inline-flex; align-items: center; min-height: 28px;
659 padding: 5px 9px; border-radius: 7px;
660 background: var(--bg-soft); border: 1px solid var(--line);
661 color: var(--ink-2); text-decoration: none;
662 font-size: 12px; font-weight: 600; line-height: 1.2;
663 }
664 .os-options a:hover {
665 border-color: color-mix(in oklch, var(--accent) 40%, var(--line));
666 color: var(--accent); text-decoration: none;
667 }
668 .os-card .alt {
669 font-size: 12.5px; color: var(--ink-3); text-align: center; margin-top: 2px;
670 }
671 .os-card .alt a { color: var(--accent); text-decoration: none; font-weight: 500; }
672 .os-card .alt a:hover { text-decoration: underline; }
673 .editor-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); max-width: 760px; }
674 .editor-card { min-height: 190px; }
675 .editor-card--primary {
676 background: linear-gradient(180deg, color-mix(in oklch, var(--accent) 10%, var(--card)), var(--card) 82%);
677 border: 1px solid color-mix(in oklch, var(--accent) 24%, var(--line));
678 }
679 .editor-card .btn { margin-top: auto; align-self: flex-start; }
680 .editor-note { max-width: 820px; margin-inline: auto; line-height: 1.65; }
681 .editor-note code { font-family: var(--font-mono); font-size: 12px; color: var(--ink-2); }
682 .btn-light { background: var(--accent-soft); color: var(--accent); }
683 .btn-light:hover { background: color-mix(in oklch, var(--accent) 16%, var(--bg)); }
684 .dl-help {
685 position: relative; display: grid; grid-template-columns: minmax(0, 1fr) auto auto;
686 gap: 8px 12px; align-items: center;
687 max-width: 900px; margin: 18px auto 0; padding: 16px 18px;
688 background: var(--card); border: 1px solid var(--line); border-radius: var(--radius-sm);
689 box-shadow: var(--shadow-1); text-align: left;
690 color: var(--ink-2); font-size: 13.5px; line-height: 1.5;
691 }
692 .dl-help strong { grid-column: 1 / -1; color: var(--ink); font-size: 14.5px; }
693 .dl-help code {
694 grid-column: 1 / 2; min-width: 0; overflow-x: auto;
695 font-family: var(--font-mono); font-size: 12.5px;
696 background: var(--bg-soft); border-radius: 8px; padding: 8px 10px;
697 color: var(--ink); white-space: nowrap;
698 }
699 .dl-help button {
700 font-family: var(--font-sans); font-size: 12.5px; font-weight: 600;
701 color: var(--accent); background: var(--accent-soft);
702 border: none; border-radius: 7px; padding: 7px 13px; cursor: pointer;
703 }
704 .dl-help button.copied { background: oklch(0.55 0.14 155); color: #fff; }
705 .dl-help a { color: var(--accent); text-decoration: none; font-weight: 600; }
706 .dl-help a:hover { text-decoration: underline; }
707 .os-card.detected { box-shadow: 0 0 0 2px var(--accent), var(--shadow-1); }
708 @keyframes cardFlash {
709 0%, 100% { box-shadow: 0 0 0 2px var(--accent), var(--shadow-1); }
710 25%, 65% { box-shadow: 0 0 0 3px var(--accent), 0 18px 44px -18px color-mix(in oklch, var(--accent) 55%, transparent); transform: translateY(-3px); }
711 }
712 .os-card.flash { animation: cardFlash 2s var(--ease); }
713 .os-chip {
714 position: absolute; top: -11px; right: 16px;
715 font-size: 11.5px; font-weight: 600; letter-spacing: 0.02em;
716 color: #fff; background: var(--accent);
717 padding: 4px 10px; border-radius: 5px;
718 }
719
720 /* docs page */
721 .docs-layout {
722 display: grid; grid-template-columns: 280px minmax(0, 1fr); gap: 56px;
723 max-width: 1240px; margin: 0 auto; padding: 124px 40px 110px;
724 }
725 .docs-side {
726 position: sticky; top: 110px; align-self: start;
727 display: flex; flex-direction: column; gap: 16px;
728 max-height: calc(100dvh - 132px); overflow-y: auto; padding-right: 4px;
729 }
730 .docs-side-links {
731 border: 1px solid var(--line);
732 border-radius: var(--radius-sm);
733 background: var(--card);
734 padding: 16px;
735 }
736 .side-card-kicker {
737 display: block; margin-bottom: 8px;
738 font-size: 11.5px; font-weight: 700; letter-spacing: 0.06em;
739 text-transform: uppercase; color: var(--accent);
740 }
741 .side-group a small {
742 display: block; margin-top: 3px;
743 font-size: 12px; font-weight: 500; line-height: 1.35;
744 color: var(--ink-3);
745 }
746 .docs-main { min-width: 0; }
747 .side-nav {
748 display: flex; flex-direction: column; gap: 18px;
749 padding: 2px 0;
750 }
751 .side-group .gh {
752 font-size: 12px; font-weight: 600; letter-spacing: 0.06em;
753 text-transform: uppercase; color: var(--ink-3); display: block; margin: 0 0 8px; padding-left: 16px;
754 }
755 .side-group a {
756 display: block; padding: 9px 16px; border-radius: 14px;
757 color: var(--ink-2); text-decoration: none; font-size: 14px; font-weight: 500;
758 transition: color 0.2s, background 0.2s;
759 }
760 .side-group a strong { display: block; color: inherit; font-size: 14px; line-height: 1.25; }
761 .side-group a code {
762 font-family: var(--font-mono); font-size: 11px;
763 background: transparent; color: inherit; padding: 0;
764 }
765 .side-group a:hover { color: var(--ink); background: var(--bg-soft); }
766 .side-group a.active { color: var(--accent); background: var(--accent-soft); }
767 .side-group a.active small { color: color-mix(in oklch, var(--accent) 72%, var(--ink-3)); }
768 .docs-side-links {
769 display: grid; gap: 8px; margin-top: 2px;
770 }
771 .docs-side-links a {
772 display: flex; align-items: center; justify-content: space-between; gap: 10px;
773 color: var(--ink-2); text-decoration: none; font-size: 13.5px; font-weight: 600;
774 }
775 .docs-side-links a::after { content: "->"; color: var(--ink-3); font-size: 12px; }
776 .docs-side-links a:hover { color: var(--accent); }
777 .docs-hero {
778 padding: 8px 0 36px; margin-bottom: 10px;
779 border-bottom: 1px solid var(--line);
780 }
781 .docs-kicker {
782 display: inline-flex; align-items: center; margin-bottom: 12px;
783 font-family: var(--font-mono); font-size: 12px; font-weight: 700; letter-spacing: 0.07em;
784 text-transform: uppercase; color: var(--accent);
785 }
786 .docs-kicker::before { content: "$ "; color: var(--ink-3); }
787 .docs-main h1 { font-size: 42px; line-height: 1.12; letter-spacing: -0.02em; font-weight: 600; margin: 0 0 14px; max-width: 760px; }
788 .docs-main .lede { font-size: 17px; color: var(--ink-2); line-height: 1.65; margin: 0 0 26px; max-width: 760px; text-wrap: pretty; }
789 .docs-path-grid {
790 display: grid; grid-template-columns: repeat(4, minmax(0, 1fr));
791 gap: 12px; margin-top: 24px;
792 }
793 .docs-path-grid a {
794 display: flex; flex-direction: column; gap: 7px;
795 min-height: 148px; padding: 17px;
796 border: 1px solid var(--line); border-radius: var(--radius-sm);
797 background: var(--card);
798 color: var(--ink-2); text-decoration: none;
799 transition: border-color 0.2s, background 0.2s, transform 0.2s var(--ease);
800 }
801 .docs-path-grid a:hover {
802 border-color: color-mix(in oklch, var(--accent) 38%, var(--line));
803 background: var(--card); transform: translateY(-1px); text-decoration: none;
804 }
805 .docs-path-grid strong {
806 color: var(--ink); font-size: 14.5px; line-height: 1.25;
807 }
808 .docs-path-grid span {
809 font-size: 13px; line-height: 1.55;
810 }
811 .docs-main h2 {
812 font-size: 25px; letter-spacing: -0.012em; font-weight: 600;
813 margin: 56px 0 8px; padding-top: 28px; border-top: 1px solid var(--line);
814 scroll-margin-top: 88px;
815 }
816 .docs-main h2:first-of-type { border-top: none; padding-top: 0; margin-top: 0; }
817 .docs-main h3 { font-size: 18px; font-weight: 600; letter-spacing: -0.01em; margin: 28px 0 6px; }
818 .docs-main p { font-size: 15.5px; line-height: 1.75; color: var(--ink-2); margin: 12px 0; text-wrap: pretty; }
819 .docs-main a { color: var(--accent); text-decoration: none; }
820 .docs-main a:hover { text-decoration: underline; }
821 .docs-main ul { margin: 12px 0 12px 22px; color: var(--ink-2); font-size: 15.5px; line-height: 1.85; }
822 .docs-main p code, .docs-main li code, .docs-main td code {
823 font-family: var(--font-mono); font-size: 13px;
824 background: var(--bg-soft); border-radius: 6px;
825 padding: 2.5px 8px; color: var(--ink);
826 }
827 .codeblock {
828 position: relative; margin: 18px 0; padding: 20px 24px;
829 background: var(--term-bg); border-radius: var(--radius-sm);
830 font-family: var(--font-mono); font-size: 13.5px; line-height: 1.85;
831 color: oklch(0.9 0.004 260); overflow-x: auto; white-space: pre;
832 }
833 .codeblock--copy { padding-top: 52px; }
834 .codeblock .c { color: oklch(0.58 0.008 260); }
835 .codeblock .a { color: var(--acc-1); }
836 .codeblock button {
837 position: absolute; top: 12px; right: 12px;
838 font-family: var(--font-sans); font-size: 12.5px; font-weight: 600;
839 background: oklch(0.34 0.008 260); color: oklch(0.85 0.005 260);
840 border: none; border-radius: 7px; padding: 6px 12px; cursor: pointer;
841 transition: background 0.2s, color 0.2s;
842 }
843 .codeblock button:hover { background: oklch(0.4 0.01 260); color: #fff; }
844 .codeblock button.copied { background: oklch(0.55 0.14 155); color: #fff; }
845 .callout {
846 display: flex; gap: 12px; align-items: flex-start;
847 background: var(--accent-soft);
848 border-radius: var(--radius-sm); padding: 18px 22px; margin: 22px 0;
849 font-size: 14.5px; line-height: 1.65; color: var(--ink-2);
850 }
851 .callout .ico {
852 flex: none; display: flex; align-items: center; justify-content: center;
853 width: 22px; height: 22px; border-radius: 50%;
854 background: var(--accent); color: #fff; font-size: 13px; font-weight: 700;
855 }
856 .tui-panel {
857 margin: 18px 0 20px; padding: 20px 22px;
858 border: 1px solid var(--line); border-radius: var(--radius-sm);
859 background: var(--bg-soft);
860 }
861 .tui-panel .desktop-feature-list { margin-top: 10px !important; }
862 .doc-choice-grid,
863 .doc-note-grid {
864 display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
865 gap: 12px; margin: 18px 0;
866 }
867 .doc-choice-grid > div,
868 .doc-note-grid > div {
869 border: 1px solid var(--line);
870 border-radius: var(--radius-sm);
871 background: var(--card);
872 padding: 17px 18px;
873 }
874 .doc-choice-grid strong,
875 .doc-note-grid strong {
876 display: block; color: var(--ink);
877 font-size: 14px; line-height: 1.3; margin-bottom: 5px;
878 }
879 .doc-choice-grid p {
880 margin: 0; font-size: 13.5px; line-height: 1.6;
881 }
882 .doc-note-grid {
883 grid-template-columns: repeat(3, minmax(0, 1fr));
884 }
885 .doc-note-grid > div {
886 display: flex; flex-direction: column; gap: 4px;
887 }
888 .doc-note-grid span { font-size: 13px; color: var(--ink-2); overflow-wrap: anywhere; }
889 .desktop-panel,
890 .web-panel {
891 margin: 20px 0 8px; padding: 24px;
892 border: 1px solid color-mix(in oklch, var(--accent) 18%, var(--line));
893 border-radius: var(--radius-sm);
894 background: linear-gradient(180deg, color-mix(in oklch, var(--accent) 9%, var(--bg)), var(--bg) 72%);
895 }
896 .desktop-panel-head { max-width: 680px; }
897 .desktop-kicker {
898 display: inline-flex; align-items: center; margin-bottom: 10px;
899 font-size: 12px; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase;
900 color: var(--accent);
901 }
902 .docs-main .desktop-panel h3,
903 .docs-main .web-panel h3 {
904 margin: 0 0 8px; font-size: 21px; line-height: 1.25;
905 letter-spacing: -0.012em; color: var(--ink);
906 }
907 .docs-main .desktop-panel p { margin: 0; max-width: 720px; }
908 .desktop-downloads {
909 display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
910 gap: 10px; margin-top: 20px;
911 }
912 .desktop-downloads--secondary { margin-top: 10px; }
913 .desktop-downloads--secondary .desktop-download {
914 box-shadow: none; background: var(--bg-soft);
915 }
916 .desktop-download {
917 display: flex; flex-direction: column; gap: 4px;
918 min-width: 0; padding: 15px 16px; border-radius: 10px;
919 background: var(--card); border: 1px solid var(--line);
920 color: var(--ink); text-decoration: none;
921 box-shadow: var(--shadow-1);
922 transition: border-color 0.2s, box-shadow 0.2s, transform 0.2s var(--ease);
923 }
924 .desktop-download:hover {
925 border-color: color-mix(in oklch, var(--accent) 42%, var(--line));
926 box-shadow: var(--shadow-2); transform: translateY(-1px); text-decoration: none;
927 }
928 .desktop-download strong { font-size: 15px; font-weight: 700; color: var(--ink); }
929 .desktop-download span { font-size: 13px; color: var(--ink-2); line-height: 1.35; }
930 .desktop-feature-list {
931 display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
932 gap: 10px 16px; margin: 18px 0 0 !important; padding: 0; list-style: none;
933 }
934 .desktop-feature-list li {
935 position: relative; padding-left: 16px;
936 font-size: 13.5px; line-height: 1.55; color: var(--ink-2);
937 }
938 .desktop-feature-list li::before {
939 content: ""; position: absolute; left: 0; top: 0.62em;
940 width: 6px; height: 6px; border-radius: 50%; background: var(--accent);
941 }
942 .doc-cards { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-top: 22px; }
943 .doc-card {
944 position: relative; display: block; text-decoration: none;
945 background: var(--card); border: 1px solid var(--line); border-radius: var(--radius-sm);
946 padding: 22px 24px; transition: border-color 0.25s;
947 }
948 .doc-card:hover { border-color: color-mix(in oklch, var(--accent) 38%, var(--line)); text-decoration: none; }
949 .doc-card h3 { font-size: 17px; font-weight: 600; letter-spacing: -0.01em; color: var(--ink); margin: 0 0 6px; }
950 .doc-card p { font-size: 13.5px; line-height: 1.6; color: var(--ink-2); margin: 0; }
951
952 /* footer */
953 footer { background: var(--bg); border-top: 1px solid var(--line); margin-top: 0; }
954 .foot-inner {
955 max-width: 1180px; margin: 0 auto; padding: 36px 40px 28px;
956 display: flex; align-items: center; gap: 28px; flex-wrap: wrap;
957 font-size: 14px; color: var(--ink-3);
958 }
959 .foot-sub {
960 max-width: 1180px; margin: 0 auto; padding: 16px 40px 26px;
961 display: flex; align-items: center; justify-content: space-between; gap: 20px; flex-wrap: wrap;
962 border-top: 1px solid var(--line);
963 font-size: 13px; color: var(--ink-3);
964 }
965 .foot-sub .ver { font-family: var(--font-mono); font-size: 12px; }
966 .foot-inner .brand img { width: 22px; height: 22px; border-radius: 6px; }
967 .foot-inner .brand span { font-size: 15px; }
968 .foot-links { display: flex; gap: 8px; margin-left: auto; flex-wrap: wrap; }
969 .foot-links a {
970 color: var(--ink-2); text-decoration: none; font-weight: 500;
971 padding: 7px 11px; border-radius: 7px;
972 transition: color 0.2s, background 0.2s;
973 }
974 .foot-links a:hover { color: var(--ink); background: var(--bg-soft); }
975
976 @media (max-width: 900px) {
977 .wrap { padding: 0 24px; }
978 .nav-github { display: none; }
979 .lang-switch { margin-left: auto; }
980 .docs-layout { grid-template-columns: 1fr; gap: 36px; padding: 110px 24px 80px; }
981 .docs-side { position: static; max-height: none; overflow: visible; padding-right: 0; }
982 .docs-path-grid { grid-template-columns: 1fr 1fr; }
983 .doc-choice-grid, .doc-note-grid { grid-template-columns: 1fr; }
984 .desktop-downloads, .desktop-feature-list { grid-template-columns: 1fr; }
985 .doc-cards { grid-template-columns: 1fr; }
986 .divider { display: none; }
987 .divider + section { padding-top: 100px; }
988 .feat-grid, .os-grid, .steps { grid-template-columns: 1fr; }
989 .surf-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
990 .feat, .feat:nth-child(1), .feat:nth-child(2), .feat:nth-child(3),
991 .feat:nth-child(4), .feat:nth-child(5), .feat:nth-child(6) { grid-column: auto; }
992 .sec-head.split { grid-template-columns: 1fr; align-items: start; }
993 .steps { gap: 28px; }
994 .step { padding: 0; }
995 .step + .step { padding-left: 0; border-left: none; border-top: 1px solid var(--line); padding-top: 28px; }
996 .dl-tab { padding: 9px 14px; font-size: 13px; }
997 .dl-help { grid-template-columns: 1fr; }
998 .dl-help code { grid-column: auto; white-space: normal; overflow-wrap: anywhere; }
999 .dl-help button { justify-self: start; }
1000 .hero { padding-top: 130px; }
1001 .hero-install { grid-template-columns: 1fr; max-width: 560px; }
1002 .install-option { min-height: 0; }
1003 section { padding-top: 100px; }
1004 }
1005
1006 @media (max-width: 640px) {
1007 .nav-inner { padding: 0 16px; gap: 10px; }
1008 .nav-sign-in { display: none; }
1009 /* logo-only brand + compact theme buttons keep the nav within 390px */
1010 .nav .brand span { display: none; }
1011 .theme-switch button { padding: 6px 9px; }
1012 .docs-path-grid { grid-template-columns: 1fr; }
1013 .surf-grid { grid-template-columns: 1fr; }
1014 .docs-main h1 { font-size: 34px; }
1015 .dl-tabs {
1016 display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
1017 width: 100%; max-width: 360px; border-radius: var(--radius-sm);
1018 }
1019 .release-channel-switch { width: 100%; max-width: 360px; }
1020 .release-channel-switch button { min-width: 0; padding-inline: 12px; }
1021 .release-upgrade-command {
1022 width: 100%; max-width: 520px;
1023 white-space: normal;
1024 display: flex;
1025 flex-wrap: wrap;
1026 row-gap: 8px;
1027 }
1028 .release-upgrade-command [data-release-command="cli"] {
1029 min-width: 0;
1030 flex: 1 1 180px;
1031 overflow-wrap: anywhere;
1032 }
1033 .hero-install { --hero-action-width: 100%; }
1034 .install-option { padding: 18px; }
1035 .hero-install .install {
1036 height: auto;
1037 width: 100%; flex-wrap: wrap; justify-content: space-between;
1038 gap: 12px; padding: 14px;
1039 border-radius: 24px;
1040 }
1041 .hero-install .install button { flex-basis: 100%; }
1042 .also-row { align-items: center; flex-direction: column; gap: 4px; }
1043 .also-links { gap: 0 8px; }
1044 }
1045
1046 @media (max-width: 360px) {
1047 /* Keep logo, language, theme, and install visible at 320px. */
1048 .nav-inner { padding: 0 12px; gap: 6px; }
1049 .lang-switch button { padding: 6px 8px; }
1050 .theme-switch button { padding: 6px 7px; }
1051 .nav .btn { padding: 9px 14px; }
1052 }
1053
1054 /* account / auth pages */
1055 .auth-nav { background: color-mix(in oklch, var(--bg) 92%, transparent); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); box-shadow: 0 1px 0 var(--line); }
1056 .auth-main { min-height: 100vh; display: grid; place-items: center; padding: 116px 24px 72px; }
1057 .auth-card {
1058 width: 100%; max-width: 420px;
1059 background: var(--card); border-radius: var(--radius);
1060 box-shadow: var(--shadow-2); padding: 42px 40px 36px;
1061 }
1062 .auth-card.wide { max-width: 560px; }
1063 .auth-head { text-align: center; }
1064 .auth-head h1 { font-size: 26px; font-weight: 600; letter-spacing: -0.02em; }
1065 .auth-head p { margin-top: 10px; font-size: 15px; line-height: 1.6; color: var(--ink-2); }
1066 .auth-form { display: flex; flex-direction: column; gap: 16px; margin-top: 24px; }
1067 .field { display: flex; flex-direction: column; gap: 7px; text-align: left; }
1068 .field label { font-size: 13px; font-weight: 600; color: var(--ink-2); }
1069 .field .hint { font-size: 12px; font-weight: 400; color: var(--ink-3); }
1070 .field input, .field textarea {
1071 width: 100%; font-family: var(--font-sans); font-size: 15px; color: var(--ink);
1072 background: var(--bg-soft); border: 1px solid transparent; border-radius: var(--radius-sm);
1073 padding: 12px 14px; resize: vertical;
1074 transition: border-color 0.2s, background 0.2s, box-shadow 0.2s;
1075 }
1076 .field input:focus, .field textarea:focus {
1077 outline: none; background: var(--card);
1078 border-color: color-mix(in oklch, var(--accent) 45%, var(--line));
1079 box-shadow: 0 0 0 4px var(--accent-soft);
1080 }
1081 .field input:disabled, .field textarea:disabled { opacity: 0.55; }
1082 .auth-form .btn { width: 100%; margin-top: 4px; }
1083 .btn[disabled], .btn.loading { opacity: 0.55; pointer-events: none; }
1084 .auth-row { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
1085 .auth-small { font-size: 12.5px; color: var(--accent); text-decoration: none; font-weight: 500; }
1086 .auth-small:hover { text-decoration: underline; }
1087 .auth-msg { margin-top: 20px; font-size: 13.5px; line-height: 1.55; border-radius: var(--radius-sm); padding: 11px 14px; text-align: left; }
1088 .auth-msg.error { background: color-mix(in oklch, oklch(0.63 0.21 25) 10%, var(--card)); color: oklch(0.5 0.19 25); }
1089 .auth-msg.ok { background: color-mix(in oklch, oklch(0.65 0.16 155) 13%, var(--card)); color: oklch(0.44 0.12 155); }
1090 :root[data-theme="dark"] .auth-msg.error { color: oklch(0.75 0.16 25); }
1091 :root[data-theme="dark"] .auth-msg.ok { color: oklch(0.78 0.14 155); }
1092 .auth-alt { margin-top: 24px; text-align: center; font-size: 14px; color: var(--ink-3); }
1093 .auth-alt a { color: var(--accent); text-decoration: none; font-weight: 500; }
1094 .auth-alt a:hover { text-decoration: underline; }
1095
1096 .acct-id { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding-bottom: 8px; }
1097 .acct-handle { font-size: 22px; font-weight: 600; letter-spacing: -0.01em; }
1098 .acct-email { margin-top: 3px; font-size: 13.5px; color: var(--ink-3); }
1099 .acct-role {
1100 font-family: var(--font-mono); font-size: 11.5px; text-transform: uppercase; letter-spacing: 0.04em;
1101 color: var(--accent); background: var(--accent-soft); padding: 5px 10px; border-radius: 6px;
1102 }
1103 .acct-h2 {
1104 font-size: 15px; font-weight: 600; color: var(--ink);
1105 margin: 30px 0 4px; padding-top: 24px; border-top: 1px solid var(--line);
1106 }
1107 .acct-foot { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-top: 34px; padding-top: 22px; border-top: 1px solid var(--line); }
1108 .acct-foot .btn { width: auto; margin: 0; }
1109 .acct-danger { font-family: var(--font-sans); font-size: 14px; font-weight: 500; color: oklch(0.55 0.19 25); background: none; border: none; cursor: pointer; padding: 8px 4px; }
1110 .acct-danger:hover { text-decoration: underline; }
1111
1112 .device-code { font-family: var(--font-mono); font-size: 20px; letter-spacing: 0.16em; text-transform: uppercase; text-align: center; }
1113 .device-meta { margin-top: 16px; text-align: center; font-size: 13.5px; color: var(--ink-2); }
1114 .device-actions { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-top: 18px; }
1115 .device-actions .btn { width: 100%; margin: 0; }
1116
1116 lines CSS