@knitli/docs-components 1.0.3 → 1.1.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 +6 -10
- package/README.md +12 -6
- package/package.json +27 -10
- package/src/components/DocsBreadcrumb.astro +53 -56
- package/src/components/DocsFooter.astro +6 -179
- package/src/components/DocsHeader.astro +6 -229
- package/src/components/Footer.astro +244 -0
- package/src/components/PageFrame.astro +189 -0
- package/src/styles/docs-theme.css +5 -4
- package/src/styles/variables.css +0 -17
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -13
- package/dist/types/index.d.ts +0 -72
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -7
- package/src/assets/logos/knitli-logo-copper.svg +0 -25
- package/src/assets/logos/knitli-logo.svg +0 -25
package/CHANGELOG.md
CHANGED
|
@@ -1,14 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
### Changelog
|
|
2
2
|
|
|
3
|
-
All notable changes to this project will be documented in this file.
|
|
3
|
+
All notable changes to this project will be documented in this file. Dates are displayed in UTC.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
5
|
+
Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
|
7
6
|
|
|
8
|
-
|
|
7
|
+
#### 1.0.4
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
-
|
|
12
|
-
- DocsHeader component with Knitli branding
|
|
13
|
-
- Copper Archive CSS theme
|
|
14
|
-
- Logo assets and usage guide
|
|
9
|
+
- chore: Updated licensing and README to clarify difference between Knitli brand assets (proprietary) and the rest of the project (MIT OR Apache-2.0).
|
|
10
|
+
- chore: Updated configuration and tsconfig
|
package/README.md
CHANGED
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
# @knitli/docs-components
|
|
2
2
|
|
|
3
|
-
Shared branded components for Knitli documentation sites.
|
|
3
|
+
Shared branded components for Knitli documentation sites.
|
|
4
|
+
|
|
5
|
+
## License
|
|
6
|
+
|
|
7
|
+
### Knitli Brand Assets
|
|
8
|
+
|
|
9
|
+
This package includes Knitli brand assets, such as the Knitli logo. These are proprietary and not licensed. You may not use or modify them in any way without Knitli's written permission.
|
|
10
|
+
|
|
11
|
+
### Other Materials
|
|
12
|
+
|
|
13
|
+
All other materials in this package are licensed under either the Apache-2.0 or MIT license. You can choose either.
|
|
4
14
|
|
|
5
15
|
## Installation
|
|
6
16
|
|
|
@@ -203,8 +213,4 @@ npm publish
|
|
|
203
213
|
|
|
204
214
|
## Changelog
|
|
205
215
|
|
|
206
|
-
See [CHANGELOG.md](./CHANGELOG.md)
|
|
207
|
-
|
|
208
|
-
## License
|
|
209
|
-
|
|
210
|
-
Not licensed.
|
|
216
|
+
See [CHANGELOG.md](./CHANGELOG.md)
|
package/package.json
CHANGED
|
@@ -1,19 +1,34 @@
|
|
|
1
1
|
{
|
|
2
2
|
"author": "Knitli Inc.",
|
|
3
3
|
"description": "Shared branded components for Knitli documentation sites",
|
|
4
|
+
"dependencies": {
|
|
5
|
+
"astro": "catalog:astro-core",
|
|
6
|
+
"lightningcss": "catalog:optimization",
|
|
7
|
+
"svgo": "catalog:optimization",
|
|
8
|
+
"@knitli/shared-layouts": "workspace:*",
|
|
9
|
+
"@knitli/shared-file-types": "workspace:*",
|
|
10
|
+
"@knitli/tsconfig": "workspace:*"
|
|
11
|
+
|
|
12
|
+
},
|
|
4
13
|
"devDependencies": {
|
|
5
|
-
"
|
|
6
|
-
"astro": "^5.17.0",
|
|
14
|
+
"astro": "catalog:astro-core",
|
|
7
15
|
"auto-changelog": "^2.4.0",
|
|
8
|
-
"typescript": "
|
|
16
|
+
"typescript": "catalog:dev-common",
|
|
17
|
+
"bun": "catalog:dev-common",
|
|
18
|
+
"vitest": "catalog:dev-common",
|
|
19
|
+
"@biomejs/biome": "catalog:dev-common",
|
|
20
|
+
"@types/node": "catalog:types",
|
|
21
|
+
"@knitli/tsconfig": "*"
|
|
22
|
+
},
|
|
23
|
+
"engine": {
|
|
24
|
+
"node": "catalog:"
|
|
9
25
|
},
|
|
10
26
|
"exports": {
|
|
11
27
|
".": "./dist/index.js",
|
|
12
28
|
"./DocsBreadcrumb.astro": "./src/components/DocsBreadcrumb.astro",
|
|
13
|
-
"./
|
|
14
|
-
"./
|
|
29
|
+
"./Footer.astro": "./src/components/Footer.astro",
|
|
30
|
+
"./PageFrame.astro": "./src/components/PageFrame.astro",
|
|
15
31
|
"./logos/*": "./src/assets/logos/*",
|
|
16
|
-
"./styles/copper.css": "./src/styles/copper-archive.css",
|
|
17
32
|
"./styles/theme.css": "./src/styles/docs-theme.css",
|
|
18
33
|
"./styles/variables.css": "./src/styles/variables.css"
|
|
19
34
|
},
|
|
@@ -31,10 +46,11 @@
|
|
|
31
46
|
"components",
|
|
32
47
|
"starlight"
|
|
33
48
|
],
|
|
34
|
-
"license": "LicenseRef-
|
|
49
|
+
"license": "(MIT OR Apache-2.0) AND LicenseRef-KnitliProprietary",
|
|
35
50
|
"main": "./dist/index.js",
|
|
36
51
|
"name": "@knitli/docs-components",
|
|
37
52
|
"peerDependencies": {
|
|
53
|
+
"@astrojs/starlight": ">=0.30.0",
|
|
38
54
|
"astro": "^5.0.0"
|
|
39
55
|
},
|
|
40
56
|
"repository": {
|
|
@@ -43,11 +59,12 @@
|
|
|
43
59
|
"url": "git+https://github.com/knitli/knitli-site.git"
|
|
44
60
|
},
|
|
45
61
|
"scripts": {
|
|
46
|
-
"build": "tsc",
|
|
62
|
+
"build": "bunx tsc",
|
|
47
63
|
"prepublishOnly": "bun run build",
|
|
48
|
-
"version": "auto-changelog -p && git add CHANGELOG.md"
|
|
64
|
+
"version": "auto-changelog -p && git add CHANGELOG.md",
|
|
65
|
+
"publish": "bun publish --access public"
|
|
49
66
|
},
|
|
50
67
|
"type": "module",
|
|
51
68
|
"types": "./dist/index.d.ts",
|
|
52
|
-
"version": "1.0
|
|
69
|
+
"version": "1.1.0"
|
|
53
70
|
}
|
|
@@ -3,19 +3,18 @@
|
|
|
3
3
|
// SPDX-FileContributor: Adam Poulemanos <adam@knit.li>
|
|
4
4
|
//
|
|
5
5
|
// SPDX-License-Identifier: MIT OR Apache-2.0
|
|
6
|
-
//
|
|
7
|
-
// Optional breadcrumb component for product-specific navigation
|
|
8
6
|
|
|
9
7
|
interface Props {
|
|
10
8
|
product?: 'ReCoco' | 'CodeWeaver' | 'Thread';
|
|
11
9
|
productUrl?: string;
|
|
12
10
|
path?: string;
|
|
13
|
-
|
|
11
|
+
/** 'inline' — no padding, designed for embedding in a subnav bar */
|
|
12
|
+
variant?: 'default' | 'compact' | 'inline';
|
|
14
13
|
}
|
|
15
14
|
|
|
16
15
|
const {
|
|
17
16
|
product,
|
|
18
|
-
productUrl =
|
|
17
|
+
productUrl = '/',
|
|
19
18
|
path = '',
|
|
20
19
|
variant = 'default',
|
|
21
20
|
} = Astro.props;
|
|
@@ -24,40 +23,39 @@ const {
|
|
|
24
23
|
const segments = path
|
|
25
24
|
.split('/')
|
|
26
25
|
.filter(Boolean)
|
|
27
|
-
.map((segment) => ({
|
|
26
|
+
.map((segment, index, all) => ({
|
|
28
27
|
name: segment.replace(/-/g, ' ').replace(/\b\w/g, (l) => l.toUpperCase()),
|
|
29
|
-
|
|
28
|
+
href: `${productUrl}${all.slice(0, index + 1).join('/')}`,
|
|
29
|
+
isLast: index === all.length - 1,
|
|
30
30
|
}));
|
|
31
31
|
---
|
|
32
32
|
|
|
33
33
|
{product && (
|
|
34
34
|
<nav
|
|
35
|
-
class:list={['docs-breadcrumb-nav',
|
|
35
|
+
class:list={['docs-breadcrumb-nav', variant]}
|
|
36
36
|
aria-label="Breadcrumb"
|
|
37
37
|
>
|
|
38
38
|
<ol class="breadcrumb-list">
|
|
39
39
|
<li class="breadcrumb-item">
|
|
40
|
-
<a href="
|
|
40
|
+
<a href="https://docs.knitli.com">Documentation</a>
|
|
41
41
|
</li>
|
|
42
42
|
|
|
43
|
-
<li class="breadcrumb-separator" aria-hidden="true"
|
|
43
|
+
<li class="breadcrumb-separator" aria-hidden="true">›</li>
|
|
44
44
|
|
|
45
45
|
<li class="breadcrumb-item">
|
|
46
|
-
{
|
|
46
|
+
{segments.length > 0 ? (
|
|
47
47
|
<a href={productUrl}>{product}</a>
|
|
48
48
|
) : (
|
|
49
|
-
<span class="breadcrumb-current">{product}</span>
|
|
49
|
+
<span class="breadcrumb-current" aria-current="page">{product}</span>
|
|
50
50
|
)}
|
|
51
51
|
</li>
|
|
52
52
|
|
|
53
|
-
{segments.map((segment
|
|
53
|
+
{segments.map((segment) => (
|
|
54
54
|
<>
|
|
55
|
-
<li class="breadcrumb-separator" aria-hidden="true"
|
|
55
|
+
<li class="breadcrumb-separator" aria-hidden="true">›</li>
|
|
56
56
|
<li class="breadcrumb-item">
|
|
57
|
-
{
|
|
58
|
-
<a href={
|
|
59
|
-
{segment.name}
|
|
60
|
-
</a>
|
|
57
|
+
{!segment.isLast ? (
|
|
58
|
+
<a href={segment.href}>{segment.name}</a>
|
|
61
59
|
) : (
|
|
62
60
|
<span class="breadcrumb-current" aria-current="page">
|
|
63
61
|
{segment.name}
|
|
@@ -71,83 +69,82 @@ const segments = path
|
|
|
71
69
|
)}
|
|
72
70
|
|
|
73
71
|
<style>
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
--docs-slate: oklch(0.35 0.02 240);
|
|
77
|
-
--docs-parchment: oklch(0.96 0.015 70);
|
|
72
|
+
.docs-breadcrumb-nav {
|
|
73
|
+
font-size: var(--sl-text-xs);
|
|
78
74
|
}
|
|
79
75
|
|
|
80
|
-
.docs-breadcrumb-nav {
|
|
76
|
+
.docs-breadcrumb-nav.default {
|
|
81
77
|
padding: 1rem 0;
|
|
82
|
-
font-family: "Inter", -apple-system, BlinkMacSystemFont, sans-serif;
|
|
83
78
|
}
|
|
84
79
|
|
|
85
80
|
.docs-breadcrumb-nav.compact {
|
|
86
81
|
padding: 0.5rem 0;
|
|
87
82
|
}
|
|
88
83
|
|
|
84
|
+
/* inline: no padding, fits inside a subnav bar */
|
|
85
|
+
.docs-breadcrumb-nav.inline {
|
|
86
|
+
padding: 0;
|
|
87
|
+
display: flex;
|
|
88
|
+
align-items: center;
|
|
89
|
+
height: 100%;
|
|
90
|
+
min-width: 0;
|
|
91
|
+
overflow: hidden;
|
|
92
|
+
}
|
|
93
|
+
|
|
89
94
|
.breadcrumb-list {
|
|
90
95
|
display: flex;
|
|
91
|
-
flex-wrap:
|
|
96
|
+
flex-wrap: nowrap;
|
|
92
97
|
align-items: center;
|
|
93
|
-
gap: 0.
|
|
98
|
+
gap: 0.35rem;
|
|
94
99
|
list-style: none;
|
|
95
100
|
margin: 0;
|
|
96
101
|
padding: 0;
|
|
102
|
+
min-width: 0;
|
|
103
|
+
overflow: hidden;
|
|
97
104
|
}
|
|
98
105
|
|
|
99
106
|
.breadcrumb-item {
|
|
100
|
-
font-size:
|
|
107
|
+
font-size: inherit;
|
|
108
|
+
white-space: nowrap;
|
|
109
|
+
overflow: hidden;
|
|
110
|
+
text-overflow: ellipsis;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/* Only ellipsis the last item — earlier ones can wrap/hide naturally */
|
|
114
|
+
.breadcrumb-item:last-child {
|
|
115
|
+
min-width: 0;
|
|
101
116
|
}
|
|
102
117
|
|
|
103
118
|
.breadcrumb-item a {
|
|
104
|
-
color: var(--
|
|
119
|
+
color: var(--sl-color-gray-3);
|
|
105
120
|
text-decoration: none;
|
|
106
|
-
|
|
107
|
-
transition: all 0.2s ease;
|
|
121
|
+
transition: color 0.15s ease;
|
|
108
122
|
}
|
|
109
123
|
|
|
110
124
|
.breadcrumb-item a:hover {
|
|
111
|
-
|
|
112
|
-
text-decoration:
|
|
113
|
-
color: var(--docs-copper);
|
|
125
|
+
color: var(--sl-color-gray-1);
|
|
126
|
+
text-decoration: none;
|
|
114
127
|
}
|
|
115
128
|
|
|
116
129
|
.breadcrumb-current {
|
|
117
|
-
color: var(--
|
|
130
|
+
color: var(--sl-color-gray-2);
|
|
118
131
|
font-weight: 500;
|
|
119
132
|
}
|
|
120
133
|
|
|
121
134
|
.breadcrumb-separator {
|
|
122
|
-
color: var(--
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/* Mobile Responsive */
|
|
128
|
-
@media (max-width: 768px) {
|
|
129
|
-
.breadcrumb-list {
|
|
130
|
-
gap: 0.375rem;
|
|
131
|
-
font-size: 0.8125rem;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
.breadcrumb-item,
|
|
135
|
-
.breadcrumb-separator {
|
|
136
|
-
font-size: 0.8125rem;
|
|
137
|
-
}
|
|
135
|
+
color: var(--sl-color-gray-5);
|
|
136
|
+
font-size: inherit;
|
|
137
|
+
flex-shrink: 0;
|
|
138
138
|
}
|
|
139
139
|
|
|
140
|
-
/* Accessibility */
|
|
141
140
|
.breadcrumb-item a:focus-visible {
|
|
142
|
-
outline:
|
|
143
|
-
outline-offset:
|
|
144
|
-
border-radius:
|
|
141
|
+
outline: 2px solid var(--sl-color-accent);
|
|
142
|
+
outline-offset: 2px;
|
|
143
|
+
border-radius: 2px;
|
|
145
144
|
}
|
|
146
145
|
|
|
147
|
-
/* Reduced motion */
|
|
148
146
|
@media (prefers-reduced-motion: reduce) {
|
|
149
|
-
|
|
150
|
-
animation-duration: 0.01ms !important;
|
|
147
|
+
.breadcrumb-item a {
|
|
151
148
|
transition-duration: 0.01ms !important;
|
|
152
149
|
}
|
|
153
150
|
}
|
|
@@ -1,181 +1,8 @@
|
|
|
1
1
|
---
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
interface Props {
|
|
10
|
-
variant?: 'default' | 'minimal';
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
const { variant = 'default' } = Astro.props;
|
|
14
|
-
|
|
15
|
-
// Environment-aware URL configuration
|
|
16
|
-
const isDev = import.meta.env.DEV;
|
|
17
|
-
|
|
18
|
-
const getSiteUrls = () => {
|
|
19
|
-
if (isDev) {
|
|
20
|
-
return {
|
|
21
|
-
marketing: import.meta.env.PUBLIC_MARKETING_URL || 'http://localhost:4321',
|
|
22
|
-
blog: import.meta.env.PUBLIC_BLOG_URL || 'http://localhost:4322',
|
|
23
|
-
docs: import.meta.env.PUBLIC_DOCS_URL || 'http://localhost:4323',
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
return {
|
|
28
|
-
marketing: 'https://knitli.com',
|
|
29
|
-
blog: 'https://blog.knitli.com',
|
|
30
|
-
docs: 'https://docs.knitli.com',
|
|
31
|
-
};
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
const urls = getSiteUrls();
|
|
35
|
-
const currentYear = new Date().getFullYear();
|
|
2
|
+
// DEPRECATED — This component has been removed.
|
|
3
|
+
// Use Footer.astro instead:
|
|
4
|
+
// starlight({ components: { Footer: '@knitli/docs-components/Footer.astro' } })
|
|
5
|
+
throw new Error(
|
|
6
|
+
'@knitli/docs-components: DocsFooter has been removed. Use Footer.astro instead.'
|
|
7
|
+
);
|
|
36
8
|
---
|
|
37
|
-
|
|
38
|
-
<footer class:list={['docs-footer', { minimal: variant === 'minimal' }]}>
|
|
39
|
-
<div class="footer-content">
|
|
40
|
-
{variant === 'default' && (
|
|
41
|
-
<nav class="footer-nav" aria-label="Footer navigation">
|
|
42
|
-
<a href={urls.marketing}>Main Site</a>
|
|
43
|
-
<a href={urls.blog}>Blog</a>
|
|
44
|
-
<a href="https://github.com/knitli" target="_blank" rel="noopener noreferrer">
|
|
45
|
-
GitHub
|
|
46
|
-
</a>
|
|
47
|
-
<a href={`${urls.marketing}/privacy`}>Privacy</a>
|
|
48
|
-
</nav>
|
|
49
|
-
)}
|
|
50
|
-
|
|
51
|
-
<div class="footer-legal">
|
|
52
|
-
<p class="copyright">
|
|
53
|
-
© {currentYear} <a href={urls.marketing}>Knitli Inc.</a> All rights reserved.
|
|
54
|
-
</p>
|
|
55
|
-
{variant === 'default' && (
|
|
56
|
-
<p class="license">
|
|
57
|
-
Documentation licensed under{' '}
|
|
58
|
-
<a
|
|
59
|
-
href="https://github.com/knitli/knitli-site/blob/main/LICENSE"
|
|
60
|
-
target="_blank"
|
|
61
|
-
rel="noopener noreferrer"
|
|
62
|
-
>
|
|
63
|
-
MIT OR Apache-2.0
|
|
64
|
-
</a>
|
|
65
|
-
</p>
|
|
66
|
-
)}
|
|
67
|
-
</div>
|
|
68
|
-
</div>
|
|
69
|
-
</footer>
|
|
70
|
-
|
|
71
|
-
<style>
|
|
72
|
-
:root {
|
|
73
|
-
--docs-copper: oklch(0.58 0.08 50);
|
|
74
|
-
--docs-slate: oklch(0.35 0.02 240);
|
|
75
|
-
--docs-parchment: oklch(0.96 0.015 70);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
.docs-footer {
|
|
79
|
-
background: var(--docs-parchment);
|
|
80
|
-
border-top: 1px solid oklch(0.85 0.01 50);
|
|
81
|
-
margin-top: 4rem;
|
|
82
|
-
padding: 2rem 0;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
.docs-footer.minimal {
|
|
86
|
-
margin-top: 2rem;
|
|
87
|
-
padding: 1rem 0;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
.footer-content {
|
|
91
|
-
max-width: 1400px;
|
|
92
|
-
margin: 0 auto;
|
|
93
|
-
padding: 0 2rem;
|
|
94
|
-
display: flex;
|
|
95
|
-
flex-direction: column;
|
|
96
|
-
gap: 1.5rem;
|
|
97
|
-
align-items: center;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
.footer-nav {
|
|
101
|
-
display: flex;
|
|
102
|
-
gap: 2rem;
|
|
103
|
-
align-items: center;
|
|
104
|
-
flex-wrap: wrap;
|
|
105
|
-
justify-content: center;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
.footer-nav a {
|
|
109
|
-
font-family: "Inter", -apple-system, BlinkMacSystemFont, sans-serif;
|
|
110
|
-
font-size: 0.875rem;
|
|
111
|
-
color: var(--docs-slate);
|
|
112
|
-
text-decoration: none;
|
|
113
|
-
transition: color 0.2s ease;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
.footer-nav a:hover {
|
|
117
|
-
color: var(--docs-copper);
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
.footer-legal {
|
|
121
|
-
display: flex;
|
|
122
|
-
flex-direction: column;
|
|
123
|
-
gap: 0.5rem;
|
|
124
|
-
text-align: center;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
.copyright,
|
|
128
|
-
.license {
|
|
129
|
-
font-family: "Inter", -apple-system, BlinkMacSystemFont, sans-serif;
|
|
130
|
-
font-size: 0.8125rem;
|
|
131
|
-
color: var(--docs-slate);
|
|
132
|
-
opacity: 0.7;
|
|
133
|
-
margin: 0;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
.copyright a,
|
|
137
|
-
.license a {
|
|
138
|
-
color: inherit;
|
|
139
|
-
text-decoration: none;
|
|
140
|
-
transition: opacity 0.2s ease;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
.copyright a:hover,
|
|
144
|
-
.license a:hover {
|
|
145
|
-
opacity: 1;
|
|
146
|
-
text-decoration: underline;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
/* Mobile Responsive */
|
|
150
|
-
@media (max-width: 768px) {
|
|
151
|
-
.footer-content {
|
|
152
|
-
padding: 0 1rem;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
.footer-nav {
|
|
156
|
-
gap: 1rem;
|
|
157
|
-
flex-direction: column;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
.footer-legal {
|
|
161
|
-
font-size: 0.75rem;
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
/* Accessibility */
|
|
166
|
-
.footer-nav a:focus-visible,
|
|
167
|
-
.copyright a:focus-visible,
|
|
168
|
-
.license a:focus-visible {
|
|
169
|
-
outline: 3px solid var(--docs-copper);
|
|
170
|
-
outline-offset: 4px;
|
|
171
|
-
border-radius: 4px;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
/* Reduced motion */
|
|
175
|
-
@media (prefers-reduced-motion: reduce) {
|
|
176
|
-
* {
|
|
177
|
-
animation-duration: 0.01ms !important;
|
|
178
|
-
transition-duration: 0.01ms !important;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
</style>
|