cosmos-docusaurus-theme 1.2.5 → 2.0.0
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.
- package/CHANGELOG.md +40 -0
- package/package.json +1 -1
- package/src/css/theme.css +409 -57
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,46 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
+
## [2.0.0] — 2026-03-10
|
|
11
|
+
|
|
12
|
+
### Added — Native Docusaurus component coverage
|
|
13
|
+
|
|
14
|
+
1. **Color mode toggle icons** — sun (amber `#fbbf24`) in dark mode, moon (brand indigo `#7592ff`) in light mode via CSS `filter` colorization
|
|
15
|
+
2. **TOCCollapsible** — mobile table-of-contents styled as bordered card with uppercase monospace label, matching sidebar section labels
|
|
16
|
+
3. **DocCard / DocCardList** — auto-generated category index cards follow Void/Slate palette with hover lift
|
|
17
|
+
4. **Announcement bar close button** — `×` styled with opacity + hover bg tint
|
|
18
|
+
5. **Tag pages** — `/docs/tags/...` pages use pill tags with brand hover state
|
|
19
|
+
6. **Mobile search** — search input collapses to `2rem` icon-only on ≤576px, expands on focus with smooth width transition
|
|
20
|
+
7. **prefers-reduced-motion** — all transitions and animations disabled when the OS accessibility setting is active
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
|
|
24
|
+
- **Docker GHCR push timeout** — `provenance: false` + `sbom: false` on `docker/build-push-action` eliminates attestation overhead that caused network timeouts; `timeout-minutes: 30` on job; `docker/setup-buildx-action` added explicitly
|
|
25
|
+
- **CSS comments** — removed stale TailAdmin references, fixed redundant inline color-name comments
|
|
26
|
+
|
|
27
|
+
## [1.2.6] — 2026-03-10
|
|
28
|
+
|
|
29
|
+
### Added
|
|
30
|
+
|
|
31
|
+
- **Sidebar icons** — category icon system via `className: 'sidebar-cat-*'` in `sidebars.js`.
|
|
32
|
+
10 Lucide-style SVG icons (rocket, monitor, pencil, puzzle, sliders, folder, server,
|
|
33
|
+
database, layers, grid, code). CSS-only with dark-mode `filter:invert(1)`.
|
|
34
|
+
- **Sidebar sub-menu vertical line** — Rackscope-style left border on nested items.
|
|
35
|
+
Sub-items: slightly smaller font, muted color, left padding.
|
|
36
|
+
- **Sidebar version badge** — always pinned at the very bottom of the sidebar viewport
|
|
37
|
+
(`[class*="sidebarViewport"]` flex-column + `::after` outside scroll area).
|
|
38
|
+
Hardcoded backgrounds (#fff / #111827) to always cover scrolled content.
|
|
39
|
+
- **Ctrl+K hint redesign** — ghost style: transparent chips with hairline border,
|
|
40
|
+
`+` separator via `::before`, opacity 0.7 at rest, 0.9 on input focus.
|
|
41
|
+
Preserves plugin positioning (only kbd elements restyled).
|
|
42
|
+
|
|
43
|
+
### Changed
|
|
44
|
+
|
|
45
|
+
- Search input: `min-width` 220px → 300px; font-family → `var(--ifm-font-family-base)` (Outfit)
|
|
46
|
+
- Demo `docusaurus.config.js`: `{ type:'search' }` positioned before external links;
|
|
47
|
+
`searchBarShortcutHint: true`
|
|
48
|
+
- Dockerfile: copies full project so `file:..` resolves during local dev
|
|
49
|
+
|
|
10
50
|
## [1.2.5] — 2026-03-10
|
|
11
51
|
|
|
12
52
|
### Fixed
|
package/package.json
CHANGED
package/src/css/theme.css
CHANGED
|
@@ -10,8 +10,7 @@
|
|
|
10
10
|
* Font: Outfit + JetBrains Mono for code
|
|
11
11
|
*
|
|
12
12
|
* Usage:
|
|
13
|
-
*
|
|
14
|
-
* require.resolve('cosmos-docusaurus-theme')
|
|
13
|
+
* themes: ['cosmos-docusaurus-theme']
|
|
15
14
|
*
|
|
16
15
|
* @see https://github.com/SckyzO/cosmos-docusaurus-theme
|
|
17
16
|
* @license MIT
|
|
@@ -22,16 +21,16 @@
|
|
|
22
21
|
|
|
23
22
|
/* ── Light mode ──────────────────────────────────────────────────────────── */
|
|
24
23
|
:root {
|
|
25
|
-
/*
|
|
26
|
-
--ifm-color-primary: #465fff;
|
|
27
|
-
--ifm-color-primary-dark: #3641f5;
|
|
28
|
-
--ifm-color-primary-darker: #2a31d8;
|
|
29
|
-
--ifm-color-primary-darkest: #252dae;
|
|
30
|
-
--ifm-color-primary-light: #7592ff;
|
|
31
|
-
--ifm-color-primary-lighter: #9cb9ff;
|
|
32
|
-
--ifm-color-primary-lightest:#dde9ff;
|
|
33
|
-
|
|
34
|
-
/* Typography —
|
|
24
|
+
/* Brand palette (indigo) — matches Rackscope accent color */
|
|
25
|
+
--ifm-color-primary: #465fff;
|
|
26
|
+
--ifm-color-primary-dark: #3641f5;
|
|
27
|
+
--ifm-color-primary-darker: #2a31d8;
|
|
28
|
+
--ifm-color-primary-darkest: #252dae;
|
|
29
|
+
--ifm-color-primary-light: #7592ff;
|
|
30
|
+
--ifm-color-primary-lighter: #9cb9ff;
|
|
31
|
+
--ifm-color-primary-lightest:#dde9ff;
|
|
32
|
+
|
|
33
|
+
/* Typography — Outfit + JetBrains Mono, same as Rackscope app */
|
|
35
34
|
--ifm-font-family-base: 'Outfit', system-ui, -apple-system, sans-serif;
|
|
36
35
|
--ifm-font-family-monospace: 'JetBrains Mono', 'Fira Code', monospace;
|
|
37
36
|
--ifm-font-size-base: 16.5px;
|
|
@@ -43,8 +42,8 @@
|
|
|
43
42
|
--ifm-h3-font-size: 1.25rem;
|
|
44
43
|
|
|
45
44
|
/* Background — Slate: Tailwind gray-50 / white */
|
|
46
|
-
--ifm-background-color: #f9fafb;
|
|
47
|
-
--ifm-background-surface-color: #fff;
|
|
45
|
+
--ifm-background-color: #f9fafb;
|
|
46
|
+
--ifm-background-surface-color: #fff;
|
|
48
47
|
|
|
49
48
|
/* Text — Slate: warm brown tones (not cold blue-gray) */
|
|
50
49
|
--ifm-font-color-base: #1a1714; /* warm near-black */
|
|
@@ -55,14 +54,14 @@
|
|
|
55
54
|
--ifm-navbar-background-color: #fff;
|
|
56
55
|
--ifm-navbar-shadow: 0px 1px 3px 0px rgb(16,24,40,0.10), 0px 1px 2px 0px rgb(16,24,40,0.06);
|
|
57
56
|
--ifm-navbar-link-color: #2c2822; /* warm dark text */
|
|
58
|
-
--ifm-navbar-link-hover-color: #465fff;
|
|
57
|
+
--ifm-navbar-link-hover-color: #465fff;
|
|
59
58
|
--ifm-navbar-link-active-color: #465fff;
|
|
60
59
|
|
|
61
60
|
/* Sidebar */
|
|
62
61
|
--ifm-sidebar-width: 280px;
|
|
63
62
|
--doc-sidebar-width: 280px;
|
|
64
63
|
--ifm-sidebar-padding: 16px;
|
|
65
|
-
--docusaurus-collapse-button-bg-hover-color: #f3f4f6;
|
|
64
|
+
--docusaurus-collapse-button-bg-hover-color: #f3f4f6;
|
|
66
65
|
|
|
67
66
|
/* Links */
|
|
68
67
|
--ifm-link-color: #465fff;
|
|
@@ -95,20 +94,20 @@
|
|
|
95
94
|
/* ── Dark mode ───────────────────────────────────────────────────────────── */
|
|
96
95
|
[data-theme='dark'] {
|
|
97
96
|
/* Primary — lighter variant for readability on dark backgrounds */
|
|
98
|
-
--ifm-color-primary: #7592ff;
|
|
99
|
-
--ifm-color-primary-dark: #465fff;
|
|
100
|
-
--ifm-color-primary-darker: #3641f5;
|
|
101
|
-
--ifm-color-primary-darkest: #2a31d8;
|
|
102
|
-
--ifm-color-primary-light: #9cb9ff;
|
|
103
|
-
--ifm-color-primary-lighter: #c2d6ff;
|
|
104
|
-
--ifm-color-primary-lightest:#dde9ff;
|
|
97
|
+
--ifm-color-primary: #7592ff;
|
|
98
|
+
--ifm-color-primary-dark: #465fff;
|
|
99
|
+
--ifm-color-primary-darker: #3641f5;
|
|
100
|
+
--ifm-color-primary-darkest: #2a31d8;
|
|
101
|
+
--ifm-color-primary-light: #9cb9ff;
|
|
102
|
+
--ifm-color-primary-lighter: #c2d6ff;
|
|
103
|
+
--ifm-color-primary-lightest:#dde9ff;
|
|
105
104
|
--docusaurus-highlighted-code-line-bg: rgb(117, 146, 255, 0.15);
|
|
106
105
|
|
|
107
106
|
/* Background — Void: Tailwind gray-950 / gray-900 neutral blacks */
|
|
108
107
|
--ifm-background-color: #030712; /* gray-950 — deepest background */
|
|
109
108
|
--ifm-background-surface-color: #111827; /* gray-900 — cards, sidebar, panels */
|
|
110
|
-
--ifm-navbar-background-color: #111827;
|
|
111
|
-
--ifm-footer-background-color: #030712;
|
|
109
|
+
--ifm-navbar-background-color: #111827;
|
|
110
|
+
--ifm-footer-background-color: #030712;
|
|
112
111
|
|
|
113
112
|
/* Text — neutral grays, no blue tint */
|
|
114
113
|
--ifm-font-color-base: #e5e5e5; /* neutral light */
|
|
@@ -133,7 +132,7 @@
|
|
|
133
132
|
--ifm-navbar-shadow: 0px 1px 0px 0px #1f2937;
|
|
134
133
|
|
|
135
134
|
/* Code */
|
|
136
|
-
--ifm-code-background: #1f2937;
|
|
135
|
+
--ifm-code-background: #1f2937;
|
|
137
136
|
|
|
138
137
|
/* Sidebar collapse button */
|
|
139
138
|
--docusaurus-collapse-button-bg-hover-color: rgb(255,255,255,0.05);
|
|
@@ -304,21 +303,21 @@ button[aria-label*="dark and light mode"]:hover::before {
|
|
|
304
303
|
transition: background 0.12s, color 0.12s;
|
|
305
304
|
}
|
|
306
305
|
|
|
307
|
-
/* Active sidebar link —
|
|
306
|
+
/* Active sidebar link — brand tint bg + brand color text */
|
|
308
307
|
.menu__link--active,
|
|
309
308
|
.menu__link--active:hover {
|
|
310
|
-
background: #ecf3ff;
|
|
311
|
-
color: #465fff;
|
|
309
|
+
background: #ecf3ff;
|
|
310
|
+
color: #465fff;
|
|
312
311
|
font-weight: 600;
|
|
313
312
|
}
|
|
314
313
|
|
|
315
314
|
[data-theme='dark'] .menu__link--active,
|
|
316
315
|
[data-theme='dark'] .menu__link--active:hover {
|
|
317
316
|
background: rgb(70, 95, 255, 0.12);
|
|
318
|
-
color: #7592ff;
|
|
317
|
+
color: #7592ff;
|
|
319
318
|
}
|
|
320
319
|
|
|
321
|
-
/* Sidebar
|
|
320
|
+
/* Sidebar category toggle */
|
|
322
321
|
.menu__list-item-collapsible {
|
|
323
322
|
border-radius: 8px;
|
|
324
323
|
}
|
|
@@ -939,33 +938,31 @@ details > :not(summary) {
|
|
|
939
938
|
> input.navbar__search-input.searchInput_xxx (CSS module).
|
|
940
939
|
We need !important on background/color to beat the CSS module specificity. */
|
|
941
940
|
|
|
941
|
+
/* Search input — wider, Outfit font, consistent with Rackscope AppSearch */
|
|
942
942
|
.navbar__search-input {
|
|
943
943
|
height: 38px !important;
|
|
944
|
-
min-width:
|
|
944
|
+
min-width: 300px !important;
|
|
945
945
|
border-radius: 8px !important;
|
|
946
946
|
border: 1px solid var(--ifm-toc-border-color) !important;
|
|
947
|
+
font-family: var(--ifm-font-family-base) !important;
|
|
947
948
|
font-size: 0.875rem !important;
|
|
948
|
-
transition: border-color 0.15s, background-color 0.15s, box-shadow 0.15s !important;
|
|
949
|
-
}
|
|
950
|
-
|
|
951
|
-
/* Light (Slate): bg-gray-100 */
|
|
952
|
-
.navbar__search-input {
|
|
953
949
|
background-color: #f3f4f6 !important;
|
|
954
950
|
color: #1a1714 !important;
|
|
951
|
+
transition: border-color 0.15s, background-color 0.15s, box-shadow 0.15s !important;
|
|
955
952
|
}
|
|
956
953
|
|
|
957
954
|
.navbar__search-input::placeholder {
|
|
958
955
|
color: #8a8479 !important;
|
|
956
|
+
font-family: var(--ifm-font-family-base) !important;
|
|
959
957
|
}
|
|
960
958
|
|
|
961
|
-
/* Dark (Void): bg-gray-800 */
|
|
962
959
|
[data-theme='dark'] .navbar__search-input {
|
|
963
960
|
background-color: #1f2937 !important;
|
|
964
961
|
color: #e5e5e5 !important;
|
|
965
962
|
}
|
|
966
963
|
|
|
967
964
|
[data-theme='dark'] .navbar__search-input::placeholder {
|
|
968
|
-
color: #
|
|
965
|
+
color: #6b7280 !important;
|
|
969
966
|
}
|
|
970
967
|
|
|
971
968
|
.navbar__search-input:focus {
|
|
@@ -980,34 +977,50 @@ details > :not(summary) {
|
|
|
980
977
|
box-shadow: 0 0 0 3px rgb(117, 146, 255, 0.12) !important;
|
|
981
978
|
}
|
|
982
979
|
|
|
983
|
-
/*
|
|
984
|
-
|
|
985
|
-
[class*="searchHintContainer"] {
|
|
986
|
-
gap: 2px !important;
|
|
987
|
-
}
|
|
980
|
+
/* Ctrl+K hint — ghost style: transparent, blends into the input surface.
|
|
981
|
+
Uses currentColor border so it adapts to both Void and Slate automatically. */
|
|
988
982
|
|
|
989
|
-
|
|
983
|
+
/* Inner hint wrapper: flex row for the two keys */
|
|
984
|
+
[class*="searchHint"]:not([class*="Container"]) {
|
|
990
985
|
display: inline-flex !important;
|
|
991
986
|
align-items: center !important;
|
|
992
|
-
gap:
|
|
987
|
+
gap: 0 !important;
|
|
988
|
+
}
|
|
989
|
+
|
|
990
|
+
/* Each key: ghost chip, no fill, hairline border */
|
|
991
|
+
[class*="searchHintContainer"] kbd {
|
|
993
992
|
background: transparent !important;
|
|
994
993
|
border: 1px solid var(--ifm-toc-border-color) !important;
|
|
995
|
-
border-radius:
|
|
994
|
+
border-radius: 4px !important;
|
|
995
|
+
color: var(--ifm-font-color-secondary) !important;
|
|
996
|
+
font-family: var(--ifm-font-family-monospace) !important;
|
|
997
|
+
font-size: 0.6rem !important;
|
|
998
|
+
font-weight: 400 !important;
|
|
999
|
+
letter-spacing: 0.02em !important;
|
|
996
1000
|
padding: 1px 5px !important;
|
|
1001
|
+
line-height: 1.6 !important;
|
|
997
1002
|
box-shadow: none !important;
|
|
1003
|
+
opacity: 0.7 !important;
|
|
998
1004
|
}
|
|
999
1005
|
|
|
1000
|
-
/*
|
|
1001
|
-
[class*="
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1006
|
+
/* "+" separator between the two kbd elements */
|
|
1007
|
+
[class*="searchHintContainer"] kbd + kbd {
|
|
1008
|
+
margin-left: 2px !important;
|
|
1009
|
+
}
|
|
1010
|
+
|
|
1011
|
+
[class*="searchHintContainer"] kbd + kbd::before {
|
|
1012
|
+
content: '+';
|
|
1007
1013
|
font-family: var(--ifm-font-family-monospace) !important;
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1014
|
+
font-size: 0.6rem !important;
|
|
1015
|
+
color: var(--ifm-font-color-secondary) !important;
|
|
1016
|
+
opacity: 0.5 !important;
|
|
1017
|
+
margin-right: 2px !important;
|
|
1018
|
+
}
|
|
1019
|
+
|
|
1020
|
+
/* Whole hint brightens on input focus — discovery moment */
|
|
1021
|
+
.navbar__search-input:focus ~ [class*="searchHintContainer"],
|
|
1022
|
+
.navbar__search-input:focus + [class*="searchHintContainer"] {
|
|
1023
|
+
opacity: 0.9 !important;
|
|
1011
1024
|
}
|
|
1012
1025
|
|
|
1013
1026
|
/* ── Right-side navbar order: Search | GitHub/npm | Theme ────────────────── */
|
|
@@ -1097,6 +1110,345 @@ details > :not(summary) {
|
|
|
1097
1110
|
background: #475467;
|
|
1098
1111
|
}
|
|
1099
1112
|
|
|
1113
|
+
/* =============================================================================
|
|
1114
|
+
SIDEBAR — RACKSCOPE STYLE
|
|
1115
|
+
Vertical line for nested items + icon system via className + version footer.
|
|
1116
|
+
============================================================================= */
|
|
1117
|
+
|
|
1118
|
+
/* ── Nested items — vertical left border ─────────────────────────────────── */
|
|
1119
|
+
/* Like Rackscope: [Category Title] */
|
|
1120
|
+
/* │ sub item */
|
|
1121
|
+
/* │ sub item */
|
|
1122
|
+
|
|
1123
|
+
.theme-doc-sidebar-menu .menu__list .menu__list {
|
|
1124
|
+
margin-left: 8px;
|
|
1125
|
+
padding-left: 12px;
|
|
1126
|
+
border-left: 1.5px solid var(--ifm-toc-border-color);
|
|
1127
|
+
}
|
|
1128
|
+
|
|
1129
|
+
[data-theme='dark'] .theme-doc-sidebar-menu .menu__list .menu__list {
|
|
1130
|
+
border-left-color: #374151; /* Void gray-700 — slightly more visible */
|
|
1131
|
+
}
|
|
1132
|
+
|
|
1133
|
+
/* Sub-items: slightly smaller + muted when inactive */
|
|
1134
|
+
.menu__list .menu__list > .menu__list-item > .menu__link {
|
|
1135
|
+
font-size: 0.8375rem;
|
|
1136
|
+
padding-left: 12px;
|
|
1137
|
+
}
|
|
1138
|
+
|
|
1139
|
+
.menu__list .menu__list > .menu__list-item > .menu__link:not(.menu__link--active) {
|
|
1140
|
+
color: var(--ifm-font-color-secondary);
|
|
1141
|
+
}
|
|
1142
|
+
|
|
1143
|
+
[data-theme='dark'] .menu__list .menu__list > .menu__list-item > .menu__link:not(.menu__link--active) {
|
|
1144
|
+
color: #71717a;
|
|
1145
|
+
}
|
|
1146
|
+
|
|
1147
|
+
/* ── Category icons — via className in sidebars.js ───────────────────────── */
|
|
1148
|
+
/* Usage: { type: 'category', label: '...', className: 'sidebar-cat-rocket'} */
|
|
1149
|
+
/* Icon = black SVG via ::before — inverted in dark mode with filter:invert */
|
|
1150
|
+
|
|
1151
|
+
[class*="sidebar-cat-"] > .menu__list-item-collapsible > .menu__link {
|
|
1152
|
+
display: flex;
|
|
1153
|
+
align-items: center;
|
|
1154
|
+
}
|
|
1155
|
+
|
|
1156
|
+
[class*="sidebar-cat-"] > .menu__list-item-collapsible > .menu__link::before {
|
|
1157
|
+
content: '';
|
|
1158
|
+
display: inline-block;
|
|
1159
|
+
flex-shrink: 0;
|
|
1160
|
+
width: 15px;
|
|
1161
|
+
height: 15px;
|
|
1162
|
+
margin-right: 8px;
|
|
1163
|
+
background-size: 15px 15px;
|
|
1164
|
+
background-repeat: no-repeat;
|
|
1165
|
+
background-position: center;
|
|
1166
|
+
opacity: 0.6;
|
|
1167
|
+
transition: opacity 0.12s;
|
|
1168
|
+
}
|
|
1169
|
+
|
|
1170
|
+
/* Dark mode — invert the black SVG to white */
|
|
1171
|
+
[data-theme='dark'] [class*="sidebar-cat-"] > .menu__list-item-collapsible > .menu__link::before {
|
|
1172
|
+
filter: invert(1);
|
|
1173
|
+
}
|
|
1174
|
+
|
|
1175
|
+
/* Hover + active state — full opacity */
|
|
1176
|
+
[class*="sidebar-cat-"] > .menu__list-item-collapsible > .menu__link--active::before,
|
|
1177
|
+
[class*="sidebar-cat-"] > .menu__list-item-collapsible:hover > .menu__link::before {
|
|
1178
|
+
opacity: 1;
|
|
1179
|
+
}
|
|
1180
|
+
|
|
1181
|
+
/* ── Icon definitions (Lucide-style SVG, black stroke, 24×24) ───────────── */
|
|
1182
|
+
|
|
1183
|
+
/* Rocket — Getting Started, Deployment */
|
|
1184
|
+
.sidebar-cat-rocket > .menu__list-item-collapsible > .menu__link::before {
|
|
1185
|
+
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z'/%3E%3Cpath d='M12 15l-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z'/%3E%3Cpath d='M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0'/%3E%3Cpath d='M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5'/%3E%3C/svg%3E");
|
|
1186
|
+
}
|
|
1187
|
+
|
|
1188
|
+
/* Monitor — Views */
|
|
1189
|
+
.sidebar-cat-monitor > .menu__list-item-collapsible > .menu__link::before {
|
|
1190
|
+
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='2' y='3' width='20' height='14' rx='2'/%3E%3Cline x1='8' y1='21' x2='16' y2='21'/%3E%3Cline x1='12' y1='17' x2='12' y2='21'/%3E%3C/svg%3E");
|
|
1191
|
+
}
|
|
1192
|
+
|
|
1193
|
+
/* Pencil — Editors */
|
|
1194
|
+
.sidebar-cat-pencil > .menu__list-item-collapsible > .menu__link::before {
|
|
1195
|
+
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5z'/%3E%3C/svg%3E");
|
|
1196
|
+
}
|
|
1197
|
+
|
|
1198
|
+
/* Puzzle — Plugins & Features */
|
|
1199
|
+
.sidebar-cat-puzzle > .menu__list-item-collapsible > .menu__link::before {
|
|
1200
|
+
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 12h4a2 2 0 0 1 2 2v1a2 2 0 0 0 4 0v-1a2 2 0 0 1 2-2h4'/%3E%3Cpath d='M14 2v4a2 2 0 0 1-2 2h-1a2 2 0 0 0 0 4h1a2 2 0 0 1 2 2v4'/%3E%3C/svg%3E");
|
|
1201
|
+
}
|
|
1202
|
+
|
|
1203
|
+
/* SlidersHorizontal — Interface, Core, Settings */
|
|
1204
|
+
.sidebar-cat-sliders > .menu__list-item-collapsible > .menu__link::before {
|
|
1205
|
+
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='21' y1='4' x2='14' y2='4'/%3E%3Cline x1='10' y1='4' x2='3' y2='4'/%3E%3Ccircle cx='12' cy='4' r='2'/%3E%3Cline x1='21' y1='12' x2='12' y2='12'/%3E%3Cline x1='8' y1='12' x2='3' y2='12'/%3E%3Ccircle cx='10' cy='12' r='2'/%3E%3Cline x1='21' y1='20' x2='16' y2='20'/%3E%3Cline x1='12' y1='20' x2='3' y2='20'/%3E%3Ccircle cx='14' cy='20' r='2'/%3E%3C/svg%3E");
|
|
1206
|
+
}
|
|
1207
|
+
|
|
1208
|
+
/* FolderOpen — Configuration */
|
|
1209
|
+
.sidebar-cat-folder > .menu__list-item-collapsible > .menu__link::before {
|
|
1210
|
+
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z'/%3E%3C/svg%3E");
|
|
1211
|
+
}
|
|
1212
|
+
|
|
1213
|
+
/* Server — Infrastructure */
|
|
1214
|
+
.sidebar-cat-server > .menu__list-item-collapsible > .menu__link::before {
|
|
1215
|
+
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='2' y='2' width='20' height='8' rx='2' ry='2'/%3E%3Crect x='2' y='14' width='20' height='8' rx='2' ry='2'/%3E%3Cline x1='6' y1='6' x2='6.01' y2='6'/%3E%3Cline x1='6' y1='18' x2='6.01' y2='18'/%3E%3C/svg%3E");
|
|
1216
|
+
}
|
|
1217
|
+
|
|
1218
|
+
/* Database — Data & Plugins */
|
|
1219
|
+
.sidebar-cat-database > .menu__list-item-collapsible > .menu__link::before {
|
|
1220
|
+
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cellipse cx='12' cy='5' rx='9' ry='3'/%3E%3Cpath d='M21 12c0 1.66-4 3-9 3s-9-1.34-9-3'/%3E%3Cpath d='M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5'/%3E%3C/svg%3E");
|
|
1221
|
+
}
|
|
1222
|
+
|
|
1223
|
+
/* Layers — Component Reference */
|
|
1224
|
+
.sidebar-cat-layers > .menu__list-item-collapsible > .menu__link::before {
|
|
1225
|
+
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z'/%3E%3Cpath d='M22 17.65l-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65'/%3E%3Cpath d='M22 12.65l-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65'/%3E%3C/svg%3E");
|
|
1226
|
+
}
|
|
1227
|
+
|
|
1228
|
+
/* Grid2x2 — Showcase */
|
|
1229
|
+
.sidebar-cat-grid > .menu__list-item-collapsible > .menu__link::before {
|
|
1230
|
+
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='3' width='7' height='7'/%3E%3Crect x='14' y='3' width='7' height='7'/%3E%3Crect x='14' y='14' width='7' height='7'/%3E%3Crect x='3' y='14' width='7' height='7'/%3E%3C/svg%3E");
|
|
1231
|
+
}
|
|
1232
|
+
|
|
1233
|
+
/* Code2 — API, Development, Architecture features */
|
|
1234
|
+
.sidebar-cat-code > .menu__list-item-collapsible > .menu__link::before {
|
|
1235
|
+
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='16 18 22 12 16 6'/%3E%3Cpolyline points='8 6 2 12 8 18'/%3E%3C/svg%3E");
|
|
1236
|
+
}
|
|
1237
|
+
|
|
1238
|
+
/* ── Sidebar version badge — always at the very bottom ───────────────────── */
|
|
1239
|
+
/* Architecture: .theme-doc-sidebar is the sticky viewport with fixed height.
|
|
1240
|
+
Converting it to flex-column + making the scrollable nav flex:1 means the
|
|
1241
|
+
::after pseudo-element is a flex-child OUTSIDE the scroll area — always
|
|
1242
|
+
pinned to the bottom regardless of content height or scroll position. */
|
|
1243
|
+
:root {
|
|
1244
|
+
--cosmos-version: "cosmos v1.2.6";
|
|
1245
|
+
}
|
|
1246
|
+
|
|
1247
|
+
/* Sidebar viewport — flex column so version badge is always pinned at the bottom.
|
|
1248
|
+
Targets the CSS-module class via attribute substring match (Docusaurus 3). */
|
|
1249
|
+
[class*="sidebarViewport"] {
|
|
1250
|
+
display: flex !important;
|
|
1251
|
+
flex-direction: column !important;
|
|
1252
|
+
}
|
|
1253
|
+
|
|
1254
|
+
/* The scrollable menu fills the available space */
|
|
1255
|
+
[class*="sidebarViewport"] > .menu {
|
|
1256
|
+
flex: 1 !important;
|
|
1257
|
+
min-height: 0 !important;
|
|
1258
|
+
}
|
|
1259
|
+
|
|
1260
|
+
/* Version badge — flex child OUTSIDE the scroll area, always at the very bottom */
|
|
1261
|
+
[class*="sidebarViewport"]::after {
|
|
1262
|
+
content: var(--cosmos-version);
|
|
1263
|
+
flex-shrink: 0;
|
|
1264
|
+
display: block;
|
|
1265
|
+
padding: 8px 0 12px;
|
|
1266
|
+
text-align: center;
|
|
1267
|
+
font-family: var(--ifm-font-family-monospace);
|
|
1268
|
+
font-size: 0.58rem;
|
|
1269
|
+
font-weight: 500;
|
|
1270
|
+
letter-spacing: 0.12em;
|
|
1271
|
+
text-transform: uppercase;
|
|
1272
|
+
color: #9ca3af;
|
|
1273
|
+
background: #fff;
|
|
1274
|
+
border-top: 1px solid #e5e7eb;
|
|
1275
|
+
}
|
|
1276
|
+
|
|
1277
|
+
[data-theme='dark'] [class*="sidebarViewport"]::after {
|
|
1278
|
+
color: #374151;
|
|
1279
|
+
background: #111827;
|
|
1280
|
+
border-top-color: #1f2937;
|
|
1281
|
+
}
|
|
1282
|
+
|
|
1283
|
+
/* =============================================================================
|
|
1284
|
+
NATIVE DOCUSAURUS COMPONENTS
|
|
1285
|
+
============================================================================= */
|
|
1286
|
+
|
|
1287
|
+
/* ── 1. Color mode toggle icons ──────────────────────────────────────────── */
|
|
1288
|
+
/* Sun = amber shown in dark mode (hints "switch to light").
|
|
1289
|
+
Moon = brand indigo shown in light mode (hints "switch to dark").
|
|
1290
|
+
Uses CSS filter to colorize since Docusaurus SVG paths use hardcoded fill. */
|
|
1291
|
+
|
|
1292
|
+
/* Dark mode shows the sun icon */
|
|
1293
|
+
[data-theme='dark'] [class*="toggleButton"] [class*="lightToggleIcon"],
|
|
1294
|
+
[data-theme='dark'] [class*="toggleButton"] svg {
|
|
1295
|
+
filter: drop-shadow(0 0 0 #fbbf24) sepia(1) saturate(4) hue-rotate(5deg) brightness(1.1);
|
|
1296
|
+
}
|
|
1297
|
+
|
|
1298
|
+
/* Light mode shows the moon icon */
|
|
1299
|
+
[data-theme='light'] [class*="toggleButton"] [class*="darkToggleIcon"],
|
|
1300
|
+
[data-theme='light'] [class*="toggleButton"] svg {
|
|
1301
|
+
filter: drop-shadow(0 0 0 #7592ff) sepia(1) saturate(6) hue-rotate(190deg) brightness(0.9);
|
|
1302
|
+
}
|
|
1303
|
+
|
|
1304
|
+
/* ── 2. TOCCollapsible (mobile table of contents) ────────────────────────── */
|
|
1305
|
+
[class*="tocCollapsible"] {
|
|
1306
|
+
border: 1px solid var(--ifm-toc-border-color);
|
|
1307
|
+
border-radius: 10px;
|
|
1308
|
+
margin-bottom: 1rem;
|
|
1309
|
+
overflow: hidden;
|
|
1310
|
+
}
|
|
1311
|
+
|
|
1312
|
+
[class*="tocCollapsibleButton"] {
|
|
1313
|
+
background: none;
|
|
1314
|
+
border: none;
|
|
1315
|
+
cursor: pointer;
|
|
1316
|
+
display: flex;
|
|
1317
|
+
align-items: center;
|
|
1318
|
+
justify-content: space-between;
|
|
1319
|
+
width: 100%;
|
|
1320
|
+
padding: 10px 14px;
|
|
1321
|
+
font-family: var(--ifm-font-family-monospace);
|
|
1322
|
+
font-size: 0.68rem;
|
|
1323
|
+
font-weight: 600;
|
|
1324
|
+
letter-spacing: 0.1em;
|
|
1325
|
+
text-transform: uppercase;
|
|
1326
|
+
color: var(--ifm-font-color-secondary);
|
|
1327
|
+
transition: color 0.12s, background 0.12s;
|
|
1328
|
+
}
|
|
1329
|
+
|
|
1330
|
+
[class*="tocCollapsibleButton"]:hover {
|
|
1331
|
+
color: var(--ifm-color-primary);
|
|
1332
|
+
background: rgb(70, 95, 255, 0.04);
|
|
1333
|
+
}
|
|
1334
|
+
|
|
1335
|
+
[class*="tocCollapsibleContent"] {
|
|
1336
|
+
border-top: 1px solid var(--ifm-toc-border-color);
|
|
1337
|
+
padding: 8px 0;
|
|
1338
|
+
}
|
|
1339
|
+
|
|
1340
|
+
/* ── 3. DocCard / DocCardList (auto-generated category index pages) ─────── */
|
|
1341
|
+
[class*="cardContainer"] > article.card {
|
|
1342
|
+
height: 100%;
|
|
1343
|
+
transition: border-color 0.15s, box-shadow 0.15s, transform 0.15s;
|
|
1344
|
+
}
|
|
1345
|
+
|
|
1346
|
+
[class*="cardContainer"] > article.card:hover {
|
|
1347
|
+
transform: translateY(-2px);
|
|
1348
|
+
}
|
|
1349
|
+
|
|
1350
|
+
[class*="cardContainer"] a {
|
|
1351
|
+
text-decoration: none;
|
|
1352
|
+
}
|
|
1353
|
+
|
|
1354
|
+
/* Category card title */
|
|
1355
|
+
[class*="cardContainer"] h2 {
|
|
1356
|
+
font-size: 1rem;
|
|
1357
|
+
font-weight: 700;
|
|
1358
|
+
margin-bottom: 0.5rem;
|
|
1359
|
+
}
|
|
1360
|
+
|
|
1361
|
+
/* Category card description */
|
|
1362
|
+
[class*="cardContainer"] p {
|
|
1363
|
+
font-size: 0.875rem;
|
|
1364
|
+
color: var(--ifm-font-color-secondary);
|
|
1365
|
+
margin: 0;
|
|
1366
|
+
}
|
|
1367
|
+
|
|
1368
|
+
/* ── 4. Announcement bar close button ────────────────────────────────────── */
|
|
1369
|
+
.announcement-close,
|
|
1370
|
+
[class*="announcementBarClose"] {
|
|
1371
|
+
color: rgb(255, 255, 255, 0.65) !important;
|
|
1372
|
+
border-radius: 6px !important;
|
|
1373
|
+
padding: 4px 6px !important;
|
|
1374
|
+
transition: color 0.15s, background 0.15s !important;
|
|
1375
|
+
}
|
|
1376
|
+
|
|
1377
|
+
.announcement-close:hover,
|
|
1378
|
+
[class*="announcementBarClose"]:hover {
|
|
1379
|
+
color: #fff !important;
|
|
1380
|
+
background: rgb(255, 255, 255, 0.12) !important;
|
|
1381
|
+
}
|
|
1382
|
+
|
|
1383
|
+
/* ── 5. Tag pages (/docs/tags/...) ───────────────────────────────────────── */
|
|
1384
|
+
[class*="tagList"] {
|
|
1385
|
+
display: flex;
|
|
1386
|
+
flex-wrap: wrap;
|
|
1387
|
+
gap: 8px;
|
|
1388
|
+
list-style: none;
|
|
1389
|
+
padding: 0;
|
|
1390
|
+
margin: 0;
|
|
1391
|
+
}
|
|
1392
|
+
|
|
1393
|
+
[class*="tagItem"] a,
|
|
1394
|
+
[class*="tag_"] {
|
|
1395
|
+
display: inline-flex;
|
|
1396
|
+
align-items: center;
|
|
1397
|
+
border: 1px solid var(--ifm-toc-border-color);
|
|
1398
|
+
border-radius: 20px;
|
|
1399
|
+
padding: 4px 14px;
|
|
1400
|
+
font-size: 0.8125rem;
|
|
1401
|
+
font-weight: 500;
|
|
1402
|
+
color: var(--ifm-font-color-base);
|
|
1403
|
+
text-decoration: none;
|
|
1404
|
+
transition: border-color 0.15s, background 0.15s, color 0.15s;
|
|
1405
|
+
}
|
|
1406
|
+
|
|
1407
|
+
[class*="tagItem"] a:hover,
|
|
1408
|
+
[class*="tag_"]:hover {
|
|
1409
|
+
border-color: var(--ifm-color-primary);
|
|
1410
|
+
background: rgb(70, 95, 255, 0.06);
|
|
1411
|
+
color: var(--ifm-color-primary);
|
|
1412
|
+
}
|
|
1413
|
+
|
|
1414
|
+
/* ── 7. Responsive search ─────────────────────────────────────────────────── */
|
|
1415
|
+
/* On mobile the input collapses — restore sizing on focus */
|
|
1416
|
+
@media (width <= 576px) {
|
|
1417
|
+
.navbar__search-input {
|
|
1418
|
+
min-width: 0 !important;
|
|
1419
|
+
width: 2rem !important;
|
|
1420
|
+
padding-left: 2rem !important;
|
|
1421
|
+
transition: width 0.25s ease, background-color 0.15s !important;
|
|
1422
|
+
}
|
|
1423
|
+
|
|
1424
|
+
.navbar__search-input:focus {
|
|
1425
|
+
width: 220px !important;
|
|
1426
|
+
}
|
|
1427
|
+
}
|
|
1428
|
+
|
|
1429
|
+
/* ── 8. prefers-reduced-motion ───────────────────────────────────────────── */
|
|
1430
|
+
/* Respects the OS-level "reduce motion" accessibility setting by
|
|
1431
|
+
disabling all transitions and animations. */
|
|
1432
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1433
|
+
.navbar,
|
|
1434
|
+
.theme-doc-sidebar-container,
|
|
1435
|
+
.menu__link,
|
|
1436
|
+
.main-wrapper,
|
|
1437
|
+
article,
|
|
1438
|
+
.footer,
|
|
1439
|
+
.table-of-contents__link,
|
|
1440
|
+
.pagination-nav__link,
|
|
1441
|
+
.prism-code,
|
|
1442
|
+
.alert,
|
|
1443
|
+
.card,
|
|
1444
|
+
[class*="sidebar-cat-"] > .menu__list-item-collapsible > .menu__link,
|
|
1445
|
+
[class*="toggleIcon"],
|
|
1446
|
+
button[aria-label*="dark and light mode"] {
|
|
1447
|
+
transition: none !important;
|
|
1448
|
+
animation: none !important;
|
|
1449
|
+
}
|
|
1450
|
+
}
|
|
1451
|
+
|
|
1100
1452
|
/* =============================================================================
|
|
1101
1453
|
OPTIONAL UTILITY CLASSES
|
|
1102
1454
|
The following classes are not required for the theme to work.
|