@rahuldshetty/inscribe 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/README.md +65 -0
- package/cli/api/builder.ts +145 -0
- package/cli/api/inscribe_reader.ts +14 -0
- package/cli/api/renderer.ts +199 -0
- package/cli/api/server.ts +144 -0
- package/cli/api/theme_resolver.ts +31 -0
- package/cli/index.ts +127 -0
- package/cli/schemas/blog.ts +23 -0
- package/cli/schemas/folder.ts +8 -0
- package/cli/schemas/inscribe.ts +14 -0
- package/cli/utils/markdown.ts +72 -0
- package/cli/utils/minifier.ts +20 -0
- package/dist/index.js +102296 -0
- package/package.json +71 -0
- package/template/blogs/doc1.md +16 -0
- package/template/blogs/doc2.md +16 -0
- package/template/blogs/sample.mdx +22 -0
- package/template/docs/hello-docs.md +8 -0
- package/template/inscribe.yaml +5 -0
- package/template/layouts/base.njk +113 -0
- package/template/layouts/blog.njk +79 -0
- package/template/layouts/blog_index.njk +83 -0
- package/template/layouts/doc.njk +106 -0
- package/template/layouts/doc_index.njk +140 -0
- package/template/layouts/home.njk +28 -0
- package/template/layouts/partials/footer.njk +7 -0
- package/template/layouts/partials/header.njk +25 -0
- package/template/themes/default.css +41 -0
- package/template/themes/medium.css +39 -0
- package/template/themes/nord.css +38 -0
- package/template/themes/sepia.css +39 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
{% extends "base.njk" %}
|
|
2
|
+
|
|
3
|
+
{% block title %}{{ config.title }} — Blog{% endblock %}
|
|
4
|
+
|
|
5
|
+
{% block content %}
|
|
6
|
+
<div class="min-h-screen bg-[var(--color-bg)] w-full max-w-[1400px] mx-auto flex flex-col md:flex-row md:px-8">
|
|
7
|
+
|
|
8
|
+
{% if config.show_doc_nav !== false %}
|
|
9
|
+
{# Left Navigation Sidebar #}
|
|
10
|
+
<aside class="w-full md:w-64 flex-shrink-0 md:border-r border-[var(--color-border)] py-8 md:pr-8 px-6 md:px-0">
|
|
11
|
+
<nav class="sticky top-8 overflow-y-auto overflow-x-hidden max-h-[calc(100vh-4rem)]">
|
|
12
|
+
{% macro renderNode(node, depth, currentDirPath) %}
|
|
13
|
+
{% if node.title %}
|
|
14
|
+
<details class="group" {% if currentDirPath == node.path or currentDirPath.startsWith(node.path + '/') %}open{% endif %}>
|
|
15
|
+
<summary class="flex items-center justify-between cursor-pointer list-none py-1.5 hover:bg-[var(--color-tag-bg)] rounded-md transition-all"
|
|
16
|
+
style="padding-left: {{ depth * 16 + 8 }}px">
|
|
17
|
+
<span class="text-sm font-bold text-[var(--color-text)]">
|
|
18
|
+
{{ node.title }}
|
|
19
|
+
</span>
|
|
20
|
+
<svg xmlns="http://www.w3.org/2000/svg" class="w-3.5 h-3.5 text-[var(--color-muted)] transition-transform group-open:rotate-180" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
21
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7" />
|
|
22
|
+
</svg>
|
|
23
|
+
</summary>
|
|
24
|
+
<div class="mt-0.5">
|
|
25
|
+
{% for item in node.items %}
|
|
26
|
+
{% if item.type == 'folder' %}
|
|
27
|
+
{{ renderNode(item.node, depth + 1, currentDirPath) }}
|
|
28
|
+
{% else %}
|
|
29
|
+
<div class="rounded-md hover:bg-[var(--color-tag-bg)] transition-all">
|
|
30
|
+
<a href="/doc/{{ item.post.metadata.slug }}"
|
|
31
|
+
style="padding-left: {{ (depth + 1) * 16 + 8 }}px"
|
|
32
|
+
class="text-sm py-1.5 block text-[var(--color-muted)] hover:text-[var(--color-text)] transition-colors">
|
|
33
|
+
{{ item.post.metadata.title }}
|
|
34
|
+
</a>
|
|
35
|
+
</div>
|
|
36
|
+
{% endif %}
|
|
37
|
+
{% endfor %}
|
|
38
|
+
</div>
|
|
39
|
+
</details>
|
|
40
|
+
{% else %}
|
|
41
|
+
{# Root node - just render items directly #}
|
|
42
|
+
{% for item in node.items %}
|
|
43
|
+
{% if item.type == 'folder' %}
|
|
44
|
+
{{ renderNode(item.node, depth, currentDirPath) }}
|
|
45
|
+
{% else %}
|
|
46
|
+
<div class="rounded-md hover:bg-[var(--color-tag-bg)] transition-all">
|
|
47
|
+
<a href="/doc/{{ item.post.metadata.slug }}"
|
|
48
|
+
style="padding-left: {{ depth * 16 + 8 }}px"
|
|
49
|
+
class="text-sm py-1.5 block text-[var(--color-muted)] hover:text-[var(--color-text)] transition-colors">
|
|
50
|
+
{{ item.post.metadata.title }}
|
|
51
|
+
</a>
|
|
52
|
+
</div>
|
|
53
|
+
{% endif %}
|
|
54
|
+
{% endfor %}
|
|
55
|
+
{% endif %}
|
|
56
|
+
{% endmacro %}
|
|
57
|
+
|
|
58
|
+
{% for rootNode in sidebarTree %}
|
|
59
|
+
{{ renderNode(rootNode, 0, currentDirPath) }}
|
|
60
|
+
{% endfor %}
|
|
61
|
+
</nav>
|
|
62
|
+
</aside>
|
|
63
|
+
{% endif %}
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
{# Post List #}
|
|
67
|
+
<main class="flex-1 min-w-0 px-6 py-10 lg:px-12 {% if config.show_doc_nav === false %}max-w-2xl mx-auto{% else %}max-w-3xl{% endif %}">
|
|
68
|
+
|
|
69
|
+
{% if docs and docs.length %}
|
|
70
|
+
<p class="text-xs font-semibold uppercase tracking-widest text-[var(--color-muted)] mb-6">
|
|
71
|
+
{{ docs.length }} doc{% if docs.length !== 1 %}s{% endif %}
|
|
72
|
+
</p>
|
|
73
|
+
|
|
74
|
+
<ul class="divide-y divide-[var(--color-border)]">
|
|
75
|
+
{% for item in docs %}
|
|
76
|
+
<li>
|
|
77
|
+
<a href="/docs/{{ item.metadata.slug }}"
|
|
78
|
+
class="group flex items-start justify-between gap-6 py-7 hover:no-underline">
|
|
79
|
+
|
|
80
|
+
{# Text content #}
|
|
81
|
+
<div class="flex-1 min-w-0">
|
|
82
|
+
<h2 class="text-xl font-bold text-[var(--color-text)] leading-snug tracking-tight group-hover:text-[var(--color-muted)] transition-colors duration-150 truncate">
|
|
83
|
+
{{ item.metadata.title }}
|
|
84
|
+
</h2>
|
|
85
|
+
|
|
86
|
+
{% if item.metadata.description or item.metadata.excerpt %}
|
|
87
|
+
<p class="mt-1.5 text-sm text-[var(--color-muted)] line-clamp-2 leading-relaxed">
|
|
88
|
+
{{ item.metadata.description or item.metadata.excerpt }}
|
|
89
|
+
</p>
|
|
90
|
+
{% endif %}
|
|
91
|
+
|
|
92
|
+
<div class="flex items-center gap-3 mt-3">
|
|
93
|
+
{% if item.metadata.author %}
|
|
94
|
+
<span class="text-xs text-[var(--color-muted)] font-medium">{{ item.metadata.author }}</span>
|
|
95
|
+
<span class="text-[var(--color-border)]">·</span>
|
|
96
|
+
{% endif %}
|
|
97
|
+
<span class="text-xs text-[var(--color-muted)]">{{ item.metadata.date or 'Undated' }}</span>
|
|
98
|
+
|
|
99
|
+
{# Tags — show first 2 #}
|
|
100
|
+
{% if item.metadata.tags and item.metadata.tags.length %}
|
|
101
|
+
<span class="text-[var(--color-border)]">·</span>
|
|
102
|
+
{% for tag in item.metadata.tags %}
|
|
103
|
+
{% if loop.index <= 2 %}
|
|
104
|
+
<span class="inline-block text-xs px-2 py-0.5 rounded-full bg-[var(--color-tag-bg)] text-[var(--color-tag-text)]">{{ tag }}</span>
|
|
105
|
+
{% endif %}
|
|
106
|
+
{% endfor %}
|
|
107
|
+
{% endif %}
|
|
108
|
+
</div>
|
|
109
|
+
</div>
|
|
110
|
+
|
|
111
|
+
{# Cover thumbnail #}
|
|
112
|
+
{% if item.metadata.cover %}
|
|
113
|
+
<div class="flex-shrink-0 w-24 h-16 sm:w-32 sm:h-20 rounded-lg overflow-hidden bg-[var(--color-tag-bg)]">
|
|
114
|
+
<img
|
|
115
|
+
src="{{ item.metadata.cover }}"
|
|
116
|
+
alt="{{ item.metadata.title }}"
|
|
117
|
+
class="w-full h-full object-cover group-hover:scale-105 transition-transform duration-300"
|
|
118
|
+
/>
|
|
119
|
+
</div>
|
|
120
|
+
{% endif %}
|
|
121
|
+
</a>
|
|
122
|
+
</li>
|
|
123
|
+
{% endfor %}
|
|
124
|
+
</ul>
|
|
125
|
+
|
|
126
|
+
{% else %}
|
|
127
|
+
{# Empty state #}
|
|
128
|
+
<div class="text-center py-24">
|
|
129
|
+
<div class="w-14 h-14 rounded-2xl bg-[var(--color-tag-bg)] flex items-center justify-center mx-auto mb-4">
|
|
130
|
+
<svg xmlns="http://www.w3.org/2000/svg" class="w-7 h-7 text-[var(--color-muted)]" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5">
|
|
131
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25m0 12.75h7.5m-7.5 3H12M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z" />
|
|
132
|
+
</svg>
|
|
133
|
+
</div>
|
|
134
|
+
<h2 class="text-lg font-semibold text-[var(--color-text)] mb-1">No docs yet</h2>
|
|
135
|
+
<p class="text-sm text-[var(--color-muted)]">Start writing your first doc.</p>
|
|
136
|
+
</div>
|
|
137
|
+
{% endif %}
|
|
138
|
+
</main>
|
|
139
|
+
</div>
|
|
140
|
+
{% endblock %}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{% extends "base.njk" %}
|
|
2
|
+
|
|
3
|
+
{% block title %}{{ config.title }}{% endblock %}
|
|
4
|
+
|
|
5
|
+
{% block content %}
|
|
6
|
+
<div class="min-h-[85vh] flex flex-col items-center justify-center text-center px-6">
|
|
7
|
+
<div class="max-w-3xl">
|
|
8
|
+
<h1 class="text-5xl sm:text-7xl font-extrabold tracking-tight text-[var(--color-text)] mb-8">
|
|
9
|
+
{{ config.title }}
|
|
10
|
+
</h1>
|
|
11
|
+
<p class="text-xl sm:text-2xl text-[var(--color-muted)] mb-12 leading-relaxed">
|
|
12
|
+
{{ config.tagline }}
|
|
13
|
+
</p>
|
|
14
|
+
<div class="flex flex-col sm:flex-row gap-4 items-center justify-center">
|
|
15
|
+
{% if navState.hasBlog %}
|
|
16
|
+
<a href="/blogs/" class="px-8 py-3 w-full sm:w-auto text-lg font-medium text-[var(--color-bg)] bg-[var(--color-text)] rounded-full hover:opacity-90 transition-opacity">
|
|
17
|
+
Read the Blog
|
|
18
|
+
</a>
|
|
19
|
+
{% endif %}
|
|
20
|
+
{% if navState.hasDocs %}
|
|
21
|
+
<a href="/docs/" class="px-8 py-3 w-full sm:w-auto text-lg font-medium text-[var(--color-text)] bg-[var(--color-border)] rounded-full hover:bg-[var(--color-muted)] hover:text-white transition-colors">
|
|
22
|
+
Documentation
|
|
23
|
+
</a>
|
|
24
|
+
{% endif %}
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
{% endblock %}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<footer class="mt-auto py-6 border-t border-[var(--color-border)]">
|
|
2
|
+
<div class="max-w-3xl mx-auto px-6 text-center">
|
|
3
|
+
<p class="text-sm text-[var(--color-muted)]">
|
|
4
|
+
Made with <a href="https://github.com/rahuldshetty/inscribe" class="text-[var(--color-muted)] hover:text-[var(--color-text)] underline underline-offset-2 transition-colors" target="_blank" rel="noopener">Inscribe</a>
|
|
5
|
+
</p>
|
|
6
|
+
</div>
|
|
7
|
+
</footer>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{% set showHeader = navState.hasHome or navState.hasBlog or navState.hasDocs %}
|
|
2
|
+
{% if showHeader %}
|
|
3
|
+
<nav class="sticky top-0 z-50 border-b border-[var(--color-border)] backdrop-blur-sm"
|
|
4
|
+
style="background-color: var(--color-bg-nav);">
|
|
5
|
+
<div class="max-w-4xl mx-auto px-6 h-14 flex items-center justify-between">
|
|
6
|
+
<a href="/" class="text-lg font-bold text-[var(--color-text)] flex items-center gap-2 hover:opacity-80 transition-opacity">
|
|
7
|
+
<svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 text-[var(--color-accent)]" viewBox="0 0 20 20" fill="currentColor">
|
|
8
|
+
<path fill-rule="evenodd" d="M4 4a2 2 0 012-2h8a2 2 0 012 2v12a1 1 0 110 2h-3a1 1 0 01-1-1v-2a1 1 0 00-1-1H9a1 1 0 00-1 1v2a1 1 0 01-1 1H4a1 1 0 110-2V4zm3 1h2v2H7V5zm2 4H7v2h2V9zm2-4h2v2h-2V5zm2 4h-2v2h2V9z" clip-rule="evenodd" />
|
|
9
|
+
</svg>
|
|
10
|
+
{{ config.title }}
|
|
11
|
+
</a>
|
|
12
|
+
<div class="flex gap-6 items-center">
|
|
13
|
+
{% if navState.hasHome %}
|
|
14
|
+
<a href="/" class="text-sm font-medium text-[var(--color-muted)] hover:text-[var(--color-accent)] transition-colors">Home</a>
|
|
15
|
+
{% endif %}
|
|
16
|
+
{% if navState.hasDocs %}
|
|
17
|
+
<a href="/docs/" class="text-sm font-medium text-[var(--color-muted)] hover:text-[var(--color-accent)] transition-colors">Docs</a>
|
|
18
|
+
{% endif %}
|
|
19
|
+
{% if navState.hasBlog %}
|
|
20
|
+
<a href="/blogs/" class="text-sm font-medium text-[var(--color-muted)] hover:text-[var(--color-accent)] transition-colors">Blogs</a>
|
|
21
|
+
{% endif %}
|
|
22
|
+
</div>
|
|
23
|
+
</div>
|
|
24
|
+
</nav>
|
|
25
|
+
{% endif %}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
Inscribe Theme: Default
|
|
3
|
+
Uses the CSS light-dark() function — no duplication between light & dark.
|
|
4
|
+
The browser picks the correct value based on color-scheme.
|
|
5
|
+
|
|
6
|
+
To override via JS toggle, set data-theme="dark" or data-theme="light"
|
|
7
|
+
on the <html> element — no variable values need to be repeated.
|
|
8
|
+
========================================================================== */
|
|
9
|
+
|
|
10
|
+
:root {
|
|
11
|
+
color-scheme: light dark;
|
|
12
|
+
|
|
13
|
+
/* Backgrounds */
|
|
14
|
+
--color-bg: light-dark(#ffffff, #0f172a);
|
|
15
|
+
--color-bg-nav: light-dark(rgba(255, 255, 255, 0.90), rgba(15, 23, 42, 0.90));
|
|
16
|
+
|
|
17
|
+
/* Text */
|
|
18
|
+
--color-text: light-dark(#0f172a, #f8fafc);
|
|
19
|
+
--color-muted: light-dark(#64748b, #94a3b8);
|
|
20
|
+
|
|
21
|
+
/* Borders & dividers */
|
|
22
|
+
--color-border: light-dark(#e2e8f0, #1e293b);
|
|
23
|
+
|
|
24
|
+
/* Links & accents — blue in both modes for clear visibility */
|
|
25
|
+
--color-accent: light-dark(#2563eb, #60a5fa);
|
|
26
|
+
|
|
27
|
+
/* Tag / badge pills */
|
|
28
|
+
--color-tag-bg: light-dark(#f1f5f9, #1e293b);
|
|
29
|
+
--color-tag-text: light-dark(#475569, #cbd5e1);
|
|
30
|
+
|
|
31
|
+
/* Inline code */
|
|
32
|
+
--color-code-bg: light-dark(#f1f5f9, #1e293b);
|
|
33
|
+
|
|
34
|
+
/* Code blocks */
|
|
35
|
+
--color-pre-bg: light-dark(#0f172a, #020617);
|
|
36
|
+
--color-pre-text: light-dark(#e2e8f0, #e2e8f0);
|
|
37
|
+
|
|
38
|
+
/* Fonts */
|
|
39
|
+
--font-sans: 'Inter', sans-serif;
|
|
40
|
+
--font-serif: 'Merriweather', Georgia, serif;
|
|
41
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
Inscribe Theme: Medium
|
|
3
|
+
Inspired by Medium.com: Clean serif fonts, high contrast text,
|
|
4
|
+
minimal borders.
|
|
5
|
+
========================================================================== */
|
|
6
|
+
|
|
7
|
+
:root {
|
|
8
|
+
color-scheme: light dark;
|
|
9
|
+
|
|
10
|
+
/* Backgrounds */
|
|
11
|
+
--color-bg: light-dark(#ffffff, #121212);
|
|
12
|
+
--color-bg-nav: light-dark(rgba(255, 255, 255, 0.95), rgba(18, 18, 18, 0.95));
|
|
13
|
+
|
|
14
|
+
/* Text */
|
|
15
|
+
--color-text: light-dark(#242424, #f2f2f2);
|
|
16
|
+
--color-muted: light-dark(#6b6b6b, #a8a8a8); /* Lighter gray for dark mode meta */
|
|
17
|
+
|
|
18
|
+
/* Borders & dividers: very subtle in medium */
|
|
19
|
+
--color-border: light-dark(#f2f2f2, #242424);
|
|
20
|
+
|
|
21
|
+
/* Links & accents: pure black/white or a soft green */
|
|
22
|
+
--color-accent: light-dark(#000000, #ffffff);
|
|
23
|
+
|
|
24
|
+
/* Tag / badge pills */
|
|
25
|
+
--color-tag-bg: light-dark(#f2f2f2, #292929);
|
|
26
|
+
--color-tag-text: light-dark(#242424, #e2e8f0);
|
|
27
|
+
|
|
28
|
+
/* Inline code */
|
|
29
|
+
--color-code-bg: light-dark(#f9f9f9, #1e1e1e);
|
|
30
|
+
|
|
31
|
+
/* Code blocks */
|
|
32
|
+
--color-pre-bg: light-dark(#f9f9f9, #1e1e1e);
|
|
33
|
+
--color-pre-text: light-dark(#242424, #f2f2f2);
|
|
34
|
+
|
|
35
|
+
/* Fonts: Fallback-serif as primary for that editorial look */
|
|
36
|
+
--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
|
|
37
|
+
--font-serif: 'Merriweather', 'Charter', 'Georgia', serif;
|
|
38
|
+
}
|
|
39
|
+
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
Inscribe Theme: Nord
|
|
3
|
+
Inspired by the famous Nord color palette. Frosty blues, muted grays,
|
|
4
|
+
very pleasant and relaxed for developer blogs.
|
|
5
|
+
========================================================================== */
|
|
6
|
+
|
|
7
|
+
:root {
|
|
8
|
+
color-scheme: light dark;
|
|
9
|
+
|
|
10
|
+
/* Backgrounds (Snow Storm light, Nord dark) */
|
|
11
|
+
--color-bg: light-dark(#eceff4, #2e3440);
|
|
12
|
+
--color-bg-nav: light-dark(rgba(236, 239, 244, 0.90), rgba(46, 52, 64, 0.90));
|
|
13
|
+
|
|
14
|
+
/* Text */
|
|
15
|
+
--color-text: light-dark(#2e3440, #d8dee9);
|
|
16
|
+
--color-muted: light-dark(#4c566a, #4c566a);
|
|
17
|
+
|
|
18
|
+
/* Borders & dividers */
|
|
19
|
+
--color-border: light-dark(#d8dee9, #3b4252);
|
|
20
|
+
|
|
21
|
+
/* Links & accents: Frost blue */
|
|
22
|
+
--color-accent: light-dark(#5e81ac, #81a1c1);
|
|
23
|
+
|
|
24
|
+
/* Tag / badge pills */
|
|
25
|
+
--color-tag-bg: light-dark(#e5e9f0, #434c5e);
|
|
26
|
+
--color-tag-text: light-dark(#3b4252, #eceff4);
|
|
27
|
+
|
|
28
|
+
/* Inline code */
|
|
29
|
+
--color-code-bg: light-dark(#e5e9f0, #3b4252);
|
|
30
|
+
|
|
31
|
+
/* Code blocks */
|
|
32
|
+
--color-pre-bg: light-dark(#2e3440, #242933); /* Slightly darker than bg in dark mode */
|
|
33
|
+
--color-pre-text: light-dark(#eceff4, #d8dee9);
|
|
34
|
+
|
|
35
|
+
/* Fonts: Mono-ish sans-serif vibe */
|
|
36
|
+
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
|
|
37
|
+
--font-serif: 'Merriweather', serif;
|
|
38
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
Inscribe Theme: Sepia
|
|
3
|
+
A warm, reading-focused theme with low contrast to reduce eye strain.
|
|
4
|
+
Dark mode shifts to a warm charcoal rather than pure black/blue.
|
|
5
|
+
========================================================================== */
|
|
6
|
+
|
|
7
|
+
:root {
|
|
8
|
+
color-scheme: light dark;
|
|
9
|
+
|
|
10
|
+
/* Backgrounds: Warm cream (light), Warm charcoal (dark) */
|
|
11
|
+
--color-bg: light-dark(#fbf0d9, #1c1b18);
|
|
12
|
+
--color-bg-nav: light-dark(rgba(251, 240, 217, 0.90), rgba(28, 27, 24, 0.90));
|
|
13
|
+
|
|
14
|
+
/* Text: Deep brown (light), Soft warm light (dark) */
|
|
15
|
+
--color-text: light-dark(#433422, #cecdc3);
|
|
16
|
+
--color-muted: light-dark(#8f8373, #87857e);
|
|
17
|
+
|
|
18
|
+
/* Borders & dividers */
|
|
19
|
+
--color-border: light-dark(#e6dac3, #383531);
|
|
20
|
+
|
|
21
|
+
/* Links & accents: Warm red/orange */
|
|
22
|
+
--color-accent: light-dark(#b24a3e, #d36a5d);
|
|
23
|
+
|
|
24
|
+
/* Tag / badge pills */
|
|
25
|
+
--color-tag-bg: light-dark(#eedfc5, #2d2a26);
|
|
26
|
+
--color-tag-text: light-dark(#5c4c3b, #b5b3a8);
|
|
27
|
+
|
|
28
|
+
/* Inline code */
|
|
29
|
+
--color-code-bg: light-dark(#eedfc5, #2d2a26);
|
|
30
|
+
|
|
31
|
+
/* Code blocks */
|
|
32
|
+
--color-pre-bg: light-dark(#433422, #111110);
|
|
33
|
+
--color-pre-text: light-dark(#fbf0d9, #cecdc3);
|
|
34
|
+
|
|
35
|
+
/* Fonts */
|
|
36
|
+
--font-sans: 'Inter', sans-serif;
|
|
37
|
+
--font-serif: 'Merriweather', Georgia, serif;
|
|
38
|
+
}
|
|
39
|
+
|