cosmos-docusaurus-theme 1.2.4 → 1.2.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.
- package/CHANGELOG.md +36 -0
- package/package.json +1 -1
- package/src/css/theme.css +265 -34
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,42 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
+
## [1.2.6] — 2026-03-10
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **Sidebar icons** — category icon system via `className: 'sidebar-cat-*'` in `sidebars.js`.
|
|
15
|
+
10 Lucide-style SVG icons (rocket, monitor, pencil, puzzle, sliders, folder, server,
|
|
16
|
+
database, layers, grid, code). CSS-only with dark-mode `filter:invert(1)`.
|
|
17
|
+
- **Sidebar sub-menu vertical line** — Rackscope-style left border on nested items.
|
|
18
|
+
Sub-items: slightly smaller font, muted color, left padding.
|
|
19
|
+
- **Sidebar version badge** — always pinned at the very bottom of the sidebar viewport
|
|
20
|
+
(`[class*="sidebarViewport"]` flex-column + `::after` outside scroll area).
|
|
21
|
+
Hardcoded backgrounds (#fff / #111827) to always cover scrolled content.
|
|
22
|
+
- **Ctrl+K hint redesign** — ghost style: transparent chips with hairline border,
|
|
23
|
+
`+` separator via `::before`, opacity 0.7 at rest, 0.9 on input focus.
|
|
24
|
+
Preserves plugin positioning (only kbd elements restyled).
|
|
25
|
+
|
|
26
|
+
### Changed
|
|
27
|
+
|
|
28
|
+
- Search input: `min-width` 220px → 300px; font-family → `var(--ifm-font-family-base)` (Outfit)
|
|
29
|
+
- Demo `docusaurus.config.js`: `{ type:'search' }` positioned before external links;
|
|
30
|
+
`searchBarShortcutHint: true`
|
|
31
|
+
- Dockerfile: copies full project so `file:..` resolves during local dev
|
|
32
|
+
|
|
33
|
+
## [1.2.5] — 2026-03-10
|
|
34
|
+
|
|
35
|
+
### Fixed
|
|
36
|
+
|
|
37
|
+
- **Search position**: add `{ type: 'search' }` in demo config before external links
|
|
38
|
+
(CSS `order` alone insufficient when easyops inserts search last in DOM)
|
|
39
|
+
- **Search CSS selectors**: `[class*="navbarSearchContainer"]` with `order: -1 !important`
|
|
40
|
+
+ `[class*="navbarSearch"]` — previous `.navbar__search` didn't match actual class
|
|
41
|
+
- **Search input styling**: `!important` on bg/color to beat CSS module specificity
|
|
42
|
+
- **CTRL+K**: redesigned as compact transparent pill with clean kbd elements
|
|
43
|
+
- **colorModeToggle**: `order: 1 !important` on wrapper div (not button)
|
|
44
|
+
- **Hover**: navbar link color now changes to brand primary in both modes
|
|
45
|
+
|
|
10
46
|
## [1.2.2] — 2026-03-10
|
|
11
47
|
|
|
12
48
|
### Added
|
package/package.json
CHANGED
package/src/css/theme.css
CHANGED
|
@@ -254,6 +254,12 @@ button[aria-label*="dark and light mode"]:hover::before {
|
|
|
254
254
|
|
|
255
255
|
.navbar__link:hover {
|
|
256
256
|
background: rgb(70, 95, 255, 0.08);
|
|
257
|
+
color: var(--ifm-color-primary);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
[data-theme='dark'] .navbar__link:hover {
|
|
261
|
+
color: #7592ff;
|
|
262
|
+
background: rgb(117, 146, 255, 0.10);
|
|
257
263
|
}
|
|
258
264
|
|
|
259
265
|
/* Force direct properties — CSS variables alone are not reliable for navbar
|
|
@@ -928,60 +934,115 @@ details > :not(summary) {
|
|
|
928
934
|
--ifm-navbar-search-input-icon: url("data:image/svg+xml;utf8,<svg fill='%23a3a3a3' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' height='16px' width='16px'><path d='M6.02945,10.20327a4.17382,4.17382,0,1,1,4.17382-4.17382A4.15609,4.15609,0,0,1,6.02945,10.20327Zm9.69195,4.2199L10.8989,9.59979A5.88021,5.88021,0,0,0,12.058,6.02856,6.00467,6.00467,0,1,0,9.59979,10.8989l4.82338,4.82338a.89729.89729,0,0,0,1.29912,0,.89749.89749,0,0,0-.00087-1.29909Z' /></svg>");
|
|
929
935
|
}
|
|
930
936
|
|
|
931
|
-
/* Navbar search
|
|
937
|
+
/* ── Navbar search — input styling ───────────────────────────────────────── */
|
|
938
|
+
/* The easyops search plugin renders: navbarSearchContainer > searchBarContainer
|
|
939
|
+
> input.navbar__search-input.searchInput_xxx (CSS module).
|
|
940
|
+
We need !important on background/color to beat the CSS module specificity. */
|
|
941
|
+
|
|
942
|
+
/* Search input — wider, Outfit font, consistent with Rackscope AppSearch */
|
|
932
943
|
.navbar__search-input {
|
|
933
|
-
height: 38px;
|
|
934
|
-
min-width:
|
|
935
|
-
border-radius: 8px;
|
|
936
|
-
border: 1px solid var(--ifm-toc-border-color);
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
944
|
+
height: 38px !important;
|
|
945
|
+
min-width: 300px !important;
|
|
946
|
+
border-radius: 8px !important;
|
|
947
|
+
border: 1px solid var(--ifm-toc-border-color) !important;
|
|
948
|
+
font-family: var(--ifm-font-family-base) !important;
|
|
949
|
+
font-size: 0.875rem !important;
|
|
950
|
+
background-color: #f3f4f6 !important;
|
|
951
|
+
color: #1a1714 !important;
|
|
952
|
+
transition: border-color 0.15s, background-color 0.15s, box-shadow 0.15s !important;
|
|
941
953
|
}
|
|
942
954
|
|
|
943
955
|
.navbar__search-input::placeholder {
|
|
944
|
-
color:
|
|
945
|
-
font-
|
|
956
|
+
color: #8a8479 !important;
|
|
957
|
+
font-family: var(--ifm-font-family-base) !important;
|
|
958
|
+
}
|
|
959
|
+
|
|
960
|
+
[data-theme='dark'] .navbar__search-input {
|
|
961
|
+
background-color: #1f2937 !important;
|
|
962
|
+
color: #e5e5e5 !important;
|
|
963
|
+
}
|
|
964
|
+
|
|
965
|
+
[data-theme='dark'] .navbar__search-input::placeholder {
|
|
966
|
+
color: #6b7280 !important;
|
|
946
967
|
}
|
|
947
968
|
|
|
948
969
|
.navbar__search-input:focus {
|
|
949
|
-
border-color: var(--ifm-color-primary);
|
|
950
|
-
background-color: var(--ifm-background-surface-color);
|
|
951
|
-
box-shadow: 0 0 0 3px rgb(70, 95, 255, 0.10);
|
|
952
|
-
outline: none;
|
|
970
|
+
border-color: var(--ifm-color-primary) !important;
|
|
971
|
+
background-color: var(--ifm-background-surface-color) !important;
|
|
972
|
+
box-shadow: 0 0 0 3px rgb(70, 95, 255, 0.10) !important;
|
|
973
|
+
outline: none !important;
|
|
953
974
|
}
|
|
954
975
|
|
|
955
976
|
[data-theme='dark'] .navbar__search-input:focus {
|
|
956
|
-
|
|
977
|
+
background-color: #111827 !important;
|
|
978
|
+
box-shadow: 0 0 0 3px rgb(117, 146, 255, 0.12) !important;
|
|
957
979
|
}
|
|
958
980
|
|
|
959
|
-
/* Ctrl+K hint
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
981
|
+
/* Ctrl+K hint — ghost style: transparent, blends into the input surface.
|
|
982
|
+
Uses currentColor border so it adapts to both Void and Slate automatically. */
|
|
983
|
+
|
|
984
|
+
/* Inner hint wrapper: flex row for the two keys */
|
|
985
|
+
[class*="searchHint"]:not([class*="Container"]) {
|
|
986
|
+
display: inline-flex !important;
|
|
987
|
+
align-items: center !important;
|
|
988
|
+
gap: 0 !important;
|
|
989
|
+
}
|
|
990
|
+
|
|
991
|
+
/* Each key: ghost chip, no fill, hairline border */
|
|
992
|
+
[class*="searchHintContainer"] kbd {
|
|
993
|
+
background: transparent !important;
|
|
994
|
+
border: 1px solid var(--ifm-toc-border-color) !important;
|
|
995
|
+
border-radius: 4px !important;
|
|
996
|
+
color: var(--ifm-font-color-secondary) !important;
|
|
997
|
+
font-family: var(--ifm-font-family-monospace) !important;
|
|
998
|
+
font-size: 0.6rem !important;
|
|
999
|
+
font-weight: 400 !important;
|
|
1000
|
+
letter-spacing: 0.02em !important;
|
|
1001
|
+
padding: 1px 5px !important;
|
|
1002
|
+
line-height: 1.6 !important;
|
|
1003
|
+
box-shadow: none !important;
|
|
1004
|
+
opacity: 0.7 !important;
|
|
970
1005
|
}
|
|
971
1006
|
|
|
972
|
-
/*
|
|
973
|
-
|
|
974
|
-
|
|
1007
|
+
/* "+" separator between the two kbd elements */
|
|
1008
|
+
[class*="searchHintContainer"] kbd + kbd {
|
|
1009
|
+
margin-left: 2px !important;
|
|
975
1010
|
}
|
|
976
1011
|
|
|
1012
|
+
[class*="searchHintContainer"] kbd + kbd::before {
|
|
1013
|
+
content: '+';
|
|
1014
|
+
font-family: var(--ifm-font-family-monospace) !important;
|
|
1015
|
+
font-size: 0.6rem !important;
|
|
1016
|
+
color: var(--ifm-font-color-secondary) !important;
|
|
1017
|
+
opacity: 0.5 !important;
|
|
1018
|
+
margin-right: 2px !important;
|
|
1019
|
+
}
|
|
1020
|
+
|
|
1021
|
+
/* Whole hint brightens on input focus — discovery moment */
|
|
1022
|
+
.navbar__search-input:focus ~ [class*="searchHintContainer"],
|
|
1023
|
+
.navbar__search-input:focus + [class*="searchHintContainer"] {
|
|
1024
|
+
opacity: 0.9 !important;
|
|
1025
|
+
}
|
|
1026
|
+
|
|
1027
|
+
/* ── Right-side navbar order: Search | GitHub/npm | Theme ────────────────── */
|
|
1028
|
+
/* Real DOM structure: navbarSearchContainer | a.navbar__link | colorModeToggle
|
|
1029
|
+
All are direct children of .navbar__items--right (flex container).
|
|
1030
|
+
Use !important to beat any default ordering. */
|
|
1031
|
+
|
|
1032
|
+
/* Search container (class contains 'navbarSearch') — leftmost */
|
|
1033
|
+
[class*="navbarSearch"],
|
|
1034
|
+
[class*="navbarSearchContainer"] {
|
|
1035
|
+
order: -1 !important;
|
|
1036
|
+
}
|
|
1037
|
+
|
|
1038
|
+
/* External links (GitHub, npm…) — middle */
|
|
977
1039
|
.navbar__items--right .navbar__link {
|
|
978
|
-
order:
|
|
1040
|
+
order: 0 !important;
|
|
979
1041
|
}
|
|
980
1042
|
|
|
981
|
-
/* Color mode toggle wrapper
|
|
982
|
-
/* Must target the wrapper div, not button[aria-label] which is a nested child */
|
|
1043
|
+
/* Color mode toggle wrapper — rightmost */
|
|
983
1044
|
[class*="colorModeToggle"] {
|
|
984
|
-
order:
|
|
1045
|
+
order: 1 !important;
|
|
985
1046
|
}
|
|
986
1047
|
|
|
987
1048
|
/* ── Algolia DocSearch ───────────────────────────────────────────────────── */
|
|
@@ -1050,6 +1111,176 @@ details > :not(summary) {
|
|
|
1050
1111
|
background: #475467;
|
|
1051
1112
|
}
|
|
1052
1113
|
|
|
1114
|
+
/* =============================================================================
|
|
1115
|
+
SIDEBAR — RACKSCOPE STYLE
|
|
1116
|
+
Vertical line for nested items + icon system via className + version footer.
|
|
1117
|
+
============================================================================= */
|
|
1118
|
+
|
|
1119
|
+
/* ── Nested items — vertical left border ─────────────────────────────────── */
|
|
1120
|
+
/* Like Rackscope: [Category Title] */
|
|
1121
|
+
/* │ sub item */
|
|
1122
|
+
/* │ sub item */
|
|
1123
|
+
|
|
1124
|
+
.theme-doc-sidebar-menu .menu__list .menu__list {
|
|
1125
|
+
margin-left: 8px;
|
|
1126
|
+
padding-left: 12px;
|
|
1127
|
+
border-left: 1.5px solid var(--ifm-toc-border-color);
|
|
1128
|
+
}
|
|
1129
|
+
|
|
1130
|
+
[data-theme='dark'] .theme-doc-sidebar-menu .menu__list .menu__list {
|
|
1131
|
+
border-left-color: #374151; /* Void gray-700 — slightly more visible */
|
|
1132
|
+
}
|
|
1133
|
+
|
|
1134
|
+
/* Sub-items: slightly smaller + muted when inactive */
|
|
1135
|
+
.menu__list .menu__list > .menu__list-item > .menu__link {
|
|
1136
|
+
font-size: 0.8375rem;
|
|
1137
|
+
padding-left: 12px;
|
|
1138
|
+
}
|
|
1139
|
+
|
|
1140
|
+
.menu__list .menu__list > .menu__list-item > .menu__link:not(.menu__link--active) {
|
|
1141
|
+
color: var(--ifm-font-color-secondary);
|
|
1142
|
+
}
|
|
1143
|
+
|
|
1144
|
+
[data-theme='dark'] .menu__list .menu__list > .menu__list-item > .menu__link:not(.menu__link--active) {
|
|
1145
|
+
color: #71717a;
|
|
1146
|
+
}
|
|
1147
|
+
|
|
1148
|
+
/* ── Category icons — via className in sidebars.js ───────────────────────── */
|
|
1149
|
+
/* Usage: { type: 'category', label: '...', className: 'sidebar-cat-rocket'} */
|
|
1150
|
+
/* Icon = black SVG via ::before — inverted in dark mode with filter:invert */
|
|
1151
|
+
|
|
1152
|
+
[class*="sidebar-cat-"] > .menu__list-item-collapsible > .menu__link {
|
|
1153
|
+
display: flex;
|
|
1154
|
+
align-items: center;
|
|
1155
|
+
}
|
|
1156
|
+
|
|
1157
|
+
[class*="sidebar-cat-"] > .menu__list-item-collapsible > .menu__link::before {
|
|
1158
|
+
content: '';
|
|
1159
|
+
display: inline-block;
|
|
1160
|
+
flex-shrink: 0;
|
|
1161
|
+
width: 15px;
|
|
1162
|
+
height: 15px;
|
|
1163
|
+
margin-right: 8px;
|
|
1164
|
+
background-size: 15px 15px;
|
|
1165
|
+
background-repeat: no-repeat;
|
|
1166
|
+
background-position: center;
|
|
1167
|
+
opacity: 0.6;
|
|
1168
|
+
transition: opacity 0.12s;
|
|
1169
|
+
}
|
|
1170
|
+
|
|
1171
|
+
/* Dark mode — invert the black SVG to white */
|
|
1172
|
+
[data-theme='dark'] [class*="sidebar-cat-"] > .menu__list-item-collapsible > .menu__link::before {
|
|
1173
|
+
filter: invert(1);
|
|
1174
|
+
}
|
|
1175
|
+
|
|
1176
|
+
/* Hover + active state — full opacity */
|
|
1177
|
+
[class*="sidebar-cat-"] > .menu__list-item-collapsible > .menu__link--active::before,
|
|
1178
|
+
[class*="sidebar-cat-"] > .menu__list-item-collapsible:hover > .menu__link::before {
|
|
1179
|
+
opacity: 1;
|
|
1180
|
+
}
|
|
1181
|
+
|
|
1182
|
+
/* ── Icon definitions (Lucide-style SVG, black stroke, 24×24) ───────────── */
|
|
1183
|
+
|
|
1184
|
+
/* Rocket — Getting Started, Deployment */
|
|
1185
|
+
.sidebar-cat-rocket > .menu__list-item-collapsible > .menu__link::before {
|
|
1186
|
+
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");
|
|
1187
|
+
}
|
|
1188
|
+
|
|
1189
|
+
/* Monitor — Views */
|
|
1190
|
+
.sidebar-cat-monitor > .menu__list-item-collapsible > .menu__link::before {
|
|
1191
|
+
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");
|
|
1192
|
+
}
|
|
1193
|
+
|
|
1194
|
+
/* Pencil — Editors */
|
|
1195
|
+
.sidebar-cat-pencil > .menu__list-item-collapsible > .menu__link::before {
|
|
1196
|
+
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");
|
|
1197
|
+
}
|
|
1198
|
+
|
|
1199
|
+
/* Puzzle — Plugins & Features */
|
|
1200
|
+
.sidebar-cat-puzzle > .menu__list-item-collapsible > .menu__link::before {
|
|
1201
|
+
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");
|
|
1202
|
+
}
|
|
1203
|
+
|
|
1204
|
+
/* SlidersHorizontal — Interface, Core, Settings */
|
|
1205
|
+
.sidebar-cat-sliders > .menu__list-item-collapsible > .menu__link::before {
|
|
1206
|
+
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");
|
|
1207
|
+
}
|
|
1208
|
+
|
|
1209
|
+
/* FolderOpen — Configuration */
|
|
1210
|
+
.sidebar-cat-folder > .menu__list-item-collapsible > .menu__link::before {
|
|
1211
|
+
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");
|
|
1212
|
+
}
|
|
1213
|
+
|
|
1214
|
+
/* Server — Infrastructure */
|
|
1215
|
+
.sidebar-cat-server > .menu__list-item-collapsible > .menu__link::before {
|
|
1216
|
+
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");
|
|
1217
|
+
}
|
|
1218
|
+
|
|
1219
|
+
/* Database — Data & Plugins */
|
|
1220
|
+
.sidebar-cat-database > .menu__list-item-collapsible > .menu__link::before {
|
|
1221
|
+
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");
|
|
1222
|
+
}
|
|
1223
|
+
|
|
1224
|
+
/* Layers — Component Reference */
|
|
1225
|
+
.sidebar-cat-layers > .menu__list-item-collapsible > .menu__link::before {
|
|
1226
|
+
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");
|
|
1227
|
+
}
|
|
1228
|
+
|
|
1229
|
+
/* Grid2x2 — Showcase */
|
|
1230
|
+
.sidebar-cat-grid > .menu__list-item-collapsible > .menu__link::before {
|
|
1231
|
+
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");
|
|
1232
|
+
}
|
|
1233
|
+
|
|
1234
|
+
/* Code2 — API, Development, Architecture features */
|
|
1235
|
+
.sidebar-cat-code > .menu__list-item-collapsible > .menu__link::before {
|
|
1236
|
+
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");
|
|
1237
|
+
}
|
|
1238
|
+
|
|
1239
|
+
/* ── Sidebar version badge — always at the very bottom ───────────────────── */
|
|
1240
|
+
/* Architecture: .theme-doc-sidebar is the sticky viewport with fixed height.
|
|
1241
|
+
Converting it to flex-column + making the scrollable nav flex:1 means the
|
|
1242
|
+
::after pseudo-element is a flex-child OUTSIDE the scroll area — always
|
|
1243
|
+
pinned to the bottom regardless of content height or scroll position. */
|
|
1244
|
+
:root {
|
|
1245
|
+
--cosmos-version: "cosmos v1.2.6";
|
|
1246
|
+
}
|
|
1247
|
+
|
|
1248
|
+
/* Sidebar viewport — flex column so version badge is always pinned at the bottom.
|
|
1249
|
+
Targets the CSS-module class via attribute substring match (Docusaurus 3). */
|
|
1250
|
+
[class*="sidebarViewport"] {
|
|
1251
|
+
display: flex !important;
|
|
1252
|
+
flex-direction: column !important;
|
|
1253
|
+
}
|
|
1254
|
+
|
|
1255
|
+
/* The scrollable menu fills the available space */
|
|
1256
|
+
[class*="sidebarViewport"] > .menu {
|
|
1257
|
+
flex: 1 !important;
|
|
1258
|
+
min-height: 0 !important;
|
|
1259
|
+
}
|
|
1260
|
+
|
|
1261
|
+
/* Version badge — flex child OUTSIDE the scroll area, always at the very bottom */
|
|
1262
|
+
[class*="sidebarViewport"]::after {
|
|
1263
|
+
content: var(--cosmos-version);
|
|
1264
|
+
flex-shrink: 0;
|
|
1265
|
+
display: block;
|
|
1266
|
+
padding: 8px 0 12px;
|
|
1267
|
+
text-align: center;
|
|
1268
|
+
font-family: var(--ifm-font-family-monospace);
|
|
1269
|
+
font-size: 0.58rem;
|
|
1270
|
+
font-weight: 500;
|
|
1271
|
+
letter-spacing: 0.12em;
|
|
1272
|
+
text-transform: uppercase;
|
|
1273
|
+
color: #9ca3af;
|
|
1274
|
+
background: #fff;
|
|
1275
|
+
border-top: 1px solid #e5e7eb;
|
|
1276
|
+
}
|
|
1277
|
+
|
|
1278
|
+
[data-theme='dark'] [class*="sidebarViewport"]::after {
|
|
1279
|
+
color: #374151;
|
|
1280
|
+
background: #111827;
|
|
1281
|
+
border-top-color: #1f2937;
|
|
1282
|
+
}
|
|
1283
|
+
|
|
1053
1284
|
/* =============================================================================
|
|
1054
1285
|
OPTIONAL UTILITY CLASSES
|
|
1055
1286
|
The following classes are not required for the theme to work.
|