jekyll-theme-zer0 1.29.0 → 1.31.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.
Files changed (163) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +886 -2
  3. data/_data/README.md +2 -0
  4. data/_data/ai.yml +5 -3
  5. data/_data/ai_pricing.yml +36 -0
  6. data/_data/backlog.yml +196 -22
  7. data/_data/consumers.yml +147 -5
  8. data/_data/features.yml +147 -21
  9. data/_data/feedback_types.yml +17 -12
  10. data/_data/landing.yml +5 -2
  11. data/_data/navigation/quickstart.yml +4 -0
  12. data/_data/site_builder.yml +874 -0
  13. data/_data/theme-manifest.yml +132 -122
  14. data/_data/ui-text.yml +19 -0
  15. data/_includes/README.md +11 -1
  16. data/_includes/analytics/posthog.html +30 -11
  17. data/_includes/components/README.md +1 -1
  18. data/_includes/components/admin-links.html +2 -2
  19. data/_includes/components/admin-tabs.html +2 -2
  20. data/_includes/components/ai-chat.html +14 -11
  21. data/_includes/components/analytics-dashboard.html +8 -8
  22. data/_includes/components/author-bio.html +1 -1
  23. data/_includes/components/author-card.html +10 -2
  24. data/_includes/components/author-eeat.html +4 -4
  25. data/_includes/components/background-customizer.html +8 -8
  26. data/_includes/components/background-image.html +120 -0
  27. data/_includes/components/background-settings.html +28 -15
  28. data/_includes/components/collection-manager.html +5 -5
  29. data/_includes/components/component-showcase.html +13 -13
  30. data/_includes/components/config-editor.html +12 -12
  31. data/_includes/components/config-viewer.html +8 -8
  32. data/_includes/components/cookie-consent.html +41 -41
  33. data/_includes/components/cta-button.html +7 -2
  34. data/_includes/components/dev-shortcuts.html +7 -7
  35. data/_includes/components/env-dashboard.html +8 -8
  36. data/_includes/components/env-switcher.html +9 -9
  37. data/_includes/components/feature-card.html +2 -2
  38. data/_includes/components/halfmoon.html +2 -2
  39. data/_includes/components/info-section.html +36 -36
  40. data/_includes/components/js-cdn.html +15 -15
  41. data/_includes/components/language-toggle.html +4 -4
  42. data/_includes/components/mermaid.html +79 -435
  43. data/_includes/components/nanobar.html +5 -5
  44. data/_includes/components/nav-editor.html +2 -2
  45. data/_includes/components/nav-export.html +2 -2
  46. data/_includes/components/nav-overview.html +2 -2
  47. data/_includes/components/page-feedback.html +45 -30
  48. data/_includes/components/page-views-init.html +1 -1
  49. data/_includes/components/post-card.html +22 -22
  50. data/_includes/components/post-type-badge.html +2 -2
  51. data/_includes/components/powered-by.html +2 -2
  52. data/_includes/components/preview-image.html +28 -3
  53. data/_includes/components/quick-index.html +2 -2
  54. data/_includes/components/search-modal.html +27 -2
  55. data/_includes/components/searchbar.html +2 -2
  56. data/_includes/components/svg-background.html +2 -2
  57. data/_includes/components/theme-customizer.html +2 -2
  58. data/_includes/components/theme-info.html +6 -6
  59. data/_includes/components/theme-preview-gallery.html +23 -23
  60. data/_includes/content/giscus.html +2 -2
  61. data/_includes/content/intro.html +15 -8
  62. data/_includes/content/jsonld-faq.html +2 -2
  63. data/_includes/content/jsonld-software.html +2 -2
  64. data/_includes/content/seo.html +12 -4
  65. data/_includes/content/sitemap.html +247 -290
  66. data/_includes/content/toc.html +183 -183
  67. data/_includes/core/branding.html +13 -20
  68. data/_includes/core/console-capture.html +32 -74
  69. data/_includes/core/favicon.html +49 -7
  70. data/_includes/core/footer-fabs.html +17 -3
  71. data/_includes/core/footer.html +31 -18
  72. data/_includes/core/head.html +128 -92
  73. data/_includes/core/header.html +85 -54
  74. data/_includes/core/tokens-inline.html +16 -1
  75. data/_includes/docs/bootstrap-docs.html +8 -8
  76. data/_includes/landing/landing-install-cards.html +2 -2
  77. data/_includes/landing/landing-quick-links.html +1 -1
  78. data/_includes/navigation/admin-nav.html +2 -2
  79. data/_includes/navigation/nav-tree.html +8 -8
  80. data/_includes/navigation/navbar.html +21 -18
  81. data/_includes/navigation/section-sidebar.html +16 -16
  82. data/_includes/navigation/sidebar-config.html +36 -2
  83. data/_includes/navigation/sidebar-left.html +15 -15
  84. data/_includes/navigation/sidebar-right.html +6 -6
  85. data/_includes/obsidian/full-graph.html +2 -2
  86. data/_includes/setup/claude-session.html +72 -0
  87. data/_includes/setup/prereq-checklist.html +90 -0
  88. data/_includes/setup/wizard.html +910 -291
  89. data/_includes/stats/stats-categories.html +8 -8
  90. data/_includes/stats/stats-header.html +14 -14
  91. data/_includes/stats/stats-metrics.html +12 -12
  92. data/_includes/stats/stats-no-data.html +12 -12
  93. data/_includes/stats/stats-overview.html +6 -6
  94. data/_includes/stats/stats-tags.html +8 -8
  95. data/_layouts/404.html +38 -24
  96. data/_layouts/admin.html +22 -22
  97. data/_layouts/article.html +54 -37
  98. data/_layouts/author.html +20 -20
  99. data/_layouts/authors.html +2 -2
  100. data/_layouts/book-abc.html +12 -12
  101. data/_layouts/book-story.html +15 -15
  102. data/_layouts/book.html +12 -12
  103. data/_layouts/collection.html +33 -33
  104. data/_layouts/cookbook.html +12 -12
  105. data/_layouts/default.html +27 -24
  106. data/_layouts/home.html +36 -24
  107. data/_layouts/index.html +10 -10
  108. data/_layouts/landing.html +17 -17
  109. data/_layouts/news.html +44 -44
  110. data/_layouts/note.html +40 -39
  111. data/_layouts/notebook.html +36 -35
  112. data/_layouts/recipe.html +24 -24
  113. data/_layouts/root.html +95 -55
  114. data/_layouts/section.html +23 -23
  115. data/_layouts/setup.html +3 -3
  116. data/_layouts/sitemap-collection.html +49 -49
  117. data/_layouts/stats.html +40 -40
  118. data/_layouts/tag.html +12 -12
  119. data/_layouts/welcome.html +21 -21
  120. data/_sass/components/_cookie-banner.scss +48 -0
  121. data/_sass/components/_mermaid.scss +375 -0
  122. data/_sass/components/_setup-wizard.scss +588 -41
  123. data/_sass/components/_ui-enhancements.scss +11 -0
  124. data/_sass/core/_navbar.scss +147 -100
  125. data/_sass/core/_sidebar-extras.scss +2 -14
  126. data/_sass/core/code-copy.scss +27 -8
  127. data/_sass/layouts/_navbar-extras.scss +14 -4
  128. data/assets/css/extension-points-demo.css +27 -0
  129. data/assets/css/main.scss +1 -0
  130. data/assets/data/wiki-index.json +19 -0
  131. data/assets/js/ai-chat.js +47 -5
  132. data/assets/js/auto-hide-nav.js +53 -13
  133. data/assets/js/code-copy.js +72 -1
  134. data/assets/js/extension-points-demo.js +48 -0
  135. data/assets/js/fleet-feedback-capture.js +124 -0
  136. data/assets/js/fleet-feedback.js +853 -0
  137. data/assets/js/mermaid-diagrams.js +1373 -0
  138. data/assets/js/modules/navigation/config.js +9 -6
  139. data/assets/js/modules/navigation/scroll-spy.js +315 -80
  140. data/assets/js/modules/theme/appearance.js +8 -2
  141. data/assets/js/obsidian-local-graph.js +27 -5
  142. data/assets/js/obsidian-wiki-links.js +8 -3
  143. data/assets/js/page-feedback.js +125 -192
  144. data/assets/js/search-modal.js +26 -0
  145. data/assets/js/setup-wizard.js +2119 -363
  146. data/assets/js/site-builder.js +1834 -0
  147. data/assets/js/ui-enhancements.js +11 -3
  148. data/scripts/README.md +15 -0
  149. data/scripts/ai/README.md +38 -0
  150. data/scripts/ai/api_call.rb +124 -0
  151. data/scripts/ai/usage.rb +314 -0
  152. data/scripts/ai/usage_report.rb +225 -0
  153. data/scripts/ci/test_visual_evidence_autogen.py +403 -0
  154. data/scripts/ci/visual_evidence_autogen.py +1070 -0
  155. data/scripts/content-review.rb +20 -1
  156. data/scripts/features/install-preview-generator +1 -1
  157. data/scripts/lib/README.md +12 -0
  158. data/scripts/lib/preview_generator.py +2 -2
  159. data/scripts/test/integration/mermaid +22 -8
  160. data/scripts/test/lib/run_tests.sh +1 -0
  161. data/scripts/test/lib/test_visual_evidence_autogen.sh +24 -0
  162. data/scripts/translate.rb +23 -1
  163. metadata +21 -2
@@ -1,8 +1,8 @@
1
1
  {% comment %} Feature: ZER0-065 {% endcomment %}
2
- <!--
2
+ {% comment %}
3
3
  Theme Preview — component gallery for live skin / mode testing.
4
4
  Pair with theme-controls-bar.html and theme-customizer.js.
5
- -->
5
+ {% endcomment %}
6
6
  <div class="theme-preview-gallery" id="theme-preview-gallery">
7
7
 
8
8
  <p class="text-body-secondary">
@@ -11,7 +11,7 @@
11
11
  <code>theme_color</code> may take precedence over skin tokens for <code>--zer0-color-*</code> variables.
12
12
  </p>
13
13
 
14
- <!-- Typography -->
14
+ {% comment %} Typography {% endcomment %}
15
15
  <section class="theme-preview-section" id="preview-typography" aria-labelledby="preview-typography-heading">
16
16
  <h2 class="h4 theme-preview-heading" id="preview-typography-heading">
17
17
  <i class="bi bi-fonts me-2" aria-hidden="true"></i>Typography
@@ -33,7 +33,7 @@
33
33
  </div>
34
34
  </section>
35
35
 
36
- <!-- Buttons -->
36
+ {% comment %} Buttons {% endcomment %}
37
37
  <section class="theme-preview-section" id="preview-buttons" aria-labelledby="preview-buttons-heading">
38
38
  <h2 class="h4 theme-preview-heading" id="preview-buttons-heading">
39
39
  <i class="bi bi-hand-index-thumb me-2" aria-hidden="true"></i>Buttons
@@ -59,7 +59,7 @@
59
59
  </div>
60
60
  </section>
61
61
 
62
- <!-- Alerts -->
62
+ {% comment %} Alerts {% endcomment %}
63
63
  <section class="theme-preview-section" id="preview-alerts" aria-labelledby="preview-alerts-heading">
64
64
  <h2 class="h4 theme-preview-heading" id="preview-alerts-heading">
65
65
  <i class="bi bi-exclamation-triangle me-2" aria-hidden="true"></i>Alerts
@@ -72,7 +72,7 @@
72
72
  <div class="alert alert-info" role="alert">Info alert</div>
73
73
  </section>
74
74
 
75
- <!-- Cards -->
75
+ {% comment %} Cards {% endcomment %}
76
76
  <section class="theme-preview-section" id="preview-cards" aria-labelledby="preview-cards-heading">
77
77
  <h2 class="h4 theme-preview-heading" id="preview-cards-heading">
78
78
  <i class="bi bi-card-heading me-2" aria-hidden="true"></i>Cards
@@ -100,7 +100,7 @@
100
100
  </div>
101
101
  </section>
102
102
 
103
- <!-- Forms -->
103
+ {% comment %} Forms {% endcomment %}
104
104
  <section class="theme-preview-section" id="preview-forms" aria-labelledby="preview-forms-heading">
105
105
  <h2 class="h4 theme-preview-heading" id="preview-forms-heading">
106
106
  <i class="bi bi-input-cursor-text me-2" aria-hidden="true"></i>Forms
@@ -134,7 +134,7 @@
134
134
  </div>
135
135
  </section>
136
136
 
137
- <!-- Nav tabs -->
137
+ {% comment %} Nav tabs {% endcomment %}
138
138
  <section class="theme-preview-section" id="preview-tabs" aria-labelledby="preview-tabs-heading">
139
139
  <h2 class="h4 theme-preview-heading" id="preview-tabs-heading">
140
140
  <i class="bi bi-layout-text-window-reverse me-2" aria-hidden="true"></i>Nav tabs
@@ -152,7 +152,7 @@
152
152
  </ul>
153
153
  </section>
154
154
 
155
- <!-- Badges -->
155
+ {% comment %} Badges {% endcomment %}
156
156
  <section class="theme-preview-section" id="preview-badges" aria-labelledby="preview-badges-heading">
157
157
  <h2 class="h4 theme-preview-heading" id="preview-badges-heading">
158
158
  <i class="bi bi-award me-2" aria-hidden="true"></i>Badges
@@ -168,7 +168,7 @@
168
168
  </p>
169
169
  </section>
170
170
 
171
- <!-- Code blocks -->
171
+ {% comment %} Code blocks {% endcomment %}
172
172
  <section class="theme-preview-section" id="preview-code" aria-labelledby="preview-code-heading">
173
173
  <h2 class="h4 theme-preview-heading" id="preview-code-heading">
174
174
  <i class="bi bi-code-slash me-2" aria-hidden="true"></i>Code blocks
@@ -214,7 +214,7 @@ docker-compose up
214
214
  {% endhighlight %}
215
215
  </section>
216
216
 
217
- <!-- Links -->
217
+ {% comment %} Links {% endcomment %}
218
218
  <section class="theme-preview-section" id="preview-links" aria-labelledby="preview-links-heading">
219
219
  <h2 class="h4 theme-preview-heading" id="preview-links-heading">
220
220
  <i class="bi bi-link-45deg me-2" aria-hidden="true"></i>Links
@@ -226,7 +226,7 @@ docker-compose up
226
226
  </p>
227
227
  </section>
228
228
 
229
- <!-- Navbar snippet -->
229
+ {% comment %} Navbar snippet {% endcomment %}
230
230
  <section class="theme-preview-section" id="preview-navbar" aria-labelledby="preview-navbar-heading">
231
231
  <h2 class="h4 theme-preview-heading" id="preview-navbar-heading">
232
232
  <i class="bi bi-layout-navbar me-2" aria-hidden="true"></i>Navbar snippet
@@ -244,7 +244,7 @@ docker-compose up
244
244
  </nav>
245
245
  </section>
246
246
 
247
- <!-- Footer snippet -->
247
+ {% comment %} Footer snippet {% endcomment %}
248
248
  <section class="theme-preview-section" id="preview-footer" aria-labelledby="preview-footer-heading">
249
249
  <h2 class="h4 theme-preview-heading" id="preview-footer-heading">
250
250
  <i class="bi bi-layout-text-sidebar-reverse me-2" aria-hidden="true"></i>Footer snippet
@@ -269,7 +269,7 @@ docker-compose up
269
269
  </footer>
270
270
  </section>
271
271
 
272
- <!-- Table -->
272
+ {% comment %} Table {% endcomment %}
273
273
  <section class="theme-preview-section" id="preview-table" aria-labelledby="preview-table-heading">
274
274
  <h2 class="h4 theme-preview-heading" id="preview-table-heading">
275
275
  <i class="bi bi-table me-2" aria-hidden="true"></i>Table
@@ -288,7 +288,7 @@ docker-compose up
288
288
  </div>
289
289
  </section>
290
290
 
291
- <!-- List group -->
291
+ {% comment %} List group {% endcomment %}
292
292
  <section class="theme-preview-section" id="preview-list-group" aria-labelledby="preview-list-group-heading">
293
293
  <h2 class="h4 theme-preview-heading" id="preview-list-group-heading">
294
294
  <i class="bi bi-list-ul me-2" aria-hidden="true"></i>List group
@@ -300,7 +300,7 @@ docker-compose up
300
300
  </ul>
301
301
  </section>
302
302
 
303
- <!-- Backgrounds -->
303
+ {% comment %} Backgrounds {% endcomment %}
304
304
  <section class="theme-preview-section" id="preview-backgrounds" aria-labelledby="preview-backgrounds-heading">
305
305
  <h2 class="h4 theme-preview-heading" id="preview-backgrounds-heading">
306
306
  <i class="bi bi-image me-2" aria-hidden="true"></i>Background layers
@@ -324,7 +324,7 @@ docker-compose up
324
324
  </div>
325
325
  </section>
326
326
 
327
- <!-- Callouts -->
327
+ {% comment %} Callouts {% endcomment %}
328
328
  <section class="theme-preview-section" id="preview-callouts" aria-labelledby="preview-callouts-heading">
329
329
  <h2 class="h4 theme-preview-heading" id="preview-callouts-heading">
330
330
  <i class="bi bi-chat-square-text me-2" aria-hidden="true"></i>Callouts
@@ -341,7 +341,7 @@ docker-compose up
341
341
  {% include components/callout.html type="danger" title="Danger" content=_danger_body %}
342
342
  </section>
343
343
 
344
- <!-- Accordion -->
344
+ {% comment %} Accordion {% endcomment %}
345
345
  <section class="theme-preview-section" id="preview-accordion" aria-labelledby="preview-accordion-heading">
346
346
  <h2 class="h4 theme-preview-heading" id="preview-accordion-heading">
347
347
  <i class="bi bi-chevron-bar-expand me-2" aria-hidden="true"></i>Accordion
@@ -382,7 +382,7 @@ docker-compose up
382
382
  </div>
383
383
  </section>
384
384
 
385
- <!-- Progress & Spinners -->
385
+ {% comment %} Progress & Spinners {% endcomment %}
386
386
  <section class="theme-preview-section" id="preview-progress" aria-labelledby="preview-progress-heading">
387
387
  <h2 class="h4 theme-preview-heading" id="preview-progress-heading">
388
388
  <i class="bi bi-hourglass-split me-2" aria-hidden="true"></i>Progress &amp; Spinners
@@ -434,7 +434,7 @@ docker-compose up
434
434
  </div>
435
435
  </section>
436
436
 
437
- <!-- Breadcrumb & Pagination -->
437
+ {% comment %} Breadcrumb & Pagination {% endcomment %}
438
438
  <section class="theme-preview-section" id="preview-breadcrumb" aria-labelledby="preview-breadcrumb-heading">
439
439
  <h2 class="h4 theme-preview-heading" id="preview-breadcrumb-heading">
440
440
  <i class="bi bi-signpost-split me-2" aria-hidden="true"></i>Breadcrumb &amp; Pagination
@@ -479,7 +479,7 @@ docker-compose up
479
479
  </div>
480
480
  </section>
481
481
 
482
- <!-- Tooltips & Popovers -->
482
+ {% comment %} Tooltips & Popovers {% endcomment %}
483
483
  <section class="theme-preview-section" id="preview-tooltips" aria-labelledby="preview-tooltips-heading">
484
484
  <h2 class="h4 theme-preview-heading" id="preview-tooltips-heading">
485
485
  <i class="bi bi-chat-dots me-2" aria-hidden="true"></i>Tooltips &amp; Popovers
@@ -503,7 +503,7 @@ docker-compose up
503
503
  </div>
504
504
  </section>
505
505
 
506
- <!-- Icons showcase -->
506
+ {% comment %} Icons showcase {% endcomment %}
507
507
  <section class="theme-preview-section" id="preview-icons" aria-labelledby="preview-icons-heading">
508
508
  <h2 class="h4 theme-preview-heading" id="preview-icons-heading">
509
509
  <i class="bi bi-grid me-2" aria-hidden="true"></i>Bootstrap Icons
@@ -519,7 +519,7 @@ docker-compose up
519
519
  <i class="bi bi-person-circle" title="bi-person-circle"></i>
520
520
  <i class="bi bi-palette" title="bi-palette"></i>
521
521
  <i class="bi bi-code-slash" title="bi-code-slash"></i>
522
- <i class="bi bi-file-earmark-text"title="bi-file-earmark-text"></i>
522
+ <i class="bi bi-file-earmark-text" title="bi-file-earmark-text"></i>
523
523
  <i class="bi bi-check-circle text-success" title="success"></i>
524
524
  <i class="bi bi-x-circle text-danger" title="danger"></i>
525
525
  <i class="bi bi-exclamation-triangle text-warning" title="warning"></i>
@@ -1,5 +1,5 @@
1
1
  {% comment %} Feature: ZER0-035 {% endcomment %}
2
- <!--
2
+ {% comment %}
3
3
  giscus.html — GitHub Discussions comment system
4
4
  ===============================================
5
5
 
@@ -30,7 +30,7 @@
30
30
  NOTE: do not write a bare `include giscus.html` example with live Liquid
31
31
  braces inside this file — Liquid evaluates tags even inside HTML comments,
32
32
  which would recursively (and wrongly) try to include "giscus.html".
33
- -->
33
+ {% endcomment %}
34
34
 
35
35
  <script src="https://giscus.app/client.js"
36
36
  data-repo="{{ site.repository }}"
@@ -1,4 +1,4 @@
1
- <!--
1
+ {% comment %}
2
2
  file: _includes/content/intro.html
3
3
  description: Enhanced intro section with share, edit, and improve/report buttons
4
4
  path: _includes/content/intro.html
@@ -12,14 +12,14 @@
12
12
  - Responsive flex layout: full-width content block, frosted metadata footer with reading time and action buttons
13
13
  - Balanced padding and typography hierarchy via bd-intro-* classes
14
14
  - Metadata row: author, dates, category, difficulty, tags, view source
15
- -->
15
+ {% endcomment %}
16
16
  {%- include core/i18n.html -%}
17
17
  {% if page.collection %}
18
18
  {% capture page_dir %}{{ site.collections_dir }}{% endcapture %}
19
19
  {% assign testvar = "collection exists" %}
20
20
  {% endif %}
21
21
 
22
- <!-- Intro Section -->
22
+ {% comment %} Intro Section {% endcomment %}
23
23
 
24
24
  {% comment %}
25
25
  Determine the preview image path. Preview paths can omit the /assets/ prefix.
@@ -29,6 +29,13 @@
29
29
  {% assign assets_prefix = site.preview_images.assets_prefix | default: '/assets' %}
30
30
  {% assign auto_prefix = site.preview_images.auto_prefix | default: true %}
31
31
 
32
+ {% comment %} Leading-slash normalisation, as in components/preview-image.html:
33
+ `preview: images/x.png` used to resolve to /assetsimages/x.png. {% endcomment %}
34
+ {% unless preview_image == nil or preview_image == "" or preview_image contains '://' or preview_image contains 'data:' %}
35
+ {% assign preview_first = preview_image | slice: 0 %}
36
+ {% if preview_first != '/' %}{% assign preview_image = '/' | append: preview_image %}{% endif %}
37
+ {% endunless %}
38
+
32
39
  {% if preview_image contains '://' %}
33
40
  {% assign preview_path = preview_image %}
34
41
  {% elsif auto_prefix and preview_image != blank %}
@@ -228,9 +235,9 @@
228
235
  {% endif %}
229
236
  </p>
230
237
 
231
- <!-- Action Buttons Group -->
238
+ {% comment %} Action Buttons Group {% endcomment %}
232
239
  <div class="bd-intro-actions">
233
- <!-- Share Button -->
240
+ {% comment %} Share Button {% endcomment %}
234
241
  <div class="dropdown">
235
242
  <button class="btn btn-sm btn-info dropdown-toggle" type="button" id="shareDropdownBottom" data-bs-toggle="dropdown" aria-expanded="false">
236
243
  <i class="bi bi-share" aria-hidden="true"></i>
@@ -273,10 +280,10 @@
273
280
  </ul>
274
281
  </div>
275
282
 
276
- <!-- Improve / Report — opens the page-feedback widget (assets/js/page-feedback.js).
283
+ {% comment %} Improve / Report — opens the page-feedback widget (assets/js/page-feedback.js).
277
284
  Progressive enhancement: this is a real link to the issue form, so it
278
285
  works without JavaScript; page-feedback.js intercepts [data-pf-open]
279
- clicks and opens the richer capture modal (context + logs + AI) instead. -->
286
+ clicks and opens the richer capture modal (context + logs + AI) instead. {% endcomment %}
280
287
  {% if site.page_feedback.enabled %}
281
288
  <a class="btn btn-sm btn-success bd-intro-action-link"
282
289
  href="https://github.com/{{ site.repository }}/issues/new?template=page_improvement.yml&labels=page-feedback"
@@ -289,7 +296,7 @@
289
296
  </a>
290
297
  {% endif %}
291
298
 
292
- <!-- Edit on GitHub Button -->
299
+ {% comment %} Edit on GitHub Button {% endcomment %}
293
300
  <a href="https://github.com/{{ site.repository }}/blob/{{ repo_branch }}/{{ file_path }}"
294
301
  class="btn btn-sm btn-dark bd-intro-action-link"
295
302
  target="_blank"
@@ -1,5 +1,5 @@
1
1
  {% comment %} Feature: ZER0-054 {% endcomment %}
2
- <!--
2
+ {% comment %}
3
3
  ===================================================================
4
4
  JSON-LD FAQ SCHEMA - FAQPage Structured Data
5
5
  ===================================================================
@@ -24,7 +24,7 @@
24
24
  Dependencies:
25
25
  - Page front matter with faq_items array
26
26
  ===================================================================
27
- -->
27
+ {% endcomment %}
28
28
 
29
29
  {% if page.faq_items and page.faq_items.size > 0 %}
30
30
  <script type="application/ld+json">
@@ -1,4 +1,4 @@
1
- <!--
1
+ {% comment %}
2
2
  ===================================================================
3
3
  JSON-LD STRUCTURED DATA - SoftwareApplication + WebPage Schema
4
4
  ===================================================================
@@ -37,7 +37,7 @@
37
37
  - Included automatically in _includes/core/head.html
38
38
  - Conditional: opted in AND page.permalink == "/"
39
39
  ===================================================================
40
- -->
40
+ {% endcomment %}
41
41
 
42
42
  {%- assign _is_homepage = false -%}
43
43
  {%- if page.permalink == "/" or page.url == "/" -%}
@@ -1,5 +1,5 @@
1
1
  {% comment %} Features: ZER0-041, ZER0-054 {% endcomment %}
2
- <!--
2
+ {% comment %}
3
3
  ===================================================================
4
4
  SEO SUPPLEMENT - Additional meta tags not covered by jekyll-seo-tag
5
5
  ===================================================================
@@ -22,7 +22,7 @@
22
22
  - jekyll-seo-tag plugin (loaded in _layouts/root.html via seo tags)
23
23
  - site.preview_images config in _config.yml
24
24
  ===================================================================
25
- -->
25
+ {% endcomment %}
26
26
 
27
27
  {%- comment -%}
28
28
  Custom og:image handling: supports page.preview and page.header.og_image
@@ -43,6 +43,14 @@
43
43
  nil seo_image — og:image was silently dropped on every page without a
44
44
  page.header image, defeating the site.og_image fallback entirely.
45
45
  {%- endcomment -%}
46
+ {%- comment -%} Leading-slash normalisation, as in components/preview-image.html:
47
+ `preview: images/x.png` used to become og:image …/assetsimages/x.png. {%- endcomment -%}
48
+ {%- if page_teaser_image and page_teaser_image != "" -%}
49
+ {%- unless page_teaser_image contains '://' or page_teaser_image contains 'data:' -%}
50
+ {%- assign teaser_first = page_teaser_image | slice: 0 -%}
51
+ {%- if teaser_first != '/' -%}{%- assign page_teaser_image = '/' | append: page_teaser_image -%}{%- endif -%}
52
+ {%- endunless -%}
53
+ {%- endif -%}
46
54
  {%- if page_teaser_image contains '://' -%}
47
55
  {%- comment -%} External URL - use as-is {%- endcomment -%}
48
56
  {%- elsif auto_prefix and page_teaser_image and page_teaser_image != blank -%}
@@ -63,7 +71,7 @@
63
71
  {%- endif -%}
64
72
  {%- endunless -%}
65
73
 
66
- <!-- Site verification (non-Google; Google is handled by jekyll-seo-tag) -->
74
+ {% comment %} Site verification (non-Google; Google is handled by jekyll-seo-tag) {% endcomment %}
67
75
  {% if site.bing_site_verification %}
68
76
  <meta name="msvalidate.01" content="{{ site.bing_site_verification }}">
69
77
  {% endif %}
@@ -79,4 +87,4 @@
79
87
  {% if site.baidu_site_verification %}
80
88
  <meta name="baidu-site-verification" content="{{ site.baidu_site_verification }}">
81
89
  {% endif %}
82
- <!-- end _includes/content/seo.html -->
90
+ {% comment %} end _includes/content/seo.html {% endcomment %}