@docmd/template-summer 0.8.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3418 @@
1
+ /* =========================================================================
2
+ @docmd/template-summer — summer.css
3
+ A complete, self-contained documentation design system inspired by
4
+ modern docs platforms (GitBook, Linear, Notion). Warm, bright, and
5
+ modern — designed to feel like its own product, not a recolor.
6
+
7
+ This stylesheet is intentionally independent of docmd-main.css. The
8
+ layout in templates/layout.ejs does NOT load the base stylesheet, so
9
+ everything below (reset, tokens, layout, components) is defined here.
10
+
11
+ Load order (priority chain):
12
+ 0 (docmd-main.css is NOT loaded by the summer layout)
13
+ 5 theme CSS — palette overlay
14
+ 10 summer.css (this) — distinctive "summer" design system
15
+ 15 customCss[] — always wins
16
+
17
+ IMPORTANT: Do NOT use !important. User customCss (priority 15) must
18
+ always win so users can restyle any selector without forking the template.
19
+ ========================================================================= */
20
+
21
+
22
+ /* ────────────────────────────────────────────────────────────────────────
23
+ 1. DESIGN TOKENS
24
+ ──────────────────────────────────────────────────────────────────────── */
25
+
26
+ :root {
27
+ --summer-sidebar-width: 288px;
28
+ --summer-toc-width: 240px;
29
+ --summer-content-max: 896px;
30
+ --summer-page-max: 1728px;
31
+ --summer-topbar-height: 50px;
32
+ --summer-subnav-height: 44px;
33
+ --summer-radius-xs: 4px;
34
+ --summer-radius-sm: 6px;
35
+ --summer-radius: 20px;
36
+ --summer-radius-lg: 12px;
37
+ --summer-radius-xl: 18px;
38
+ --summer-font-sans: "Inter", "InterVariable", ui-sans-serif, -apple-system,
39
+ BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
40
+ --summer-font-mono: "JetBrains Mono", "SF Mono", ui-monospace, SFMono-Regular,
41
+ Menlo, Monaco, "Cascadia Code", "Liberation Mono", monospace;
42
+ --summer-text-xs: 0.6875rem;
43
+ --summer-text-sm: 0.8125rem;
44
+ --summer-text-base: 0.9375rem;
45
+ --summer-text-md: 1.0625rem;
46
+ --summer-text-lg: 1.25rem;
47
+ --summer-text-xl: 1.5rem;
48
+ --summer-text-2xl: 1.875rem;
49
+ --summer-text-3xl: 2.25rem;
50
+ --summer-ease: cubic-bezier(0.32, 0.72, 0, 1);
51
+ --summer-ease-out: cubic-bezier(0.16, 1, 0.3, 1);
52
+ --summer-fast: 120ms;
53
+ --summer-med: 220ms;
54
+ --summer-slow: 360ms;
55
+ --summer-z-base: 1;
56
+ --summer-z-raised: 10;
57
+ --summer-z-sticky: 30;
58
+ --summer-z-dropdown: 50;
59
+ --summer-z-overlay: 100;
60
+ --summer-z-modal: 200;
61
+ --summer-bg: #ffffff;
62
+ --summer-bg-subtle: #fafafa;
63
+ --summer-surface: #ffffff;
64
+ --summer-surface-2: #fcfcfc;
65
+ --summer-surface-3: #f1f1ef;
66
+ --summer-surface-sunken: #f5f5f4;
67
+ --summer-border: #e5e5e5;
68
+ --summer-border-soft: #f0f0f0;
69
+ --summer-border-strong: #cdcdcd;
70
+ --summer-fg: #1d1d1d;
71
+ --summer-fg-soft: #4a4a4a;
72
+ --summer-fg-muted: #6e6e6e;
73
+ --summer-fg-faint: #a3a3a3;
74
+ --summer-accent: #fe551b;
75
+ --summer-accent-hover: #e64500;
76
+ --summer-accent-soft: #fff3ed;
77
+ --summer-accent-faint: #ffe4d4;
78
+ --summer-amber: #f59e0b;
79
+ --summer-amber-soft: #fff7e6;
80
+ --summer-sun: #fbbf24;
81
+ --summer-rose: #e11d48;
82
+ --summer-sky: #0284c7;
83
+ --summer-sky-soft: #e0f2fe;
84
+ --summer-green: #16a34a;
85
+ --summer-green-soft: #dcfce7;
86
+ --summer-shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.04);
87
+ --summer-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.06), 0 1px 2px rgba(0, 0, 0, 0.04);
88
+ --summer-shadow: 0 4px 12px -2px rgba(0, 0, 0, 0.08), 0 2px 4px -2px rgba(0, 0, 0, 0.04);
89
+ --summer-shadow-lg: 0 12px 32px -8px rgba(0, 0, 0, 0.12), 0 4px 8px -4px rgba(0, 0, 0, 0.06);
90
+ --summer-shadow-xl: 0 24px 48px -12px rgba(0, 0, 0, 0.18);
91
+ --summer-ring: 0 0 0 3px rgba(254, 85, 27, 0.20);
92
+ --summer-ring-soft: 0 0 0 3px rgba(254, 85, 27, 0.10);
93
+ --summer-header-divider: 0 1px 0 0 rgba(29, 29, 29, 0.08);
94
+ --summer-grid-template: var(--summer-sidebar-width) 1fr var(--summer-toc-width);
95
+ --summer-pageheader-height: 50px;
96
+ --summer-banner-height: 0px;
97
+ --summer-main-padding-top: 32px;
98
+
99
+ }
100
+
101
+ /* ── Disabled-element adjustments ──────────────────────────────────
102
+ When the menubar / page header / banner is absent, the corresponding
103
+ --summer-*-height collapses to 0 so sticky elements (sidebar, TOC,
104
+ pageheader) sit flush against the topbar instead of leaving a gap. */
105
+ .summer-template:not(.has-menubar) { --summer-subnav-height: 0px; }
106
+ .summer-template.no-header { --summer-pageheader-height: 0px; }
107
+ .summer-template.has-banner { --summer-banner-height: 42px; }
108
+ .summer-template:not(.has-banner) { --summer-banner-height: 0px; }
109
+ .summer-template:not(.has-banner) .summer-topbar { top: 0; }
110
+
111
+ /* DARK palette — GitBook-inspired dark mode. */
112
+ html[data-theme="dark"] {
113
+ --summer-bg: #131110;
114
+ --summer-bg-subtle: #1a1815;
115
+ --summer-surface: #1d1b17;
116
+ --summer-surface-2: #25221c;
117
+ --summer-surface-3: #2c2820;
118
+ --summer-surface-sunken:#100e0b;
119
+ --summer-border: #2e2a23;
120
+ --summer-border-soft: #25221c;
121
+ --summer-border-strong: #3d382e;
122
+
123
+ --summer-fg: #f5f0e6;
124
+ --summer-fg-soft: #c5bfb0;
125
+ --summer-fg-muted: #8a8473;
126
+ --summer-fg-faint: #5a5448;
127
+
128
+ --summer-accent: #ff8a5c;
129
+ --summer-accent-hover: #ffa47d;
130
+ --summer-accent-soft: #2a1810;
131
+ --summer-accent-faint: #3a1f10;
132
+
133
+ --summer-amber: #fbbf24;
134
+ --summer-amber-soft: #2a1f08;
135
+ --summer-sun: #fde047;
136
+ --summer-sky: #38bdf8;
137
+ --summer-sky-soft: #082f3f;
138
+ --summer-green: #4ade80;
139
+ --summer-green-soft: #052e1a;
140
+
141
+ --summer-shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.4);
142
+ --summer-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.5), 0 1px 2px rgba(0, 0, 0, 0.3);
143
+ --summer-shadow: 0 4px 12px -2px rgba(0, 0, 0, 0.45), 0 2px 4px -2px rgba(0, 0, 0, 0.3);
144
+ --summer-shadow-lg: 0 12px 32px -8px rgba(0, 0, 0, 0.55), 0 4px 8px -4px rgba(0, 0, 0, 0.4);
145
+ --summer-shadow-xl: 0 24px 48px -12px rgba(0, 0, 0, 0.6);
146
+
147
+ --summer-ring: 0 0 0 3px rgba(255, 138, 92, 0.25);
148
+ --summer-ring-soft: 0 0 0 3px rgba(255, 138, 92, 0.12);
149
+
150
+ --summer-header-divider: 0 1px 0 0 rgba(255, 255, 255, 0.08);
151
+ }
152
+
153
+
154
+ /* ────────────────────────────────────────────────────────────────────────
155
+ 2. RESET + BASE TYPOGRAPHY
156
+ ──────────────────────────────────────────────────────────────────────── */
157
+
158
+ *, *::before, *::after { box-sizing: border-box; }
159
+ * { margin: 0; }
160
+
161
+ html, body { margin: 0; padding: 0; }
162
+
163
+ html {
164
+ /* Anti-FOUC: hidden until theme-init sets the data-theme attribute. */
165
+ visibility: hidden;
166
+ scroll-behavior: smooth;
167
+ -webkit-text-size-adjust: 100%;
168
+ text-size-adjust: 100%;
169
+ tab-size: 4;
170
+ }
171
+ html.summer-ready, html[data-theme] { visibility: visible; }
172
+
173
+ @media (prefers-reduced-motion: reduce) {
174
+ html { scroll-behavior: auto; }
175
+ *, *::before, *::after {
176
+ animation-duration: 0.01ms !important;
177
+ animation-iteration-count: 1 !important;
178
+ transition-duration: 0.01ms !important;
179
+ }
180
+ }
181
+
182
+ body.summer-template {
183
+ font-family: var(--summer-font-sans);
184
+ font-size: var(--summer-text-base);
185
+ line-height: 1.7;
186
+ color: var(--summer-fg);
187
+ background: var(--summer-bg);
188
+ -webkit-font-smoothing: antialiased;
189
+ -moz-osx-font-smoothing: grayscale;
190
+ font-feature-settings: 'kern' 1, 'liga' 1, 'calt' 1;
191
+ text-rendering: optimizeLegibility;
192
+ min-height: 100vh;
193
+ overflow-x: hidden;
194
+ display: flex;
195
+ flex-direction: column;
196
+ }
197
+
198
+ img, svg, video, canvas { display: block; max-width: 100%; height: auto; }
199
+ input, button, textarea, select { font: inherit; color: inherit; }
200
+ button { background: none; border: none; cursor: pointer; padding: 0; }
201
+ a { color: inherit; text-decoration: none; transition: color var(--summer-fast) var(--summer-ease); }
202
+ a:hover { color: var(--summer-fg); }
203
+
204
+ ::selection { background: var(--summer-accent); color: #fff; }
205
+
206
+ /* Focus visibility — keyboard only */
207
+ :focus { outline: none; }
208
+ :focus-visible {
209
+ outline: none;
210
+ box-shadow: var(--summer-ring);
211
+ border-radius: var(--summer-radius-sm);
212
+ }
213
+
214
+ /* Scrollbars (subtle, themed) */
215
+ .summer-template *::-webkit-scrollbar { width: 10px; height: 10px; }
216
+ .summer-template *::-webkit-scrollbar-track { background: transparent; }
217
+ .summer-template *::-webkit-scrollbar-thumb {
218
+ background: var(--summer-border);
219
+ border-radius: 6px;
220
+ border: 2px solid transparent;
221
+ background-clip: padding-box;
222
+
223
+ }
224
+ .summer-template *::-webkit-scrollbar-thumb:hover { background: var(--summer-border-strong); background-clip: padding-box; }
225
+
226
+ /* Skip link (a11y) */
227
+ .summer-template .skip-link {
228
+ position: fixed;
229
+ top: -100px;
230
+ left: 12px;
231
+ background: var(--summer-accent);
232
+ color: #fff;
233
+ padding: 10px 18px;
234
+ border-radius: var(--summer-radius);
235
+ z-index: var(--summer-z-modal);
236
+ font-weight: 600;
237
+ text-decoration: none;
238
+ box-shadow: var(--summer-shadow);
239
+ transition: top var(--summer-med) var(--summer-ease);
240
+ }
241
+ .summer-template .skip-link:focus { top: 12px; }
242
+
243
+
244
+ /* ────────────────────────────────────────────────────────────────────────
245
+ 3. TOP BAR (logo, search, actions)
246
+ ──────────────────────────────────────────────────────────────────────── */
247
+
248
+ .summer-topbar {
249
+ position: sticky;
250
+ top: 0;
251
+ z-index: var(--summer-z-sticky);
252
+ background: color-mix(in srgb, var(--summer-bg) 88%, transparent);
253
+ backdrop-filter: blur(2px);
254
+ -webkit-backdrop-filter: blur(16px);
255
+ box-shadow: var(--summer-header-divider);
256
+ }
257
+
258
+ .summer-topbar__inner {
259
+ max-width: var(--summer-page-max);
260
+ margin: 0 auto;
261
+ height: var(--summer-topbar-height);
262
+ padding: 0 24px;
263
+ display: grid;
264
+ grid-template-columns: minmax(180px, auto) 1fr minmax(180px, auto);
265
+ gap: 24px;
266
+ align-items: center;
267
+ }
268
+
269
+ /* Logo */
270
+ .summer-logo {
271
+ display: inline-flex;
272
+ align-items: center;
273
+ gap: 8px;
274
+ color: var(--summer-fg);
275
+ font-weight: 600;
276
+ font-size: 0.95rem;
277
+ letter-spacing: -0.01em;
278
+ text-decoration: none;
279
+ white-space: nowrap;
280
+ transition: opacity var(--summer-fast) var(--summer-ease);
281
+ }
282
+ .summer-logo:hover { opacity: 0.7; color: var(--summer-fg); }
283
+ .summer-logo img { max-height: 24px; max-width: 140px; object-fit: contain; }
284
+ .summer-logo--text { font-family: var(--summer-font-sans); }
285
+ .summer-logo__icon {
286
+ width: 24px; height: 24px;
287
+ border-radius: 6px;
288
+ background: var(--summer-fg);
289
+ display: inline-flex;
290
+ align-items: center;
291
+ justify-content: center;
292
+ color: var(--summer-bg);
293
+ font-weight: 700;
294
+ font-size: 13px;
295
+ letter-spacing: -0.02em;
296
+ }
297
+ html:not([data-theme="dark"]) .summer-logo__dark { display: none; }
298
+ html[data-theme="dark"] .summer-logo__light { display: none; }
299
+
300
+ /* Center: search (GitBook-style pill) */
301
+ .summer-topbar__center {
302
+ display: flex;
303
+ align-items: center;
304
+ justify-content: center;
305
+ min-width: 0;
306
+ }
307
+
308
+ .summer-search {
309
+ display: flex;
310
+ align-items: center;
311
+ gap: 10px;
312
+ width: 100%;
313
+ max-width: 480px;
314
+ height: 36px;
315
+ padding: 0 10px 0 14px;
316
+ background: var(--summer-surface);
317
+ border: 1px solid var(--summer-border);
318
+ border-radius: 999px; /* pill — GitBook exact */
319
+ color: var(--summer-fg-muted);
320
+ font-size: var(--summer-text-sm);
321
+ font-weight: 400;
322
+ cursor: pointer;
323
+ text-align: left;
324
+ transition: border-color var(--summer-fast) var(--summer-ease),
325
+ background var(--summer-fast) var(--summer-ease),
326
+ box-shadow var(--summer-fast) var(--summer-ease);
327
+ }
328
+ .summer-search:hover, .summer-search:focus-visible {
329
+ border-color: var(--summer-border-strong);
330
+ background: var(--summer-bg);
331
+ color: var(--summer-fg);
332
+ box-shadow: var(--summer-shadow-sm);
333
+ }
334
+ .summer-search__icon {
335
+ flex-shrink: 0;
336
+ color: var(--summer-fg-muted);
337
+ }
338
+ .summer-search__placeholder {
339
+ flex: 1;
340
+ font-weight: 400;
341
+ white-space: nowrap;
342
+ overflow: hidden;
343
+ text-overflow: ellipsis;
344
+ }
345
+ .summer-search__kbd {
346
+ display: inline-flex;
347
+ gap: 2px;
348
+ flex-shrink: 0;
349
+ font-size: 12px;
350
+ line-height: 1;
351
+ color: var(--summer-fg-muted);
352
+ }
353
+ .summer-search__kbd kbd {
354
+ display: inline-flex;
355
+ align-items: center;
356
+ justify-content: center;
357
+ min-width: 18px;
358
+ height: 18px;
359
+ padding: 0 4px;
360
+ border: 1px solid var(--summer-border);
361
+ border-radius: 4px;
362
+ background: var(--summer-bg);
363
+ font-family: var(--summer-font-sans);
364
+ font-size: 11px;
365
+ font-weight: 500;
366
+ color: var(--summer-fg-muted);
367
+ }
368
+
369
+ /* Right: actions — contain overflowing dropdowns (lang switcher, etc.) */
370
+ .summer-topbar__right {
371
+ display: flex;
372
+ align-items: center;
373
+ justify-content: flex-end;
374
+ gap: 2px;
375
+ color: var(--summer-fg-muted);
376
+ position: relative;
377
+ }
378
+ .summer-topbar__right > .summer-options-menu__item {
379
+ position: relative;
380
+ max-height: 36px;
381
+ overflow: visible;
382
+ }
383
+ .summer-topbar__right .summer-options-menu__item > * {
384
+ max-height: 36px;
385
+ overflow: visible;
386
+ }
387
+
388
+ .summer-iconbtn {
389
+ display: inline-flex;
390
+ align-items: center;
391
+ justify-content: center;
392
+ width: 32px;
393
+ height: 32px;
394
+ border-radius: var(--summer-radius-sm);
395
+ color: var(--summer-fg-soft);
396
+ background: transparent;
397
+ border: 1px solid transparent;
398
+ transition: background var(--summer-fast) var(--summer-ease),
399
+ color var(--summer-fast) var(--summer-ease),
400
+ border-color var(--summer-fast) var(--summer-ease);
401
+ position: relative;
402
+ }
403
+ .summer-iconbtn:hover {
404
+ background: var(--summer-surface-2);
405
+ color: var(--summer-fg);
406
+ }
407
+ .summer-iconbtn svg { width: 16px; height: 16px; }
408
+
409
+ /* Mobile-only top-bar elements */
410
+ .summer-topbar__mobile { display: none; align-items: center; gap: 6px; }
411
+
412
+
413
+ /* ────────────────────────────────────────────────────────────────────────
414
+ 4. SUB-NAVIGATION (menubar) — tabs / product switcher
415
+ ──────────────────────────────────────────────────────────────────────── */
416
+
417
+ .summer-subnav {
418
+ position: sticky;
419
+ top: var(--summer-topbar-height);
420
+ z-index: calc(var(--summer-z-sticky) - 1);
421
+ background: color-mix(in srgb, var(--summer-bg) 88%, transparent);
422
+ backdrop-filter: blur(2px);
423
+ -webkit-backdrop-filter: blur(2px);
424
+ /* No border — single hairline only at the very top of the page */
425
+ }
426
+ .summer-template.has-menubar .summer-topbar {
427
+ box-shadow: none;
428
+ }
429
+ .summer-template.has-menubar .summer-subnav {
430
+ box-shadow: var(--summer-header-divider);
431
+ }
432
+ .summer-subnav__inner {
433
+ max-width: var(--summer-page-max);
434
+ margin: 0 auto;
435
+ padding: 0 24px;
436
+ height: var(--summer-subnav-height);
437
+ display: flex;
438
+ align-items: center;
439
+ gap: 0;
440
+ overflow-x: auto;
441
+ scrollbar-width: none;
442
+ }
443
+ .summer-subnav__inner::-webkit-scrollbar { display: none; }
444
+
445
+ .summer-subnav__tab {
446
+ position: relative;
447
+ display: inline-flex;
448
+ align-items: center;
449
+ gap: 6px;
450
+ height: 28px;
451
+ padding: 0 12px;
452
+ border-radius: 999px;
453
+ color: var(--summer-fg-muted);
454
+ text-decoration: none;
455
+ font-size: 0.875rem;
456
+ font-weight: 400;
457
+ white-space: nowrap;
458
+ flex-shrink: 0;
459
+ letter-spacing: -0.005em;
460
+ transition: background var(--summer-fast) var(--summer-ease),
461
+ color var(--summer-fast) var(--summer-ease);
462
+ }
463
+ .summer-subnav__tab:hover {
464
+ background: var(--summer-surface-2);
465
+ color: var(--summer-fg);
466
+ }
467
+ .summer-subnav__tab.active,
468
+ .summer-subnav__tab[aria-current="page"] {
469
+ color: var(--summer-accent);
470
+ font-weight: 500;
471
+ }
472
+ .summer-subnav__tab svg { width: 15px; height: 15px; flex-shrink: 0; }
473
+ .summer-subnav__tab-chevron { opacity: 0.6; margin-left: 1px; }
474
+
475
+ /* Dropdown menu (menubar dropdowns) */
476
+ .summer-subnav__dropdown { position: relative; }
477
+ .summer-subnav__menu {
478
+ position: absolute;
479
+ top: calc(100% + 8px);
480
+ left: 0;
481
+ min-width: 200px;
482
+ padding: 6px;
483
+ background: var(--summer-surface);
484
+ border: 1px solid var(--summer-border);
485
+ border-radius: var(--summer-radius);
486
+ box-shadow: var(--summer-shadow-lg);
487
+ opacity: 0;
488
+ visibility: hidden;
489
+ transform: translateY(-4px);
490
+ transition: opacity var(--summer-fast) var(--summer-ease),
491
+ transform var(--summer-fast) var(--summer-ease),
492
+ visibility 0s linear var(--summer-fast);
493
+ z-index: var(--summer-z-overlay);
494
+ }
495
+ .summer-subnav__dropdown[data-open="true"] .summer-subnav__menu {
496
+ opacity: 1;
497
+ visibility: visible;
498
+ transform: translateY(0);
499
+ transition: opacity var(--summer-fast) var(--summer-ease),
500
+ transform var(--summer-fast) var(--summer-ease),
501
+ visibility 0s;
502
+ }
503
+ .summer-subnav__menuitem {
504
+ display: flex;
505
+ align-items: center;
506
+ gap: 10px;
507
+ padding: 8px 10px;
508
+ border-radius: var(--summer-radius-sm);
509
+ color: var(--summer-fg-soft);
510
+ text-decoration: none;
511
+ font-size: var(--summer-text-sm);
512
+ font-weight: 500;
513
+ transition: background var(--summer-fast) var(--summer-ease), color var(--summer-fast) var(--summer-ease);
514
+ }
515
+ .summer-subnav__menuitem:hover {
516
+ background: var(--summer-surface-2);
517
+ color: var(--summer-fg);
518
+ }
519
+ .summer-subnav__menuitem-icon { display: inline-flex; color: var(--summer-fg-muted); }
520
+ .summer-subnav__menuitem-icon svg { width: 15px; height: 15px; }
521
+ .summer-subnav__menuitem-desc {
522
+ display: block;
523
+ font-size: var(--summer-text-xs);
524
+ font-weight: 400;
525
+ color: var(--summer-fg-muted);
526
+ margin-top: 1px;
527
+ }
528
+
529
+ .summer-subnav__spacer { flex: 1; min-width: 8px; }
530
+
531
+ .summer-subnav__right { display: inline-flex; align-items: center; gap: 4px; }
532
+
533
+
534
+ /* ────────────────────────────────────────────────────────────────────────
535
+ 5. PAGE HEADER (breadcrumb, title, copy widgets)
536
+ ──────────────────────────────────────────────────────────────────────── */
537
+
538
+ .summer-pageheader {
539
+ position: sticky;
540
+ top: calc(var(--summer-topbar-height) + var(--summer-subnav-height) + var(--summer-banner-height));
541
+ z-index: calc(var(--summer-z-sticky) - 2);
542
+ background: color-mix(in srgb, var(--summer-bg) 88%, transparent);
543
+ backdrop-filter: blur(2px);
544
+ -webkit-backdrop-filter: blur(2px);
545
+ /* No border — clean like GitBook */
546
+ margin-left: calc(-1 * var(--summer-gutter, 0px));
547
+ margin-right: calc(-1 * var(--summer-gutter, 0px));
548
+ /* Top padding here (instead of on .summer-main) is the breathing room
549
+ * between the topbar and the breadcrumb / copy row. This keeps the
550
+ * pageheader's natural Y aligned with its sticky Y, so the sidebar /
551
+ * TOC don't overlap the pageheader at scroll=0. */
552
+ padding: 20px 10px 5px;
553
+ }
554
+ .summer-pageheader__inner {
555
+ max-width: var(--summer-content-max);
556
+ margin: 0 auto;
557
+ display: flex;
558
+ align-items: center;
559
+ justify-content: space-between;
560
+ gap: 16px;
561
+ min-height: 25px;
562
+ }
563
+ .summer-pageheader__meta {
564
+ flex: 1;
565
+ min-width: 0;
566
+ overflow: hidden;
567
+ white-space: nowrap;
568
+ text-overflow: ellipsis;
569
+ display: flex;
570
+ flex-direction: column;
571
+ gap: 2px;
572
+ }
573
+
574
+ .summer-breadcrumbs {
575
+ font-size: var(--summer-text-sm);
576
+ color: var(--summer-fg-muted);
577
+ min-width: 0;
578
+ overflow: hidden;
579
+ white-space: nowrap;
580
+ text-overflow: ellipsis;
581
+ }
582
+ .summer-breadcrumbs__list {
583
+ display: inline-flex;
584
+ align-items: center;
585
+ gap: 4px;
586
+ list-style: none;
587
+ margin: 0;
588
+ padding: 0;
589
+ }
590
+ .summer-breadcrumbs__item { display: inline-flex; align-items: center; gap: 4px; }
591
+ .summer-breadcrumbs__item + .summer-breadcrumbs__item::before {
592
+ content: "";
593
+ display: inline-block;
594
+ width: 12px;
595
+ height: 12px;
596
+ background: currentColor;
597
+ -webkit-mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><polyline points='9 18 15 12 9 6'/></svg>") no-repeat center / contain;
598
+ mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><polyline points='9 18 15 12 9 6'/></svg>") no-repeat center / contain;
599
+ opacity: 0.5;
600
+ margin-right: 4px;
601
+ }
602
+ .summer-breadcrumbs__link {
603
+ color: var(--summer-fg-muted);
604
+ text-decoration: none;
605
+ padding: 2px 4px;
606
+ border-radius: 4px;
607
+ transition: color var(--summer-fast) var(--summer-ease);
608
+ }
609
+ .summer-breadcrumbs__link:hover { color: var(--summer-fg); }
610
+ .summer-breadcrumbs__current { color: var(--summer-fg); font-weight: 500; }
611
+
612
+ /* Copy buttons — proper full-width clickable buttons (GitBook-style) */
613
+ .summer-copy-widgets {
614
+ display: inline-flex;
615
+ align-items: center;
616
+ gap: 6px;
617
+ flex-shrink: 0;
618
+ }
619
+ .summer-copy-btn {
620
+ display: inline-flex;
621
+ align-items: center;
622
+ justify-content: center;
623
+ gap: 6px;
624
+ height: 30px;
625
+ padding: 0 12px;
626
+ background: transparent;
627
+ border: 1px solid var(--summer-border);
628
+ border-radius: 999px;
629
+ color: var(--summer-fg-soft);
630
+ font-size: 0.8rem;
631
+ font-weight: 500;
632
+ line-height: 1;
633
+ cursor: pointer;
634
+ white-space: nowrap;
635
+ user-select: none;
636
+ -webkit-user-select: none;
637
+ transition: all var(--summer-fast) var(--summer-ease);
638
+ }
639
+ .summer-copy-btn:hover {
640
+ background: var(--summer-surface-2);
641
+ border-color: var(--summer-border-strong);
642
+ color: var(--summer-fg);
643
+ }
644
+ .summer-copy-btn:active { transform: scale(0.97); }
645
+ .summer-copy-btn.is-copied {
646
+ background: var(--summer-green-soft);
647
+ border-color: var(--summer-green);
648
+ color: var(--summer-green);
649
+ }
650
+ .summer-copy-btn svg { width: 13px; height: 13px; flex-shrink: 0; }
651
+ .summer-copy-btn--icon-only { padding: 0 8px; }
652
+
653
+
654
+ /* ────────────────────────────────────────────────────────────────────────
655
+ 6. LAYOUT GRID
656
+ ──────────────────────────────────────────────────────────────────────── */
657
+
658
+ .summer-layout {
659
+ display: grid;
660
+ grid-template-columns: var(--summer-grid-template);
661
+ max-width: var(--summer-page-max);
662
+ margin: 0 auto;
663
+ gap: 0;
664
+ padding: 0;
665
+ position: relative;
666
+ flex: 1 0 auto;
667
+ width: 100%;
668
+ }
669
+
670
+ .summer-template.no-toc .summer-layout { grid-template-columns: var(--summer-sidebar-width) 1fr; }
671
+ .summer-template.no-sidebar .summer-layout { grid-template-columns: 1fr var(--summer-toc-width); }
672
+ .summer-template.no-sidebar.no-toc .summer-layout { grid-template-columns: 1fr; }
673
+
674
+
675
+ /* ────────────────────────────────────────────────────────────────────────
676
+ 7. SIDEBAR
677
+ ──────────────────────────────────────────────────────────────────────── */
678
+
679
+ .summer-sidebar {
680
+ position: sticky;
681
+ top: calc(var(--summer-topbar-height) + var(--summer-subnav-height) + var(--summer-banner-height) + var(--summer-pageheader-height));
682
+ align-self: start;
683
+ max-height: calc(100vh - var(--summer-topbar-height) - var(--summer-subnav-height) - var(--summer-banner-height) - var(--summer-pageheader-height));
684
+ overflow-y: auto;
685
+ padding: 0 5px;
686
+ border-right: none;
687
+ background: var(--summer-bg);
688
+ }
689
+
690
+ .summer-sidebar::-webkit-scrollbar { width: 6px; }
691
+ .summer-sidebar::-webkit-scrollbar-track { background: transparent; }
692
+ .summer-sidebar::-webkit-scrollbar-thumb {
693
+ background: transparent;
694
+ border-radius: 3px;
695
+ }
696
+ .summer-sidebar:hover::-webkit-scrollbar-thumb {
697
+ background: var(--summer-border-soft);
698
+ }
699
+
700
+ .summer-sidebar nav ul { list-style: none; padding: 0; margin: 0; }
701
+ .summer-sidebar nav > ul { display: flex; flex-direction: column; gap: 2px; }
702
+
703
+ /* 1. Top-level Group Headers (Uppercase, GitBook-style)
704
+ Note: nav-group is also applied to non-collapsible groups (where
705
+ navigation.ejs partial renders a plain section header). The
706
+ `collapsible` class is only present on the interactive groups, so
707
+ cursor/hover/click affordances must be scoped to .collapsible —
708
+ otherwise "collapsible: false" sections still look clickable. */
709
+ .summer-sidebar nav > ul > li.nav-group > .nav-label,
710
+ .summer-sidebar nav > ul > li.nav-group > a {
711
+ display: flex;
712
+ align-items: center;
713
+ gap: 8px;
714
+ padding: 8px 14px;
715
+ color: var(--summer-fg-muted);
716
+ font-size: 0.6875rem; /* 11px */
717
+ font-weight: 700;
718
+ text-transform: uppercase;
719
+ letter-spacing: 0.08em;
720
+ user-select: none;
721
+ }
722
+ /* Cursor + click affordance only for actual collapsible groups */
723
+ .summer-sidebar nav > ul > li.nav-group.collapsible > .nav-label,
724
+ .summer-sidebar nav > ul > li.nav-group.collapsible > a {
725
+ cursor: pointer;
726
+ }
727
+ .summer-sidebar nav > ul > li.nav-group:first-child > .nav-label,
728
+ .summer-sidebar nav > ul > li.nav-group:first-child > a {
729
+ margin-top: 0;
730
+ }
731
+
732
+ .summer-sidebar nav > ul > li.nav-group > .nav-label svg,
733
+ .summer-sidebar nav > ul > li.nav-group > a svg:not(.nav-external-icon):not(.collapse-icon) {
734
+ width: 14px; height: 14px;
735
+ color: var(--summer-fg-muted);
736
+ flex-shrink: 0;
737
+ transition: color var(--summer-fast) var(--summer-ease);
738
+ }
739
+ /* Hover affordance only on collapsible groups — non-collapsible
740
+ sections (collapsible: false in nav JSON) shouldn't react on hover. */
741
+ .summer-sidebar nav > ul > li.nav-group.collapsible > .nav-label:hover,
742
+ .summer-sidebar nav > ul > li.nav-group.collapsible > a:hover,
743
+ .summer-sidebar nav > ul > li.nav-group > .nav-label:hover{
744
+ color: var(--summer-fg);
745
+ background: none;
746
+ }
747
+ .summer-sidebar nav > ul > li.nav-group.collapsible > .nav-label:hover svg,
748
+ .summer-sidebar nav > ul > li.nav-group.collapsible > a:hover svg:not(.nav-external-icon):not(.collapse-icon) {
749
+ color: var(--summer-accent);
750
+ }
751
+
752
+ /* 2. Regular sidebar items (both leaves and collapsible submenu links) */
753
+ .summer-sidebar nav li > a:not(.nav-group),
754
+ .summer-sidebar nav li:not(.nav-group) > .nav-label,
755
+ .summer-sidebar nav .submenu li > a,
756
+ .summer-sidebar nav .submenu li > .nav-label {
757
+ display: flex;
758
+ align-items: center;
759
+ gap: 8px;
760
+ padding: 6px 8px;
761
+ margin: 1px 6px;
762
+ color: var(--summer-fg-soft);
763
+ font-size: 0.875rem; /* 14px */
764
+ font-weight: 450;
765
+ text-decoration: none;
766
+ border-radius: var(--summer-radius-sm);
767
+ line-height: 1.4;
768
+ position: relative;
769
+ transition: background var(--summer-fast) var(--summer-ease),
770
+ color var(--summer-fast) var(--summer-ease);
771
+ }
772
+
773
+ .summer-sidebar nav li > a:not(.nav-group) svg:not(.nav-external-icon):not(.collapse-icon),
774
+ .summer-sidebar nav li:not(.nav-group) > .nav-label svg:not(.nav-external-icon):not(.collapse-icon),
775
+ .summer-sidebar nav .submenu li > a svg:not(.nav-external-icon):not(.collapse-icon),
776
+ .summer-sidebar nav .submenu li > .nav-label svg:not(.nav-external-icon):not(.collapse-icon) {
777
+ width: 14px; height: 14px;
778
+ flex-shrink: 0;
779
+ color: var(--summer-fg-faint);
780
+ transition: color var(--summer-fast) var(--summer-ease);
781
+ }
782
+
783
+ .summer-sidebar nav li > a:hover,
784
+ .summer-sidebar nav li > .nav-label:hover {
785
+ background: var(--summer-surface-2);
786
+ color: var(--summer-fg);
787
+ }
788
+ .summer-sidebar nav li > a:hover svg:not(.nav-external-icon):not(.collapse-icon),
789
+ .summer-sidebar nav li > .nav-label:hover svg:not(.nav-external-icon):not(.collapse-icon) {
790
+ color: var(--summer-fg-soft);
791
+ }
792
+
793
+ /* 3. Active state styling - thin left border, color highlights */
794
+ /* Top-level active items (display border-left on the element itself) */
795
+ .summer-sidebar nav > ul > li > a.active,
796
+ .summer-sidebar nav > ul > li > .nav-label.active {
797
+ background: transparent;
798
+ color: var(--summer-accent);
799
+ font-weight: 500;
800
+ border-left: 2px solid var(--summer-accent);
801
+ border-radius: 0;
802
+ padding-left: 10px; /* text aligns perfectly (10px + 2px border = 12px padding) */
803
+ }
804
+
805
+ /* Nested active items (overlay accent bar on the parent submenu's border-left thread) */
806
+ .summer-sidebar nav .submenu li > a.active,
807
+ .summer-sidebar nav .submenu li > .nav-label.active {
808
+ background: transparent;
809
+ color: var(--summer-accent);
810
+ font-weight: 500;
811
+ border-left: none; /* no border on the item itself */
812
+ /* standard padding */
813
+ }
814
+
815
+ .summer-sidebar nav .submenu li > a.active::before,
816
+ .summer-sidebar nav .submenu li > .nav-label.active::before {
817
+ content: "";
818
+ position: absolute;
819
+ left: -13px; /* align exactly with the parent's border-left */
820
+ top: 0;
821
+ bottom: 0;
822
+ width: 2px;
823
+ background: var(--summer-accent);
824
+ display: block;
825
+ }
826
+
827
+ .summer-sidebar nav li > a.active:hover,
828
+ .summer-sidebar nav li > .nav-label.active:hover {
829
+ background: var(--summer-surface-2);
830
+ }
831
+
832
+ .summer-sidebar nav li > a.active svg:not(.nav-external-icon):not(.collapse-icon),
833
+ .summer-sidebar nav li > .nav-label.active svg:not(.nav-external-icon):not(.collapse-icon) {
834
+ color: var(--summer-accent);
835
+ }
836
+
837
+ /* 4. Collapse trigger icon styling & transitions */
838
+ .summer-sidebar nav .collapse-icon-wrapper {
839
+ display: inline-flex;
840
+ align-items: center;
841
+ justify-content: center;
842
+ margin-left: auto;
843
+ color: var(--summer-fg-faint);
844
+ cursor: pointer;
845
+ padding: 4px;
846
+ border-radius: 4px;
847
+ transition: transform var(--summer-med) var(--summer-ease),
848
+ color var(--summer-fast) var(--summer-ease);
849
+ }
850
+ .summer-sidebar nav .collapse-icon-wrapper:hover {
851
+ color: var(--summer-fg-soft);
852
+ }
853
+ .summer-sidebar nav .collapse-icon {
854
+ width: 10px;
855
+ height: 10px;
856
+ transform: rotate(90deg); /* Expanded is pointing down (90deg) */
857
+ transition: transform var(--summer-med) var(--summer-ease);
858
+ }
859
+
860
+ /* Collapsed chevron points right (0deg) */
861
+ .summer-sidebar nav li[aria-expanded="false"] > a .collapse-icon,
862
+ .summer-sidebar nav li[aria-expanded="false"] > .nav-label .collapse-icon,
863
+ .summer-sidebar nav li:not(.expanded) > a .collapse-icon,
864
+ .summer-sidebar nav li:not(.expanded) > .nav-label .collapse-icon {
865
+ transform: rotate(0deg);
866
+ }
867
+
868
+ .summer-sidebar .nav-item-title {
869
+ flex: 1;
870
+ }
871
+
872
+ .summer-sidebar .nav-external-icon {
873
+ width: 11px;
874
+ height: 11px;
875
+ margin-left: auto;
876
+ color: var(--summer-fg-faint);
877
+ }
878
+
879
+ /* 5. Submenu & Nested tracks styling */
880
+ .summer-sidebar nav .submenu {
881
+ list-style: none;
882
+ padding: 0;
883
+ margin: 0;
884
+ overflow: hidden;
885
+ max-height: 2000px;
886
+ transition: max-height var(--summer-slow) var(--summer-ease);
887
+ /* Indent nesting with a beautiful thread line */
888
+ border-left: 1px solid var(--summer-border-soft);
889
+ margin-left: 20px;
890
+ padding-left: 4px;
891
+ }
892
+ .summer-sidebar nav li[aria-expanded="false"] > .submenu,
893
+ .summer-sidebar nav li:not(.expanded) > .submenu {
894
+ max-height: 0;
895
+ }
896
+ /* Sidebar widgets & dropdowns (Version Switcher, Language Switcher, Project Switcher) */
897
+ .summer-sidebar__top,
898
+ .summer-sidebar__bottom {
899
+ display: flex;
900
+ flex-direction: column;
901
+ gap: 6px;
902
+ padding: 0 10px;
903
+ margin-bottom: 14px;
904
+ }
905
+ .summer-sidebar__bottom {
906
+ margin-top: 24px;
907
+ margin-bottom: 0;
908
+ }
909
+
910
+ .summer-sidebar-widget {
911
+ width: 100%;
912
+ }
913
+
914
+ .summer-sidebar-widget .docmd-version-dropdown,
915
+ .summer-sidebar-widget .docmd-project-switcher,
916
+ .summer-sidebar-widget .docmd-language-switcher {
917
+ width: 100%;
918
+ position: relative;
919
+ }
920
+
921
+ .summer-sidebar-widget .version-dropdown-toggle,
922
+ .summer-sidebar-widget .project-switcher-toggle,
923
+ .summer-sidebar-widget .language-switcher-toggle {
924
+ display: flex;
925
+ width: 100%;
926
+ align-items: center;
927
+ gap: 8px;
928
+ height: 32px;
929
+ padding: 0 12px;
930
+ background-color: var(--summer-surface);
931
+ border: 1px solid var(--summer-border-soft);
932
+ border-radius: var(--summer-radius-lg);
933
+ color: var(--summer-fg-soft);
934
+ font-size: 0.8rem;
935
+ font-weight: 500;
936
+ cursor: pointer;
937
+ transition: all var(--summer-fast) var(--summer-ease);
938
+ box-sizing: border-box;
939
+ text-align: left;
940
+ }
941
+
942
+ .summer-sidebar-widget .version-dropdown-toggle:hover,
943
+ .summer-sidebar-widget .project-switcher-toggle:hover,
944
+ .summer-sidebar-widget .language-switcher-toggle:hover {
945
+ background-color: var(--summer-surface-2);
946
+ color: var(--summer-fg);
947
+ border-color: var(--summer-border);
948
+ }
949
+
950
+ .summer-sidebar-widget .version-icon,
951
+ .summer-sidebar-widget .project-icon,
952
+ .summer-sidebar-widget .language-icon {
953
+ width: 14px;
954
+ height: 14px;
955
+ color: var(--summer-fg-faint);
956
+ flex-shrink: 0;
957
+ }
958
+
959
+ .summer-sidebar-widget .version-chevron,
960
+ .summer-sidebar-widget .project-chevron,
961
+ .summer-sidebar-widget .language-chevron {
962
+ width: 12px;
963
+ height: 12px;
964
+ margin-left: auto;
965
+ color: var(--summer-fg-faint);
966
+ transition: transform var(--summer-med) var(--summer-ease);
967
+ }
968
+
969
+ /* Open states */
970
+ .summer-sidebar-widget .docmd-version-dropdown.open .version-chevron,
971
+ .summer-sidebar-widget .docmd-project-switcher.open .project-chevron {
972
+ transform: rotate(180deg);
973
+ }
974
+
975
+ /* Dropdown menus positioning */
976
+ .summer-sidebar-widget .version-dropdown-menu,
977
+ .summer-sidebar-widget .project-switcher-menu,
978
+ .summer-sidebar-widget .language-switcher-menu {
979
+ display: none;
980
+ position: absolute;
981
+ left: 0;
982
+ right: 0;
983
+ background: var(--summer-bg);
984
+ border: 1px solid var(--summer-border);
985
+ border-radius: var(--summer-radius-md);
986
+ box-shadow: var(--summer-shadow-lg);
987
+ padding: 4px;
988
+ margin: 4px 0 0 0;
989
+ list-style: none;
990
+ z-index: var(--summer-z-dropdown);
991
+ max-height: 240px;
992
+ overflow-y: auto;
993
+ }
994
+
995
+ .summer-sidebar-widget .docmd-version-dropdown.open .version-dropdown-menu,
996
+ .summer-sidebar-widget .docmd-project-switcher.open .project-switcher-menu {
997
+ display: block;
998
+ }
999
+ .summer-sidebar-widget .docmd-language-switcher.open .language-switcher-menu {
1000
+ display: block;
1001
+ opacity: 1;
1002
+ visibility: visible;
1003
+ transform: none;
1004
+ }
1005
+
1006
+ /* Bottom sidebar widgets open upwards to avoid clipping */
1007
+ .summer-sidebar__bottom .version-dropdown-menu,
1008
+ .summer-sidebar__bottom .project-switcher-menu,
1009
+ .summer-sidebar__bottom .language-switcher-menu {
1010
+ top: auto;
1011
+ bottom: calc(100% + 4px);
1012
+ margin: 0 0 4px 0;
1013
+ }
1014
+
1015
+ /* Dropdown items styling */
1016
+ .summer-sidebar-widget .version-dropdown-item,
1017
+ .summer-sidebar-widget .project-switcher-item,
1018
+ .summer-sidebar-widget .language-switcher-item {
1019
+ display: flex;
1020
+ align-items: center;
1021
+ gap: 8px;
1022
+ padding: 6px 10px;
1023
+ color: var(--summer-fg-soft);
1024
+ font-size: 0.82rem;
1025
+ text-decoration: none;
1026
+ border-radius: var(--summer-radius-sm);
1027
+ transition: background var(--summer-fast) var(--summer-ease),
1028
+ color var(--summer-fast) var(--summer-ease);
1029
+ cursor: pointer;
1030
+ }
1031
+
1032
+ .summer-sidebar-widget .version-dropdown-item:hover,
1033
+ .summer-sidebar-widget .project-switcher-item:hover,
1034
+ .summer-sidebar-widget .language-switcher-item:hover {
1035
+ background: var(--summer-surface-2);
1036
+ color: var(--summer-fg);
1037
+ }
1038
+
1039
+ .summer-sidebar-widget .version-dropdown-item.active,
1040
+ .summer-sidebar-widget .project-switcher-item.active,
1041
+ .summer-sidebar-widget .language-switcher-item.active {
1042
+ background: var(--summer-accent-soft);
1043
+ color: var(--summer-accent);
1044
+ font-weight: 500;
1045
+ }
1046
+
1047
+ .summer-sidebar-widget .version-check,
1048
+ .summer-sidebar-widget .project-check,
1049
+ .summer-sidebar-widget .language-check {
1050
+ width: 12px;
1051
+ height: 12px;
1052
+ margin-left: auto;
1053
+ color: var(--summer-accent);
1054
+ }
1055
+
1056
+ .summer-sidebar-widget .version-latest-badge {
1057
+ font-size: 0.65rem;
1058
+ padding: 1px 4px;
1059
+ background: var(--summer-surface-2);
1060
+ border: 1px solid var(--summer-border-soft);
1061
+ border-radius: 4px;
1062
+ color: var(--summer-fg-muted);
1063
+ font-weight: normal;
1064
+ }
1065
+
1066
+ /* ── Topbar pill dropdowns (version / project / language switcher) ──
1067
+ Compact floating trigger (28px tall) so three switchers can sit in the
1068
+ topbar without crowding the theme / sponsor / github icons. */
1069
+ .summer-topbar__right .docmd-version-dropdown,
1070
+ .summer-topbar__right .docmd-project-switcher,
1071
+ .summer-topbar__right .docmd-language-switcher {
1072
+ position: relative;
1073
+ display: inline-flex;
1074
+ align-items: center;
1075
+ }
1076
+
1077
+ .summer-topbar__right .version-dropdown-toggle,
1078
+ .summer-topbar__right .project-switcher-toggle,
1079
+ .summer-topbar__right .language-switcher-toggle {
1080
+ display: inline-flex;
1081
+ align-items: center;
1082
+ gap: 5px;
1083
+ height: 28px;
1084
+ padding: 0 9px;
1085
+ background: transparent;
1086
+ border: 1px solid transparent;
1087
+ border-radius: 999px;
1088
+ color: var(--summer-fg-soft);
1089
+ font-size: 0.78rem;
1090
+ font-weight: 500;
1091
+ cursor: pointer;
1092
+ transition: background var(--summer-fast) var(--summer-ease),
1093
+ color var(--summer-fast) var(--summer-ease),
1094
+ border-color var(--summer-fast) var(--summer-ease);
1095
+ white-space: nowrap;
1096
+ }
1097
+
1098
+ .summer-topbar__right .version-dropdown-toggle:hover,
1099
+ .summer-topbar__right .project-switcher-toggle:hover,
1100
+ .summer-topbar__right .language-switcher-toggle:hover {
1101
+ background: var(--summer-surface-2);
1102
+ color: var(--summer-fg);
1103
+ border-color: var(--summer-border-soft);
1104
+ }
1105
+
1106
+ .summer-topbar__right .version-icon,
1107
+ .summer-topbar__right .project-icon,
1108
+ .summer-topbar__right .language-icon {
1109
+ width: 14px;
1110
+ height: 14px;
1111
+ color: var(--summer-fg-faint);
1112
+ flex-shrink: 0;
1113
+ }
1114
+
1115
+ .summer-topbar__right .version-chevron,
1116
+ .summer-topbar__right .project-chevron,
1117
+ .summer-topbar__right .language-chevron {
1118
+ width: 12px;
1119
+ height: 12px;
1120
+ color: var(--summer-fg-faint);
1121
+ transition: transform var(--summer-med) var(--summer-ease);
1122
+ margin-left: 1px;
1123
+ }
1124
+
1125
+ .summer-topbar__right .docmd-version-dropdown.open .version-chevron,
1126
+ .summer-topbar__right .docmd-project-switcher.open .project-chevron,
1127
+ .summer-topbar__right .docmd-language-switcher.open .language-chevron {
1128
+ transform: rotate(180deg);
1129
+ }
1130
+
1131
+ .summer-topbar__right .version-dropdown-menu,
1132
+ .summer-topbar__right .project-switcher-menu,
1133
+ .summer-topbar__right .language-switcher-menu {
1134
+ display: none;
1135
+ position: absolute;
1136
+ top: calc(100% + 6px);
1137
+ right: 0;
1138
+ min-width: 180px;
1139
+ background: var(--summer-bg);
1140
+ border: 1px solid var(--summer-border);
1141
+ border-radius: var(--summer-radius-md);
1142
+ box-shadow: var(--summer-shadow-lg);
1143
+ padding: 4px;
1144
+ margin: 0;
1145
+ list-style: none;
1146
+ z-index: var(--summer-z-dropdown);
1147
+ max-height: 280px;
1148
+ overflow-y: auto;
1149
+ }
1150
+
1151
+ .summer-topbar__right .docmd-version-dropdown.open .version-dropdown-menu,
1152
+ .summer-topbar__right .docmd-project-switcher.open .project-switcher-menu,
1153
+ .summer-topbar__right .docmd-language-switcher.open .language-switcher-menu {
1154
+ display: block;
1155
+ }
1156
+
1157
+ .summer-topbar__right .version-dropdown-item,
1158
+ .summer-topbar__right .project-switcher-item,
1159
+ .summer-topbar__right .language-switcher-item {
1160
+ display: flex;
1161
+ align-items: center;
1162
+ gap: 8px;
1163
+ padding: 6px 10px;
1164
+ color: var(--summer-fg-soft);
1165
+ font-size: 0.82rem;
1166
+ text-decoration: none;
1167
+ border-radius: var(--summer-radius-sm);
1168
+ transition: background var(--summer-fast) var(--summer-ease),
1169
+ color var(--summer-fast) var(--summer-ease);
1170
+ }
1171
+
1172
+ .summer-topbar__right .version-dropdown-item:hover,
1173
+ .summer-topbar__right .project-switcher-item:hover,
1174
+ .summer-topbar__right .language-switcher-item:hover {
1175
+ background: var(--summer-surface-2);
1176
+ color: var(--summer-fg);
1177
+ }
1178
+
1179
+ .summer-topbar__right .version-dropdown-item.active,
1180
+ .summer-topbar__right .project-switcher-item.active,
1181
+ .summer-topbar__right .language-switcher-item.active {
1182
+ color: var(--summer-accent);
1183
+ font-weight: 500;
1184
+ }
1185
+
1186
+ .summer-topbar__right .version-check,
1187
+ .summer-topbar__right .project-check,
1188
+ .summer-topbar__right .language-check {
1189
+ width: 12px;
1190
+ height: 12px;
1191
+ margin-left: auto;
1192
+ color: var(--summer-accent);
1193
+ }
1194
+
1195
+ .summer-topbar__right .version-latest-badge {
1196
+ font-size: 0.65rem;
1197
+ padding: 1px 4px;
1198
+ background: var(--summer-surface-2);
1199
+ border: 1px solid var(--summer-border-soft);
1200
+ border-radius: 4px;
1201
+ color: var(--summer-fg-muted);
1202
+ font-weight: normal;
1203
+ margin-left: auto;
1204
+ }
1205
+
1206
+ .summer-topbar__right .version-dropdown-item > a,
1207
+ .summer-topbar__right .version-dropdown-item { color: inherit; }
1208
+
1209
+ /* Sidebar close (mobile) */
1210
+ .summer-sidebar-close {
1211
+ display: none;
1212
+ position: absolute;
1213
+ top: 14px;
1214
+ right: 14px;
1215
+ width: 32px;
1216
+ height: 32px;
1217
+ align-items: center;
1218
+ justify-content: center;
1219
+ border-radius: var(--summer-radius-sm);
1220
+ color: var(--summer-fg-soft);
1221
+ background: transparent;
1222
+ }
1223
+ .summer-sidebar-close:hover { background: var(--summer-surface-2); color: var(--summer-fg); }
1224
+
1225
+
1226
+ /* ────────────────────────────────────────────────────────────────────────
1227
+ 8. MAIN CONTENT
1228
+ ──────────────────────────────────────────────────────────────────────── */
1229
+
1230
+ .summer-main {
1231
+ min-width: 0;
1232
+ /* No top padding — the breathing room between topbar and the
1233
+ * pageheader's content lives on the pageheader itself
1234
+ * (padding: 20px 10px 5px) so the pageheader's natural Y lines up
1235
+ * with its sticky Y. The sidebar / TOC stick to the pageheader's
1236
+ * bottom and never overlap the pageheader. */
1237
+ padding: 0 48px 64px;
1238
+ --summer-gutter: 48px;
1239
+ display: flex;
1240
+ flex-direction: column;
1241
+ }
1242
+
1243
+ .summer-content {
1244
+ max-width: var(--summer-content-max);
1245
+ font-size: var(--summer-text-base); /* 15px — GitBook body base */
1246
+ line-height: 1.7;
1247
+ color: var(--summer-fg-soft);
1248
+ flex: 1 0 auto;
1249
+ }
1250
+
1251
+ .summer-content__title {
1252
+ font-size: 2rem; /* 32px — GitBook page title */
1253
+ font-weight: 700;
1254
+ color: var(--summer-fg);
1255
+ letter-spacing: -0.03em;
1256
+ line-height: 1.2;
1257
+ margin: 0 0 24px;
1258
+ }
1259
+
1260
+ .summer-content > * + * { margin-top: 1.1em; }
1261
+
1262
+ /* Headings — Inter optical sizing, matching GitBook */
1263
+ .summer-content h1,
1264
+ .summer-content h2,
1265
+ .summer-content h3,
1266
+ .summer-content h4,
1267
+ .summer-content h5,
1268
+ .summer-content h6 {
1269
+ font-family: var(--summer-font-sans);
1270
+ color: var(--summer-fg);
1271
+ font-weight: 600;
1272
+ line-height: 1.3;
1273
+ scroll-margin-top: calc(var(--summer-topbar-height) + var(--summer-subnav-height) + var(--summer-banner-height) + var(--summer-pageheader-height) + 24px);
1274
+ }
1275
+ .summer-content h1 {
1276
+ font-size: 1.875rem; /* 30px — GitBook H1 */
1277
+ margin-top: 0;
1278
+ margin-bottom: 0.5em;
1279
+ letter-spacing: -0.03em;
1280
+ font-weight: 700;
1281
+ line-height: 1.25;
1282
+ }
1283
+ .summer-content h2 {
1284
+ font-size: 1.5rem; /* 24px — GitBook H2 */
1285
+ margin-top: 2em;
1286
+ margin-bottom: 0.5em;
1287
+ font-weight: 600;
1288
+ letter-spacing: -0.025em;
1289
+ line-height: 1.3;
1290
+ }
1291
+ .summer-content h3 {
1292
+ font-size: 1.25rem; /* 20px — GitBook H3 */
1293
+ margin-top: 1.75em;
1294
+ margin-bottom: 0.4em;
1295
+ font-weight: 600;
1296
+ letter-spacing: -0.02em;
1297
+ line-height: 1.35;
1298
+ }
1299
+ .summer-content h4 {
1300
+ font-size: 1.0625rem; /* 17px */
1301
+ margin-top: 1.5em;
1302
+ margin-bottom: 0.35em;
1303
+ font-weight: 600;
1304
+ letter-spacing: -0.01em;
1305
+ }
1306
+ .summer-content h5 {
1307
+ font-size: var(--summer-text-base);
1308
+ margin-top: 1.25em;
1309
+ margin-bottom: 0.3em;
1310
+ font-weight: 600;
1311
+ }
1312
+ .summer-content h6 {
1313
+ font-size: var(--summer-text-sm);
1314
+ margin-top: 1em;
1315
+ margin-bottom: 0.3em;
1316
+ color: var(--summer-fg-muted);
1317
+ text-transform: uppercase;
1318
+ letter-spacing: 0.08em;
1319
+ font-weight: 600;
1320
+ }
1321
+
1322
+ /* Paragraph + inline — Refined premium sizing */
1323
+ .summer-content p {
1324
+ line-height: inherit;
1325
+
1326
+ }
1327
+ .summer-content strong { color: var(--summer-fg); font-weight: 600; }
1328
+ .summer-content em { font-style: italic; }
1329
+ .summer-content a {
1330
+ color: var(--summer-fg);
1331
+ text-decoration: underline;
1332
+ text-decoration-color: var(--summer-border-strong);
1333
+ text-decoration-thickness: 1px;
1334
+ text-underline-offset: 3px;
1335
+ transition: text-decoration-color var(--summer-fast) var(--summer-ease), color var(--summer-fast) var(--summer-ease);
1336
+ }
1337
+ .summer-content a:hover {
1338
+ color: var(--summer-accent);
1339
+ text-decoration-color: var(--summer-accent);
1340
+ }
1341
+
1342
+ /* Lists */
1343
+ .summer-content ul,
1344
+ .summer-content ol {
1345
+ padding-left: 1.4em;
1346
+ margin: 0 0 1em;
1347
+ }
1348
+ .summer-content li { margin: 0.4em 0; line-height: 1.55; }
1349
+ .summer-content ul li::marker { color: var(--summer-fg-muted); }
1350
+ .summer-content ol li::marker { color: var(--summer-fg-soft); font-weight: 600; }
1351
+ .summer-content ul ul, .summer-content ol ol, .summer-content ul ol, .summer-content ol ul { margin: 0.4em 0; }
1352
+
1353
+ /* Horizontal rule */
1354
+ .summer-content hr {
1355
+ border: 0;
1356
+ height: 1px;
1357
+ background: linear-gradient(90deg, transparent, var(--summer-border), transparent);
1358
+ margin: 2.5em 0;
1359
+ }
1360
+
1361
+ /* Heading anchors (clickable # links) */
1362
+ .summer-content .docmd-heading,
1363
+ .summer-content h1, .summer-content h2, .summer-content h3, .summer-content h4 {
1364
+ position: relative;
1365
+ }
1366
+ .summer-content .heading-anchor {
1367
+ position: absolute;
1368
+ left: -1.25em;
1369
+ font-size: 1.5rem;
1370
+ display: inline-flex;
1371
+ align-items: center;
1372
+ justify-content: center;
1373
+ width: .8em;
1374
+ height: -webkit-fill-available;
1375
+ opacity: 0;
1376
+ color: var(--summer-fg-faint);
1377
+ vertical-align: middle;
1378
+ transition: opacity var(--summer-fast) var(--summer-ease), color var(--summer-fast) var(--summer-ease);
1379
+ }
1380
+ .summer-content h1:hover .heading-anchor,
1381
+ .summer-content h2:hover .heading-anchor,
1382
+ .summer-content h3:hover .heading-anchor,
1383
+ .summer-content h4:hover .heading-anchor,
1384
+ .summer-content .heading-anchor:focus { opacity: 1; }
1385
+ .summer-content .heading-anchor:hover { color: var(--summer-accent); }
1386
+ .summer-content .heading-anchor svg { width: 100%; height: 100%; }
1387
+
1388
+
1389
+ /* ────────────────────────────────────────────────────────────────────────
1390
+ 9. RIGHT-RAIL TOC
1391
+ ──────────────────────────────────────────────────────────────────────── */
1392
+
1393
+ .summer-toc {
1394
+ position: sticky;
1395
+ /* Matches the sidebar's sticky offset so the TOC and sidebar share the
1396
+ * same scroll-anchor line (they sit on the same Y as the main content's
1397
+ * pageheader bottom and adjust together with the menubar / banner /
1398
+ * header). The 4-band sum is the same formula as .summer-sidebar —
1399
+ * keep them in sync. */
1400
+ top: calc(var(--summer-topbar-height) + var(--summer-subnav-height) + var(--summer-banner-height) + var(--summer-pageheader-height));
1401
+ align-self: start;
1402
+ max-height: calc(100vh - var(--summer-topbar-height) - var(--summer-subnav-height) - var(--summer-banner-height) - var(--summer-pageheader-height));
1403
+ overflow-y: auto;
1404
+ padding: 0 32px 60px 24px;
1405
+ font-size: 0.8125rem;
1406
+ }
1407
+ .summer-toc::-webkit-scrollbar { width: 6px; }
1408
+ .summer-toc::-webkit-scrollbar-track { background: transparent; }
1409
+ .summer-toc::-webkit-scrollbar-thumb {
1410
+ background: var(--summer-border);
1411
+ border-radius: 3px;
1412
+ }
1413
+
1414
+ .summer-toc__title {
1415
+ display: inline-flex;
1416
+ align-items: center;
1417
+ gap: 6px;
1418
+ margin: 0 0 14px;
1419
+ padding: 0;
1420
+ font-size: 0.8125rem;
1421
+ font-weight: 500;
1422
+ color: var(--summer-fg-muted);
1423
+ }
1424
+ .summer-toc__title svg {
1425
+ color: var(--summer-fg-muted);
1426
+ flex-shrink: 0;
1427
+ }
1428
+
1429
+ /* ── TOC list: no native list styling, we draw the track with SVG ── */
1430
+ .summer-toc__list {
1431
+ list-style: none;
1432
+ padding: 0;
1433
+ margin: 0;
1434
+ position: relative;
1435
+ }
1436
+
1437
+ .summer-toc__item {
1438
+ margin: 0;
1439
+ position: relative;
1440
+ }
1441
+
1442
+ /* ── SVG track container (injected by JS) ── */
1443
+ .summer-toc__track {
1444
+ position: absolute;
1445
+ top: 0;
1446
+ inset-inline-start: 0;
1447
+ pointer-events: none;
1448
+ z-index: 0;
1449
+ }
1450
+
1451
+ /* The full-path SVG (grey) */
1452
+ .summer-toc__track-full {
1453
+ position: absolute;
1454
+ top: 0;
1455
+ left: 0;
1456
+ color: var(--summer-border);
1457
+ }
1458
+ .summer-toc__track-full path {
1459
+ stroke: currentColor;
1460
+ stroke-width: 1;
1461
+ fill: none;
1462
+ }
1463
+
1464
+ /* The active-highlight SVG (accent, clipped to show only active range) */
1465
+ .summer-toc__track-active {
1466
+ position: absolute;
1467
+ top: 0;
1468
+ left: 0;
1469
+ color: var(--summer-accent);
1470
+ transition: clip-path 160ms cubic-bezier(0.32, 0.72, 0, 1);
1471
+ }
1472
+ .summer-toc__track-active path {
1473
+ stroke: currentColor;
1474
+ stroke-width: 1.5;
1475
+ fill: none;
1476
+ }
1477
+
1478
+ /* dot removed */
1479
+
1480
+ /* ── Links ── */
1481
+ .summer-toc__link {
1482
+ display: block;
1483
+ padding: 5px 0 5px 20px;
1484
+ color: var(--summer-fg-muted);
1485
+ text-decoration: none;
1486
+ font-size: 0.8rem;
1487
+ font-weight: 400;
1488
+ line-height: 1.5;
1489
+ transition: color var(--summer-fast) var(--summer-ease);
1490
+ white-space: nowrap;
1491
+ overflow: hidden;
1492
+ text-overflow: ellipsis;
1493
+ position: relative;
1494
+ z-index: 1;
1495
+ }
1496
+ .summer-toc__link:hover { color: var(--summer-fg); }
1497
+ .summer-toc__link.active {
1498
+ color: var(--summer-accent);
1499
+ font-weight: 500;
1500
+ }
1501
+
1502
+ /* Indentation by level — padding-left is overridden by JS inline style */
1503
+ .summer-toc__item--level-1 .summer-toc__link { padding-left: 20px; }
1504
+ .summer-toc__item--level-2 .summer-toc__link { padding-left: 30px; }
1505
+ .summer-toc__item--level-3 .summer-toc__link { padding-left: 40px; }
1506
+ .summer-toc__item--level-4 .summer-toc__link { padding-left: 50px; }
1507
+
1508
+ /* TOC scroll-to-top button */
1509
+ .summer-totop {
1510
+ position: fixed;
1511
+ right: 30px;
1512
+ bottom: 50px;
1513
+ width: 40px;
1514
+ height: 40px;
1515
+ border-radius: 50%;
1516
+ background: var(--summer-accent);
1517
+ color: #fff;
1518
+ display: inline-flex;
1519
+ align-items: center;
1520
+ justify-content: center;
1521
+ box-shadow: var(--summer-shadow-lg);
1522
+ opacity: 0;
1523
+ transform: translateY(8px);
1524
+ pointer-events: none;
1525
+ transition: opacity var(--summer-med) var(--summer-ease), transform var(--summer-med) var(--summer-ease);
1526
+ z-index: var(--summer-z-overlay);
1527
+ }
1528
+ .summer-totop.is-visible { opacity: 1; transform: translateY(0); pointer-events: auto; }
1529
+ .summer-totop:hover { background: var(--summer-accent-hover); }
1530
+ .summer-totop svg { width: 18px; height: 18px; }
1531
+
1532
+
1533
+ /* ────────────────────────────────────────────────────────────────────────
1534
+ 10. PAGE NAVIGATION (prev / next)
1535
+ ──────────────────────────────────────────────────────────────────────── */
1536
+
1537
+ .summer-pagenav {
1538
+ display: grid;
1539
+ grid-template-columns: 1fr 1fr;
1540
+ gap: 12px;
1541
+ margin-top: 56px;
1542
+ padding-top: 24px;
1543
+ border-top: 1px solid var(--summer-border-soft);
1544
+ }
1545
+ .summer-pagenav__link {
1546
+ display: flex;
1547
+ align-items: center;
1548
+ gap: 12px;
1549
+ padding: 14px 18px;
1550
+ border: 1px solid var(--summer-border-soft);
1551
+ border-radius: var(--summer-radius);
1552
+ background: var(--summer-surface);
1553
+ color: var(--summer-fg-soft);
1554
+ text-decoration: none;
1555
+ transition: all var(--summer-fast) var(--summer-ease);
1556
+ min-height: 64px;
1557
+ }
1558
+ .summer-pagenav__link:hover {
1559
+ border-color: var(--summer-accent);
1560
+ background: var(--summer-accent-soft);
1561
+ color: var(--summer-fg);
1562
+ box-shadow: var(--summer-shadow-sm);
1563
+ }
1564
+ .summer-pagenav__link--next { justify-content: flex-end; text-align: right; }
1565
+ .summer-pagenav__link--disabled {
1566
+ opacity: 0.4;
1567
+ pointer-events: none;
1568
+ background: transparent;
1569
+ }
1570
+ .summer-pagenav__icon {
1571
+ flex-shrink: 0;
1572
+ width: 18px; height: 18px;
1573
+ color: var(--summer-accent);
1574
+ transition: transform var(--summer-fast) var(--summer-ease);
1575
+ }
1576
+ .summer-pagenav__link--prev:hover .summer-pagenav__icon { transform: translateX(-3px); }
1577
+ .summer-pagenav__link--next:hover .summer-pagenav__icon { transform: translateX(3px); }
1578
+ .summer-pagenav__label {
1579
+ display: flex;
1580
+ flex-direction: column;
1581
+ min-width: 0;
1582
+ }
1583
+ .summer-pagenav__small {
1584
+ font-size: var(--summer-text-xs);
1585
+ color: var(--summer-fg-muted);
1586
+ text-transform: uppercase;
1587
+ letter-spacing: 0.06em;
1588
+ font-weight: 500;
1589
+ }
1590
+ .summer-pagenav__title {
1591
+ font-size: var(--summer-text-sm);
1592
+ font-weight: 600;
1593
+ color: var(--summer-fg);
1594
+ white-space: nowrap;
1595
+ overflow: hidden;
1596
+ text-overflow: ellipsis;
1597
+ margin-top: 2px;
1598
+ }
1599
+
1600
+ /* Page actions footer (edit link + last updated) */
1601
+ .summer-pagefooter {
1602
+ display: flex;
1603
+ flex-wrap: wrap;
1604
+ align-items: center;
1605
+ justify-content: space-between;
1606
+ gap: 12px;
1607
+ margin-top: 32px;
1608
+ padding: 16px 0;
1609
+ border-top: 1px solid var(--summer-border-soft);
1610
+ font-size: var(--summer-text-sm);
1611
+ color: var(--summer-fg-muted);
1612
+ }
1613
+ .summer-pagefooter a {
1614
+ display: inline-flex;
1615
+ align-items: center;
1616
+ gap: 6px;
1617
+ color: var(--summer-fg-soft);
1618
+ text-decoration: none;
1619
+ font-weight: 500;
1620
+ transition: color var(--summer-fast) var(--summer-ease);
1621
+ }
1622
+ .summer-pagefooter a:hover { color: var(--summer-accent); }
1623
+ .summer-pagefooter a svg { width: 14px; height: 14px; }
1624
+ .summer-pagefooter__time { display: inline-flex; align-items: center; gap: 6px; }
1625
+ .summer-pagefooter__time svg { width: 14px; height: 14px; color: var(--summer-fg-faint); }
1626
+
1627
+
1628
+ /* ────────────────────────────────────────────────────────────────────────
1629
+ 11. CODE, TABLES, CALLOUTS
1630
+ ──────────────────────────────────────────────────────────────────────── */
1631
+
1632
+ /* Inline code */
1633
+ .summer-content :not(pre) > code {
1634
+ display: inline-block;
1635
+ padding: 1px 6px;
1636
+ background: var(--summer-surface-3);
1637
+ border: 1px solid var(--summer-border);
1638
+ border-radius: 5px;
1639
+ font-family: var(--summer-font-mono);
1640
+ font-size: 0.85em;
1641
+ color: var(--summer-fg);
1642
+ font-weight: 500;
1643
+ white-space: nowrap;
1644
+ line-height: 1.4;
1645
+ }
1646
+ html[data-theme="dark"] .summer-content :not(pre) > code {
1647
+ color: #f5c089;
1648
+ background: rgba(255, 138, 92, 0.10);
1649
+ border-color: rgba(255, 138, 92, 0.20);
1650
+ }
1651
+
1652
+ /* =========================================================================
1653
+ Code block — title bar (filename left, copy right) + body (pre)
1654
+
1655
+ The DOM is built by docmd-main.js + the markdown parser:
1656
+ - .code-wrapper — wraps every <pre> (added by docmd-main.js)
1657
+ - .docmd-code-block-wrapper — wraps ```lang "title"``` blocks (parser)
1658
+ - .docmd-code-block-header — contains the title <span> (parser)
1659
+ - .copy-code-button — the copy button (docmd-main.js, originally
1660
+ positioned absolute bottom-right of the
1661
+ wrapper, but we re-home it into the title
1662
+ bar via summer.js)
1663
+ summer.js promotes either the existing parser header, or builds a fresh
1664
+ .summer-cb__titlebar inside the .code-wrapper, and tags the button as
1665
+ .summer-cb__copy. The rules below style the resulting structure.
1666
+ ========================================================================= */
1667
+
1668
+ .code-wrapper,
1669
+ .docmd-code-block-wrapper {
1670
+ position: relative;
1671
+ margin: 1.4em 0;
1672
+ background: var(--summer-surface-2);
1673
+ border: 1px solid var(--summer-border);
1674
+ border-radius: var(--summer-radius);
1675
+ overflow: hidden;
1676
+ box-shadow: var(--summer-shadow-xs);
1677
+
1678
+ }
1679
+ html[data-theme="dark"] .code-wrapper,
1680
+ html[data-theme="dark"] .docmd-code-block-wrapper {
1681
+ background: #100e0b;
1682
+ }
1683
+
1684
+ /* Title bar (thin row above the code) */
1685
+ .summer-cb__titlebar,
1686
+ .docmd-code-block-header.summer-cb__titlebar,
1687
+ .docmd-code-block-wrapper > .docmd-code-block-header {
1688
+ display: flex;
1689
+ align-items: center;
1690
+ justify-content: space-between;
1691
+ gap: 12px;
1692
+ min-height: 36px;
1693
+ padding: 7px 10px 7px 14px;
1694
+ border-bottom: 1px solid var(--summer-border);
1695
+ background: var(--summer-bg-subtle);
1696
+ font-size: var(--summer-text-xs);
1697
+ color: var(--summer-fg-muted);
1698
+ font-family: var(--summer-font-mono);
1699
+ }
1700
+ html[data-theme="dark"] .summer-cb__titlebar,
1701
+ html[data-theme="dark"] .docmd-code-block-header.summer-cb__titlebar,
1702
+ html[data-theme="dark"] .docmd-code-block-wrapper > .docmd-code-block-header {
1703
+ border-bottom-color: rgba(255, 255, 255, 0.06);
1704
+ background: rgba(255, 255, 255, 0.025);
1705
+ color: #c8bfae;
1706
+ }
1707
+
1708
+ /* LEFT group inside the title bar (icon + filename + lang pill) */
1709
+ .summer-cb__left {
1710
+ display: inline-flex;
1711
+ align-items: center;
1712
+ gap: 8px;
1713
+ min-width: 0;
1714
+ overflow: hidden;
1715
+ }
1716
+ .summer-cb__left > svg {
1717
+ width: 13px;
1718
+ height: 13px;
1719
+ flex-shrink: 0;
1720
+ color: var(--summer-fg-muted);
1721
+ }
1722
+ /* Filename (only present when the source had a title, e.g.
1723
+ ```js "file.js"```). Kept subtle so the lang pill remains the
1724
+ primary visual element. */
1725
+ .summer-cb__filename {
1726
+ font-weight: 400;
1727
+ font-size: var(--summer-text-xs);
1728
+ color: var(--summer-fg-soft);
1729
+ letter-spacing: -0.005em;
1730
+ overflow: hidden;
1731
+ text-overflow: ellipsis;
1732
+ white-space: nowrap;
1733
+ }
1734
+ .docmd-code-block-title {
1735
+ font-weight: 400;
1736
+ font-size: var(--summer-text-xs);
1737
+ color: var(--summer-fg-soft);
1738
+ letter-spacing: -0.005em;
1739
+ overflow: hidden;
1740
+ text-overflow: ellipsis;
1741
+ white-space: nowrap;
1742
+ }
1743
+ /* Lang pill — always present, the de-facto label of the codeblock.
1744
+ Shows the language (e.g. "BASH") or "CODEBLOCK" if no language
1745
+ was specified. */
1746
+ .summer-cb__lang {
1747
+ display: inline-flex;
1748
+ padding: 1px 7px;
1749
+ border-radius: 4px;
1750
+ background: var(--summer-surface-3);
1751
+ color: var(--summer-fg-soft);
1752
+ font-size: 0.66rem;
1753
+ font-weight: 600;
1754
+ text-transform: uppercase;
1755
+ letter-spacing: 0.06em;
1756
+ flex-shrink: 0;
1757
+ line-height: 1.5;
1758
+ }
1759
+
1760
+ /* Copy button — lives inside the title bar, NOT floating */
1761
+ .summer-cb__copy,
1762
+ .copy-code-button.summer-cb__copy {
1763
+ position: static;
1764
+ display: inline-flex;
1765
+ align-items: center;
1766
+ gap: 5px;
1767
+ padding: 3px 8px;
1768
+ background: transparent;
1769
+ border: 1px solid transparent;
1770
+ border-radius: var(--summer-radius-sm);
1771
+ color: var(--summer-fg-muted);
1772
+ font-size: var(--summer-text-xs);
1773
+ font-weight: 500;
1774
+ font-family: var(--summer-font-sans);
1775
+ cursor: pointer;
1776
+ opacity: 1;
1777
+ transition: all var(--summer-fast) var(--summer-ease);
1778
+ flex-shrink: 0;
1779
+
1780
+ }
1781
+ .summer-cb__copy:hover,
1782
+ .copy-code-button.summer-cb__copy:hover {
1783
+ background: var(--summer-surface);
1784
+ border-color: var(--summer-border);
1785
+ color: var(--summer-fg);
1786
+ }
1787
+ html[data-theme="dark"] .summer-cb__copy,
1788
+ html[data-theme="dark"] .copy-code-button.summer-cb__copy { color: #8a8170; }
1789
+ html[data-theme="dark"] .summer-cb__copy:hover,
1790
+ html[data-theme="dark"] .copy-code-button.summer-cb__copy:hover {
1791
+ background: rgba(255, 255, 255, 0.05);
1792
+ border-color: rgba(255, 255, 255, 0.08);
1793
+ color: #f5efe0;
1794
+ }
1795
+ .summer-cb__copy.copied,
1796
+ .copy-code-button.summer-cb__copy.copied {
1797
+ background: var(--summer-green-soft);
1798
+ border-color: var(--summer-green);
1799
+ color: var(--summer-green);
1800
+ }
1801
+ .summer-cb__copy svg {}
1802
+
1803
+ /* Pre — sit below the title bar with no top padding bump */
1804
+ .code-wrapper > pre,
1805
+ .docmd-code-block-wrapper > .code-wrapper > pre {
1806
+ margin: 0 !important;
1807
+ padding: 16px 18px !important;
1808
+ background: transparent !important;
1809
+ border: 0 !important;
1810
+ border-radius: 0 !important;
1811
+ font-family: var(--summer-font-mono) !important;
1812
+ font-size: 0.84rem !important;
1813
+ line-height: 1.65 !important;
1814
+ color: var(--summer-fg);
1815
+ overflow-x: auto;
1816
+
1817
+ }
1818
+
1819
+ /* When the parser wraps a codeblock in .docmd-code-block-wrapper, the
1820
+ inner .code-wrapper (added by docmd-main.js for its own copy button)
1821
+ has its own border/background — which would render as a "window
1822
+ inside a window". Strip that styling so the inner wrapper is
1823
+ transparent and the outer wrapper is the only visual box. */
1824
+ .docmd-code-block-wrapper > .code-wrapper {
1825
+ background: transparent !important;
1826
+ border: 0 !important;
1827
+ border-radius: 0 !important;
1828
+ box-shadow: none !important;
1829
+ margin: 0 !important;
1830
+ padding: 0 !important;
1831
+ overflow: visible !important;
1832
+ }
1833
+ .code-wrapper > pre code,
1834
+ .docmd-code-block-wrapper > .code-wrapper > pre code { color: inherit !important; }
1835
+
1836
+ /* Bare <pre> with no wrapper at all (no copy button injected) */
1837
+ .summer-content > pre:not([class*="code-"]) {
1838
+ margin: 1.4em 0;
1839
+ padding: 16px 18px;
1840
+ background: var(--summer-surface-2);
1841
+ border: 1px solid var(--summer-border);
1842
+ border-radius: var(--summer-radius);
1843
+ font-family: var(--summer-font-mono);
1844
+ font-size: 0.84rem;
1845
+ line-height: 1.65;
1846
+ color: var(--summer-fg);
1847
+ overflow-x: auto;
1848
+ box-shadow: var(--summer-shadow-sm);
1849
+ }
1850
+ html[data-theme="dark"] .summer-content > pre:not([class*="code-"]) {
1851
+ background: #0f0d0a;
1852
+ color: #e7dfcf;
1853
+ }
1854
+
1855
+ /* Tables */
1856
+ .summer-content table {
1857
+ width: 100%;
1858
+ border-collapse: separate;
1859
+ border-spacing: 0;
1860
+ margin: 1.4em 0;
1861
+ font-size: 0.9rem;
1862
+ border: 1px solid var(--summer-border-soft);
1863
+ border-radius: var(--summer-radius);
1864
+ overflow: hidden;
1865
+ }
1866
+ .summer-content th, .summer-content td {
1867
+ padding: 10px 14px;
1868
+ text-align: left;
1869
+ border-bottom: 1px solid var(--summer-border-soft);
1870
+ }
1871
+ .summer-content th {
1872
+ background: var(--summer-surface-2);
1873
+ font-weight: 600;
1874
+ color: var(--summer-fg);
1875
+ font-size: 0.82rem;
1876
+ text-transform: uppercase;
1877
+ letter-spacing: 0.04em;
1878
+ }
1879
+ .summer-content tr:last-child td { border-bottom: 0; }
1880
+ .summer-content tr:hover td { background: var(--summer-surface-2); }
1881
+
1882
+ /* Blockquote / callouts */
1883
+ .summer-content blockquote {
1884
+ margin: 1.4em 0;
1885
+ padding: 14px 18px;
1886
+ background: var(--summer-accent-soft);
1887
+ border-left: 4px solid var(--summer-accent);
1888
+ border-radius: 0 var(--summer-radius) var(--summer-radius) 0;
1889
+ color: var(--summer-fg);
1890
+ font-style: normal;
1891
+ }
1892
+ .summer-content blockquote > :first-child { margin-top: 0; }
1893
+ .summer-content blockquote > :last-child { margin-bottom: 0; }
1894
+ .summer-content blockquote p { margin: 0.5em 0; }
1895
+
1896
+ /* GitBook-style callouts (left-bordered, light-tint) */
1897
+ .summer-content .callout,
1898
+ .summer-content details[class*="callout"],
1899
+ .summer-content .markdown-alert {
1900
+ margin: 1.6em 0;
1901
+ padding: 16px 20px;
1902
+ border-radius: var(--summer-radius);
1903
+ border: 1px solid var(--summer-border-soft);
1904
+ border-left-width: 4px;
1905
+ }
1906
+ .summer-content .callout-note, .summer-content .markdown-alert-note { background: var(--summer-sky-soft); border-color: color-mix(in srgb, var(--summer-sky) 20%, var(--summer-border-soft)); border-left-color: var(--summer-sky); }
1907
+ .summer-content .callout-tip, .summer-content .markdown-alert-tip { background: var(--summer-green-soft); border-color: color-mix(in srgb, var(--summer-green) 20%, var(--summer-border-soft)); border-left-color: var(--summer-green); }
1908
+ .summer-content .callout-warn, .summer-content .markdown-alert-warning { background: var(--summer-amber-soft); border-color: color-mix(in srgb, var(--summer-amber) 25%, var(--summer-border-soft)); border-left-color: var(--summer-amber); }
1909
+ .summer-content .callout-danger, .summer-content .markdown-alert-caution { background: rgba(244, 63, 94, 0.06); border-color: color-mix(in srgb, var(--summer-rose) 20%, var(--summer-border-soft)); border-left-color: var(--summer-rose); }
1910
+ html[data-theme="dark"] .summer-content .callout-danger,
1911
+ html[data-theme="dark"] .summer-content .markdown-alert-caution { background: #2a0e10; }
1912
+
1913
+ /* Images */
1914
+ .summer-content img {
1915
+ max-width: 100%;
1916
+ height: auto;
1917
+ border-radius: var(--summer-radius);
1918
+ margin: 1em 0;
1919
+ box-shadow: var(--summer-shadow-sm);
1920
+ }
1921
+ .summer-content figure { margin: 1.4em 0; }
1922
+ .summer-content figcaption {
1923
+ text-align: center;
1924
+ color: var(--summer-fg-muted);
1925
+ font-size: var(--summer-text-sm);
1926
+ margin-top: 8px;
1927
+ }
1928
+
1929
+ /* Keyboard keys (kbd) */
1930
+ .summer-content kbd {
1931
+ display: inline-block;
1932
+ padding: 1px 6px;
1933
+ font: 12px/1.6 var(--summer-font-mono);
1934
+ color: var(--summer-fg-soft);
1935
+ background: var(--summer-surface);
1936
+ border: 1px solid var(--summer-border);
1937
+ border-bottom-width: 2px;
1938
+ border-radius: 4px;
1939
+ box-shadow: 0 1px 0 var(--summer-border-soft);
1940
+ }
1941
+
1942
+ /* Mark / highlights */
1943
+ .summer-content mark {
1944
+ background: var(--summer-amber-soft);
1945
+ color: var(--summer-fg);
1946
+ padding: 0 3px;
1947
+ border-radius: 3px;
1948
+ }
1949
+
1950
+
1951
+ /* ────────────────────────────────────────────────────────────────────────
1952
+ 12. FOOTER
1953
+ ──────────────────────────────────────────────────────────────────────── */
1954
+
1955
+ .summer-footer {
1956
+ margin-top: auto;
1957
+ padding: 28px 0 28px;
1958
+ border-top: 1px solid var(--summer-border-soft);
1959
+ background: var(--summer-bg-subtle);
1960
+ flex-shrink: 0;
1961
+ }
1962
+ .summer-footer__inner {
1963
+ max-width: var(--summer-page-max);
1964
+ margin: 0 auto;
1965
+ padding: 0 32px;
1966
+ display: flex;
1967
+ flex-wrap: wrap;
1968
+ align-items: center;
1969
+ justify-content: space-between;
1970
+ gap: 12px 20px;
1971
+ font-size: var(--summer-text-sm);
1972
+ color: var(--summer-fg-muted);
1973
+ }
1974
+ .summer-footer__user { max-width: 100%; }
1975
+ .summer-footer__branding { display: inline-flex; align-items: center; gap: 5px; color: var(--summer-fg-muted); }
1976
+ .summer-footer__branding a { color: var(--summer-fg-soft); font-weight: 600; text-decoration: none; }
1977
+ .summer-footer__branding a:hover { color: var(--summer-accent); }
1978
+ .summer-footer__branding svg { width: 16px; height: 16px; color: var(--summer-accent); }
1979
+ .summer-footer__sep { margin: 0 4px; opacity: 0.4; }
1980
+ .summer-footer__sponsor { display: inline-flex; align-items: center; gap: 4px; }
1981
+ .summer-footer__sponsor svg { width: 14px; height: 14px; color: var(--summer-accent); }
1982
+
1983
+ /* Complete footer (multi-column) */
1984
+ .summer-footer.summer-footer--complete {
1985
+ padding: 56px 0 24px;
1986
+ border-top: 1px solid var(--summer-border-soft);
1987
+ }
1988
+ .summer-footer__top {
1989
+ max-width: var(--summer-page-max);
1990
+ margin: 0 auto;
1991
+ padding: 0 32px 36px;
1992
+ display: grid;
1993
+ grid-template-columns: 1.6fr 1fr 1fr 1fr;
1994
+ gap: 40px;
1995
+ align-items: start;
1996
+ }
1997
+ @media (max-width: 900px) {
1998
+ .summer-footer__top { grid-template-columns: 1fr 1fr; gap: 32px; }
1999
+ }
2000
+ @media (max-width: 540px) {
2001
+ .summer-footer__top { grid-template-columns: 1fr; gap: 28px; }
2002
+ }
2003
+
2004
+ /* Brand column */
2005
+ .summer-footer__brand { display: flex; flex-direction: column; gap: 14px; max-width: 320px; }
2006
+ .summer-footer__brand-logo {
2007
+ display: flex;
2008
+ align-items: center;
2009
+ gap: 10px;
2010
+ margin-bottom: 2px;
2011
+ }
2012
+ .summer-footer__brand-logo img { max-height: 28px; width: auto; }
2013
+ .summer-footer__desc {
2014
+ color: var(--summer-fg-muted);
2015
+ font-size: var(--summer-text-sm);
2016
+ line-height: 1.6;
2017
+ margin: 0;
2018
+ }
2019
+
2020
+ /* Link columns */
2021
+ .summer-footer__col { display: flex; flex-direction: column; gap: 10px; }
2022
+ .summer-footer__col-title {
2023
+ font-size: var(--summer-text-xs);
2024
+ font-weight: 700;
2025
+ text-transform: uppercase;
2026
+ letter-spacing: 0.1em;
2027
+ color: var(--summer-fg);
2028
+ margin: 0 0 4px;
2029
+ }
2030
+ .summer-footer__col ul { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 7px; }
2031
+ .summer-footer__col li { margin: 0; }
2032
+ .summer-footer__col a {
2033
+ display: inline-flex;
2034
+ align-items: center;
2035
+ gap: 5px;
2036
+ color: var(--summer-fg-muted);
2037
+ font-size: var(--summer-text-sm);
2038
+ text-decoration: none;
2039
+ transition: color var(--summer-fast) var(--summer-ease);
2040
+ }
2041
+ .summer-footer__col a:hover { color: var(--summer-accent); }
2042
+ .summer-footer__col a[target="_blank"]::after {
2043
+ content: "↗";
2044
+ font-size: 0.75em;
2045
+ opacity: 0;
2046
+ margin-left: -1px;
2047
+ transition: opacity var(--summer-fast) var(--summer-ease), margin-left var(--summer-fast) var(--summer-ease);
2048
+ }
2049
+ .summer-footer__col a[target="_blank"]:hover::after {
2050
+ opacity: 0.7;
2051
+ margin-left: 1px;
2052
+ }
2053
+
2054
+ /* Complete footer — bottom bar gets a hairline divider on top */
2055
+ .summer-footer.summer-footer--complete .summer-footer__inner {
2056
+ border-top: 1px solid var(--summer-border-soft);
2057
+ padding-top: 18px;
2058
+ margin-top: 0;
2059
+ }
2060
+
2061
+
2062
+ /* ────────────────────────────────────────────────────────────────────────
2063
+ 13. BANNER (config.layout.banner)
2064
+ ──────────────────────────────────────────────────────────────────────── */
2065
+
2066
+ .summer-banner {
2067
+ position: relative;
2068
+ z-index: calc(var(--summer-z-sticky) + 1);
2069
+ background: linear-gradient(90deg, var(--summer-accent-soft), var(--summer-amber-soft));
2070
+ border-bottom: 1px solid var(--summer-border-soft);
2071
+ color: var(--summer-fg);
2072
+ font-size: var(--summer-text-sm);
2073
+ }
2074
+ .summer-banner__inner {
2075
+ max-width: var(--summer-page-max);
2076
+ margin: 0 auto;
2077
+ padding: 10px 28px;
2078
+ display: flex;
2079
+ align-items: center;
2080
+ gap: 12px;
2081
+ justify-content: center;
2082
+ }
2083
+ .summer-banner a { color: var(--summer-accent); font-weight: 600; }
2084
+ .summer-banner__close {
2085
+ position: absolute;
2086
+ right: 12px;
2087
+ top: 50%;
2088
+ transform: translateY(-50%);
2089
+ width: 24px;
2090
+ height: 24px;
2091
+ display: inline-flex;
2092
+ align-items: center;
2093
+ justify-content: center;
2094
+ color: var(--summer-fg-soft);
2095
+ border-radius: 4px;
2096
+ }
2097
+ .summer-banner__close:hover { background: var(--summer-surface); color: var(--summer-fg); }
2098
+
2099
+
2100
+ /* ────────────────────────────────────────────────────────────────────────
2101
+ 14. RESPONSIVE — Tablet
2102
+ ──────────────────────────────────────────────────────────────────────── */
2103
+
2104
+ @media (max-width: 1280px) {
2105
+ :root {
2106
+ --summer-sidebar-width: 256px;
2107
+ --summer-toc-width: 220px;
2108
+ }
2109
+ .summer-main {padding: 0 32px 60px;--summer-gutter: 32px;}
2110
+ .summer-toc {padding-right: 20px;padding-left: 20px;}
2111
+ .summer-topbar__inner {padding: 0 20px;gap: 16px;}
2112
+ .summer-subnav__inner { padding: 0 20px; }
2113
+ .summer-footer__inner, .summer-footer__top, .summer-banner__inner { padding-left: 20px; padding-right: 20px; }
2114
+ }
2115
+
2116
+ @media (max-width: 1100px) {
2117
+ /* Hide TOC on medium screens; keep sidebar */
2118
+ :root { --summer-grid-template: var(--summer-sidebar-width) 1fr; }
2119
+ .summer-toc { display: none; }
2120
+ }
2121
+
2122
+ @media (max-width: 900px) {
2123
+ .summer-topbar { position: static; }
2124
+ .summer-topbar__inner {
2125
+ grid-template-columns: 1fr auto;
2126
+ padding: 0 16px;
2127
+ gap: 12px;
2128
+ }
2129
+ .summer-topbar__center { display: none; }
2130
+ .summer-topbar__mobile { display: inline-flex; }
2131
+
2132
+ .summer-subnav { position: static; }
2133
+ .summer-subnav__inner { padding: 0 16px; }
2134
+
2135
+ :root { --summer-grid-template: 1fr; }
2136
+ .summer-sidebar {
2137
+ position: fixed;
2138
+ top: 0; left: 0;
2139
+ z-index: var(--summer-z-overlay);
2140
+ width: 84vw; max-width: 320px;
2141
+ height: 100vh;
2142
+ border-right: 1px solid var(--summer-border);
2143
+ background: var(--summer-bg);
2144
+ transform: translateX(-100%);
2145
+ transition: transform var(--summer-med) var(--summer-ease);
2146
+ box-shadow: var(--summer-shadow-xl);
2147
+ padding-top: 48px;
2148
+ }
2149
+ body.summer-sidebar-open .summer-sidebar { transform: translateX(0); }
2150
+ body.summer-sidebar-open::after {
2151
+ content: "";
2152
+ position: fixed; inset: 0;
2153
+ background: rgba(0,0,0,0.5);
2154
+ z-index: calc(var(--summer-z-overlay) - 1);
2155
+ backdrop-filter: blur(2px);
2156
+ }
2157
+ .summer-sidebar-close { display: inline-flex; }
2158
+
2159
+ .summer-pageheader { position: static; }
2160
+ .summer-main { padding: 0 20px 40px; --summer-gutter: 20px; }
2161
+ .summer-content { font-size: 1rem; }
2162
+ .summer-content h1 { font-size: 1.75rem; }
2163
+ .summer-content h2 { font-size: 1.45rem; }
2164
+ .summer-content h3 { font-size: 1.25rem; }
2165
+
2166
+ .summer-pagenav { grid-template-columns: 1fr; }
2167
+ .summer-pagenav__link--next { text-align: left; justify-content: flex-start; }
2168
+ .summer-pagenav__link--next .summer-pagenav__icon { order: -1; }
2169
+ /* Reset no-prev / no-next single-column edge-pushing — at 1fr the
2170
+ * grid-column 1/2 placement would leave a phantom empty cell. */
2171
+ .summer-pagenav.no-prev .summer-pagenav__link--next,
2172
+ .summer-pagenav.no-next .summer-pagenav__link--prev {
2173
+ grid-column: auto;
2174
+ justify-self: stretch;
2175
+ max-width: none;
2176
+ }
2177
+
2178
+ .summer-totop { right: 16px; bottom: 16px; }
2179
+ }
2180
+
2181
+ @media (max-width: 600px) {
2182
+ /* Start shedding secondary icons — theme switch stays as the most useful one */
2183
+ .summer-topbar__right .summer-iconbtn[aria-label="GitHub"],
2184
+ .summer-topbar__right .summer-iconbtn[aria-label="Sponsor"],
2185
+ .summer-topbar__right .summer-options-menu__item:not(:last-of-type) {
2186
+ display: none;
2187
+ }
2188
+ }
2189
+
2190
+ @media (max-width: 480px) {
2191
+ .summer-topbar__inner { padding: 0 12px; }
2192
+ .summer-topbar__logo { max-width: 120px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2193
+ .summer-logo--text span:last-child { display: none; }
2194
+ .summer-logo--text .summer-logo__icon { width: 26px; height: 26px; font-size: 0.9rem; }
2195
+ }
2196
+
2197
+
2198
+ /* ────────────────────────────────────────────────────────────────────────
2199
+ 15. UTILITIES
2200
+ ──────────────────────────────────────────────────────────────────────── */
2201
+
2202
+ /* Hide elements when sidebar/toc is disabled */
2203
+ .summer-template.no-sidebar .summer-sidebar { display: none; }
2204
+ .summer-template.no-toc .summer-toc { display: none; }
2205
+ .summer-template.no-header .summer-pageheader { display: none; }
2206
+
2207
+ /* Prev/next: when one is missing, push the survivor to its column edge.
2208
+ * `margin-left: auto` doesn't push in grid (only flex), so we use
2209
+ * grid-column + justify-self for the grid case, and fall back to
2210
+ * flex margins when the layout is on a single column (<= 900px). */
2211
+ .summer-pagenav.no-prev .summer-pagenav__link--next {
2212
+ grid-column: 2;
2213
+ justify-self: end;
2214
+ max-width: 380px;
2215
+ }
2216
+ .summer-pagenav.no-next .summer-pagenav__link--prev {
2217
+ grid-column: 1;
2218
+ justify-self: start;
2219
+ max-width: 380px;
2220
+ }
2221
+
2222
+ /* ── Markdown content additions ─────────────────────────────────────
2223
+ Styles for elements not covered by the default GitBook reset. */
2224
+ .summer-content a.btn,
2225
+ .summer-content .docmd-btn,
2226
+ .summer-content .btn {
2227
+ display: inline-flex;
2228
+ align-items: center;
2229
+ gap: 6px;
2230
+ padding: 6px 14px;
2231
+ border-radius: var(--summer-radius-sm);
2232
+ background: var(--summer-surface-2);
2233
+ border: 1px solid var(--summer-border);
2234
+ color: var(--summer-fg);
2235
+ font-size: 0.85rem;
2236
+ font-weight: 500;
2237
+ text-decoration: none;
2238
+ line-height: 1.4;
2239
+ transition: background var(--summer-fast) var(--summer-ease),
2240
+ border-color var(--summer-fast) var(--summer-ease),
2241
+ color var(--summer-fast) var(--summer-ease);
2242
+ }
2243
+ .summer-content a.btn:hover,
2244
+ .summer-content .docmd-btn:hover,
2245
+ .summer-content .btn:hover {
2246
+ background: var(--summer-surface-3);
2247
+ border-color: var(--summer-border-strong);
2248
+ color: var(--summer-fg);
2249
+ }
2250
+ .summer-content a.btn--primary,
2251
+ .summer-content .docmd-btn--primary,
2252
+ .summer-content .btn--primary,
2253
+ .summer-content a.btn.color\:blue,
2254
+ .summer-content a.btn[data-color="blue"] {
2255
+ background: var(--summer-accent);
2256
+ border-color: var(--summer-accent);
2257
+ color: #fff;
2258
+ }
2259
+ .summer-content a.btn--primary:hover,
2260
+ .summer-content .docmd-btn--primary:hover,
2261
+ .summer-content .btn--primary:hover {
2262
+ background: var(--summer-accent-hover);
2263
+ border-color: var(--summer-accent-hover);
2264
+ }
2265
+
2266
+ .summer-content img {
2267
+ max-width: 100%;
2268
+ height: auto;
2269
+ border-radius: var(--summer-radius-lg);
2270
+ }
2271
+ .summer-content img.with-border {
2272
+ border: 1px solid var(--summer-border);
2273
+ box-shadow: var(--summer-shadow-sm);
2274
+ }
2275
+
2276
+ .summer-content .docmd-card,
2277
+ .summer-content .docmd-container.card {
2278
+ background: var(--summer-surface);
2279
+ border: 1px solid var(--summer-border-soft);
2280
+ border-radius: var(--summer-radius);
2281
+ padding: 20px;
2282
+ margin: 1rem 0;
2283
+ transition: border-color var(--summer-fast) var(--summer-ease),
2284
+ background var(--summer-fast) var(--summer-ease);
2285
+
2286
+ }
2287
+ .summer-content .docmd-card:hover,
2288
+ .summer-content .docmd-container.card:hover {
2289
+ border-color: var(--summer-border);
2290
+ }
2291
+ .summer-content .docmd-card .card-title,
2292
+ .summer-content .docmd-container.card .card-title {
2293
+ font-weight: 600;
2294
+ font-size: 1rem;
2295
+ color: var(--summer-fg);
2296
+ margin-bottom: 6px;
2297
+ display: flex;
2298
+ align-items: center;
2299
+ gap: 8px;
2300
+
2301
+ }
2302
+
2303
+ .summer-content ul, .summer-content ol {
2304
+ margin: 0.75em 0;
2305
+ padding-left: 1.4em;
2306
+ }
2307
+ .summer-content li { margin: 0.3em 0; }
2308
+
2309
+ /* ── Git last-updated popover ─────────────────────────────────────── */
2310
+ .summer-pagefooter__time {
2311
+ position: relative;
2312
+ cursor: default;
2313
+ outline: none;
2314
+ border-radius: var(--summer-radius-sm);
2315
+ transition: background var(--summer-fast) var(--summer-ease),
2316
+ color var(--summer-fast) var(--summer-ease);
2317
+ }
2318
+ .summer-pagefooter__time.has-commits { cursor: pointer; }
2319
+ .summer-pagefooter__time.has-commits:hover,
2320
+ .summer-pagefooter__time.has-commits:focus {
2321
+ color: var(--summer-fg);
2322
+ }
2323
+ .summer-git-popover {
2324
+ position: absolute;
2325
+ bottom: calc(100% + 8px);
2326
+ left: 50%;
2327
+ transform: translateX(-50%) translateY(4px);
2328
+ min-width: 320px;
2329
+ max-width: 380px;
2330
+ background: var(--summer-bg);
2331
+ border: 1px solid var(--summer-border);
2332
+ border-radius: var(--summer-radius-lg);
2333
+ box-shadow: var(--summer-shadow-lg);
2334
+ padding: 10px 12px 8px;
2335
+ z-index: var(--summer-z-dropdown);
2336
+ opacity: 0;
2337
+ visibility: hidden;
2338
+ pointer-events: none;
2339
+ transition: opacity var(--summer-fast) var(--summer-ease),
2340
+ transform var(--summer-fast) var(--summer-ease),
2341
+ visibility 0s linear var(--summer-fast);
2342
+ }
2343
+ .summer-pagefooter__time.has-commits:hover .summer-git-popover,
2344
+ .summer-pagefooter__time.has-commits:focus .summer-git-popover,
2345
+ .summer-pagefooter__time.has-commits.open .summer-git-popover {
2346
+ opacity: 1;
2347
+ visibility: visible;
2348
+ pointer-events: auto;
2349
+ transform: translateX(-50%) translateY(0);
2350
+ transition: opacity var(--summer-fast) var(--summer-ease),
2351
+ transform var(--summer-fast) var(--summer-ease),
2352
+ visibility 0s;
2353
+ }
2354
+ .summer-git-popover__title {
2355
+ font-size: 0.7rem;
2356
+ font-weight: 700;
2357
+ text-transform: uppercase;
2358
+ letter-spacing: 0.06em;
2359
+ color: var(--summer-fg-muted);
2360
+ margin-bottom: 6px;
2361
+ padding-bottom: 6px;
2362
+ border-bottom: 1px solid var(--summer-border-soft);
2363
+ }
2364
+ .summer-git-popover__list {
2365
+ list-style: none;
2366
+ padding: 0;
2367
+ margin: 0;
2368
+ display: flex;
2369
+ flex-direction: column;
2370
+ gap: 8px;
2371
+ max-height: 240px;
2372
+ overflow-y: auto;
2373
+ }
2374
+ .summer-git-popover__item {
2375
+ display: flex;
2376
+ gap: 8px;
2377
+ align-items: flex-start;
2378
+ font-size: 0.78rem;
2379
+ }
2380
+ .summer-git-popover__avatar {
2381
+ width: 24px;
2382
+ height: 24px;
2383
+ border-radius: 50%;
2384
+ background: var(--summer-surface-2);
2385
+ color: var(--summer-fg-soft);
2386
+ font-size: 0.65rem;
2387
+ font-weight: 700;
2388
+ display: inline-flex;
2389
+ align-items: center;
2390
+ justify-content: center;
2391
+ overflow: hidden;
2392
+ flex-shrink: 0;
2393
+ }
2394
+ .summer-git-popover__avatar img { width: 100%; height: 100%; object-fit: cover; }
2395
+ .summer-git-popover__details { min-width: 0; flex: 1; }
2396
+ .summer-git-popover__msg {
2397
+ color: var(--summer-fg);
2398
+ line-height: 1.35;
2399
+ white-space: nowrap;
2400
+ overflow: hidden;
2401
+ text-overflow: ellipsis;
2402
+ }
2403
+ .summer-git-popover__meta {
2404
+ display: flex;
2405
+ gap: 8px;
2406
+ font-size: 0.7rem;
2407
+ color: var(--summer-fg-muted);
2408
+ margin-top: 1px;
2409
+ }
2410
+ .summer-git-popover__author { font-weight: 500; }
2411
+
2412
+ /* Print styles */
2413
+ @media print {
2414
+ .summer-topbar, .summer-subnav, .summer-sidebar, .summer-toc,
2415
+ .summer-pagenav, .summer-pagefooter, .summer-footer,
2416
+ .summer-banner, .summer-copy-widgets, .summer-totop,
2417
+ .summer-cb__copy, .copy-code-button { display: none !important; }
2418
+ .summer-main { padding: 0; max-width: 100%; }
2419
+ .summer-content { color: #000; max-width: 100%; }
2420
+ .summer-content pre, .summer-content table { page-break-inside: avoid; }
2421
+ .summer-content h1, .summer-content h2, .summer-content h3 { page-break-after: avoid; }
2422
+ }
2423
+
2424
+
2425
+ /* ────────────────────────────────────────────────────────────────────────
2426
+ 16. CUSTOM CONTAINERS
2427
+ ──────────────────────────────────────────────────────────────────────── */
2428
+
2429
+ /* ── Markdown containers (button, tag, embed, tabs, grids, hero, changelog) ── */
2430
+ .summer-content a.docmd-button,
2431
+ .summer-content .docmd-button {
2432
+ display: inline-flex;
2433
+ align-items: center;
2434
+ gap: 6px;
2435
+ padding: 7px 14px;
2436
+ margin: 4px;
2437
+ border-radius: var(--summer-radius-sm);
2438
+ background: var(--summer-accent);
2439
+ color: #fff;
2440
+ font-size: 0.85rem;
2441
+ font-weight: 500;
2442
+ text-decoration: none;
2443
+ border: 1px solid var(--summer-accent);
2444
+ cursor: pointer;
2445
+ transition: filter var(--summer-fast) var(--summer-ease),
2446
+ transform var(--summer-fast) var(--summer-ease);
2447
+ vertical-align: middle;
2448
+ line-height: 1.4;
2449
+ }
2450
+ .summer-content a.docmd-button:hover,
2451
+ .summer-content .docmd-button:hover {
2452
+ filter: brightness(1.08);
2453
+ transform: translateY(-1px);
2454
+ color: #fff;
2455
+ }
2456
+ .summer-content .docmd-button .button-icon { width: 1em; height: 1em; flex-shrink: 0; }
2457
+
2458
+ .summer-content .docmd-tag {
2459
+ display: inline-flex;
2460
+ align-items: center;
2461
+ padding: 2px 8px;
2462
+ border-radius: 999px;
2463
+ font-size: 0.78em;
2464
+ font-weight: 500;
2465
+ line-height: 1.3;
2466
+ border: 1px solid var(--summer-border-soft);
2467
+ background: var(--summer-surface);
2468
+ color: var(--summer-fg-soft);
2469
+ margin: 0 2px;
2470
+ vertical-align: middle;
2471
+ transition: filter var(--summer-fast) var(--summer-ease);
2472
+ }
2473
+ .summer-content a.docmd-tag-link .docmd-tag:hover { filter: brightness(1.08); }
2474
+ .summer-content .docmd-tag .tag-icon { display: inline-block; margin-right: 4px; }
2475
+
2476
+ .summer-content .docmd-embed {
2477
+ display: block;
2478
+ margin: 1.5rem auto;
2479
+ border-radius: var(--summer-radius-md);
2480
+ max-width: 100%;
2481
+ }
2482
+ .summer-content iframe.docmd-embed {
2483
+ width: 100%;
2484
+ aspect-ratio: 16 / 9;
2485
+ border: none !important;
2486
+ }
2487
+ .summer-content iframe.docmd-embed[data-short="true"] {
2488
+ aspect-ratio: 9 / 16;
2489
+ max-width: 400px;
2490
+ }
2491
+ .summer-content blockquote.docmd-embed {
2492
+ border-left: 3px solid var(--summer-border-strong);
2493
+ padding: 8px 14px;
2494
+ background: var(--summer-surface);
2495
+ }
2496
+ .summer-content .docmd-embed-fallback {
2497
+ margin: 1.5rem 0;
2498
+ display: flex;
2499
+ }
2500
+
2501
+ .summer-content .docmd-tabs {
2502
+ margin: 1.5rem 0;
2503
+ border: 1px solid var(--summer-border-soft);
2504
+ border-radius: var(--summer-radius-md);
2505
+ overflow: hidden;
2506
+ background: var(--summer-bg);
2507
+ }
2508
+ .summer-content .docmd-tabs-nav {
2509
+ display: flex;
2510
+ background: var(--summer-surface);
2511
+ border-bottom: 1px solid var(--summer-border-soft);
2512
+ overflow-x: auto;
2513
+ scrollbar-width: none;
2514
+ }
2515
+ .summer-content .docmd-tabs-nav::-webkit-scrollbar { display: none; }
2516
+ .summer-content .docmd-tabs-nav-item {
2517
+ padding: 10px 16px;
2518
+ cursor: pointer;
2519
+ border-bottom: 2px solid transparent;
2520
+ font-weight: 500;
2521
+ color: var(--summer-fg-muted);
2522
+ white-space: nowrap;
2523
+ display: flex;
2524
+ align-items: center;
2525
+ gap: 6px;
2526
+ font-size: 0.85rem;
2527
+ transition: color var(--summer-fast) var(--summer-ease),
2528
+ border-color var(--summer-fast) var(--summer-ease);
2529
+ }
2530
+ .summer-content .docmd-tabs-nav-item:hover { color: var(--summer-fg); }
2531
+ .summer-content .docmd-tabs-nav-item.active {
2532
+ color: var(--summer-accent);
2533
+ border-bottom-color: var(--summer-accent);
2534
+ background: var(--summer-bg);
2535
+ }
2536
+ .summer-content .docmd-tabs-content { padding: 1.25rem 1.25rem 0.5rem; }
2537
+ .summer-content .docmd-tab-pane { display: none; }
2538
+ .summer-content .docmd-tab-pane.active { display: block; }
2539
+
2540
+ .summer-content .docmd-container.grids {
2541
+ display: grid;
2542
+ grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
2543
+ gap: 16px;
2544
+ margin: 1.5rem 0;
2545
+
2546
+ }
2547
+ .summer-content .docmd-container.grid-item {
2548
+ display: flex;
2549
+ flex-direction: column;
2550
+ align-items: center;
2551
+ transition: border-color var(--summer-fast) var(--summer-ease);
2552
+
2553
+ }
2554
+ .summer-content .docmd-container.grid-item:hover { border-color: var(--summer-border); }
2555
+
2556
+ .summer-content .docmd-hero {
2557
+ position: relative;
2558
+ width: 100%;
2559
+ margin: 2rem 0;
2560
+ padding: 2.5rem 0;
2561
+ display: flex;
2562
+ flex-direction: column;
2563
+ border-radius: var(--summer-radius-md);
2564
+ }
2565
+ .summer-content .docmd-hero.hero-glow::before {
2566
+ content: '';
2567
+ position: absolute;
2568
+ top: 50%;
2569
+ left: 50%;
2570
+ transform: translate(-50%, -50%);
2571
+ width: 80%;
2572
+ height: 80%;
2573
+ background: radial-gradient(circle, var(--summer-accent) 0%, transparent 70%);
2574
+ opacity: 0.1;
2575
+ filter: blur(80px);
2576
+ z-index: -1;
2577
+ pointer-events: none;
2578
+ }
2579
+ .summer-content .docmd-hero.hero-banner { text-align: center; align-items: center; }
2580
+ .summer-content .docmd-hero.hero-banner > * { max-width: 760px; }
2581
+ .summer-content .docmd-hero.hero-split {
2582
+ display: flex;
2583
+ flex-direction: row;
2584
+ align-items: center;
2585
+ gap: 2rem;
2586
+ text-align: left;
2587
+ }
2588
+ .summer-content .docmd-hero.hero-split > * { flex: 1 1 0; min-width: 0; }
2589
+ .summer-content .docmd-hero h1 { font-size: 2.25rem; margin: 0 0 0.5rem; }
2590
+ .summer-content .docmd-hero p { margin: 0.3em 0; color: var(--summer-fg-soft); }
2591
+
2592
+ .summer-content .docmd-container.changelog-timeline {
2593
+ position: relative;
2594
+ margin-top: 1.5rem;
2595
+ background: transparent;
2596
+ border: none;
2597
+ box-shadow: none;
2598
+ }
2599
+ .summer-content .docmd-container.changelog-timeline::before {
2600
+ content: "";
2601
+ position: absolute;
2602
+ top: 0.5rem;
2603
+ bottom: 1.5rem;
2604
+ left: 0;
2605
+ width: 2px;
2606
+ background: linear-gradient(to bottom, transparent 0%, var(--summer-border) 3%, var(--summer-border) 90%, transparent 100%);
2607
+ pointer-events: none;
2608
+ z-index: 0;
2609
+ }
2610
+ .summer-content .changelog-entry {
2611
+ position: relative;
2612
+ padding-left: 22px;
2613
+ margin-bottom: 1.25rem;
2614
+ display: block;
2615
+ }
2616
+ .summer-content .changelog-entry::after {
2617
+ content: "";
2618
+ position: absolute;
2619
+ left: -4px;
2620
+ top: 0.55rem;
2621
+ width: 10px;
2622
+ height: 10px;
2623
+ background: var(--summer-bg);
2624
+ border: 2px solid var(--summer-border);
2625
+ border-radius: 50%;
2626
+ z-index: 2;
2627
+ transition: transform var(--summer-fast) var(--summer-ease),
2628
+ border-color var(--summer-fast) var(--summer-ease),
2629
+ background var(--summer-fast) var(--summer-ease);
2630
+ }
2631
+ .summer-content .changelog-entry:hover::after {
2632
+ transform: scale(1.3);
2633
+ border-color: var(--summer-accent);
2634
+ background: var(--summer-accent);
2635
+ }
2636
+ .summer-content .changelog-date {
2637
+ display: inline-block;
2638
+ background: var(--summer-accent-soft);
2639
+ color: var(--summer-accent);
2640
+ padding: 2px 10px;
2641
+ border-radius: 6px;
2642
+ font-size: 0.7rem;
2643
+ font-weight: 700;
2644
+ text-transform: uppercase;
2645
+ letter-spacing: 0.04em;
2646
+ margin-bottom: 4px;
2647
+ }
2648
+ .summer-content .changelog-body { padding-bottom: 0.4rem; }
2649
+ .summer-content .changelog-body > :first-child { margin-top: 0; }
2650
+
2651
+ .summer-content img.align-left { float: left; margin: 0.2rem 1.25rem 0.5rem 0; max-width: 50%; }
2652
+ .summer-content img.align-right { float: right; margin: 0.2rem 0 0.5rem 1.25rem; max-width: 50%; }
2653
+ .summer-content img.align-center { display: block; margin-left: auto; margin-right: auto; }
2654
+ .summer-content img.size-small { max-width: 300px; }
2655
+ .summer-content img.size-medium { max-width: 500px; }
2656
+ .summer-content img.size-large { max-width: 800px; }
2657
+ .summer-content img.with-shadow { box-shadow: var(--summer-shadow); }
2658
+
2659
+ .summer-content .docmd-container figure { margin: 1.5rem 0; text-align: center; }
2660
+ .summer-content .docmd-container figcaption {
2661
+ font-size: 0.85rem;
2662
+ color: var(--summer-fg-muted);
2663
+ padding: 6px 10px;
2664
+ margin-top: 4px;
2665
+ background: var(--summer-surface);
2666
+ border-radius: 0 0 var(--summer-radius-sm) var(--summer-radius-sm);
2667
+ display: inline-block;
2668
+ }
2669
+
2670
+
2671
+ /* Steps Container */
2672
+ .steps-list {
2673
+ counter-reset: step-counter;
2674
+ list-style: none;
2675
+ padding-left: 0 !important;
2676
+ margin-left: 0 !important;
2677
+ position: relative;
2678
+ }
2679
+ .step-item {
2680
+ counter-increment: step-counter;
2681
+ position: relative;
2682
+ padding-left: 48px !important;
2683
+ margin-top: 1.5rem;
2684
+ margin-bottom: 2rem;
2685
+ list-style: none !important;
2686
+ }
2687
+ .step-item::before {
2688
+ content: counter(step-counter);
2689
+ position: absolute;
2690
+ left: 0;
2691
+ top: 2px;
2692
+ width: 32px;
2693
+ height: 32px;
2694
+ border-radius: 50%;
2695
+ background: var(--summer-surface-2);
2696
+ border: 1.5px solid var(--summer-border-strong);
2697
+ color: var(--summer-fg);
2698
+ font-size: 0.875rem;
2699
+ font-weight: 700;
2700
+ display: flex;
2701
+ align-items: center;
2702
+ justify-content: center;
2703
+ z-index: 1;
2704
+ box-shadow: var(--summer-shadow-xs);
2705
+ transition: all var(--summer-fast) var(--summer-ease);
2706
+ }
2707
+ .step-item:hover::before {
2708
+ border-color: var(--summer-accent);
2709
+ color: var(--summer-accent);
2710
+ }
2711
+ .step-item::after {
2712
+ content: "";
2713
+ position: absolute;
2714
+ left: 15px;
2715
+ top: 36px;
2716
+ bottom: -36px;
2717
+ width: 2px;
2718
+ background: var(--summer-border-soft);
2719
+ z-index: 0;
2720
+ }
2721
+ .step-item:last-child::after {
2722
+ display: none;
2723
+ }
2724
+
2725
+ /* Changelog Container */
2726
+ .changelog-timeline {
2727
+ position: relative;
2728
+ padding-left: 32px;
2729
+ margin: 2.5rem 0;
2730
+ }
2731
+ .changelog-timeline::before {
2732
+ content: "";
2733
+ position: absolute;
2734
+ left: 7px;
2735
+ top: 8px;
2736
+ bottom: 8px;
2737
+ width: 2px;
2738
+ background: var(--summer-border-soft);
2739
+ }
2740
+ .changelog-entry {
2741
+ position: relative;
2742
+ margin-bottom: 2.5rem;
2743
+ }
2744
+ .changelog-entry::before {
2745
+ content: "";
2746
+ position: absolute;
2747
+ left: -30px;
2748
+ top: 6px;
2749
+ width: 12px;
2750
+ height: 12px;
2751
+ border-radius: 50%;
2752
+ background: var(--summer-bg);
2753
+ border: 3px solid var(--summer-accent);
2754
+ z-index: 1;
2755
+ transition: transform var(--summer-fast) var(--summer-ease);
2756
+ }
2757
+ .changelog-entry:hover::before {
2758
+ transform: scale(1.25);
2759
+ }
2760
+ .changelog-meta {
2761
+ margin-bottom: 0.5rem;
2762
+ }
2763
+ .changelog-date {
2764
+ font-size: 0.85rem;
2765
+ font-weight: 700;
2766
+ text-transform: uppercase;
2767
+ letter-spacing: 0.06em;
2768
+ color: var(--summer-accent);
2769
+ }
2770
+ .changelog-body {
2771
+ font-size: 1rem;
2772
+ color: var(--summer-fg-soft);
2773
+ }
2774
+ .changelog-body > :first-child {
2775
+ margin-top: 0;
2776
+ }
2777
+
2778
+ /* Tabs Container */
2779
+ .docmd-tabs {
2780
+ margin: 1.8rem 0;
2781
+ border: 1px solid var(--summer-border-soft);
2782
+ border-radius: var(--summer-radius-lg);
2783
+ overflow: hidden;
2784
+ background: var(--summer-bg);
2785
+ box-shadow: var(--summer-shadow-xs);
2786
+ }
2787
+ .docmd-tabs-nav {
2788
+ display: flex;
2789
+ background: var(--summer-surface-subtle, var(--summer-bg-subtle));
2790
+ border-bottom: 1px solid var(--summer-border-soft);
2791
+ overflow-x: auto;
2792
+ scrollbar-width: none;
2793
+ }
2794
+ .docmd-tabs-nav::-webkit-scrollbar {
2795
+ display: none;
2796
+ }
2797
+ .docmd-tabs-nav-item {
2798
+ display: flex;
2799
+ align-items: center;
2800
+ gap: 8px;
2801
+ padding: 12px 20px;
2802
+ cursor: pointer;
2803
+ font-size: 0.875rem;
2804
+ font-weight: 500;
2805
+ color: var(--summer-fg-soft);
2806
+ border-bottom: 2px solid transparent;
2807
+ transition: all var(--summer-fast) var(--summer-ease);
2808
+ user-select: none;
2809
+ }
2810
+ .docmd-tabs-nav-item:hover {
2811
+ color: var(--summer-fg);
2812
+ background: rgba(0, 0, 0, 0.02);
2813
+ }
2814
+ html[data-theme="dark"] .docmd-tabs-nav-item:hover {
2815
+ background: rgba(255, 255, 255, 0.02);
2816
+ }
2817
+ .docmd-tabs-nav-item.active {
2818
+ color: var(--summer-accent);
2819
+ border-bottom-color: var(--summer-accent);
2820
+ background: var(--summer-bg);
2821
+ font-weight: 600;
2822
+ }
2823
+ .docmd-tabs-content {
2824
+ padding: 20px;
2825
+ }
2826
+ .docmd-tab-pane {
2827
+ display: none;
2828
+ }
2829
+ .docmd-tab-pane.active {
2830
+ display: block;
2831
+ }
2832
+
2833
+ /* Cards Container */
2834
+ .docmd-container.card {
2835
+ margin: 1.5rem 0;
2836
+ border: 1px solid var(--summer-border-soft);
2837
+ border-radius: var(--summer-radius-lg);
2838
+ padding: 24px;
2839
+ background: var(--summer-bg);
2840
+ box-shadow: var(--summer-shadow-xs);
2841
+ transition: all var(--summer-med) var(--summer-ease);
2842
+
2843
+ }
2844
+ .docmd-container.card:hover {
2845
+ transform: translateY(-2px);
2846
+ border-color: var(--summer-accent-hover, var(--summer-accent));
2847
+ box-shadow: var(--summer-shadow);
2848
+ }
2849
+ .docmd-container.card .card-title {
2850
+ display: flex;
2851
+ align-items: center;
2852
+ gap: 10px;
2853
+ font-size: 1.125rem;
2854
+ font-weight: 600;
2855
+ color: var(--summer-fg);
2856
+ margin-bottom: 12px;
2857
+ }
2858
+ .docmd-container.card .card-title svg {
2859
+ width: 20px;
2860
+ height: 20px;
2861
+ color: var(--summer-accent);
2862
+ flex-shrink: 0;
2863
+ }
2864
+ .docmd-container.card .card-content {
2865
+ font-size: 0.95rem;
2866
+ color: var(--summer-fg-soft);
2867
+ line-height: 1.6;
2868
+
2869
+ }
2870
+
2871
+ /* Details / Collapsible Container */
2872
+ .docmd-container.collapsible {
2873
+ margin: 1.2rem 0;
2874
+ border: 1px solid var(--summer-border-soft);
2875
+ border-radius: var(--summer-radius);
2876
+ background: var(--summer-bg);
2877
+ overflow: hidden;
2878
+ box-shadow: var(--summer-shadow-xs);
2879
+ transition: border-color var(--summer-fast) var(--summer-ease);
2880
+ }
2881
+ .docmd-container.collapsible:hover {
2882
+ border-color: var(--summer-accent);
2883
+ }
2884
+ .collapsible-summary {
2885
+ display: flex;
2886
+ align-items: center;
2887
+ justify-content: space-between;
2888
+ padding: 14px 18px;
2889
+ font-weight: 600;
2890
+ color: var(--summer-fg);
2891
+ cursor: pointer;
2892
+ user-select: none;
2893
+ background: var(--summer-surface-2);
2894
+ list-style: none !important;
2895
+ }
2896
+ .collapsible-summary::-webkit-details-marker {
2897
+ display: none !important;
2898
+ }
2899
+ .collapsible-title {
2900
+ display: flex;
2901
+ align-items: center;
2902
+ gap: 8px;
2903
+ font-size: 0.95rem;
2904
+ }
2905
+ .collapsible-title svg {
2906
+ width: 16px;
2907
+ height: 16px;
2908
+ color: var(--summer-accent);
2909
+ flex-shrink: 0;
2910
+ }
2911
+ .collapsible-arrow {
2912
+ display: inline-flex;
2913
+ color: var(--summer-fg-muted);
2914
+ transition: transform var(--summer-med) var(--summer-ease);
2915
+ }
2916
+ .collapsible-arrow svg {
2917
+ width: 16px;
2918
+ height: 16px;
2919
+ }
2920
+ .docmd-container.collapsible[open] .collapsible-arrow {
2921
+ transform: rotate(180deg);
2922
+ }
2923
+ .collapsible-content {
2924
+ padding: 18px;
2925
+ border-top: 1px solid var(--summer-border-soft);
2926
+ font-size: 0.975rem;
2927
+ color: var(--summer-fg-soft);
2928
+ line-height: 1.6;
2929
+ background: var(--summer-bg);
2930
+ }
2931
+
2932
+
2933
+ /* ────────────────────────────────────────────────────────────────────────
2934
+ 17. SEARCH — DEFAULT PLUGIN MODAL SUPPRESSION + INLINE DROPDOWN
2935
+ ──────────────────────────────────────────────────────────────────────── */
2936
+
2937
+ /* CRITICAL: force the default plugin modal off-screen so browser never
2938
+ scrolls to it when its hidden input gets focused by our inline search. */
2939
+ .docmd-search-modal {
2940
+ position: fixed !important;
2941
+ top: -9999px !important;
2942
+ left: -9999px !important;
2943
+ pointer-events: none !important;
2944
+ visibility: hidden !important;
2945
+ opacity: 0 !important;
2946
+ }
2947
+ /* When legitimately open (fallback), restore */
2948
+ .docmd-search-modal[style*="flex"] {
2949
+ position: fixed !important;
2950
+ top: 0 !important;
2951
+ left: 0 !important;
2952
+ pointer-events: auto !important;
2953
+ visibility: visible !important;
2954
+ opacity: 1 !important;
2955
+ background: rgba(0,0,0,0.4) !important;
2956
+ backdrop-filter: blur(4px) !important;
2957
+ }
2958
+
2959
+ /* ── Inline search dropdown (GitBook-style) ── */
2960
+ .summer-search-container {
2961
+ position: relative;
2962
+ width: 100%;
2963
+ max-width: 380px;
2964
+ }
2965
+ .summer-search-input {
2966
+ width: 100%;
2967
+ padding: 5px 10px 5px 30px;
2968
+ font-size: 0.875rem;
2969
+ font-family: var(--summer-font-sans);
2970
+ color: var(--summer-fg);
2971
+ background: var(--summer-surface-2);
2972
+ border: 1px solid var(--summer-border);
2973
+ border-radius: var(--summer-radius);
2974
+ outline: none;
2975
+ transition: all var(--summer-fast) var(--summer-ease);
2976
+ }
2977
+ .summer-search-input:focus {
2978
+ background: var(--summer-bg);
2979
+ border-color: var(--summer-border-strong);
2980
+ box-shadow: var(--summer-shadow-sm);
2981
+ }
2982
+ .summer-search-container .summer-search__icon {
2983
+ position: absolute;
2984
+ left: 10px;
2985
+ top: 48%;
2986
+ transform: translateY(-50%);
2987
+ color: var(--summer-fg-muted);
2988
+ pointer-events: none;
2989
+ }
2990
+
2991
+ /* Dropdown panel */
2992
+ .summer-search-dropdown {
2993
+ position: absolute;
2994
+ top: calc(100% + 6px);
2995
+ left: 50%;
2996
+ transform: translateX(-50%);
2997
+ width: 540px;
2998
+ background: var(--summer-bg);
2999
+ border: 1px solid var(--summer-border);
3000
+ border-radius: var(--summer-radius-lg);
3001
+ box-shadow: var(--summer-shadow-xl);
3002
+ z-index: var(--summer-z-modal);
3003
+ overflow: hidden;
3004
+ max-height: 520px;
3005
+ display: flex;
3006
+ flex-direction: column;
3007
+ }
3008
+ @media (max-width: 768px) {
3009
+ .summer-search-dropdown { width: calc(100vw - 24px); left: 0; transform: none; }
3010
+ }
3011
+
3012
+ .summer-search-results-wrapper {
3013
+ overflow-y: auto;
3014
+ max-height: 430px;
3015
+ padding: 6px;
3016
+ scrollbar-width: thin;
3017
+ }
3018
+ .summer-search-dropdown-footer {
3019
+ display: flex;
3020
+ justify-content: space-between;
3021
+ align-items: center;
3022
+ padding: 7px 14px;
3023
+ background: var(--summer-surface-sunken);
3024
+ border-top: 1px solid var(--summer-border-soft);
3025
+ font-size: 0.72rem;
3026
+ color: var(--summer-fg-muted);
3027
+ gap: 12px;
3028
+ }
3029
+ .summer-search-dropdown-footer kbd {
3030
+ display: inline-flex;
3031
+ align-items: center;
3032
+ justify-content: center;
3033
+ background: var(--summer-surface-2);
3034
+ border: 1px solid var(--summer-border);
3035
+ border-radius: 4px;
3036
+ padding: 1px 5px;
3037
+ font-size: 0.68rem;
3038
+ font-family: var(--summer-font-sans);
3039
+ color: var(--summer-fg-soft);
3040
+ }
3041
+
3042
+ /* ── Search results: GitBook style ── */
3043
+ /* Strip all plugin defaults first */
3044
+ .summer-search-results-wrapper .docmd-search-results {
3045
+ padding: 0 !important;
3046
+ margin: 0 !important;
3047
+ background: none !important;
3048
+ }
3049
+
3050
+ /* Each result item */
3051
+ .summer-search-results-wrapper .search-result-item,
3052
+ .search-result-item {
3053
+ display: flex !important;
3054
+ flex-direction: column !important;
3055
+ gap: 2px !important;
3056
+ padding: 8px 10px !important;
3057
+ border-radius: var(--summer-radius-sm) !important;
3058
+ border: none !important;
3059
+ border-left: none !important;
3060
+ margin: 1px 0 !important;
3061
+ background: transparent !important;
3062
+ text-decoration: none !important;
3063
+ cursor: pointer !important;
3064
+ transition: background var(--summer-fast) var(--summer-ease) !important;
3065
+ }
3066
+ .summer-search-results-wrapper .search-result-item:hover,
3067
+ .summer-search-results-wrapper .search-result-item.selected,
3068
+ .search-result-item:hover,
3069
+ .search-result-item.selected {
3070
+ background: var(--summer-surface-2) !important;
3071
+ }
3072
+
3073
+ /* Title row: page icon + title */
3074
+ .search-result-title {
3075
+ display: flex !important;
3076
+ align-items: center !important;
3077
+ gap: 6px !important;
3078
+ font-size: 0.8125rem !important;
3079
+ font-weight: 500 !important;
3080
+ color: var(--summer-fg) !important;
3081
+ font-family: var(--summer-font-sans) !important;
3082
+ line-height: 1.4 !important;
3083
+ }
3084
+ .search-result-item.selected .search-result-title,
3085
+ .search-result-item:hover .search-result-title {
3086
+ color: var(--summer-accent) !important;
3087
+ }
3088
+
3089
+ /* Preview / snippet */
3090
+ .search-result-preview {
3091
+ font-size: 0.78rem !important;
3092
+ color: var(--summer-fg-muted) !important;
3093
+ line-height: 1.45 !important;
3094
+ white-space: nowrap !important;
3095
+ overflow: hidden !important;
3096
+ text-overflow: ellipsis !important;
3097
+ padding-left: 0 !important;
3098
+ }
3099
+ .search-result-preview mark {
3100
+ background: var(--summer-accent-soft) !important;
3101
+ color: var(--summer-accent) !important;
3102
+ padding: 0 2px !important;
3103
+ border-radius: 2px !important;
3104
+ font-weight: 600 !important;
3105
+ }
3106
+
3107
+ /* Section/page path badge */
3108
+ .search-result-section,
3109
+ .search-result-path {
3110
+ font-size: 0.7rem !important;
3111
+ color: var(--summer-fg-faint) !important;
3112
+ font-weight: 400 !important;
3113
+ margin-left: auto !important;
3114
+ white-space: nowrap !important;
3115
+ }
3116
+
3117
+ /* Meta row: version pill + confidence %, on the right of the title */
3118
+ .search-result-meta {
3119
+ display: inline-flex !important;
3120
+ align-items: center !important;
3121
+ gap: 6px !important;
3122
+ margin-left: auto !important;
3123
+ flex-shrink: 0 !important;
3124
+ white-space: nowrap !important;
3125
+ }
3126
+
3127
+ /* Version pill — overrides plugin's inline HSL styles with !important */
3128
+ .search-result-version {
3129
+ display: inline-flex !important;
3130
+ align-items: center !important;
3131
+ gap: 3px !important;
3132
+ height: 18px !important;
3133
+ padding: 0 7px !important;
3134
+ border-radius: 999px !important;
3135
+ background: var(--summer-surface-3) !important;
3136
+ color: var(--summer-fg-soft) !important;
3137
+ font-size: 0.68rem !important;
3138
+ font-weight: 500 !important;
3139
+ font-family: var(--summer-font-sans) !important;
3140
+ line-height: 1 !important;
3141
+ border: 1px solid var(--summer-border) !important;
3142
+ letter-spacing: 0.01em !important;
3143
+ transition: background var(--summer-fast) var(--summer-ease), color var(--summer-fast) var(--summer-ease);
3144
+ }
3145
+ .search-result-item:hover .search-result-version,
3146
+ .search-result-item.selected .search-result-version {
3147
+ background: var(--summer-bg) !important;
3148
+ color: var(--summer-fg-muted) !important;
3149
+ }
3150
+
3151
+ /* Confidence percentage — soft, secondary */
3152
+ .search-result-confidence {
3153
+ display: inline-flex !important;
3154
+ align-items: center !important;
3155
+ height: 18px !important;
3156
+ padding: 0 2px !important;
3157
+ font-size: 0.68rem !important;
3158
+ font-weight: 600 !important;
3159
+ color: var(--summer-fg-muted) !important;
3160
+ font-family: var(--summer-font-sans) !important;
3161
+ font-variant-numeric: tabular-nums !important;
3162
+ letter-spacing: -0.01em !important;
3163
+ min-width: 32px !important;
3164
+ justify-content: flex-end !important;
3165
+ }
3166
+
3167
+ /* Filter pills (top of dropdown) */
3168
+ .docmd-search-filters,
3169
+ .summer-search-filters,
3170
+ #docmd-global-search-filters {
3171
+ display: flex !important;
3172
+ gap: 6px !important;
3173
+ padding: 2px 10px 8px !important;
3174
+ border-bottom: 1px solid var(--summer-border-soft) !important;
3175
+ flex-wrap: wrap !important;
3176
+ }
3177
+ .docmd-search-filter-pill,
3178
+ .search-filter-pill,
3179
+ .search-filter-tag {
3180
+ display: inline-flex !important;
3181
+ align-items: center !important;
3182
+ gap: 4px !important;
3183
+ height: 24px !important;
3184
+ padding: 0 10px !important;
3185
+ border-radius: 999px !important;
3186
+ border: 1px solid var(--summer-border) !important;
3187
+ background: var(--summer-surface-2) !important;
3188
+ /* Override plugin's inline HSL colour styles */
3189
+ color: var(--summer-fg-soft) !important;
3190
+ font-size: 0.72rem !important;
3191
+ font-weight: 500 !important;
3192
+ cursor: pointer !important;
3193
+ transition: all var(--summer-fast) var(--summer-ease) !important;
3194
+ font-family: var(--summer-font-sans) !important;
3195
+ letter-spacing: 0.01em !important;
3196
+ }
3197
+ .docmd-search-filter-pill svg,
3198
+ .search-filter-pill svg,
3199
+ .search-filter-tag svg {
3200
+ width: 10px !important;
3201
+ height: 10px !important;
3202
+ color: currentColor !important;
3203
+ }
3204
+ .docmd-search-filter-pill:hover,
3205
+ .search-filter-pill:hover,
3206
+ .search-filter-tag:hover {
3207
+ border-color: var(--summer-border-strong) !important;
3208
+ color: var(--summer-fg) !important;
3209
+ background: var(--summer-surface) !important;
3210
+ }
3211
+ .docmd-search-filter-pill.active,
3212
+ .search-filter-pill.active,
3213
+ .search-filter-tag.active {
3214
+ background: var(--summer-accent) !important;
3215
+ border-color: var(--summer-accent) !important;
3216
+ color: #fff !important;
3217
+ }
3218
+
3219
+ /* "No results" state */
3220
+ .docmd-search-empty,
3221
+ .search-no-results {
3222
+ padding: 24px 16px !important;
3223
+ text-align: center !important;
3224
+ color: var(--summer-fg-muted) !important;
3225
+ font-size: 0.875rem !important;
3226
+ }
3227
+
3228
+ /* Loading state */
3229
+ .summer-search-loading {
3230
+ padding: 16px;
3231
+ color: var(--summer-fg-muted);
3232
+ font-size: 0.8rem;
3233
+ display: flex;
3234
+ align-items: center;
3235
+ gap: 8px;
3236
+ }
3237
+
3238
+
3239
+ /* ────────────────────────────────────────────────────────────────────────
3240
+ 19. PAGE HEADER TITLE (ABOVE BREADCRUMBS)
3241
+ ──────────────────────────────────────────────────────────────────────── */
3242
+
3243
+ .summer-pageheader__title {
3244
+ font-size: var(--summer-text-xs);
3245
+ font-weight: 700;
3246
+ text-transform: uppercase;
3247
+ letter-spacing: 0.08em;
3248
+ color: var(--summer-fg-muted);
3249
+ margin-bottom: 4px;
3250
+ display: block;
3251
+ }
3252
+
3253
+
3254
+ /* =========================================================================
3255
+ 18. LANGUAGE SWITCHER DROPDOWN (GITBOOK-STYLE)
3256
+ ========================================================================= */
3257
+ .docmd-language-switcher {
3258
+ position: relative;
3259
+ display: inline-block;
3260
+ }
3261
+
3262
+ .language-switcher-toggle {
3263
+ display: flex;
3264
+ align-items: center;
3265
+ justify-content: center;
3266
+ width: 36px;
3267
+ height: 36px;
3268
+ border-radius: var(--summer-radius-sm);
3269
+ background: transparent;
3270
+ border: 1px solid transparent;
3271
+ color: var(--summer-fg-muted);
3272
+ cursor: pointer;
3273
+ transition: all var(--summer-fast) var(--summer-ease);
3274
+ }
3275
+
3276
+ .language-switcher-toggle:hover {
3277
+ background: var(--summer-surface-2);
3278
+ color: var(--summer-fg);
3279
+ border-color: var(--summer-border-soft);
3280
+ }
3281
+
3282
+ .language-switcher-menu {
3283
+ position: absolute;
3284
+ top: calc(100% + 6px);
3285
+ right: 0;
3286
+ width: 180px;
3287
+ padding: 6px;
3288
+ margin: 0;
3289
+ list-style: none;
3290
+ background: var(--summer-bg);
3291
+ border: 1px solid var(--summer-border-strong);
3292
+ border-radius: var(--summer-radius);
3293
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
3294
+ opacity: 0;
3295
+ visibility: hidden;
3296
+ transform: translateY(10px);
3297
+ transition: opacity var(--summer-med) var(--summer-ease),
3298
+ transform var(--summer-med) var(--summer-ease),
3299
+ visibility var(--summer-med) var(--summer-ease);
3300
+ z-index: var(--summer-z-overlay);
3301
+ }
3302
+
3303
+ .docmd-language-switcher.open .language-switcher-menu {
3304
+ opacity: 1;
3305
+ visibility: visible;
3306
+ transform: translateY(0);
3307
+ }
3308
+
3309
+ .language-switcher-item {
3310
+ display: flex;
3311
+ align-items: center;
3312
+ justify-content: space-between;
3313
+ padding: 8px 12px;
3314
+ font-size: 0.8rem;
3315
+ color: var(--summer-fg-soft);
3316
+ text-decoration: none;
3317
+ border-radius: var(--summer-radius-sm);
3318
+ transition: all var(--summer-fast) var(--summer-ease);
3319
+ cursor: pointer;
3320
+ font-weight: 500;
3321
+ }
3322
+
3323
+ .language-switcher-item:hover {
3324
+ background: var(--summer-surface-2);
3325
+ color: var(--summer-fg);
3326
+ }
3327
+
3328
+ .language-switcher-item.active {
3329
+ background: var(--summer-accent-soft);
3330
+ color: var(--summer-accent);
3331
+ font-weight: 600;
3332
+ }
3333
+
3334
+ .language-switcher-item.disabled {
3335
+ opacity: 0.5;
3336
+ cursor: not-allowed;
3337
+ pointer-events: none;
3338
+ }
3339
+
3340
+ .language-check {
3341
+ width: 14px;
3342
+ height: 14px;
3343
+ color: var(--summer-accent);
3344
+ }
3345
+
3346
+ .language-unavailable-badge {
3347
+ font-size: 0.65rem;
3348
+ background: var(--summer-surface-sunken);
3349
+ color: var(--summer-fg-muted);
3350
+ padding: 2px 6px;
3351
+ border-radius: 4px;
3352
+ }
3353
+
3354
+ /* ────────────────────────────────────────────────────────────────────────
3355
+ 19. IMAGE LIGHTBOX (docmd-lightbox)
3356
+ ──────────────────────────────────────────────────────────────────────── */
3357
+ .docmd-lightbox {
3358
+ display: none;
3359
+ position: fixed;
3360
+ top: 0;
3361
+ left: 0;
3362
+ width: 100vw;
3363
+ height: 100vh;
3364
+ background-color: rgba(0, 0, 0, 0.85);
3365
+ z-index: 10000;
3366
+ justify-content: center;
3367
+ align-items: center;
3368
+ flex-direction: column;
3369
+ }
3370
+
3371
+ .docmd-lightbox-content {
3372
+ position: relative;
3373
+ max-width: 90%;
3374
+ max-height: 90%;
3375
+ text-align: center;
3376
+ }
3377
+
3378
+ .docmd-lightbox-content img {
3379
+ max-width: 100%;
3380
+ max-height: 80vh;
3381
+ object-fit: contain;
3382
+ margin: 0 auto;
3383
+ border-radius: var(--summer-radius);
3384
+ box-shadow: var(--summer-shadow-xl);
3385
+ }
3386
+
3387
+ .docmd-lightbox-caption {
3388
+ color: #fff;
3389
+ padding: 1rem;
3390
+ font-size: 1rem;
3391
+ max-width: 100%;
3392
+ font-family: var(--summer-font-sans);
3393
+ }
3394
+
3395
+ .docmd-lightbox-close {
3396
+ position: absolute;
3397
+ top: 20px;
3398
+ right: 30px;
3399
+ color: #fff;
3400
+ font-size: 2.5rem;
3401
+ cursor: pointer;
3402
+ z-index: 10001;
3403
+ transition: opacity var(--summer-fast) var(--summer-ease);
3404
+ }
3405
+
3406
+ .docmd-lightbox-close:hover {
3407
+ opacity: 0.8;
3408
+ }
3409
+
3410
+ img.lightbox {
3411
+ cursor: zoom-in;
3412
+ }
3413
+
3414
+ .search-initial {
3415
+ padding: 1.5rem;
3416
+ text-align: center;
3417
+ color: var(--summer-accent);
3418
+ }