mkdnsite 0.0.1
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/LICENSE +21 -0
- package/README.md +211 -0
- package/package.json +72 -0
- package/src/adapters/cloudflare.ts +85 -0
- package/src/adapters/fly.ts +22 -0
- package/src/adapters/local.ts +153 -0
- package/src/adapters/netlify.ts +17 -0
- package/src/adapters/types.ts +54 -0
- package/src/adapters/vercel.ts +48 -0
- package/src/cli.ts +140 -0
- package/src/client/scripts.ts +106 -0
- package/src/config/defaults.ts +68 -0
- package/src/config/schema.ts +192 -0
- package/src/content/filesystem.ts +210 -0
- package/src/content/frontmatter.ts +66 -0
- package/src/content/github.ts +211 -0
- package/src/content/types.ts +86 -0
- package/src/discovery/llmstxt.ts +70 -0
- package/src/handler.ts +188 -0
- package/src/index.ts +57 -0
- package/src/negotiate/accept.ts +72 -0
- package/src/negotiate/headers.ts +56 -0
- package/src/render/bun-native.ts +54 -0
- package/src/render/components/index.ts +149 -0
- package/src/render/page-shell.ts +121 -0
- package/src/render/portable.ts +222 -0
- package/src/render/types.ts +74 -0
- package/src/theme/prose-css.ts +377 -0
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default theme CSS for mkdnsite.
|
|
3
|
+
*
|
|
4
|
+
* Inspired by @tailwindcss/typography prose styles and GitHub's
|
|
5
|
+
* markdown rendering. Designed to look beautiful out of the box
|
|
6
|
+
* with zero configuration.
|
|
7
|
+
*
|
|
8
|
+
* The .mkdn-prose class applies rich typography styles to all
|
|
9
|
+
* child elements rendered from markdown. The layout classes
|
|
10
|
+
* (.mkdn-layout, .mkdn-nav, .mkdn-main) handle the page chrome.
|
|
11
|
+
*
|
|
12
|
+
* Users can override this entirely via config.theme.customCss.
|
|
13
|
+
* Users on the 'components' theme mode can provide their own
|
|
14
|
+
* Tailwind build with custom component styling.
|
|
15
|
+
*/
|
|
16
|
+
export const THEME_CSS = `
|
|
17
|
+
:root {
|
|
18
|
+
--mkdn-font: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif;
|
|
19
|
+
--mkdn-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
|
|
20
|
+
--mkdn-text: #1f2328;
|
|
21
|
+
--mkdn-text-muted: #656d76;
|
|
22
|
+
--mkdn-bg: #ffffff;
|
|
23
|
+
--mkdn-bg-alt: #f6f8fa;
|
|
24
|
+
--mkdn-border: #d0d7de;
|
|
25
|
+
--mkdn-link: #0969da;
|
|
26
|
+
--mkdn-link-hover: #0550ae;
|
|
27
|
+
--mkdn-code-bg: rgba(175, 184, 193, 0.2);
|
|
28
|
+
--mkdn-pre-bg: #f6f8fa;
|
|
29
|
+
--mkdn-nav-w: 260px;
|
|
30
|
+
--mkdn-content-max: 880px;
|
|
31
|
+
--mkdn-accent: #0969da;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
[data-theme="dark"] {
|
|
35
|
+
--mkdn-text: #e6edf3;
|
|
36
|
+
--mkdn-text-muted: #8d96a0;
|
|
37
|
+
--mkdn-bg: #0d1117;
|
|
38
|
+
--mkdn-bg-alt: #161b22;
|
|
39
|
+
--mkdn-border: #30363d;
|
|
40
|
+
--mkdn-link: #58a6ff;
|
|
41
|
+
--mkdn-link-hover: #79c0ff;
|
|
42
|
+
--mkdn-code-bg: rgba(110, 118, 129, 0.4);
|
|
43
|
+
--mkdn-pre-bg: #161b22;
|
|
44
|
+
--mkdn-accent: #58a6ff;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/* No-JS fallback: respect system preference */
|
|
48
|
+
@media (prefers-color-scheme: dark) {
|
|
49
|
+
:root:not([data-theme]) {
|
|
50
|
+
--mkdn-text: #e6edf3;
|
|
51
|
+
--mkdn-text-muted: #8d96a0;
|
|
52
|
+
--mkdn-bg: #0d1117;
|
|
53
|
+
--mkdn-bg-alt: #161b22;
|
|
54
|
+
--mkdn-border: #30363d;
|
|
55
|
+
--mkdn-link: #58a6ff;
|
|
56
|
+
--mkdn-link-hover: #79c0ff;
|
|
57
|
+
--mkdn-code-bg: rgba(110, 118, 129, 0.4);
|
|
58
|
+
--mkdn-pre-bg: #161b22;
|
|
59
|
+
--mkdn-accent: #58a6ff;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
*, *::before, *::after { box-sizing: border-box; }
|
|
64
|
+
|
|
65
|
+
html { font-size: 16px; -webkit-font-smoothing: antialiased; scroll-behavior: smooth; }
|
|
66
|
+
|
|
67
|
+
body {
|
|
68
|
+
margin: 0;
|
|
69
|
+
font-family: var(--mkdn-font);
|
|
70
|
+
color: var(--mkdn-text);
|
|
71
|
+
background: var(--mkdn-bg);
|
|
72
|
+
line-height: 1.6;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/* ---- Layout ---- */
|
|
76
|
+
.mkdn-layout { display: flex; min-height: 100vh; }
|
|
77
|
+
|
|
78
|
+
.mkdn-nav {
|
|
79
|
+
position: sticky; top: 0;
|
|
80
|
+
width: var(--mkdn-nav-w); height: 100vh;
|
|
81
|
+
overflow-y: auto; flex-shrink: 0;
|
|
82
|
+
border-right: 1px solid var(--mkdn-border);
|
|
83
|
+
background: var(--mkdn-bg-alt);
|
|
84
|
+
padding: 1.5rem 0; font-size: 0.875rem;
|
|
85
|
+
}
|
|
86
|
+
.mkdn-nav-inner { padding: 0 1rem; }
|
|
87
|
+
.mkdn-nav-list, .mkdn-nav-list ul { list-style: none; padding: 0; margin: 0; }
|
|
88
|
+
.mkdn-nav-list a {
|
|
89
|
+
display: block; padding: 0.3rem 0.75rem;
|
|
90
|
+
color: var(--mkdn-text-muted); text-decoration: none;
|
|
91
|
+
border-radius: 6px; transition: background 0.15s, color 0.15s;
|
|
92
|
+
}
|
|
93
|
+
.mkdn-nav-list a:hover { color: var(--mkdn-text); background: var(--mkdn-code-bg); }
|
|
94
|
+
.mkdn-nav-list li.active > a,
|
|
95
|
+
.mkdn-nav-list a[aria-current="page"] {
|
|
96
|
+
color: var(--mkdn-text); background: var(--mkdn-code-bg); font-weight: 600;
|
|
97
|
+
}
|
|
98
|
+
.mkdn-nav-section-title {
|
|
99
|
+
display: block; padding: 0.5rem 0.75rem 0.2rem;
|
|
100
|
+
font-weight: 600; font-size: 0.75rem;
|
|
101
|
+
text-transform: uppercase; letter-spacing: 0.05em;
|
|
102
|
+
color: var(--mkdn-text-muted);
|
|
103
|
+
}
|
|
104
|
+
.mkdn-nav-section > ul { margin-bottom: 0.75rem; }
|
|
105
|
+
|
|
106
|
+
.mkdn-main {
|
|
107
|
+
flex: 1; min-width: 0;
|
|
108
|
+
max-width: var(--mkdn-content-max);
|
|
109
|
+
margin: 0 auto; padding: 2rem 2.5rem;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.mkdn-footer {
|
|
113
|
+
margin-top: 4rem; padding-top: 1.5rem;
|
|
114
|
+
border-top: 1px solid var(--mkdn-border);
|
|
115
|
+
font-size: 0.8rem; color: var(--mkdn-text-muted);
|
|
116
|
+
}
|
|
117
|
+
.mkdn-footer a { color: var(--mkdn-link); }
|
|
118
|
+
|
|
119
|
+
/* ---- Prose typography (shadcn/Radix-inspired, applied to .mkdn-prose) ---- */
|
|
120
|
+
.mkdn-prose h1, .mkdn-prose h2, .mkdn-prose h3,
|
|
121
|
+
.mkdn-prose h4, .mkdn-prose h5, .mkdn-prose h6 {
|
|
122
|
+
scroll-margin-top: 1rem;
|
|
123
|
+
letter-spacing: -0.025em;
|
|
124
|
+
line-height: 1.2;
|
|
125
|
+
}
|
|
126
|
+
.mkdn-prose h1 {
|
|
127
|
+
margin-top: 0; margin-bottom: 0.75em;
|
|
128
|
+
font-size: 2.25rem; font-weight: 800;
|
|
129
|
+
text-wrap: balance;
|
|
130
|
+
}
|
|
131
|
+
.mkdn-prose h2 {
|
|
132
|
+
margin-top: 2.5rem; margin-bottom: 0.5em;
|
|
133
|
+
font-size: 1.875rem; font-weight: 600;
|
|
134
|
+
padding-bottom: 0.5rem; border-bottom: 1px solid var(--mkdn-border);
|
|
135
|
+
}
|
|
136
|
+
.mkdn-prose h2:first-child { margin-top: 0; }
|
|
137
|
+
.mkdn-prose h3 {
|
|
138
|
+
margin-top: 2rem; margin-bottom: 0.5em;
|
|
139
|
+
font-size: 1.5rem; font-weight: 600;
|
|
140
|
+
}
|
|
141
|
+
.mkdn-prose h4 {
|
|
142
|
+
margin-top: 1.5rem; margin-bottom: 0.5em;
|
|
143
|
+
font-size: 1.25rem; font-weight: 600;
|
|
144
|
+
}
|
|
145
|
+
.mkdn-prose h5, .mkdn-prose h6 {
|
|
146
|
+
margin-top: 1.5rem; margin-bottom: 0.5em;
|
|
147
|
+
font-size: 1rem; font-weight: 600;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.mkdn-prose p {
|
|
151
|
+
line-height: 1.75; margin: 0;
|
|
152
|
+
}
|
|
153
|
+
.mkdn-prose p + p,
|
|
154
|
+
.mkdn-prose :not(li) > p:not(:first-child) { margin-top: 1.5rem; }
|
|
155
|
+
|
|
156
|
+
.mkdn-prose a { color: inherit; text-decoration: underline; text-underline-offset: 4px; }
|
|
157
|
+
.mkdn-prose a:hover { color: var(--mkdn-text-muted); }
|
|
158
|
+
|
|
159
|
+
.mkdn-prose a.mkdn-heading-anchor {
|
|
160
|
+
color: var(--mkdn-text-muted); text-decoration: none;
|
|
161
|
+
opacity: 0; margin-left: -1.2em; padding-right: 0.2em;
|
|
162
|
+
font-weight: 400; transition: opacity 0.15s;
|
|
163
|
+
display: inline-flex; align-items: center;
|
|
164
|
+
}
|
|
165
|
+
.mkdn-prose a.mkdn-heading-anchor:hover { text-decoration: none; color: var(--mkdn-text-muted); }
|
|
166
|
+
.mkdn-prose .mkdn-heading-anchor svg { vertical-align: middle; }
|
|
167
|
+
.mkdn-prose h1:hover .mkdn-heading-anchor,
|
|
168
|
+
.mkdn-prose h2:hover .mkdn-heading-anchor,
|
|
169
|
+
.mkdn-prose h3:hover .mkdn-heading-anchor,
|
|
170
|
+
.mkdn-prose h4:hover .mkdn-heading-anchor {
|
|
171
|
+
opacity: 1;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.mkdn-prose code {
|
|
175
|
+
padding: 0.2rem 0.3rem; font-size: 0.875rem; font-weight: 600;
|
|
176
|
+
background: var(--mkdn-code-bg); border-radius: 4px;
|
|
177
|
+
font-family: var(--mkdn-mono);
|
|
178
|
+
}
|
|
179
|
+
.mkdn-prose pre {
|
|
180
|
+
margin: 1.5rem 0; padding: 1rem; overflow-x: auto;
|
|
181
|
+
font-size: 0.875rem; line-height: 1.45;
|
|
182
|
+
background: var(--mkdn-pre-bg);
|
|
183
|
+
border-radius: 8px; border: 1px solid var(--mkdn-border);
|
|
184
|
+
position: relative;
|
|
185
|
+
}
|
|
186
|
+
.mkdn-prose pre code {
|
|
187
|
+
padding: 0; background: transparent; border-radius: 0;
|
|
188
|
+
font-size: inherit; font-weight: 400;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
.mkdn-code-block { position: relative; margin: 1.5rem 0; }
|
|
192
|
+
.mkdn-code-block pre { margin: 0; }
|
|
193
|
+
|
|
194
|
+
.mkdn-prose .mkdn-copy-btn {
|
|
195
|
+
position: absolute; top: 0.4rem; right: 0.4rem;
|
|
196
|
+
padding: 0.25rem 0.5rem; font-size: 0.75rem;
|
|
197
|
+
background: var(--mkdn-bg-alt); border: 1px solid var(--mkdn-border);
|
|
198
|
+
border-radius: 4px; cursor: pointer; color: var(--mkdn-text-muted);
|
|
199
|
+
opacity: 0; transition: opacity 0.15s;
|
|
200
|
+
}
|
|
201
|
+
.mkdn-code-block:hover .mkdn-copy-btn,
|
|
202
|
+
.mkdn-prose pre:hover .mkdn-copy-btn { opacity: 1; }
|
|
203
|
+
|
|
204
|
+
.mkdn-table-wrapper {
|
|
205
|
+
overflow-x: auto; margin: 1.5rem 0;
|
|
206
|
+
border: 1px solid var(--mkdn-border); border-radius: 8px;
|
|
207
|
+
}
|
|
208
|
+
.mkdn-prose table {
|
|
209
|
+
border-collapse: collapse; width: 100%; font-size: 0.875rem;
|
|
210
|
+
}
|
|
211
|
+
.mkdn-prose th, .mkdn-prose td {
|
|
212
|
+
padding: 0.75rem 1rem;
|
|
213
|
+
border-bottom: 1px solid var(--mkdn-border);
|
|
214
|
+
text-align: left;
|
|
215
|
+
}
|
|
216
|
+
.mkdn-prose th { font-weight: 600; }
|
|
217
|
+
.mkdn-prose tr:last-child td { border-bottom: none; }
|
|
218
|
+
.mkdn-prose tbody tr:nth-child(even) { background: var(--mkdn-bg-alt); }
|
|
219
|
+
.mkdn-prose td[align="center"], .mkdn-prose th[align="center"] { text-align: center; }
|
|
220
|
+
.mkdn-prose td[align="right"], .mkdn-prose th[align="right"] { text-align: right; }
|
|
221
|
+
|
|
222
|
+
.mkdn-prose ul, .mkdn-prose ol { padding-left: 1.5rem; margin: 1.5rem 0; }
|
|
223
|
+
.mkdn-prose li { margin-top: 0.5rem; line-height: 1.75; }
|
|
224
|
+
.mkdn-prose li > p { margin: 0; }
|
|
225
|
+
|
|
226
|
+
.mkdn-prose ul:has(input[type="checkbox"]) { list-style: none; padding-left: 0; }
|
|
227
|
+
.mkdn-prose input[type="checkbox"] { margin-right: 0.5em; }
|
|
228
|
+
|
|
229
|
+
.mkdn-prose blockquote {
|
|
230
|
+
margin: 1.5rem 0; padding-left: 1.5rem;
|
|
231
|
+
border-left: 2px solid var(--mkdn-border);
|
|
232
|
+
font-style: italic;
|
|
233
|
+
}
|
|
234
|
+
.mkdn-prose blockquote > p:last-child { margin-bottom: 0; }
|
|
235
|
+
|
|
236
|
+
.mkdn-prose img { max-width: 100%; height: auto; border-radius: 8px; }
|
|
237
|
+
|
|
238
|
+
.mkdn-prose hr { border: none; border-top: 1px solid var(--mkdn-border); margin: 2rem 0; }
|
|
239
|
+
|
|
240
|
+
.mkdn-prose > :first-child { margin-top: 0; }
|
|
241
|
+
|
|
242
|
+
/* ---- GFM Alerts ---- */
|
|
243
|
+
.mkdn-prose .markdown-alert {
|
|
244
|
+
margin: 1.5rem 0; padding: 0.75rem 1rem;
|
|
245
|
+
border-left: 4px solid var(--mkdn-border);
|
|
246
|
+
border-radius: 4px;
|
|
247
|
+
}
|
|
248
|
+
.mkdn-prose .markdown-alert > :last-child { margin-bottom: 0; }
|
|
249
|
+
.mkdn-prose .markdown-alert-title {
|
|
250
|
+
display: flex; align-items: center; gap: 0.5rem;
|
|
251
|
+
font-weight: 600; margin-bottom: 0.25rem;
|
|
252
|
+
}
|
|
253
|
+
.mkdn-prose .markdown-alert-title svg { flex-shrink: 0; fill: currentColor; }
|
|
254
|
+
|
|
255
|
+
.mkdn-prose .markdown-alert-note { border-left-color: #0969da; }
|
|
256
|
+
.mkdn-prose .markdown-alert-note .markdown-alert-title { color: #0969da; }
|
|
257
|
+
[data-theme="dark"] .mkdn-prose .markdown-alert-note { border-left-color: #58a6ff; }
|
|
258
|
+
[data-theme="dark"] .mkdn-prose .markdown-alert-note .markdown-alert-title { color: #58a6ff; }
|
|
259
|
+
|
|
260
|
+
.mkdn-prose .markdown-alert-tip { border-left-color: #1a7f37; }
|
|
261
|
+
.mkdn-prose .markdown-alert-tip .markdown-alert-title { color: #1a7f37; }
|
|
262
|
+
[data-theme="dark"] .mkdn-prose .markdown-alert-tip { border-left-color: #3fb950; }
|
|
263
|
+
[data-theme="dark"] .mkdn-prose .markdown-alert-tip .markdown-alert-title { color: #3fb950; }
|
|
264
|
+
|
|
265
|
+
.mkdn-prose .markdown-alert-important { border-left-color: #8250df; }
|
|
266
|
+
.mkdn-prose .markdown-alert-important .markdown-alert-title { color: #8250df; }
|
|
267
|
+
[data-theme="dark"] .mkdn-prose .markdown-alert-important { border-left-color: #a371f7; }
|
|
268
|
+
[data-theme="dark"] .mkdn-prose .markdown-alert-important .markdown-alert-title { color: #a371f7; }
|
|
269
|
+
|
|
270
|
+
.mkdn-prose .markdown-alert-warning { border-left-color: #9a6700; }
|
|
271
|
+
.mkdn-prose .markdown-alert-warning .markdown-alert-title { color: #9a6700; }
|
|
272
|
+
[data-theme="dark"] .mkdn-prose .markdown-alert-warning { border-left-color: #d29922; }
|
|
273
|
+
[data-theme="dark"] .mkdn-prose .markdown-alert-warning .markdown-alert-title { color: #d29922; }
|
|
274
|
+
|
|
275
|
+
.mkdn-prose .markdown-alert-caution { border-left-color: #cf222e; }
|
|
276
|
+
.mkdn-prose .markdown-alert-caution .markdown-alert-title { color: #cf222e; }
|
|
277
|
+
[data-theme="dark"] .mkdn-prose .markdown-alert-caution { border-left-color: #f85149; }
|
|
278
|
+
[data-theme="dark"] .mkdn-prose .markdown-alert-caution .markdown-alert-title { color: #f85149; }
|
|
279
|
+
|
|
280
|
+
/* No-JS fallback for alert colors */
|
|
281
|
+
@media (prefers-color-scheme: dark) {
|
|
282
|
+
:root:not([data-theme]) .mkdn-prose .markdown-alert-note { border-left-color: #58a6ff; }
|
|
283
|
+
:root:not([data-theme]) .mkdn-prose .markdown-alert-note .markdown-alert-title { color: #58a6ff; }
|
|
284
|
+
:root:not([data-theme]) .mkdn-prose .markdown-alert-tip { border-left-color: #3fb950; }
|
|
285
|
+
:root:not([data-theme]) .mkdn-prose .markdown-alert-tip .markdown-alert-title { color: #3fb950; }
|
|
286
|
+
:root:not([data-theme]) .mkdn-prose .markdown-alert-important { border-left-color: #a371f7; }
|
|
287
|
+
:root:not([data-theme]) .mkdn-prose .markdown-alert-important .markdown-alert-title { color: #a371f7; }
|
|
288
|
+
:root:not([data-theme]) .mkdn-prose .markdown-alert-warning { border-left-color: #d29922; }
|
|
289
|
+
:root:not([data-theme]) .mkdn-prose .markdown-alert-warning .markdown-alert-title { color: #d29922; }
|
|
290
|
+
:root:not([data-theme]) .mkdn-prose .markdown-alert-caution { border-left-color: #f85149; }
|
|
291
|
+
:root:not([data-theme]) .mkdn-prose .markdown-alert-caution .markdown-alert-title { color: #f85149; }
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
/* ---- Collapsible sections ---- */
|
|
295
|
+
.mkdn-prose details {
|
|
296
|
+
margin: 1.5rem 0; padding: 0.75rem 1rem;
|
|
297
|
+
border: 1px solid var(--mkdn-border); border-radius: 8px;
|
|
298
|
+
}
|
|
299
|
+
.mkdn-prose details > summary {
|
|
300
|
+
cursor: pointer; font-weight: 600;
|
|
301
|
+
list-style: none; display: flex; align-items: center; gap: 0.5rem;
|
|
302
|
+
}
|
|
303
|
+
.mkdn-prose details > summary::before {
|
|
304
|
+
content: ''; display: inline-block;
|
|
305
|
+
width: 0; height: 0;
|
|
306
|
+
border-left: 6px solid var(--mkdn-text-muted);
|
|
307
|
+
border-top: 4px solid transparent;
|
|
308
|
+
border-bottom: 4px solid transparent;
|
|
309
|
+
transition: transform 0.2s;
|
|
310
|
+
}
|
|
311
|
+
.mkdn-prose details > summary::-webkit-details-marker { display: none; }
|
|
312
|
+
.mkdn-prose details[open] > summary::before { transform: rotate(90deg); }
|
|
313
|
+
.mkdn-prose details[open] > summary { margin-bottom: 0.75rem; }
|
|
314
|
+
.mkdn-prose details > :last-child { margin-bottom: 0; }
|
|
315
|
+
|
|
316
|
+
/* Shiki syntax highlighting dual-theme support */
|
|
317
|
+
.mkdn-prose pre.shiki { background: var(--mkdn-pre-bg) !important; }
|
|
318
|
+
|
|
319
|
+
.shiki span { color: var(--shiki-light) !important; }
|
|
320
|
+
[data-theme="dark"] .shiki span { color: var(--shiki-dark) !important; }
|
|
321
|
+
@media (prefers-color-scheme: dark) {
|
|
322
|
+
:root:not([data-theme]) .shiki span { color: var(--shiki-dark) !important; }
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
/* ---- Theme toggle button ---- */
|
|
326
|
+
.mkdn-theme-toggle {
|
|
327
|
+
position: fixed; top: 0.75rem; right: 0.75rem; z-index: 100;
|
|
328
|
+
width: 36px; height: 36px;
|
|
329
|
+
display: flex; align-items: center; justify-content: center;
|
|
330
|
+
background: var(--mkdn-bg-alt); border: 1px solid var(--mkdn-border);
|
|
331
|
+
border-radius: 8px; cursor: pointer; color: var(--mkdn-text-muted);
|
|
332
|
+
transition: color 0.2s, background 0.2s, border-color 0.2s;
|
|
333
|
+
}
|
|
334
|
+
.mkdn-theme-toggle:hover { color: var(--mkdn-text); background: var(--mkdn-code-bg); }
|
|
335
|
+
|
|
336
|
+
.mkdn-theme-toggle .mkdn-icon-sun,
|
|
337
|
+
.mkdn-theme-toggle .mkdn-icon-moon {
|
|
338
|
+
position: absolute;
|
|
339
|
+
transition: opacity 0.4s ease, transform 0.5s ease;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/* Light mode: show sun, hide moon */
|
|
343
|
+
.mkdn-theme-toggle .mkdn-icon-sun { opacity: 1; transform: rotate(0deg) scale(1); }
|
|
344
|
+
.mkdn-theme-toggle .mkdn-icon-moon { opacity: 0; transform: rotate(-90deg) scale(0.5); }
|
|
345
|
+
|
|
346
|
+
/* Dark mode: show moon, hide sun */
|
|
347
|
+
[data-theme="dark"] .mkdn-theme-toggle .mkdn-icon-sun { opacity: 0; transform: rotate(90deg) scale(0.5); }
|
|
348
|
+
[data-theme="dark"] .mkdn-theme-toggle .mkdn-icon-moon { opacity: 1; transform: rotate(0deg) scale(1); }
|
|
349
|
+
@media (prefers-color-scheme: dark) {
|
|
350
|
+
:root:not([data-theme]) .mkdn-theme-toggle .mkdn-icon-sun { opacity: 0; transform: rotate(90deg) scale(0.5); }
|
|
351
|
+
:root:not([data-theme]) .mkdn-theme-toggle .mkdn-icon-moon { opacity: 1; transform: rotate(0deg) scale(1); }
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/* View Transition: circular reveal animation */
|
|
355
|
+
::view-transition-old(root) { animation: none; z-index: -1; }
|
|
356
|
+
::view-transition-new(root) {
|
|
357
|
+
animation: mkdn-theme-reveal 0.5s ease-out;
|
|
358
|
+
}
|
|
359
|
+
@keyframes mkdn-theme-reveal {
|
|
360
|
+
from { clip-path: circle(0% at var(--mkdn-toggle-x, calc(100% - 30px)) var(--mkdn-toggle-y, 30px)); }
|
|
361
|
+
to { clip-path: circle(150% at var(--mkdn-toggle-x, calc(100% - 30px)) var(--mkdn-toggle-y, 30px)); }
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/* Mermaid diagrams */
|
|
365
|
+
.mkdn-mermaid { margin: 1em 0; text-align: center; }
|
|
366
|
+
.mkdn-mermaid svg { max-width: 100%; }
|
|
367
|
+
|
|
368
|
+
@media (max-width: 768px) {
|
|
369
|
+
.mkdn-layout { flex-direction: column; }
|
|
370
|
+
.mkdn-nav {
|
|
371
|
+
position: static; width: 100%; height: auto;
|
|
372
|
+
border-right: none; border-bottom: 1px solid var(--mkdn-border);
|
|
373
|
+
padding: 1rem 0;
|
|
374
|
+
}
|
|
375
|
+
.mkdn-main { padding: 1.5rem 1rem; }
|
|
376
|
+
}
|
|
377
|
+
`.trim()
|