jekyll-theme-zer0 1.28.0 → 1.30.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 (191) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1143 -13
  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 +507 -2
  7. data/_data/consumers.yml +157 -9
  8. data/_data/features.yml +303 -20
  9. data/_data/feedback_types.yml +17 -12
  10. data/_data/i18n/fr.yml +12 -7
  11. data/_data/i18n/manifest.yml +39 -12
  12. data/_data/ingredient_densities.yml +122 -0
  13. data/_data/landing.yml +5 -2
  14. data/_data/navigation/main.yml +16 -0
  15. data/_data/navigation/quickstart.yml +4 -0
  16. data/_data/recipe_courses.yml +64 -0
  17. data/_data/site_builder.yml +874 -0
  18. data/_data/theme-manifest.yml +160 -124
  19. data/_data/ui-text.yml +26 -0
  20. data/_includes/README.md +26 -2
  21. data/_includes/analytics/posthog.html +2 -2
  22. data/_includes/components/admin-links.html +2 -2
  23. data/_includes/components/admin-tabs.html +2 -2
  24. data/_includes/components/ai-chat.html +14 -11
  25. data/_includes/components/analytics-dashboard.html +8 -8
  26. data/_includes/components/author-bio.html +1 -1
  27. data/_includes/components/author-card.html +10 -2
  28. data/_includes/components/author-eeat.html +4 -4
  29. data/_includes/components/background-customizer.html +10 -10
  30. data/_includes/components/background-image.html +114 -0
  31. data/_includes/components/background-settings.html +28 -15
  32. data/_includes/components/collection-manager.html +5 -5
  33. data/_includes/components/component-showcase.html +13 -13
  34. data/_includes/components/config-editor.html +12 -12
  35. data/_includes/components/config-viewer.html +8 -8
  36. data/_includes/components/cookie-consent.html +15 -15
  37. data/_includes/components/cta-button.html +7 -2
  38. data/_includes/components/dev-shortcuts.html +7 -7
  39. data/_includes/components/env-dashboard.html +8 -8
  40. data/_includes/components/env-switcher.html +9 -9
  41. data/_includes/components/feature-card.html +2 -2
  42. data/_includes/components/halfmoon.html +2 -2
  43. data/_includes/components/info-section.html +42 -37
  44. data/_includes/components/js-cdn.html +15 -15
  45. data/_includes/components/language-toggle.html +168 -21
  46. data/_includes/components/mermaid.html +72 -435
  47. data/_includes/components/nanobar.html +5 -5
  48. data/_includes/components/nav-editor.html +2 -2
  49. data/_includes/components/nav-export.html +2 -2
  50. data/_includes/components/nav-overview.html +2 -2
  51. data/_includes/components/page-feedback.html +45 -30
  52. data/_includes/components/page-views-init.html +55 -0
  53. data/_includes/components/page-views.html +33 -0
  54. data/_includes/components/post-card.html +22 -22
  55. data/_includes/components/post-type-badge.html +2 -2
  56. data/_includes/components/powered-by.html +2 -2
  57. data/_includes/components/preview-image.html +6 -0
  58. data/_includes/components/quick-index.html +2 -2
  59. data/_includes/components/recipe-card.html +67 -0
  60. data/_includes/components/recipe-duration.html +50 -0
  61. data/_includes/components/recipe-grams.html +58 -0
  62. data/_includes/components/recipe-index.html +96 -0
  63. data/_includes/components/recipe-ingredients.html +90 -0
  64. data/_includes/components/recipe-meta.html +96 -0
  65. data/_includes/components/recipe-nutrition.html +57 -0
  66. data/_includes/components/recipe-qty.html +73 -0
  67. data/_includes/components/recipe-ratio.html +151 -0
  68. data/_includes/components/recipe-scaler.html +73 -0
  69. data/_includes/components/recipe-steps.html +86 -0
  70. data/_includes/components/recipe-temp.html +45 -0
  71. data/_includes/components/search-modal.html +29 -4
  72. data/_includes/components/searchbar.html +2 -2
  73. data/_includes/components/shortcuts-modal.html +3 -0
  74. data/_includes/components/svg-background.html +2 -2
  75. data/_includes/components/theme-customizer.html +2 -2
  76. data/_includes/components/theme-info.html +14 -7
  77. data/_includes/components/theme-preview-gallery.html +22 -22
  78. data/_includes/content/giscus.html +2 -2
  79. data/_includes/content/intro.html +8 -8
  80. data/_includes/content/jsonld-faq.html +2 -2
  81. data/_includes/content/jsonld-software.html +24 -5
  82. data/_includes/content/seo.html +4 -4
  83. data/_includes/content/sitemap.html +27 -27
  84. data/_includes/content/toc.html +183 -183
  85. data/_includes/core/branding.html +6 -6
  86. data/_includes/core/console-capture.html +32 -74
  87. data/_includes/core/favicon.html +49 -7
  88. data/_includes/core/footer-fabs.html +17 -3
  89. data/_includes/core/footer.html +49 -34
  90. data/_includes/core/head.html +110 -86
  91. data/_includes/core/header.html +76 -54
  92. data/_includes/docs/bootstrap-docs.html +8 -8
  93. data/_includes/landing/landing-install-cards.html +2 -2
  94. data/_includes/landing/landing-quick-links.html +1 -1
  95. data/_includes/navigation/admin-nav.html +2 -2
  96. data/_includes/navigation/nav-tree.html +8 -8
  97. data/_includes/navigation/navbar.html +12 -12
  98. data/_includes/navigation/section-sidebar.html +109 -27
  99. data/_includes/navigation/sidebar-config.html +36 -2
  100. data/_includes/navigation/sidebar-left.html +17 -16
  101. data/_includes/navigation/sidebar-right.html +8 -7
  102. data/_includes/obsidian/full-graph.html +2 -2
  103. data/_includes/setup/claude-session.html +72 -0
  104. data/_includes/setup/prereq-checklist.html +90 -0
  105. data/_includes/setup/wizard.html +924 -222
  106. data/_includes/stats/stats-categories.html +8 -8
  107. data/_includes/stats/stats-header.html +14 -14
  108. data/_includes/stats/stats-metrics.html +14 -14
  109. data/_includes/stats/stats-no-data.html +12 -12
  110. data/_includes/stats/stats-overview.html +6 -6
  111. data/_includes/stats/stats-tags.html +8 -8
  112. data/_layouts/404.html +38 -24
  113. data/_layouts/README.md +2 -0
  114. data/_layouts/admin.html +24 -24
  115. data/_layouts/article.html +43 -33
  116. data/_layouts/author.html +20 -20
  117. data/_layouts/authors.html +2 -2
  118. data/_layouts/book-abc.html +12 -12
  119. data/_layouts/book-story.html +15 -15
  120. data/_layouts/book.html +12 -12
  121. data/_layouts/collection.html +33 -33
  122. data/_layouts/cookbook.html +88 -0
  123. data/_layouts/default.html +31 -28
  124. data/_layouts/home.html +23 -23
  125. data/_layouts/index.html +10 -10
  126. data/_layouts/landing.html +17 -17
  127. data/_layouts/news.html +44 -44
  128. data/_layouts/note.html +38 -38
  129. data/_layouts/notebook.html +34 -34
  130. data/_layouts/recipe.html +274 -0
  131. data/_layouts/root.html +92 -55
  132. data/_layouts/section.html +62 -33
  133. data/_layouts/setup.html +3 -3
  134. data/_layouts/sitemap-collection.html +49 -49
  135. data/_layouts/stats.html +40 -40
  136. data/_layouts/tag.html +12 -12
  137. data/_layouts/welcome.html +21 -21
  138. data/_sass/components/_callout.scss +1 -1
  139. data/_sass/components/_footer.scss +37 -1
  140. data/_sass/components/_mermaid.scss +375 -0
  141. data/_sass/components/_page-views.scss +36 -0
  142. data/_sass/components/_recipe.scss +506 -0
  143. data/_sass/components/_setup-wizard.scss +764 -0
  144. data/_sass/components/_ui-enhancements.scss +6 -6
  145. data/_sass/core/_navbar.scss +261 -46
  146. data/_sass/layouts/_landing.scss +2 -2
  147. data/_sass/layouts/_navbar-extras.scss +14 -4
  148. data/_sass/tokens/_color.scss +6 -0
  149. data/_sass/tokens/_index.scss +2 -0
  150. data/_sass/tokens/_radius.scss +21 -0
  151. data/_sass/tokens/_typography.scss +4 -0
  152. data/_sass/utilities/_focus.scss +14 -0
  153. data/assets/css/main.scss +4 -0
  154. data/assets/js/ai-chat.js +47 -5
  155. data/assets/js/fleet-feedback-capture.js +124 -0
  156. data/assets/js/fleet-feedback.js +853 -0
  157. data/assets/js/mermaid-diagrams.js +1267 -0
  158. data/assets/js/modules/navigation/config.js +9 -6
  159. data/assets/js/modules/navigation/navbar.js +55 -0
  160. data/assets/js/modules/navigation/scroll-spy.js +315 -80
  161. data/assets/js/modules/theme/appearance.js +8 -2
  162. data/assets/js/obsidian-wiki-links.js +8 -3
  163. data/assets/js/page-feedback.js +125 -192
  164. data/assets/js/page-views.js +372 -0
  165. data/assets/js/recipe-scaler.js +501 -0
  166. data/assets/js/search-modal.js +36 -0
  167. data/assets/js/setup-wizard.js +2279 -226
  168. data/assets/js/site-builder.js +1834 -0
  169. data/assets/js/ui-enhancements.js +11 -3
  170. data/scripts/README.md +44 -0
  171. data/scripts/ai/README.md +38 -0
  172. data/scripts/ai/api_call.rb +124 -0
  173. data/scripts/ai/usage.rb +314 -0
  174. data/scripts/ai/usage_report.rb +225 -0
  175. data/scripts/bin/audit-consumer +39 -7
  176. data/scripts/bin/giscus-discussions +213 -14
  177. data/scripts/bin/manifest +35 -12
  178. data/scripts/ci/agent_review_result.py +164 -0
  179. data/scripts/ci/test_agent_review_result.py +172 -0
  180. data/scripts/ci/test_visual_evidence_autogen.py +341 -0
  181. data/scripts/ci/visual_evidence_autogen.py +1060 -0
  182. data/scripts/content-review.rb +20 -1
  183. data/scripts/design-system-check.rb +170 -0
  184. data/scripts/lib/audit.sh +42 -2
  185. data/scripts/lint-liquid-raw.rb +137 -0
  186. data/scripts/test/integration/mermaid +22 -8
  187. data/scripts/test/lib/run_tests.sh +3 -1
  188. data/scripts/test/lib/test_agent_review_result.sh +27 -0
  189. data/scripts/test/lib/test_visual_evidence_autogen.sh +24 -0
  190. data/scripts/translate.rb +94 -16
  191. metadata +48 -2
@@ -0,0 +1,88 @@
1
+ ---
2
+ # Feature: ZER0-084
3
+ layout: default
4
+ ---
5
+ {%- comment -%}
6
+ Layout: cookbook.html
7
+ Extends: default.html
8
+ Purpose: Landing page for one cookbook — cover, introduction, a jump-nav of
9
+ its courses, and the full recipe index grouped by course.
10
+ Front matter required: layout, title, cookbook (slug shared with its recipes)
11
+ Front matter optional: subtitle, description, image/preview, author,
12
+ grouped (false for one flat grid)
13
+ Notes: Recipes belong to a cookbook by matching its `cookbook:` slug. Omit
14
+ `cookbook:` here and the page indexes EVERY recipe on the site, which
15
+ is what a single-cookbook site wants.
16
+ {%- endcomment -%}
17
+
18
+ {%- assign _cb_slug = page.cookbook -%}
19
+ {%- if _cb_slug -%}
20
+ {%- assign _cb_recipes = site.recipes | where_exp: "doc", "doc.layout != 'cookbook'" | where: "cookbook", _cb_slug -%}
21
+ {%- else -%}
22
+ {%- assign _cb_recipes = site.recipes | where_exp: "doc", "doc.layout != 'cookbook'" -%}
23
+ {%- endif -%}
24
+ {%- assign _cb_courses = _cb_recipes | map: "course" | compact | uniq -%}
25
+ {%- assign _cb_image = page.image | default: page.preview -%}
26
+
27
+ <div class="cookbook">
28
+ {% comment %} ================================ {% endcomment %}
29
+ {% comment %} COVER {% endcomment %}
30
+ {% comment %} ================================ {% endcomment %}
31
+ <header class="cookbook-header">
32
+ <div class="row g-4 align-items-center">
33
+ {%- if _cb_image -%}
34
+ <div class="col-8 col-sm-5 col-md-4 col-lg-3">
35
+ <div class="cookbook-cover">
36
+ {%- include components/preview-image.html src=_cb_image alt=page.title class="" loading="eager" -%}
37
+ </div>
38
+ </div>
39
+ {%- endif -%}
40
+ <div class="col">
41
+ <h1 id="page-title" class="cookbook-title">{{ page.title }}</h1>
42
+ {%- if page.subtitle -%}
43
+ <p class="lead mb-2">{{ page.subtitle }}</p>
44
+ {%- endif -%}
45
+ {%- if page.author -%}
46
+ <p class="text-body-secondary small mb-2">By {{ page.author }}</p>
47
+ {%- endif -%}
48
+ <p class="text-body-secondary mb-3">
49
+ <i class="bi bi-egg-fried me-1" aria-hidden="true"></i>{{ _cb_recipes.size }} {% if _cb_recipes.size == 1 %}recipe{% else %}recipes{% endif %}
50
+ {%- if _cb_courses.size > 0 %} <span class="mx-1" aria-hidden="true">•</span> {{ _cb_courses.size }} {% if _cb_courses.size == 1 %}course{% else %}courses{% endif %}{% endif -%}
51
+ </p>
52
+ {%- if page.description -%}
53
+ <p class="cookbook-description">{{ page.description }}</p>
54
+ {%- endif -%}
55
+ </div>
56
+ </div>
57
+ </header>
58
+
59
+ {% comment %} ================================ {% endcomment %}
60
+ {% comment %} ABOUT (the markdown body) {% endcomment %}
61
+ {% comment %} ================================ {% endcomment %}
62
+ {%- assign _cb_body = content | strip -%}
63
+ {%- if _cb_body != "" -%}
64
+ <section class="cookbook-about">
65
+ {{ content }}
66
+ </section>
67
+ {%- endif -%}
68
+
69
+ {% comment %} ================================ {% endcomment %}
70
+ {% comment %} COURSE JUMP NAV {% endcomment %}
71
+ {% comment %} ================================ {% endcomment %}
72
+ {%- if _cb_courses.size > 1 and page.grouped != false -%}
73
+ <nav class="cookbook-jump" aria-label="Jump to a course">
74
+ {%- for _cb_pair in site.data.recipe_courses -%}
75
+ {%- if _cb_courses contains _cb_pair[0] -%}
76
+ <a class="btn btn-sm btn-outline-secondary" href="#course-{{ _cb_pair[0] }}">
77
+ <i class="bi {{ _cb_pair[1].icon | default: 'bi-journal-bookmark' }} me-1" aria-hidden="true"></i>{{ _cb_pair[1].title | default: _cb_pair[0] | escape }}
78
+ </a>
79
+ {%- endif -%}
80
+ {%- endfor -%}
81
+ </nav>
82
+ {%- endif -%}
83
+
84
+ {% comment %} ================================ {% endcomment %}
85
+ {% comment %} RECIPE INDEX {% endcomment %}
86
+ {% comment %} ================================ {% endcomment %}
87
+ {%- include components/recipe-index.html cookbook=_cb_slug grouped=page.grouped heading_level="h2" -%}
88
+ </div>
@@ -2,7 +2,7 @@
2
2
  # Features: ZER0-001, ZER0-008, ZER0-019
3
3
  layout: root
4
4
  ---
5
- <!--
5
+ {% comment %}
6
6
  ===================================================================
7
7
  DEFAULT LAYOUT - Standard content layout with sidebars
8
8
  ===================================================================
@@ -43,7 +43,7 @@ layout: root
43
43
  - bd-toc: Table of contents styling
44
44
  - bd-content: Content area styling
45
45
  ===================================================================
46
- -->
46
+ {% endcomment %}
47
47
 
48
48
  {%- comment -%}
49
49
  Sidebar visibility + nav mode are resolved by the shared include below
@@ -58,16 +58,16 @@ layout: root
58
58
  {%- endcomment -%}
59
59
  {% include navigation/sidebar-config.html %}
60
60
 
61
- <!-- ================================================ -->
62
- <!-- MAIN LAYOUT CONTAINER -->
63
- <!-- Bootstrap responsive container with custom grid -->
64
- <!-- ================================================ -->
61
+ {% comment %} ================================================ {% endcomment %}
62
+ {% comment %} MAIN LAYOUT CONTAINER {% endcomment %}
63
+ {% comment %} Bootstrap responsive container with custom grid {% endcomment %}
64
+ {% comment %} ================================================ {% endcomment %}
65
65
  <div class="container-xxl bd-gutter mt-3 my-md-4 bd-layout{% unless sidebar_has_content %} bd-layout--no-sidebar{% endunless %}">
66
66
 
67
- <!-- ================================ -->
68
- <!-- LEFT SIDEBAR - Navigation -->
69
- <!-- ================================ -->
70
- <!-- Site navigation, content outline, and offcanvas menu for mobile -->
67
+ {% comment %} ================================ {% endcomment %}
68
+ {% comment %} LEFT SIDEBAR - Navigation {% endcomment %}
69
+ {% comment %} ================================ {% endcomment %}
70
+ {% comment %} Site navigation, content outline, and offcanvas menu for mobile {% endcomment %}
71
71
  {% if sidebar_has_content %}
72
72
  <aside class="bd-sidebar">
73
73
  {% include navigation/sidebar-left.html %}
@@ -83,42 +83,45 @@ layout: root
83
83
  </div>
84
84
  {% endif %}
85
85
 
86
- <!-- ================================ -->
87
- <!-- MAIN CONTENT AREA -->
88
- <!-- ================================ -->
89
- <!-- Primary content section with scroll spy for table of contents navigation.
86
+ {% comment %} ================================ {% endcomment %}
87
+ {% comment %} MAIN CONTENT AREA {% endcomment %}
88
+ {% comment %} ================================ {% endcomment %}
89
+ {% comment %} Primary content section. TOC highlighting is handled by the
90
+ theme's own scroll spy (assets/js/modules/navigation/scroll-spy.js) —
91
+ no `data-bs-spy` here, because Bootstrap's native ScrollSpy fought it
92
+ for the `.active` class and made the bolding jump around.
90
93
  Not a <main>: root.html already provides the single <main id="main-content">
91
- landmark; a nested <main> here would duplicate it (issue #299). -->
92
- <div class="bd-main order-1" data-bs-spy="scroll" data-bs-target="#TableOfContents" data-bs-offset="100" data-bs-smooth-scroll="true">
94
+ landmark; a nested <main> here would duplicate it (issue #299). {% endcomment %}
95
+ <div class="bd-main order-1">
93
96
 
94
97
  {%- comment -%}
95
98
  Page introduction: title, breadcrumbs, metadata.
96
- Skipped on layouts that render their own page header (article, note)
97
- to avoid duplicate H1s. Authors can also opt-out per page via
98
- `hide_intro: true` in front matter.
99
+ Skipped on layouts that render their own page header (article, note,
100
+ recipe, cookbook) to avoid duplicate H1s. Authors can also opt-out
101
+ per page via `hide_intro: true` in front matter.
99
102
  {%- endcomment -%}
100
103
  {% assign _skip_intro = false %}
101
- {% if page.layout == "article" or page.layout == "note" or page.hide_intro %}
104
+ {% if page.layout == "article" or page.layout == "note" or page.layout == "recipe" or page.layout == "cookbook" or page.hide_intro %}
102
105
  {% assign _skip_intro = true %}
103
106
  {% endif %}
104
107
  {% unless _skip_intro %}
105
108
  {% include content/intro.html %}
106
109
  {% endunless %}
107
110
 
108
- <!-- =============================== -->
109
- <!-- RIGHT SIDEBAR - Table of Contents -->
110
- <!-- =============================== -->
111
- <!-- Page outline, shortcuts, and related links (hidden on mobile) -->
111
+ {% comment %} =============================== {% endcomment %}
112
+ {% comment %} RIGHT SIDEBAR - Table of Contents {% endcomment %}
113
+ {% comment %} =============================== {% endcomment %}
114
+ {% comment %} Page outline, shortcuts, and related links (hidden on mobile) {% endcomment %}
112
115
  {% unless sidebar_enabled == false %}
113
116
  <div class="bd-toc text-body-secondary">
114
117
  {% include navigation/sidebar-right.html %}
115
118
  </div>
116
119
  {% endunless %}
117
120
 
118
- <!-- =============================== -->
119
- <!-- MAIN CONTENT BODY -->
120
- <!-- =============================== -->
121
- <!-- Where the actual page content is rendered -->
121
+ {% comment %} =============================== {% endcomment %}
122
+ {% comment %} MAIN CONTENT BODY {% endcomment %}
123
+ {% comment %} =============================== {% endcomment %}
124
+ {% comment %} Where the actual page content is rendered {% endcomment %}
122
125
  <div class="bd-content ps-lg-2">
123
126
  {{ content }}
124
127
 
data/_layouts/home.html CHANGED
@@ -2,7 +2,7 @@
2
2
  # Feature: ZER0-019
3
3
  layout: root
4
4
  ---
5
- <!--
5
+ {% comment %}
6
6
  ===================================================================
7
7
  HOME LAYOUT - Homepage template with minimal structure
8
8
  ===================================================================
@@ -45,36 +45,36 @@ layout: root
45
45
  - RSS link maintains blog connectivity
46
46
  - Clean presentation suitable for landing pages
47
47
  ===================================================================
48
- -->
48
+ {% endcomment %}
49
49
 
50
- <!-- ================================ -->
51
- <!-- HOME PAGE CONTAINER -->
52
- <!-- ================================ -->
50
+ {% comment %} ================================ {% endcomment %}
51
+ {% comment %} HOME PAGE CONTAINER {% endcomment %}
52
+ {% comment %} ================================ {% endcomment %}
53
53
  <div class="home">
54
- <!-- ========================== -->
55
- <!-- OPTIONAL PAGE TITLE -->
56
- <!-- ========================== -->
57
- <!-- Display title only if specified in page frontmatter. -->
58
- <!-- Usage: Add 'title: "Homepage Title"' to page frontmatter. -->
59
- <!-- Landing/showcase pages can keep `title` for SEO but suppress the -->
60
- <!-- visible heading (e.g. when a custom hero supplies its own <h1>) -->
61
- <!-- with `hide_title: true`. -->
54
+ {% comment %} ========================== {% endcomment %}
55
+ {% comment %} OPTIONAL PAGE TITLE {% endcomment %}
56
+ {% comment %} ========================== {% endcomment %}
57
+ {% comment %} Display title only if specified in page frontmatter. {% endcomment %}
58
+ {% comment %} Usage: Add 'title: "Homepage Title"' to page frontmatter. {% endcomment %}
59
+ {% comment %} Landing/showcase pages can keep `title` for SEO but suppress the {% endcomment %}
60
+ {% comment %} visible heading (e.g. when a custom hero supplies its own <h1>) {% endcomment %}
61
+ {% comment %} with `hide_title: true`. {% endcomment %}
62
62
  {%- if page.title and page.hide_title != true and page.hide_intro != true -%}
63
63
  <h1 class="page-heading">{{ page.title }}</h1>
64
64
  {%- endif -%}
65
65
 
66
- <!-- ========================== -->
67
- <!-- MAIN CONTENT AREA -->
68
- <!-- ========================== -->
69
- <!-- Homepage content rendered from Markdown or HTML -->
70
- <!-- Can include hero sections, feature cards, etc. -->
66
+ {% comment %} ========================== {% endcomment %}
67
+ {% comment %} MAIN CONTENT AREA {% endcomment %}
68
+ {% comment %} ========================== {% endcomment %}
69
+ {% comment %} Homepage content rendered from Markdown or HTML {% endcomment %}
70
+ {% comment %} Can include hero sections, feature cards, etc. {% endcomment %}
71
71
  {{ content }}
72
72
 
73
- <!-- ========================== -->
74
- <!-- RSS SUBSCRIPTION LINK -->
75
- <!-- ========================== -->
76
- <!-- Provides easy access to RSS feed for blog updates. -->
77
- <!-- Opt out on landing/showcase homepages with `rss_subscribe: false`. -->
73
+ {% comment %} ========================== {% endcomment %}
74
+ {% comment %} RSS SUBSCRIPTION LINK {% endcomment %}
75
+ {% comment %} ========================== {% endcomment %}
76
+ {% comment %} Provides easy access to RSS feed for blog updates. {% endcomment %}
77
+ {% comment %} Opt out on landing/showcase homepages with `rss_subscribe: false`. {% endcomment %}
78
78
  {%- unless page.rss_subscribe == false -%}
79
79
  <p class="rss-subscribe">
80
80
  subscribe <a href="{{ "/feed.xml" | relative_url }}">via RSS</a>
data/_layouts/index.html CHANGED
@@ -2,7 +2,7 @@
2
2
  # Feature: ZER0-019
3
3
  layout: root
4
4
  ---
5
- <!--
5
+ {% comment %}
6
6
  ===================================================================
7
7
  INDEX LAYOUT - Search indexing template
8
8
  ===================================================================
@@ -40,16 +40,16 @@ layout: root
40
40
  - Provides proper container context for search tools
41
41
  - Maintains consistent navigation patterns
42
42
  ===================================================================
43
- -->
43
+ {% endcomment %}
44
44
 
45
- <!-- ================================ -->
46
- <!-- SEARCH INDEX CONTAINER -->
47
- <!-- ================================ -->
48
- <!-- Full-width container optimized for search interfaces and content discovery -->
45
+ {% comment %} ================================ {% endcomment %}
46
+ {% comment %} SEARCH INDEX CONTAINER {% endcomment %}
47
+ {% comment %} ================================ {% endcomment %}
48
+ {% comment %} Full-width container optimized for search interfaces and content discovery {% endcomment %}
49
49
  <div id="search-index" class="container-fluid pt-5 py-5">
50
- <!-- ========================== -->
51
- <!-- SEARCH CONTENT AREA -->
52
- <!-- ========================== -->
53
- <!-- Main content area for search forms, results, filters, and indexing -->
50
+ {% comment %} ========================== {% endcomment %}
51
+ {% comment %} SEARCH CONTENT AREA {% endcomment %}
52
+ {% comment %} ========================== {% endcomment %}
53
+ {% comment %} Main content area for search forms, results, filters, and indexing {% endcomment %}
54
54
  {{ content }}
55
55
  </div>
@@ -2,7 +2,7 @@
2
2
  # Feature: ZER0-019
3
3
  layout: root
4
4
  ---
5
- <!--
5
+ {% comment %}
6
6
  ===================================================================
7
7
  LANDING LAYOUT - Welcome page for first-time visitors
8
8
  ===================================================================
@@ -43,7 +43,7 @@ layout: root
43
43
  - Custom CSS for enhanced styling
44
44
  - Responsive images and icons
45
45
  ===================================================================
46
- -->
46
+ {% endcomment %}
47
47
 
48
48
  {%- comment -%}
49
49
  Landing copy is data-driven via _data/landing.yml. Defaults shipped with the
@@ -53,9 +53,9 @@ layout: root
53
53
  {%- assign landing = site.data.landing -%}
54
54
  {%- assign github_url = site.resources.github_repo | default: "" | join: "" -%}
55
55
 
56
- <!-- ================================ -->
57
- <!-- HERO SECTION -->
58
- <!-- ================================ -->
56
+ {% comment %} ================================ {% endcomment %}
57
+ {% comment %} HERO SECTION {% endcomment %}
58
+ {% comment %} ================================ {% endcomment %}
59
59
  <div class="bg-primary zer0-bg-hero text-white position-relative overflow-hidden landing-hero">
60
60
  <div class="container-xl py-5 px-4 px-md-5">
61
61
  <div class="row align-items-center min-vh-50 g-4 g-lg-5">
@@ -130,9 +130,9 @@ layout: root
130
130
  </div>
131
131
  </div>
132
132
 
133
- <!-- ================================ -->
134
- <!-- MAIN CONTENT AREA -->
135
- <!-- ================================ -->
133
+ {% comment %} ================================ {% endcomment %}
134
+ {% comment %} MAIN CONTENT AREA {% endcomment %}
135
+ {% comment %} ================================ {% endcomment %}
136
136
  {% include landing/landing-quick-links.html %}
137
137
 
138
138
  {%- comment -%}
@@ -145,9 +145,9 @@ layout: root
145
145
  {{ content }}
146
146
  </div>
147
147
 
148
- <!-- ================================ -->
149
- <!-- FEATURES SECTION (data-driven) -->
150
- <!-- ================================ -->
148
+ {% comment %} ================================ {% endcomment %}
149
+ {% comment %} FEATURES SECTION (data-driven) {% endcomment %}
150
+ {% comment %} ================================ {% endcomment %}
151
151
  {%- if landing.features.items -%}
152
152
  <section id="features" class="zer0-section bg-body-tertiary" aria-labelledby="features-heading">
153
153
  <div class="container-xl py-5 px-4 px-md-5">
@@ -179,9 +179,9 @@ layout: root
179
179
  </section>
180
180
  {%- endif -%}
181
181
 
182
- <!-- ================================ -->
183
- <!-- QUICK START SECTION (data-driven)-->
184
- <!-- ================================ -->
182
+ {% comment %} ================================ {% endcomment %}
183
+ {% comment %} QUICK START SECTION (data-driven){% endcomment %}
184
+ {% comment %} ================================ {% endcomment %}
185
185
  {%- comment -%}
186
186
  Rendered only when the site ships a `get_started` block in
187
187
  _data/landing.yml. The install cards advertise THEME installation
@@ -203,7 +203,7 @@ layout: root
203
203
  </section>
204
204
  {%- endif -%}
205
205
 
206
- <!-- ================================ -->
207
- <!-- AUTHOR / E-E-A-T SECTION -->
208
- <!-- ================================ -->
206
+ {% comment %} ================================ {% endcomment %}
207
+ {% comment %} AUTHOR / E-E-A-T SECTION {% endcomment %}
208
+ {% comment %} ================================ {% endcomment %}
209
209
  {% include components/author-eeat.html %}
data/_layouts/news.html CHANGED
@@ -3,7 +3,7 @@
3
3
  layout: root
4
4
  source: "https://getbootstrap.com/docs/5.3/examples/blog/#"
5
5
  ---
6
- <!--
6
+ {% comment %}
7
7
  ===================================================================
8
8
  NEWS LAYOUT - Main News Homepage with Section Style Support
9
9
  ===================================================================
@@ -49,7 +49,7 @@ source: "https://getbootstrap.com/docs/5.3/examples/blog/#"
49
49
 
50
50
  Note: All cards are inlined to avoid Liquid nesting depth issues
51
51
  ===================================================================
52
- -->
52
+ {% endcomment %}
53
53
 
54
54
  {% comment %}
55
55
  WARNING: section_style is required in front matter!
@@ -92,9 +92,9 @@ source: "https://getbootstrap.com/docs/5.3/examples/blog/#"
92
92
  {% if _tags_index_page %}{% assign _tags_linkable = true %}{% endif %}
93
93
  {% endif %}
94
94
 
95
- <!-- ================================ -->
96
- <!-- NEWS HEADER -->
97
- <!-- ================================ -->
95
+ {% comment %} ================================ {% endcomment %}
96
+ {% comment %} NEWS HEADER {% endcomment %}
97
+ {% comment %} ================================ {% endcomment %}
98
98
  <div class="container-fluid bg-dark text-white py-3 mb-4">
99
99
  <div class="container">
100
100
  <div class="row align-items-center">
@@ -131,18 +131,18 @@ source: "https://getbootstrap.com/docs/5.3/examples/blog/#"
131
131
  </div>
132
132
  </div>
133
133
 
134
- <!-- Not a <main>: root.html already provides the single <main id="main-content">
135
- landmark; a nested <main> here would duplicate it (issue #299). -->
134
+ {% comment %} Not a <main>: root.html already provides the single <main id="main-content">
135
+ landmark; a nested <main> here would duplicate it (issue #299). {% endcomment %}
136
136
  <div class="container">
137
137
 
138
138
  {% if section_style == "magazine" %}
139
- <!-- ================================ -->
140
- <!-- MAGAZINE STYLE LAYOUT -->
141
- <!-- ================================ -->
139
+ {% comment %} ================================ {% endcomment %}
140
+ {% comment %} MAGAZINE STYLE LAYOUT {% endcomment %}
141
+ {% comment %} ================================ {% endcomment %}
142
142
 
143
- <!-- ================================ -->
144
- <!-- HERO - BREAKING NEWS -->
145
- <!-- ================================ -->
143
+ {% comment %} ================================ {% endcomment %}
144
+ {% comment %} HERO - BREAKING NEWS {% endcomment %}
145
+ {% comment %} ================================ {% endcomment %}
146
146
  {% assign breaking_posts = all_posts | where: "breaking", true %}
147
147
  {% assign hero_post = breaking_posts | first %}
148
148
 
@@ -215,9 +215,9 @@ source: "https://getbootstrap.com/docs/5.3/examples/blog/#"
215
215
  </section>
216
216
  {% endif %}
217
217
 
218
- <!-- ================================ -->
219
- <!-- SECTION QUICK NAVIGATION -->
220
- <!-- ================================ -->
218
+ {% comment %} ================================ {% endcomment %}
219
+ {% comment %} SECTION QUICK NAVIGATION {% endcomment %}
220
+ {% comment %} ================================ {% endcomment %}
221
221
  <section class="section-nav mb-5">
222
222
  <div class="row row-cols-2 row-cols-md-3 row-cols-lg-6 g-3">
223
223
  {% for sec_name in news_sections %}
@@ -242,9 +242,9 @@ source: "https://getbootstrap.com/docs/5.3/examples/blog/#"
242
242
  </div>
243
243
  </section>
244
244
 
245
- <!-- ================================ -->
246
- <!-- FEATURED STORIES -->
247
- <!-- ================================ -->
245
+ {% comment %} ================================ {% endcomment %}
246
+ {% comment %} FEATURED STORIES {% endcomment %}
247
+ {% comment %} ================================ {% endcomment %}
248
248
  {% assign featured_posts = all_posts | where: "featured", true %}
249
249
  {% if featured_posts.size > 0 %}
250
250
  <section class="featured-section mb-5">
@@ -255,7 +255,7 @@ source: "https://getbootstrap.com/docs/5.3/examples/blog/#"
255
255
  </div>
256
256
 
257
257
  <div class="row g-4">
258
- <!-- Main Featured Post -->
258
+ {% comment %} Main Featured Post {% endcomment %}
259
259
  {% assign main_featured = featured_posts | first %}
260
260
  <div class="col-lg-6">
261
261
  <div class="card h-100 border-0 shadow">
@@ -300,7 +300,7 @@ source: "https://getbootstrap.com/docs/5.3/examples/blog/#"
300
300
  </div>
301
301
  </div>
302
302
 
303
- <!-- Secondary Featured Posts -->
303
+ {% comment %} Secondary Featured Posts {% endcomment %}
304
304
  <div class="col-lg-6">
305
305
  <div class="row row-cols-1 row-cols-md-2 g-4">
306
306
  {% for fpost in featured_posts offset:1 limit:4 %}
@@ -334,9 +334,9 @@ source: "https://getbootstrap.com/docs/5.3/examples/blog/#"
334
334
  </section>
335
335
  {% endif %}
336
336
 
337
- <!-- ================================ -->
338
- <!-- POSTS BY SECTION -->
339
- <!-- ================================ -->
337
+ {% comment %} ================================ {% endcomment %}
338
+ {% comment %} POSTS BY SECTION {% endcomment %}
339
+ {% comment %} ================================ {% endcomment %}
340
340
  {% for sec_name in news_sections limit: 3 %}
341
341
  {% assign section_posts = all_posts | where_exp: "post", "post.categories contains sec_name" %}
342
342
  {% assign _sec_nav = site.data.navigation.posts | where: "title", sec_name | first %}
@@ -395,9 +395,9 @@ source: "https://getbootstrap.com/docs/5.3/examples/blog/#"
395
395
  {% endfor %}
396
396
 
397
397
  {% elsif section_style == "grid" %}
398
- <!-- ================================ -->
399
- <!-- GRID STYLE LAYOUT -->
400
- <!-- ================================ -->
398
+ {% comment %} ================================ {% endcomment %}
399
+ {% comment %} GRID STYLE LAYOUT {% endcomment %}
400
+ {% comment %} ================================ {% endcomment %}
401
401
  <section class="grid-section mb-5">
402
402
  <h2 class="h4 mb-4">
403
403
  <i class="bi bi-grid me-2"></i>All Articles
@@ -453,9 +453,9 @@ source: "https://getbootstrap.com/docs/5.3/examples/blog/#"
453
453
  </section>
454
454
 
455
455
  {% elsif section_style == "list" %}
456
- <!-- ================================ -->
457
- <!-- LIST STYLE LAYOUT -->
458
- <!-- ================================ -->
456
+ {% comment %} ================================ {% endcomment %}
457
+ {% comment %} LIST STYLE LAYOUT {% endcomment %}
458
+ {% comment %} ================================ {% endcomment %}
459
459
  <section class="list-section mb-5">
460
460
  <h2 class="h4 mb-4">
461
461
  <i class="bi bi-list-ul me-2"></i>Latest Articles
@@ -509,9 +509,9 @@ source: "https://getbootstrap.com/docs/5.3/examples/blog/#"
509
509
 
510
510
  {% endif %}
511
511
 
512
- <!-- ================================ -->
513
- <!-- LATEST POSTS -->
514
- <!-- ================================ -->
512
+ {% comment %} ================================ {% endcomment %}
513
+ {% comment %} LATEST POSTS {% endcomment %}
514
+ {% comment %} ================================ {% endcomment %}
515
515
  {% if section_style == "magazine" %}
516
516
  <section class="latest-section mb-5">
517
517
  <div class="d-flex justify-content-between align-items-center mb-4">
@@ -557,9 +557,9 @@ source: "https://getbootstrap.com/docs/5.3/examples/blog/#"
557
557
  </section>
558
558
  {% endif %}
559
559
 
560
- <!-- ================================ -->
561
- <!-- PAGE CONTENT (if any) -->
562
- <!-- ================================ -->
560
+ {% comment %} ================================ {% endcomment %}
561
+ {% comment %} PAGE CONTENT (if any) {% endcomment %}
562
+ {% comment %} ================================ {% endcomment %}
563
563
  {% if content != blank %}
564
564
  <section class="page-content mb-5">
565
565
  <div class="card border-0 shadow-sm">
@@ -570,12 +570,12 @@ source: "https://getbootstrap.com/docs/5.3/examples/blog/#"
570
570
  </section>
571
571
  {% endif %}
572
572
 
573
- <!-- ================================ -->
574
- <!-- TAGS & ARCHIVES -->
575
- <!-- ================================ -->
573
+ {% comment %} ================================ {% endcomment %}
574
+ {% comment %} TAGS & ARCHIVES {% endcomment %}
575
+ {% comment %} ================================ {% endcomment %}
576
576
  <section class="footer-widgets mb-5">
577
577
  <div class="row g-4">
578
- <!-- Popular Tags -->
578
+ {% comment %} Popular Tags {% endcomment %}
579
579
  <div class="col-md-6">
580
580
  <div class="card h-100 border-0 bg-body-tertiary">
581
581
  <div class="card-body">
@@ -610,7 +610,7 @@ source: "https://getbootstrap.com/docs/5.3/examples/blog/#"
610
610
  </div>
611
611
  </div>
612
612
 
613
- <!-- Archives -->
613
+ {% comment %} Archives {% endcomment %}
614
614
  <div class="col-md-6">
615
615
  <div class="card h-100 border-0 bg-body-tertiary">
616
616
  <div class="card-body">
@@ -661,9 +661,9 @@ source: "https://getbootstrap.com/docs/5.3/examples/blog/#"
661
661
  </div>
662
662
  </section>
663
663
 
664
- <!-- ================================ -->
665
- <!-- NEWSLETTER SIGNUP -->
666
- <!-- ================================ -->
664
+ {% comment %} ================================ {% endcomment %}
665
+ {% comment %} NEWSLETTER SIGNUP {% endcomment %}
666
+ {% comment %} ================================ {% endcomment %}
667
667
  {% comment %}
668
668
  Renders only when it can actually do something: a configured form
669
669
  endpoint (news.newsletter.endpoint) posts for real; otherwise a