jekyll-theme-zer0 1.3.0 → 1.4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '069f0c330f3b5a4b0fac6331452c7d9d66c5f92308ad9ffef53454e03602efd3'
4
- data.tar.gz: 15d1bdacec707645bdc406bab1229253684bf23370f949a7bb6d66b7390aa563
3
+ metadata.gz: 398f5967ae3eedcc43ca6b6ef344d62207ab1d36a457203ab7023dd926a9742b
4
+ data.tar.gz: b4a234aef6bbb109ae6410a46d2c48a292fdd048fa47729bbe6ac728c92f20e1
5
5
  SHA512:
6
- metadata.gz: 0c8788ad1dc1ba8af7ca402d5f2643eaab1c47c12307a265d427547b00678ce1115482552aa1090d6d560881282ee70eb6b2674b8bb41e03b9f4d302ce2ba47c
7
- data.tar.gz: dc0b3a38a9f1f9d7dfb272ca3c72634845c9bc2295f198b6731e43249f3ecd2a6610a1ddaf92cb20457443c71e337b4ced9352fe85d41eb641604e12d2eba426
6
+ metadata.gz: 12f0348d5fff7c3f3c2219dcd873e25363a4af52f8df636841955e3b69a7b4860816de2d543ba4e067f887fc5ae4f181f4a9db2df50dbf84fb64a1806b084c06
7
+ data.tar.gz: e97964b79d62031aac4f469ab561e6bbb96fd61b17c56aa71a1418d72a588a0723f3b85be38a189f4e502d13886911da6a862d255c2e75b962b58ae51d00bb2a
data/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.4.0] - 2026-04-25
4
+
5
+ ### Changed
6
+ - Version bump: minor release
7
+
8
+ ### Commits in this release
9
+ - d39dfa9 Add standalone Obsidian local graph panel (#77)
10
+
11
+
3
12
  ## [1.3.0] - 2026-04-24
4
13
 
5
14
  ### Changed
@@ -40,6 +49,12 @@
40
49
  ## [Unreleased]
41
50
 
42
51
  ### Added
52
+ - **Development Automation**: Added `scripts/bin/validate` and `scripts/validate`
53
+ as the canonical preflight validation command for repository files, version
54
+ consistency, YAML/data parsing, active configuration contracts, config-file
55
+ classification, navigation data shape, Jekyll build/doctor, compiled assets,
56
+ and optional tests/Obsidian/HTMLProofer checks. CI fast checks now call
57
+ `./scripts/bin/validate --quick`.
43
58
  - **Obsidian Integration** — The repo's markdown content is now editable as an [Obsidian](https://obsidian.md) vault and rendered identically on GitHub Pages.
44
59
  - Shared vault config (`.obsidian/app.json`, `core-plugins.json`, `community-plugins.json`, `appearance.json`, `hotkeys.json`, `templates.json`) and a Templates-compatible note template at `pages/_notes/_templates/note-template.md`.
45
60
  - Liquid-generated `assets/data/wiki-index.json` listing every collection document and standalone page (title, basename, permalink, tags, aliases, excerpt) — works on the default GitHub Pages remote_theme build, no plugin whitelist changes required.
@@ -76,6 +91,20 @@
76
91
  `Your Site Title`, `My Awesome Site`, `Welcome`, `Untitled`, or empty).
77
92
 
78
93
  ### Fixed
94
+ - **Obsidian Local Graph**: Moved the local graph out of the documentation
95
+ navigation sidebar into its own collapsible side panel with a larger canvas
96
+ and resize-on-open behavior so Cytoscape renders cleanly. Pages with no
97
+ local wiki-link neighbors now keep the graph control visible and render a
98
+ current-page-only graph instead of hiding the panel.
99
+ - **Obsidian Resolver**: The client-side wiki-link resolver now receives
100
+ baseurl-safe index, attachment, and tag URLs from Liquid and derives a safe
101
+ fallback from its script path for GitHub Pages project sites.
102
+ - **Backlinks**: The linked-mentions include now skips draft and unpublished
103
+ candidates unless `site.show_drafts` is enabled.
104
+ - **Validation**: `scripts/bin/validate --quick` now accepts YAML anchors and
105
+ date values used by repository config/data files.
106
+ - **Tests**: `test/test_runner.sh` now includes an `obsidian` suite key/name so
107
+ suite keys, scripts, and labels stay aligned.
79
108
  - **Footer Quick Links no longer 404 on bare-minimum sites.**
80
109
  `_includes/core/footer.html` previously hard-coded links to
81
110
  `/about/`, `/services/`, `/news/`, `/contact/`, `/privacy-policy`, and
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
  title: zer0-mistakes
3
3
  sub-title: AI-Native Jekyll Theme
4
4
  description: AI-native Jekyll theme for GitHub Pages — Docker-first development, AI-powered installation, multi-agent integration (Copilot, Codex, Cursor, Claude), AI preview-image generation, and AIEO content optimization with Bootstrap 5.3.
5
- version: 1.3.0
5
+ version: 1.4.0
6
6
  layout: landing
7
7
  tags:
8
8
  - jekyll
@@ -20,7 +20,7 @@ categories:
20
20
  - bootstrap
21
21
  - ai-tooling
22
22
  created: 2024-02-10T23:51:11.480Z
23
- lastmod: 2026-04-24T23:27:06.000Z
23
+ lastmod: 2026-04-25T19:55:07.000Z
24
24
  draft: false
25
25
  permalink: /
26
26
  slug: zer0
@@ -1138,7 +1138,7 @@ git push origin feature/awesome-feature
1138
1138
 
1139
1139
  | Metric | Value |
1140
1140
  |--------|-------|
1141
- | **Current Version** | 1.3.0 ([RubyGems](https://rubygems.org/gems/jekyll-theme-zer0), [CHANGELOG](/CHANGELOG)) |
1141
+ | **Current Version** | 1.4.0 ([RubyGems](https://rubygems.org/gems/jekyll-theme-zer0), [CHANGELOG](/CHANGELOG)) |
1142
1142
  | **Documented Features** | 43 ([Feature Registry](https://github.com/bamr87/zer0-mistakes/blob/main/_data/features.yml)) |
1143
1143
  | **Setup Time** | 2-5 minutes ([install.sh benchmarks](https://github.com/bamr87/zer0-mistakes/blob/main/install.sh)) |
1144
1144
  | **Documentation Pages** | 70+ ([browse docs](/pages/)) |
@@ -1189,6 +1189,6 @@ And these AI partners that make zer0-mistakes truly AI-native:
1189
1189
 
1190
1190
  **Built with ❤️ — and a little help from our AI partners — for the Jekyll community**
1191
1191
 
1192
- **v1.3.0** • [Changelog](CHANGELOG.md) • [License](LICENSE) • [Contributing](CONTRIBUTING.md) • [AI Agent Guide](AGENTS.md)
1192
+ **v1.4.0** • [Changelog](CHANGELOG.md) • [License](LICENSE) • [Contributing](CONTRIBUTING.md) • [AI Agent Guide](AGENTS.md)
1193
1193
 
1194
1194
 
@@ -35,4 +35,11 @@
35
35
 
36
36
  <!-- Obsidian wiki-link / embed / tag client-side resolver (fallback for the
37
37
  remote_theme GH Pages build, where _plugins/obsidian_links.rb cannot run). -->
38
- <script defer src="{{ '/assets/js/obsidian-wiki-links.js' | relative_url }}"></script>
38
+ {%- assign obsidian_attachments_path = site.obsidian.attachments_path | default: '/assets/images/notes' -%}
39
+ <script>
40
+ window.OBSIDIAN_CONFIG = window.OBSIDIAN_CONFIG || {};
41
+ window.OBSIDIAN_CONFIG.wikiIndexUrl = {{ '/assets/data/wiki-index.json' | relative_url | jsonify }};
42
+ window.OBSIDIAN_CONFIG.attachmentsPath = {{ obsidian_attachments_path | relative_url | jsonify }};
43
+ window.OBSIDIAN_CONFIG.tagBase = {{ '/tags/' | relative_url | jsonify }};
44
+ </script>
45
+ <script defer src="{{ '/assets/js/obsidian-wiki-links.js' | relative_url }}"></script>
@@ -41,6 +41,10 @@
41
41
  {%- assign _backlinks = "" | split: "" -%}
42
42
  {%- for _doc in _candidates -%}
43
43
  {%- if _doc.url == _self_url -%}{%- continue -%}{%- endif -%}
44
+ {%- comment -%} Hide draft/unpublished references unless this build includes drafts. {%- endcomment -%}
45
+ {%- unless site.show_drafts == true -%}
46
+ {%- if _doc.published == false or _doc.draft == true -%}{%- continue -%}{%- endif -%}
47
+ {%- endunless -%}
44
48
  {%- assign _body = _doc.content | default: "" -%}
45
49
  {%- assign _body_lower = _body | downcase -%}
46
50
  {%- assign _matched = false -%}
@@ -1,21 +1,21 @@
1
1
  {%- comment -%}
2
2
  ===================================================================
3
- LOCAL GRAPH WIDGETsidebar mini graph
3
+ LOCAL GRAPH SIDEBARcollapsible page-scoped graph
4
4
  ===================================================================
5
5
 
6
6
  File: local-graph.html
7
7
  Path: _includes/navigation/local-graph.html
8
- Purpose: Renders a small "local graph" of the current page and its
9
- immediate wiki-link neighbors in the left sidebar (Obsidian-
10
- style local graph view).
8
+ Purpose: Renders a collapsible, page-scoped graph of the current page and
9
+ its immediate wiki-link neighbors in a separate side panel.
11
10
 
12
11
  Behavior:
13
12
  - Reads /assets/data/wiki-index.json
14
13
  - Finds the current page by window.location.pathname (with title/basename
15
14
  fallback for permalink quirks)
16
15
  - BFS depth=1 by default (current + direct neighbors, in & out)
17
- - Hides itself if the current page is not in the wiki-index, has no
18
- neighbors, or the index can't be loaded
16
+ - Renders the current page as a single-node graph when it has no neighbors
17
+ - Hides itself if the current page is not in the wiki-index or the index
18
+ can't be loaded
19
19
  - Lazily loads cytoscape.js from CDN with SRI + crossorigin
20
20
 
21
21
  Opt-out: set `local_graph: false` in page front matter.
@@ -25,20 +25,55 @@
25
25
  {%- endcomment -%}
26
26
  {%- if page.local_graph != false -%}
27
27
  {%- assign lg_depth = page.local_graph_depth | default: 1 -%}
28
- <div class="obsidian-local-graph-widget mb-3" aria-label="Local graph">
29
- <div class="d-flex align-items-center justify-content-between mb-1">
30
- <span class="text-uppercase fw-semibold small text-secondary">
31
- <i class="bi bi-diagram-3 me-1" aria-hidden="true"></i>Local graph
32
- </span>
33
- <a href="{{ '/docs/obsidian/graph/' | relative_url }}"
34
- class="small text-decoration-none"
35
- title="Open the full site graph">full&nbsp;&rsaquo;</a>
36
- </div>
37
- <div id="obsidian-local-graph"
38
- data-depth="{{ lg_depth }}"
39
- data-index-url="{{ '/assets/data/wiki-index.json' | relative_url }}"
40
- role="img"
41
- aria-label="Local graph of pages linked to this page"></div>
28
+ <div class="obsidian-local-graph-fab d-print-none" data-obsidian-local-graph-toggle>
29
+ <button class="btn btn-primary rounded-circle shadow-lg obsidian-local-graph-toggle"
30
+ type="button"
31
+ data-bs-toggle="offcanvas"
32
+ data-bs-target="#obsidianLocalGraphPanel"
33
+ aria-controls="obsidianLocalGraphPanel"
34
+ aria-label="Open local graph"
35
+ title="Open local graph">
36
+ <i class="bi bi-diagram-3 fs-5" aria-hidden="true"></i>
37
+ </button>
42
38
  </div>
39
+
40
+ <aside class="offcanvas offcanvas-start obsidian-local-graph-panel"
41
+ tabindex="-1"
42
+ id="obsidianLocalGraphPanel"
43
+ aria-labelledby="obsidianLocalGraphLabel"
44
+ data-bs-scroll="true"
45
+ data-bs-backdrop="false"
46
+ data-obsidian-local-graph-panel>
47
+ <div class="offcanvas-header">
48
+ <h2 class="offcanvas-title h5 mb-0" id="obsidianLocalGraphLabel">
49
+ <i class="bi bi-diagram-3 me-2" aria-hidden="true"></i>Local graph
50
+ </h2>
51
+ <button type="button"
52
+ class="btn-close"
53
+ data-bs-dismiss="offcanvas"
54
+ data-bs-target="#obsidianLocalGraphPanel"
55
+ aria-label="Close local graph"></button>
56
+ </div>
57
+ <div class="offcanvas-body">
58
+ <div class="obsidian-local-graph-widget" aria-label="Local graph">
59
+ <div class="obsidian-local-graph-meta d-flex align-items-center justify-content-between gap-2 mb-3">
60
+ <span class="badge text-bg-secondary">Depth {{ lg_depth }}</span>
61
+ <a href="{{ '/docs/obsidian/graph/' | relative_url }}"
62
+ class="btn btn-outline-primary btn-sm"
63
+ title="Open the full site graph">
64
+ <i class="bi bi-arrows-fullscreen me-1" aria-hidden="true"></i>Full graph
65
+ </a>
66
+ </div>
67
+ <div id="obsidian-local-graph"
68
+ data-depth="{{ lg_depth }}"
69
+ data-index-url="{{ '/assets/data/wiki-index.json' | relative_url }}"
70
+ role="img"
71
+ aria-label="Local graph of pages linked to this page"></div>
72
+ <p class="obsidian-local-graph-status small text-secondary mt-2 mb-0"
73
+ data-obsidian-local-graph-status
74
+ role="status">Loading graph...</p>
75
+ </div>
76
+ </div>
77
+ </aside>
43
78
  <script src="{{ '/assets/js/obsidian-local-graph.js' | relative_url }}" defer></script>
44
79
  {%- endif -%}
@@ -1,100 +1,104 @@
1
- ---
2
- layout: root
3
- ---
4
- <!--
5
- ===================================================================
6
- DEFAULT LAYOUT - Standard content layout with sidebars
7
- ===================================================================
8
-
9
- File: default.html
10
- Path: _layouts/default.html
11
- Inherits: root.html
12
- Purpose: Primary content layout with sidebar navigation and table of contents
13
-
14
- Template Logic:
15
- - Creates a responsive three-column layout using Bootstrap grid
16
- - Left sidebar: Site navigation and content outline (collapsible on mobile)
17
- - Center: Main content area with page title and body content
18
- - Right sidebar: Table of contents and page shortcuts (hidden on mobile)
19
- - Implements scroll spy for navigation highlighting
20
- - Responsive design that stacks vertically on mobile devices
21
-
22
- Layout Structure:
23
- 1. Container wrapper with Bootstrap responsive classes
24
- 2. Left sidebar (bd-sidebar) - Navigation and outline
25
- 3. Main content area (bd-main) with:
26
- - Intro section (page title, metadata)
27
- - Right sidebar (bd-toc) - Table of contents
28
- - Content area (bd-content) - Main page content
29
-
30
- Dependencies:
31
- - sidebar-left.html: Site navigation and content outline
32
- - intro.html: Page title, breadcrumbs, and metadata
33
- - sidebar-right.html: Table of contents and page shortcuts
34
-
35
- Bootstrap Classes Used:
36
- - container-xxl: Extra large responsive container
37
- - bd-gutter: Custom Bootstrap spacing
38
- - bd-layout: Custom layout utility class
39
- - bd-sidebar: Custom sidebar styling
40
- - bd-main: Main content area
41
- - bd-toc: Table of contents styling
42
- - bd-content: Content area styling
43
- ===================================================================
44
- -->
45
-
46
- <!-- ================================================ -->
47
- <!-- MAIN LAYOUT CONTAINER -->
48
- <!-- Bootstrap responsive container with custom grid -->
49
- <!-- ================================================ -->
50
- <div class="container-xxl bd-gutter mt-3 my-md-4 bd-layout">
51
-
52
- <!-- ================================ -->
53
- <!-- LEFT SIDEBAR - Navigation -->
54
- <!-- ================================ -->
55
- <!-- Site navigation, content outline, and offcanvas menu for mobile -->
56
- <!-- Sidebar visibility controlled by page.sidebar front matter -->
57
- {% unless page.sidebar == false %}
58
- <aside class="bd-sidebar">
59
- {% include navigation/sidebar-left.html %}
60
- </aside>
61
- {% endunless %}
62
-
63
- <!-- ================================ -->
64
- <!-- MAIN CONTENT AREA -->
65
- <!-- ================================ -->
66
- <!-- Primary content section with scroll spy for table of contents navigation -->
67
- <main class="bd-main order-1" data-bs-spy="scroll" data-bs-target="#TableOfContents" data-bs-offset="100" data-bs-smooth-scroll="true">
68
-
69
- <!-- Page introduction: title, breadcrumbs, metadata -->
70
- {% include content/intro.html %}
71
-
72
- <!-- =============================== -->
73
- <!-- RIGHT SIDEBAR - Table of Contents -->
74
- <!-- =============================== -->
75
- <!-- Page outline, shortcuts, and related links (hidden on mobile) -->
76
- <!-- Right sidebar visibility also controlled by page.sidebar -->
77
- {% unless page.sidebar == false %}
78
- <div class="bd-toc text-body-secondary">
79
- {% include navigation/sidebar-right.html %}
80
- </div>
81
- {% endunless %}
82
-
83
- <!-- =============================== -->
84
- <!-- MAIN CONTENT BODY -->
85
- <!-- =============================== -->
86
- <!-- Where the actual page content is rendered -->
87
- <div class="bd-content ps-lg-2">
88
- {{ content }}
89
-
90
- {%- comment -%}
91
- Optional Obsidian-style backlinks panel. Opt-in for the generic
92
- default layout via `backlinks: true` in front matter (the `note`
93
- layout enables it by default).
94
- {%- endcomment -%}
95
- {% if page.backlinks == true %}
96
- {% include content/backlinks.html %}
97
- {% endif %}
98
- </div>
99
- </main>
100
- </div>
1
+ ---
2
+ layout: root
3
+ ---
4
+ <!--
5
+ ===================================================================
6
+ DEFAULT LAYOUT - Standard content layout with sidebars
7
+ ===================================================================
8
+
9
+ File: default.html
10
+ Path: _layouts/default.html
11
+ Inherits: root.html
12
+ Purpose: Primary content layout with sidebar navigation and table of contents
13
+
14
+ Template Logic:
15
+ - Creates a responsive three-column layout using Bootstrap grid
16
+ - Left sidebar: Site navigation and content outline (collapsible on mobile)
17
+ - Local graph: Independent Obsidian side panel with its own collapsible control
18
+ - Center: Main content area with page title and body content
19
+ - Right sidebar: Table of contents and page shortcuts (hidden on mobile)
20
+ - Implements scroll spy for navigation highlighting
21
+ - Responsive design that stacks vertically on mobile devices
22
+
23
+ Layout Structure:
24
+ 1. Container wrapper with Bootstrap responsive classes
25
+ 2. Left sidebar (bd-sidebar) - Navigation and outline
26
+ 3. Main content area (bd-main) with:
27
+ - Intro section (page title, metadata)
28
+ - Right sidebar (bd-toc) - Table of contents
29
+ - Content area (bd-content) - Main page content
30
+
31
+ Dependencies:
32
+ - sidebar-left.html: Site navigation and content outline
33
+ - intro.html: Page title, breadcrumbs, and metadata
34
+ - sidebar-right.html: Table of contents and page shortcuts
35
+
36
+ Bootstrap Classes Used:
37
+ - container-xxl: Extra large responsive container
38
+ - bd-gutter: Custom Bootstrap spacing
39
+ - bd-layout: Custom layout utility class
40
+ - bd-sidebar: Custom sidebar styling
41
+ - bd-main: Main content area
42
+ - bd-toc: Table of contents styling
43
+ - bd-content: Content area styling
44
+ ===================================================================
45
+ -->
46
+
47
+ <!-- ================================================ -->
48
+ <!-- MAIN LAYOUT CONTAINER -->
49
+ <!-- Bootstrap responsive container with custom grid -->
50
+ <!-- ================================================ -->
51
+ <div class="container-xxl bd-gutter mt-3 my-md-4 bd-layout">
52
+
53
+ <!-- ================================ -->
54
+ <!-- LEFT SIDEBAR - Navigation -->
55
+ <!-- ================================ -->
56
+ <!-- Site navigation, content outline, and offcanvas menu for mobile -->
57
+ <!-- Sidebar visibility controlled by page.sidebar front matter -->
58
+ {% unless page.sidebar == false %}
59
+ <aside class="bd-sidebar">
60
+ {% include navigation/sidebar-left.html %}
61
+ </aside>
62
+
63
+ <!-- Separate Obsidian local graph panel; intentionally outside bdSidebar. -->
64
+ {% include navigation/local-graph.html %}
65
+ {% endunless %}
66
+
67
+ <!-- ================================ -->
68
+ <!-- MAIN CONTENT AREA -->
69
+ <!-- ================================ -->
70
+ <!-- Primary content section with scroll spy for table of contents navigation -->
71
+ <main class="bd-main order-1" data-bs-spy="scroll" data-bs-target="#TableOfContents" data-bs-offset="100" data-bs-smooth-scroll="true">
72
+
73
+ <!-- Page introduction: title, breadcrumbs, metadata -->
74
+ {% include content/intro.html %}
75
+
76
+ <!-- =============================== -->
77
+ <!-- RIGHT SIDEBAR - Table of Contents -->
78
+ <!-- =============================== -->
79
+ <!-- Page outline, shortcuts, and related links (hidden on mobile) -->
80
+ <!-- Right sidebar visibility also controlled by page.sidebar -->
81
+ {% unless page.sidebar == false %}
82
+ <div class="bd-toc text-body-secondary">
83
+ {% include navigation/sidebar-right.html %}
84
+ </div>
85
+ {% endunless %}
86
+
87
+ <!-- =============================== -->
88
+ <!-- MAIN CONTENT BODY -->
89
+ <!-- =============================== -->
90
+ <!-- Where the actual page content is rendered -->
91
+ <div class="bd-content ps-lg-2">
92
+ {{ content }}
93
+
94
+ {%- comment -%}
95
+ Optional Obsidian-style backlinks panel. Opt-in for the generic
96
+ default layout via `backlinks: true` in front matter (the `note`
97
+ layout enables it by default).
98
+ {%- endcomment -%}
99
+ {% if page.backlinks == true %}
100
+ {% include content/backlinks.html %}
101
+ {% endif %}
102
+ </div>
103
+ </main>
104
+ </div>
@@ -152,18 +152,91 @@
152
152
  }
153
153
 
154
154
  // ----------------------------------------------------------------------------
155
- // Local graph widget (left sidebar) small Obsidian-style local graph view.
155
+ // Local graph side panel — Obsidian-style local graph view.
156
156
  // Rendered by _includes/navigation/local-graph.html via assets/js/obsidian-local-graph.js.
157
157
  // ----------------------------------------------------------------------------
158
+ .obsidian-local-graph-fab {
159
+ position: fixed;
160
+ left: 1rem;
161
+ bottom: 1rem;
162
+ z-index: 1032;
163
+
164
+ &[hidden] {
165
+ display: none !important;
166
+ }
167
+ }
168
+
169
+ .obsidian-local-graph-toggle {
170
+ width: 3.25rem;
171
+ height: 3.25rem;
172
+ display: inline-flex;
173
+ align-items: center;
174
+ justify-content: center;
175
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
176
+
177
+ &:hover,
178
+ &:focus-visible {
179
+ transform: translateY(-1px);
180
+ }
181
+
182
+ &:active {
183
+ transform: translateY(0);
184
+ }
185
+ }
186
+
187
+ .obsidian-local-graph-panel {
188
+ --bs-offcanvas-width: min(28rem, calc(100vw - 1.5rem));
189
+
190
+ &[hidden] {
191
+ display: none !important;
192
+ }
193
+
194
+ .offcanvas-body {
195
+ display: flex;
196
+ flex-direction: column;
197
+ min-height: 0;
198
+ }
199
+ }
200
+
158
201
  .obsidian-local-graph-widget {
202
+ display: flex;
203
+ flex: 1 1 auto;
204
+ flex-direction: column;
205
+ min-height: 0;
206
+
207
+ .obsidian-local-graph-meta {
208
+ flex: 0 0 auto;
209
+ }
210
+
159
211
  #obsidian-local-graph {
212
+ flex: 1 1 auto;
160
213
  width: 100%;
161
- height: 220px;
162
- min-height: 180px;
214
+ height: min(62vh, 34rem);
215
+ min-height: 22rem;
163
216
  border: 1px solid var(--bs-border-color, #dee2e6);
164
- border-radius: var(--bs-border-radius, 0.375rem);
217
+ border-radius: var(--bs-border-radius-lg, 0.5rem);
165
218
  background: var(--bs-tertiary-bg, #f8f9fa);
166
219
  overflow: hidden;
167
220
  position: relative;
168
221
  }
222
+
223
+ .obsidian-local-graph-status {
224
+ min-height: 1.25rem;
225
+ }
226
+ }
227
+
228
+ @media (max-width: 575.98px) {
229
+ .obsidian-local-graph-fab {
230
+ left: 0.875rem;
231
+ bottom: 0.875rem;
232
+ }
233
+
234
+ .obsidian-local-graph-panel {
235
+ --bs-offcanvas-width: min(100vw, 24rem);
236
+ }
237
+
238
+ .obsidian-local-graph-widget #obsidian-local-graph {
239
+ height: 58vh;
240
+ min-height: 18rem;
241
+ }
169
242
  }
@@ -4,13 +4,15 @@
4
4
  // =============================================================================
5
5
 
6
6
  #bdSidebar .offcanvas-header,
7
- #tocContents .offcanvas-header {
7
+ #tocContents .offcanvas-header,
8
+ #obsidianLocalGraphPanel .offcanvas-header {
8
9
  border-bottom: 2px solid var(--bs-border-color);
9
10
  padding: 1.25rem 1rem;
10
11
  }
11
12
 
12
13
  #bdSidebar .offcanvas-title,
13
- #tocContents .offcanvas-title {
14
+ #tocContents .offcanvas-title,
15
+ #obsidianLocalGraphPanel .offcanvas-title {
14
16
  font-size: 1.125rem;
15
17
  font-weight: 600;
16
18
  color: var(--bs-emphasis-color);
@@ -19,7 +21,8 @@
19
21
 
20
22
  @media (max-width: 991.98px) {
21
23
  #bdSidebar .offcanvas-header .btn-close,
22
- #tocContents .offcanvas-header .btn-close {
24
+ #tocContents .offcanvas-header .btn-close,
25
+ #obsidianLocalGraphPanel .offcanvas-header .btn-close {
23
26
  width: 48px;
24
27
  height: 48px;
25
28
  padding: 0;
@@ -36,7 +39,8 @@
36
39
  }
37
40
  }
38
41
 
39
- #tocContents .offcanvas-body {
42
+ #tocContents .offcanvas-body,
43
+ #obsidianLocalGraphPanel .offcanvas-body {
40
44
  padding: 1rem;
41
45
  }
42
46