jekyll-theme-zer0 1.29.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 (148) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +715 -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 +169 -18
  7. data/_data/consumers.yml +48 -5
  8. data/_data/features.yml +146 -20
  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 +122 -114
  14. data/_data/ui-text.yml +18 -0
  15. data/_includes/README.md +11 -1
  16. data/_includes/analytics/posthog.html +2 -2
  17. data/_includes/components/admin-links.html +2 -2
  18. data/_includes/components/admin-tabs.html +2 -2
  19. data/_includes/components/ai-chat.html +14 -11
  20. data/_includes/components/analytics-dashboard.html +8 -8
  21. data/_includes/components/author-bio.html +1 -1
  22. data/_includes/components/author-card.html +10 -2
  23. data/_includes/components/author-eeat.html +4 -4
  24. data/_includes/components/background-customizer.html +8 -8
  25. data/_includes/components/background-image.html +114 -0
  26. data/_includes/components/background-settings.html +28 -15
  27. data/_includes/components/collection-manager.html +5 -5
  28. data/_includes/components/component-showcase.html +13 -13
  29. data/_includes/components/config-editor.html +12 -12
  30. data/_includes/components/config-viewer.html +8 -8
  31. data/_includes/components/cookie-consent.html +11 -11
  32. data/_includes/components/cta-button.html +7 -2
  33. data/_includes/components/dev-shortcuts.html +7 -7
  34. data/_includes/components/env-dashboard.html +8 -8
  35. data/_includes/components/env-switcher.html +9 -9
  36. data/_includes/components/feature-card.html +2 -2
  37. data/_includes/components/halfmoon.html +2 -2
  38. data/_includes/components/info-section.html +36 -36
  39. data/_includes/components/js-cdn.html +15 -15
  40. data/_includes/components/language-toggle.html +4 -4
  41. data/_includes/components/mermaid.html +72 -435
  42. data/_includes/components/nanobar.html +5 -5
  43. data/_includes/components/nav-editor.html +2 -2
  44. data/_includes/components/nav-export.html +2 -2
  45. data/_includes/components/nav-overview.html +2 -2
  46. data/_includes/components/page-feedback.html +45 -30
  47. data/_includes/components/page-views-init.html +1 -1
  48. data/_includes/components/post-card.html +22 -22
  49. data/_includes/components/post-type-badge.html +2 -2
  50. data/_includes/components/powered-by.html +2 -2
  51. data/_includes/components/preview-image.html +6 -0
  52. data/_includes/components/quick-index.html +2 -2
  53. data/_includes/components/search-modal.html +27 -2
  54. data/_includes/components/searchbar.html +2 -2
  55. data/_includes/components/svg-background.html +2 -2
  56. data/_includes/components/theme-customizer.html +2 -2
  57. data/_includes/components/theme-info.html +6 -6
  58. data/_includes/components/theme-preview-gallery.html +22 -22
  59. data/_includes/content/giscus.html +2 -2
  60. data/_includes/content/intro.html +8 -8
  61. data/_includes/content/jsonld-faq.html +2 -2
  62. data/_includes/content/jsonld-software.html +2 -2
  63. data/_includes/content/seo.html +4 -4
  64. data/_includes/content/sitemap.html +27 -27
  65. data/_includes/content/toc.html +183 -183
  66. data/_includes/core/branding.html +6 -6
  67. data/_includes/core/console-capture.html +32 -74
  68. data/_includes/core/favicon.html +49 -7
  69. data/_includes/core/footer-fabs.html +17 -3
  70. data/_includes/core/footer.html +31 -18
  71. data/_includes/core/head.html +102 -90
  72. data/_includes/core/header.html +71 -52
  73. data/_includes/docs/bootstrap-docs.html +8 -8
  74. data/_includes/landing/landing-install-cards.html +2 -2
  75. data/_includes/landing/landing-quick-links.html +1 -1
  76. data/_includes/navigation/admin-nav.html +2 -2
  77. data/_includes/navigation/nav-tree.html +8 -8
  78. data/_includes/navigation/navbar.html +12 -12
  79. data/_includes/navigation/section-sidebar.html +16 -16
  80. data/_includes/navigation/sidebar-config.html +36 -2
  81. data/_includes/navigation/sidebar-left.html +15 -15
  82. data/_includes/navigation/sidebar-right.html +6 -6
  83. data/_includes/obsidian/full-graph.html +2 -2
  84. data/_includes/setup/claude-session.html +72 -0
  85. data/_includes/setup/prereq-checklist.html +90 -0
  86. data/_includes/setup/wizard.html +906 -291
  87. data/_includes/stats/stats-categories.html +8 -8
  88. data/_includes/stats/stats-header.html +14 -14
  89. data/_includes/stats/stats-metrics.html +12 -12
  90. data/_includes/stats/stats-no-data.html +12 -12
  91. data/_includes/stats/stats-overview.html +6 -6
  92. data/_includes/stats/stats-tags.html +8 -8
  93. data/_layouts/404.html +38 -24
  94. data/_layouts/admin.html +22 -22
  95. data/_layouts/article.html +39 -34
  96. data/_layouts/author.html +20 -20
  97. data/_layouts/authors.html +2 -2
  98. data/_layouts/book-abc.html +12 -12
  99. data/_layouts/book-story.html +15 -15
  100. data/_layouts/book.html +12 -12
  101. data/_layouts/collection.html +33 -33
  102. data/_layouts/cookbook.html +12 -12
  103. data/_layouts/default.html +27 -24
  104. data/_layouts/home.html +23 -23
  105. data/_layouts/index.html +10 -10
  106. data/_layouts/landing.html +17 -17
  107. data/_layouts/news.html +44 -44
  108. data/_layouts/note.html +38 -38
  109. data/_layouts/notebook.html +34 -34
  110. data/_layouts/recipe.html +24 -24
  111. data/_layouts/root.html +73 -55
  112. data/_layouts/section.html +23 -23
  113. data/_layouts/setup.html +3 -3
  114. data/_layouts/sitemap-collection.html +49 -49
  115. data/_layouts/stats.html +40 -40
  116. data/_layouts/tag.html +12 -12
  117. data/_layouts/welcome.html +21 -21
  118. data/_sass/components/_mermaid.scss +375 -0
  119. data/_sass/components/_setup-wizard.scss +569 -40
  120. data/_sass/core/_navbar.scss +11 -31
  121. data/_sass/layouts/_navbar-extras.scss +14 -4
  122. data/assets/css/main.scss +1 -0
  123. data/assets/js/ai-chat.js +47 -5
  124. data/assets/js/fleet-feedback-capture.js +124 -0
  125. data/assets/js/fleet-feedback.js +853 -0
  126. data/assets/js/mermaid-diagrams.js +1267 -0
  127. data/assets/js/modules/navigation/config.js +9 -6
  128. data/assets/js/modules/navigation/scroll-spy.js +315 -80
  129. data/assets/js/modules/theme/appearance.js +8 -2
  130. data/assets/js/obsidian-wiki-links.js +8 -3
  131. data/assets/js/page-feedback.js +125 -192
  132. data/assets/js/search-modal.js +26 -0
  133. data/assets/js/setup-wizard.js +2112 -361
  134. data/assets/js/site-builder.js +1834 -0
  135. data/assets/js/ui-enhancements.js +11 -3
  136. data/scripts/README.md +15 -0
  137. data/scripts/ai/README.md +38 -0
  138. data/scripts/ai/api_call.rb +124 -0
  139. data/scripts/ai/usage.rb +314 -0
  140. data/scripts/ai/usage_report.rb +225 -0
  141. data/scripts/ci/test_visual_evidence_autogen.py +341 -0
  142. data/scripts/ci/visual_evidence_autogen.py +1060 -0
  143. data/scripts/content-review.rb +20 -1
  144. data/scripts/test/integration/mermaid +22 -8
  145. data/scripts/test/lib/run_tests.sh +1 -0
  146. data/scripts/test/lib/test_visual_evidence_autogen.sh +24 -0
  147. data/scripts/translate.rb +23 -1
  148. metadata +19 -2
@@ -1,4 +1,4 @@
1
- <!--
1
+ {% comment %}
2
2
  ===================================================================
3
3
  CONFIG VIEWER — Accordion-based live configuration browser
4
4
  ===================================================================
@@ -12,9 +12,9 @@
12
12
  Dependencies: Bootstrap 5.3, assets/js/config-utility.js
13
13
  Data source: site.* variables (Liquid at build time)
14
14
  ===================================================================
15
- -->
15
+ {% endcomment %}
16
16
 
17
- <!-- ── Search bar ─────────────────────────────────────────────────── -->
17
+ {% comment %} ── Search bar ─────────────────────────────────────────────────── {% endcomment %}
18
18
  <div class="input-group mb-3">
19
19
  <span class="input-group-text"><i class="bi bi-search"></i></span>
20
20
  <input type="text" class="form-control" id="cfg-search"
@@ -24,7 +24,7 @@
24
24
  </button>
25
25
  </div>
26
26
 
27
- <!-- ── Toolbar ─────────────────────────────────────────────────────── -->
27
+ {% comment %} ── Toolbar ─────────────────────────────────────────────────────── {% endcomment %}
28
28
  <div class="d-flex justify-content-between align-items-center mb-3">
29
29
  <div class="btn-group btn-group-sm" role="group">
30
30
  <button class="btn btn-outline-secondary" id="cfg-expand-all" title="Expand all sections">
@@ -39,7 +39,7 @@
39
39
  </button>
40
40
  </div>
41
41
 
42
- <!-- ── Accordion ───────────────────────────────────────────────────── -->
42
+ {% comment %} ── Accordion ───────────────────────────────────────────────────── {% endcomment %}
43
43
  <div class="accordion" id="configAccordion">
44
44
 
45
45
  {% comment %} ──────────── Section: Site Identity ──────────── {% endcomment %}
@@ -473,7 +473,7 @@
473
473
  </div>
474
474
  {% endif %}
475
475
 
476
- </div><!-- /configAccordion -->
476
+ </div>{% comment %} /configAccordion {% endcomment %}
477
477
 
478
- <!-- ── Hidden full YAML for copy-all (populated by parent page) ──── -->
479
- <!-- The parent page must render: <pre id="cfg-full-yaml" class="d-none">…</pre> -->
478
+ {% comment %} ── Hidden full YAML for copy-all (populated by parent page) ──── {% endcomment %}
479
+ {% comment %} The parent page must render: <pre id="cfg-full-yaml" class="d-none">…</pre> {% endcomment %}
@@ -1,5 +1,5 @@
1
1
  {% comment %} Feature: ZER0-007 {% endcomment %}
2
- <!--
2
+ {% comment %}
3
3
  ===================================================================
4
4
  COOKIE CONSENT - GDPR/CCPA Compliant Privacy Management
5
5
  ===================================================================
@@ -33,7 +33,7 @@
33
33
  - High contrast design for visibility
34
34
  - Semantic HTML structure
35
35
  ===================================================================
36
- -->
36
+ {% endcomment %}
37
37
 
38
38
  {% comment %}
39
39
  Cookie Consent Banner for Zer0-Mistakes Jekyll Theme
@@ -84,7 +84,7 @@ Configuration: Uses site.posthog settings from _config.yml
84
84
  </div>
85
85
  </div>
86
86
 
87
- <!-- Cookie Settings Modal -->
87
+ {% comment %} Cookie Settings Modal {% endcomment %}
88
88
  <div class="modal fade" id="cookieSettingsModal" tabindex="-1" aria-labelledby="cookieSettingsModalLabel" aria-hidden="true">
89
89
  <div class="modal-dialog modal-lg">
90
90
  <div class="modal-content">
@@ -102,10 +102,10 @@ Configuration: Uses site.posthog settings from _config.yml
102
102
 
103
103
  <div class="cookie-category mb-4">
104
104
  <div class="d-flex justify-content-between align-items-center mb-2">
105
- <h6 class="mb-0">
105
+ <h3 class="h6 mb-0">
106
106
  <i class="bi bi-shield-fill-check text-success me-2"></i>
107
107
  Essential Cookies
108
- </h6>
108
+ </h3>
109
109
  <span class="badge bg-success">Always Active</span>
110
110
  </div>
111
111
  <p class="small text-muted mb-0">
@@ -115,10 +115,10 @@ Configuration: Uses site.posthog settings from _config.yml
115
115
 
116
116
  <div class="cookie-category mb-4">
117
117
  <div class="d-flex justify-content-between align-items-center mb-2">
118
- <h6 class="mb-0">
118
+ <h3 class="h6 mb-0">
119
119
  <i class="bi bi-graph-up me-2"></i>
120
120
  Analytics Cookies
121
- </h6>
121
+ </h3>
122
122
  <div class="form-check form-switch">
123
123
  <input class="form-check-input" type="checkbox" id="analyticsCookies" checked>
124
124
  <label class="form-check-label" for="analyticsCookies">Enable</label>
@@ -138,10 +138,10 @@ Configuration: Uses site.posthog settings from _config.yml
138
138
 
139
139
  <div class="cookie-category mb-4">
140
140
  <div class="d-flex justify-content-between align-items-center mb-2">
141
- <h6 class="mb-0">
141
+ <h3 class="h6 mb-0">
142
142
  <i class="bi bi-megaphone me-2"></i>
143
143
  Marketing Cookies
144
- </h6>
144
+ </h3>
145
145
  <div class="form-check form-switch">
146
146
  <input class="form-check-input" type="checkbox" id="marketingCookies">
147
147
  <label class="form-check-label" for="marketingCookies">Enable</label>
@@ -156,10 +156,10 @@ Configuration: Uses site.posthog settings from _config.yml
156
156
  </div>
157
157
 
158
158
  <div class="bg-body p-3 rounded">
159
- <h6 class="text-body mb-2">
159
+ <h3 class="h6 text-body mb-2">
160
160
  <i class="bi bi-info-circle me-2"></i>
161
161
  Your Privacy Rights
162
- </h6>
162
+ </h3>
163
163
  <ul class="small text-body mb-0 ps-3">
164
164
  <li>You can withdraw consent at any time by updating your cookie preferences</li>
165
165
  <li>Essential cookies cannot be disabled as they are necessary for site functionality</li>
@@ -8,7 +8,11 @@
8
8
  Parameters
9
9
  include.label (string) — visible button text (required)
10
10
  include.url (string) — destination URL (required)
11
- include.variant (string) — `primary` | `secondary` | `outline` | `light` (default: `primary`)
11
+ include.variant (string) — `primary` | `secondary` | `outline` | `outline-light`
12
+ | `light` (default: `primary`). `outline` is an
13
+ outlined PRIMARY button, readable on the normal
14
+ page background; use `outline-light` only on a
15
+ dark/inverse surface, where white-on-dark works.
12
16
  include.size (string) — `sm` | `md` (default) | `lg`
13
17
  include.icon (string) — Bootstrap Icon class (optional)
14
18
  include.external (bool) — opens in new tab with rel=noopener (default: false)
@@ -24,7 +28,8 @@
24
28
  {%- case variant -%}
25
29
  {%- when "primary" -%}{%- assign btn_class = "btn-primary" -%}
26
30
  {%- when "secondary" -%}{%- assign btn_class = "btn-secondary" -%}
27
- {%- when "outline" -%}{%- assign btn_class = "btn-outline-light" -%}
31
+ {%- when "outline" -%}{%- assign btn_class = "btn-outline-primary" -%}
32
+ {%- when "outline-light" -%}{%- assign btn_class = "btn-outline-light" -%}
28
33
  {%- when "light" -%}{%- assign btn_class = "btn-light" -%}
29
34
  {%- else -%}{%- assign btn_class = "btn-primary" -%}
30
35
  {%- endcase -%}
@@ -1,5 +1,5 @@
1
1
  {% comment %} Feature: ZER0-077 {% endcomment %}
2
- <!--
2
+ {% comment %}
3
3
  ===================================================================
4
4
  DEV SHORTCUTS - Source Code Quick Access Links
5
5
  ===================================================================
@@ -13,7 +13,7 @@
13
13
  - page.collection, page.path
14
14
  - is_production (from env-detect.html in info-section.html) — vscode:// link only when not production
15
15
  ===================================================================
16
- -->
16
+ {% endcomment %}
17
17
 
18
18
  {% comment %} Determine page directory for collections (same segments as GitHub blob links) {% endcomment %}
19
19
  {% if page.collection %}
@@ -39,10 +39,10 @@
39
39
  https://github.com//blob//path → 404). {% endcomment %}
40
40
  {% if site.repository and site.branch %}
41
41
 
42
- <!-- Button Group (section title is the parent h6 in info-section.html) -->
42
+ {% comment %} Button Group (section title is the parent h6 in info-section.html) {% endcomment %}
43
43
  <div class="btn-group-vertical" role="group" aria-label="Source code shortcuts">
44
44
 
45
- <!-- View on GitHub -->
45
+ {% comment %} View on GitHub {% endcomment %}
46
46
  <a href="https://github.com/{{ site.repository }}/blob/{{ site.branch }}/{{ rel_site_path }}"
47
47
  target="_blank"
48
48
  rel="noopener"
@@ -55,7 +55,7 @@
55
55
  <i class="bi bi-box-arrow-up-right text-body-secondary small"></i>
56
56
  </a>
57
57
 
58
- <!-- Edit in GitHub.dev -->
58
+ {% comment %} Edit in GitHub.dev {% endcomment %}
59
59
  <a href="https://github.dev/{{ site.repository }}/blob/{{ site.branch }}/{{ rel_site_path }}"
60
60
  target="_blank"
61
61
  rel="noopener"
@@ -85,14 +85,14 @@
85
85
 
86
86
  </div>
87
87
 
88
- <!-- Config Links -->
88
+ {% comment %} Config Links {% endcomment %}
89
89
  <small class="text-body-secondary fw-medium text-uppercase mt-2">
90
90
  <i class="bi bi-sliders me-1"></i>Configuration
91
91
  </small>
92
92
 
93
93
  <div class="btn-group-vertical" role="group" aria-label="Configuration shortcuts">
94
94
 
95
- <!-- Site Config -->
95
+ {% comment %} Site Config {% endcomment %}
96
96
  <a href="https://github.com/{{ site.repository }}/blob/{{ site.branch }}/_config.yml"
97
97
  target="_blank"
98
98
  rel="noopener"
@@ -1,4 +1,4 @@
1
- <!--
1
+ {% comment %}
2
2
  ===================================================================
3
3
  ENV DASHBOARD — Full environment and build information
4
4
  ===================================================================
@@ -12,9 +12,9 @@
12
12
  Dependencies: Bootstrap 5 card/table, Jekyll variables
13
13
  Used by: pages/_about/settings/environment.md
14
14
  ===================================================================
15
- -->
15
+ {% endcomment %}
16
16
 
17
- <!-- Environment Overview Cards -->
17
+ {% comment %} Environment Overview Cards {% endcomment %}
18
18
  <div class="row g-3 mb-4">
19
19
  <div class="col-6 col-lg-3">
20
20
  <div class="card text-center h-100 border-primary">
@@ -56,7 +56,7 @@
56
56
 
57
57
  <div class="row g-4">
58
58
 
59
- <!-- Site Configuration -->
59
+ {% comment %} Site Configuration {% endcomment %}
60
60
  <div class="col-lg-6">
61
61
  <div class="card h-100">
62
62
  <div class="card-header"><i class="bi bi-globe me-1"></i> Site Configuration</div>
@@ -76,7 +76,7 @@
76
76
  </div>
77
77
  </div>
78
78
 
79
- <!-- Theme & Repository Info -->
79
+ {% comment %} Theme & Repository Info {% endcomment %}
80
80
  <div class="col-lg-6">
81
81
  <div class="card h-100">
82
82
  <div class="card-header"><i class="bi bi-palette me-1"></i> Theme & Repository</div>
@@ -105,7 +105,7 @@
105
105
  </div>
106
106
  </div>
107
107
 
108
- <!-- Plugins List -->
108
+ {% comment %} Plugins List {% endcomment %}
109
109
  <h5 class="mt-4 mb-3"><i class="bi bi-plug me-1"></i> Active Plugins</h5>
110
110
  {% if site.plugins %}
111
111
  <div class="row g-2">
@@ -124,7 +124,7 @@
124
124
  <p class="text-body-secondary">No plugins configured.</p>
125
125
  {% endif %}
126
126
 
127
- <!-- URL Comparison (Dev vs Production) -->
127
+ {% comment %} URL Comparison (Dev vs Production) {% endcomment %}
128
128
  <h5 class="mt-4 mb-3"><i class="bi bi-link-45deg me-1"></i> URL Configuration</h5>
129
129
  <div class="table-responsive">
130
130
  <table class="table table-sm">
@@ -143,7 +143,7 @@
143
143
  </table>
144
144
  </div>
145
145
 
146
- <!-- Quick links back to admin -->
146
+ {% comment %} Quick links back to admin {% endcomment %}
147
147
  <div class="mt-4">
148
148
  <a href="{{ '/about/config/' | relative_url }}" class="btn btn-outline-secondary btn-sm me-2">
149
149
  <i class="bi bi-gear me-1"></i> Full Configuration
@@ -1,5 +1,5 @@
1
1
  {% comment %} Feature: ZER0-077 {% endcomment %}
2
- <!--
2
+ {% comment %}
3
3
  ===================================================================
4
4
  ENVIRONMENT SWITCHER - Dev/Prod URL Display and Toggle
5
5
  ===================================================================
@@ -25,7 +25,7 @@
25
25
  Build time / Jekyll version live in theme-info.html (Theme & Build
26
26
  section) — not duplicated here.
27
27
  ===================================================================
28
- -->
28
+ {% endcomment %}
29
29
 
30
30
  {% assign dev_port = site.port | default: 4000 %}
31
31
  {% comment %}Prod links must not use site.url during serve (Jekyll sets it to 0.0.0.0:4000 etc.){% endcomment %}
@@ -39,7 +39,7 @@
39
39
  {% assign prod_url = canonical_prod_origin | append: site.baseurl %}
40
40
  {% assign dev_url = "http://localhost:" | append: dev_port | append: site.baseurl %}
41
41
 
42
- <!-- Environment Status Card -->
42
+ {% comment %} Environment Status Card {% endcomment %}
43
43
  <div class="card mb-3 {% if is_production %}border-success{% else %}border-warning{% endif %}">
44
44
  <div class="card-header d-flex align-items-center justify-content-between py-2 {% if is_production %}bg-success{% else %}bg-warning{% endif %} bg-opacity-10">
45
45
  <span class="fw-semibold">
@@ -57,7 +57,7 @@
57
57
  {% endif %}
58
58
  </div>
59
59
  <div class="card-body">
60
- <!-- Active URL Display -->
60
+ {% comment %} Active URL Display {% endcomment %}
61
61
  <label class="form-label small text-body-secondary mb-1" for="currentUrlInput">
62
62
  <i class="bi bi-link-45deg me-1" aria-hidden="true"></i>Current Page URL
63
63
  </label>
@@ -79,7 +79,7 @@
79
79
  </button>
80
80
  </div>
81
81
 
82
- <!-- Build context -->
82
+ {% comment %} Build context {% endcomment %}
83
83
  <p class="small text-body-secondary mb-0 mt-3">
84
84
  Built with <code>JEKYLL_ENV={{ build_env }}</code>.
85
85
  {% if is_production %}
@@ -93,7 +93,7 @@
93
93
  </div>
94
94
  </div>
95
95
 
96
- <!-- Quick URL Links -->
96
+ {% comment %} Quick URL Links {% endcomment %}
97
97
  <div class="card border-secondary">
98
98
  <div class="card-header py-2 bg-body-tertiary">
99
99
  <span class="fw-semibold small">
@@ -101,7 +101,7 @@
101
101
  </span>
102
102
  </div>
103
103
  <ul class="list-group list-group-flush">
104
- <!-- Production URL -->
104
+ {% comment %} Production URL {% endcomment %}
105
105
  <li class="list-group-item d-flex justify-content-between align-items-center gap-2">
106
106
  <div class="d-flex align-items-center min-w-0">
107
107
  <span class="badge bg-success me-2">Prod</span>
@@ -133,7 +133,7 @@
133
133
  </li>
134
134
 
135
135
  {% unless is_production %}
136
- <!-- Development URL (dev builds only — never leak localhost into production HTML) -->
136
+ {% comment %} Development URL (dev builds only — never leak localhost into production HTML) {% endcomment %}
137
137
  <li class="list-group-item d-flex justify-content-between align-items-center gap-2">
138
138
  <div class="d-flex align-items-center min-w-0">
139
139
  <span class="badge bg-warning text-dark me-2">Dev</span>
@@ -166,7 +166,7 @@
166
166
  {% endunless %}
167
167
 
168
168
  {% if site.repository %}
169
- <!-- GitHub Source -->
169
+ {% comment %} GitHub Source {% endcomment %}
170
170
  <li class="list-group-item d-flex justify-content-between align-items-center gap-2">
171
171
  <div class="d-flex align-items-center min-w-0">
172
172
  <span class="badge bg-dark me-2">Source</span>
@@ -1,4 +1,4 @@
1
- <!--
1
+ {% comment %}
2
2
  ===================================================================
3
3
  FEATURE CARD - Data-driven feature display from features.yml
4
4
  ===================================================================
@@ -28,7 +28,7 @@
28
28
  {% assign f = site.data.features.features | where: "id", "ZER0-001" | first %}
29
29
  {% include components/feature-card.html feature=f style="primary" icon="bi-bootstrap" icon_color="text-primary" %}
30
30
  ===================================================================
31
- -->
31
+ {% endcomment %}
32
32
  {% assign f = include.feature %}
33
33
  {% assign border = include.style %}
34
34
  {% assign icon = include.icon | default: "bi-check-circle-fill" %}
@@ -1,5 +1,5 @@
1
1
  {% comment %} Feature: ZER0-077 {% endcomment %}
2
- <!--
2
+ {% comment %}
3
3
  file: halfmoon.html
4
4
  path: _includes/components/halfmoon.html
5
5
  description: Dark / light / auto color-mode switcher (segmented control).
@@ -12,7 +12,7 @@
12
12
  config: site.color_mode_lock: true removes the control entirely — the
13
13
  site pins one mode and visitor switching is disabled
14
14
  (halfmoon.js + core/color-mode-init.html enforce the same).
15
- -->
15
+ {% endcomment %}
16
16
  {% unless site.color_mode_lock %}
17
17
  <div class="btn-group bd-theme-switch {{ include.class | default: '' }}" role="group" aria-label="Color mode">
18
18
  <button type="button" class="btn btn-outline-secondary btn-sm d-flex align-items-center justify-content-center gap-1" data-bs-theme-value="light" aria-pressed="false">
@@ -1,5 +1,5 @@
1
1
  {% comment %} Feature: ZER0-046 {% endcomment %}
2
- <!--
2
+ {% comment %}
3
3
  ===================================================================
4
4
  INFO SECTION - Settings Offcanvas with Tabbed Interface
5
5
  ===================================================================
@@ -35,14 +35,14 @@
35
35
  - https://getbootstrap.com/docs/5.3/components/offcanvas/
36
36
  - https://getbootstrap.com/docs/5.3/components/navs-tabs/
37
37
  ===================================================================
38
- -->
38
+ {% endcomment %}
39
39
 
40
40
  {% include components/env-detect.html %}
41
41
 
42
- <!-- Settings Offcanvas -->
42
+ {% comment %} Settings Offcanvas {% endcomment %}
43
43
  <div class="offcanvas offcanvas-end" tabindex="-1" id="info-section" aria-labelledby="infoSectionLabel">
44
44
 
45
- <!-- Offcanvas Header -->
45
+ {% comment %} Offcanvas Header {% endcomment %}
46
46
  <div class="offcanvas-header border-bottom pb-0 d-block">
47
47
  <div class="d-flex align-items-center justify-content-between mb-2">
48
48
  <h2 class="offcanvas-title h5" id="infoSectionLabel">
@@ -51,7 +51,7 @@
51
51
  <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
52
52
  </div>
53
53
 
54
- <!-- Tab Navigation -->
54
+ {% comment %} Tab Navigation {% endcomment %}
55
55
  <ul class="nav nav-tabs nav-fill" id="infoTabs" role="tablist">
56
56
  <li class="nav-item" role="presentation">
57
57
  <button class="nav-link active" id="appearance-tab" data-bs-toggle="tab" data-bs-target="#appearance-pane" type="button" role="tab" aria-controls="appearance-pane" aria-selected="true">
@@ -76,29 +76,29 @@
76
76
  </ul>
77
77
  </div>
78
78
 
79
- <!-- Offcanvas Body with Tab Content -->
79
+ {% comment %} Offcanvas Body with Tab Content {% endcomment %}
80
80
  <div class="offcanvas-body">
81
81
  <div class="tab-content" id="infoTabContent">
82
82
 
83
- <!-- Appearance Tab — everything that changes how the site looks -->
83
+ {% comment %} Appearance Tab — everything that changes how the site looks {% endcomment %}
84
84
  <div class="tab-pane fade show active" id="appearance-pane" role="tabpanel" aria-labelledby="appearance-tab" tabindex="0">
85
85
 
86
- <!-- Language — renders its own heading, and nothing at all when
87
- site.translation is disabled. NOT cached: page-dependent. -->
86
+ {% comment %} Language — renders its own heading, and nothing at all when
87
+ site.translation is disabled. NOT cached: page-dependent. {% endcomment %}
88
88
  {% include components/language-toggle.html variant="panel" %}
89
89
 
90
- <!-- Color Mode -->
90
+ {% comment %} Color Mode {% endcomment %}
91
91
  <div class="mb-4">
92
- <h6 class="text-body-secondary small text-uppercase fw-semibold mb-2">
92
+ <h3 class="h6 text-body-secondary small text-uppercase fw-semibold mb-2">
93
93
  <i class="bi bi-moon-stars me-1" aria-hidden="true"></i>Color Mode
94
- </h6>
94
+ </h3>
95
95
  {% include components/halfmoon.html class="w-100" %}
96
96
  </div>
97
97
 
98
- <!-- Theme skin + SVG backgrounds (skin buttons, toggle, opacity) -->
98
+ {% comment %} Theme skin + SVG backgrounds (skin buttons, toggle, opacity) {% endcomment %}
99
99
  {% include_cached components/background-settings.html %}
100
100
 
101
- <!-- Primary color picker mounts here (appearance.js, optional) -->
101
+ {% comment %} Primary color picker mounts here (appearance.js, optional) {% endcomment %}
102
102
  <div id="zer0AppearanceSlot"></div>
103
103
 
104
104
  <p class="text-body-secondary small mb-0 mt-4">
@@ -107,49 +107,49 @@
107
107
  </p>
108
108
  </div>
109
109
 
110
- <!-- Site Tab — where the site runs and what it is built from -->
110
+ {% comment %} Site Tab — where the site runs and what it is built from {% endcomment %}
111
111
  <div class="tab-pane fade" id="site-pane" role="tabpanel" aria-labelledby="site-tab" tabindex="0">
112
112
 
113
- <!-- Environment -->
113
+ {% comment %} Environment {% endcomment %}
114
114
  <div class="mb-4">
115
- <h6 class="text-body-secondary small text-uppercase fw-semibold mb-2">
115
+ <h3 class="h6 text-body-secondary small text-uppercase fw-semibold mb-2">
116
116
  <i class="bi bi-hdd-network me-1" aria-hidden="true"></i>Environment
117
- </h6>
117
+ </h3>
118
118
  {% include components/env-switcher.html %}
119
119
  </div>
120
120
 
121
- <!-- Theme & Build -->
121
+ {% comment %} Theme & Build {% endcomment %}
122
122
  <div class="mb-4">
123
- <h6 class="text-body-secondary small text-uppercase fw-semibold mb-2">
123
+ <h3 class="h6 text-body-secondary small text-uppercase fw-semibold mb-2">
124
124
  <i class="bi bi-info-circle me-1" aria-hidden="true"></i>Theme &amp; Build
125
- </h6>
125
+ </h3>
126
126
  {% include components/theme-info.html %}
127
127
  </div>
128
128
 
129
- <!-- Admin quick links — cached include; renders only links to pages
130
- that exist in the build (see components/admin-links.html) -->
129
+ {% comment %} Admin quick links — cached include; renders only links to pages
130
+ that exist in the build (see components/admin-links.html) {% endcomment %}
131
131
  {% include_cached components/admin-links.html %}
132
132
  </div>
133
133
 
134
- <!-- Developer Tab — tools scoped to the current page -->
134
+ {% comment %} Developer Tab — tools scoped to the current page {% endcomment %}
135
135
  <div class="tab-pane fade" id="developer-pane" role="tabpanel" aria-labelledby="developer-tab" tabindex="0">
136
136
 
137
- <!-- Page Location — breadcrumbs render nothing on the homepage or
138
- when site.breadcrumbs is off, so the section mirrors that gate -->
137
+ {% comment %} Page Location — breadcrumbs render nothing on the homepage or
138
+ when site.breadcrumbs is off, so the section mirrors that gate {% endcomment %}
139
139
  {% if page.url != "/" and site.breadcrumbs %}
140
140
  <div class="mb-4">
141
- <h6 class="text-body-secondary small text-uppercase fw-semibold mb-2">
141
+ <h3 class="h6 text-body-secondary small text-uppercase fw-semibold mb-2">
142
142
  <i class="bi bi-signpost-split me-1" aria-hidden="true"></i>Page Location
143
- </h6>
143
+ </h3>
144
144
  {% include navigation/breadcrumbs.html %}
145
145
  </div>
146
146
  {% endif %}
147
147
 
148
- <!-- Page Metadata -->
148
+ {% comment %} Page Metadata {% endcomment %}
149
149
  <div class="mb-4">
150
- <h6 class="text-body-secondary small text-uppercase fw-semibold mb-2">
150
+ <h3 class="h6 text-body-secondary small text-uppercase fw-semibold mb-2">
151
151
  <i class="bi bi-file-earmark-code me-1" aria-hidden="true"></i>Page Info
152
- </h6>
152
+ </h3>
153
153
  <div class="table-responsive">
154
154
  <table class="table table-sm table-hover mb-0 small">
155
155
  <tbody>
@@ -180,11 +180,11 @@
180
180
  </div>
181
181
  </div>
182
182
 
183
- <!-- Source Code Shortcuts -->
183
+ {% comment %} Source Code Shortcuts {% endcomment %}
184
184
  <div class="mb-3">
185
- <h6 class="text-body-secondary small text-uppercase fw-semibold mb-2">
185
+ <h3 class="h6 text-body-secondary small text-uppercase fw-semibold mb-2">
186
186
  <i class="bi bi-code-square me-1" aria-hidden="true"></i>Source Code
187
- </h6>
187
+ </h3>
188
188
  {% include components/dev-shortcuts.html %}
189
189
  </div>
190
190
  </div>
@@ -194,9 +194,9 @@
194
194
 
195
195
  </div>
196
196
 
197
- <!-- Copy-to-clipboard for the panel's URL fields (event delegation; no
197
+ {% comment %} Copy-to-clipboard for the panel's URL fields (event delegation; no
198
198
  inline handlers). Buttons declare data-zer0-copy="<text>" or
199
- data-zer0-copy-target="#input-id". -->
199
+ data-zer0-copy-target="#input-id". {% endcomment %}
200
200
  <script>
201
201
  document.addEventListener("click", function (e) {
202
202
  var btn = e.target.closest("[data-zer0-copy], [data-zer0-copy-target]");
@@ -1,4 +1,4 @@
1
- <!--
1
+ {% comment %}
2
2
  ===================================================================
3
3
  JAVASCRIPT - Local vendor libraries
4
4
  ===================================================================
@@ -12,43 +12,43 @@
12
12
 
13
13
  Refresh: ./scripts/vendor-install.sh (see vendor-manifest.json)
14
14
  ===================================================================
15
- -->
15
+ {% endcomment %}
16
16
 
17
- <!-- Bootstrap 5.3.3 Bundle (includes Popper.js) -->
17
+ {% comment %} Bootstrap 5.3.3 Bundle (includes Popper.js) {% endcomment %}
18
18
  <script src="{{ '/assets/vendor/bootstrap/js/bootstrap.bundle.min.js' | relative_url }}"></script>
19
19
 
20
- <!-- Navigation ES Modules — orchestrator for sidebar, scroll spy, keyboard
20
+ {% comment %} Navigation ES Modules — orchestrator for sidebar, scroll spy, keyboard
21
21
  shortcuts, gestures, focus, AND the navbar dropdowns/mobile menu that
22
- formerly lived in /assets/js/navigation.js (now deprecated). -->
22
+ formerly lived in /assets/js/navigation.js (now deprecated). {% endcomment %}
23
23
  <script type="module" src="{{ '/assets/js/modules/navigation/index.js' | relative_url }}?v={{ site.time | date: '%s' }}"></script>
24
24
 
25
- <!-- Generic UI helpers (toast, copy-to-clipboard, image fade-in) -->
25
+ {% comment %} Generic UI helpers (toast, copy-to-clipboard, image fade-in) {% endcomment %}
26
26
  <script defer src="{{ '/assets/js/ui-helpers.js' | relative_url }}"></script>
27
27
 
28
- <!-- Posts-archive pagination (auto-activates only on pages with a
29
- [data-posts-archive] container; safe to load globally). -->
28
+ {% comment %} Posts-archive pagination (auto-activates only on pages with a
29
+ [data-posts-archive] container; safe to load globally). {% endcomment %}
30
30
  <script defer src="{{ '/assets/js/posts-pagination.js' | relative_url }}"></script>
31
31
 
32
- <!-- Search modal controller -->
32
+ {% comment %} Search modal controller {% endcomment %}
33
33
  <script src="{{ '/assets/js/search-modal.js' | relative_url }}"></script>
34
34
 
35
- <!-- Share helpers -->
35
+ {% comment %} Share helpers {% endcomment %}
36
36
  <script src="{{ '/assets/js/share-actions.js' | relative_url }}"></script>
37
37
 
38
- <!-- fffuel-style background customizer (skin switching, toggle, opacity) -->
38
+ {% comment %} fffuel-style background customizer (skin switching, toggle, opacity) {% endcomment %}
39
39
  <script src="{{ '/assets/js/background-customizer.js' | relative_url }}"></script>
40
40
 
41
- <!-- Optional runtime Appearance panel (enabled via site.appearance_panel) -->
41
+ {% comment %} Optional runtime Appearance panel (enabled via site.appearance_panel) {% endcomment %}
42
42
  {% if site.appearance_panel %}
43
43
  <script defer src="{{ '/assets/js/modules/theme/appearance.js' | relative_url }}"></script>
44
44
  {% endif %}
45
45
 
46
- <!-- Obsidian wiki-link / embed / tag client-side resolver (fallback for the
46
+ {% comment %} Obsidian wiki-link / embed / tag client-side resolver (fallback for the
47
47
  remote_theme GH Pages build, where _plugins/obsidian_links.rb cannot run).
48
48
  Honours `obsidian: { enabled: false }` in _config.yml — when disabled the
49
49
  resolver script is not loaded and the flag self-disables any fork that
50
50
  loads it another way. Note: `| default: true` would flip `false` back to
51
- true (Liquid treats false as falsy), so test enabled == false explicitly. -->
51
+ true (Liquid treats false as falsy), so test enabled == false explicitly. {% endcomment %}
52
52
  {%- assign obsidian_attachments_path = site.obsidian.attachments_path | default: '/assets/images/notes' -%}
53
53
  <script>
54
54
  window.OBSIDIAN_CONFIG = window.OBSIDIAN_CONFIG || {};
@@ -62,7 +62,7 @@
62
62
  <script defer src="{{ '/assets/js/obsidian-wiki-links.js' | relative_url }}?v={{ site.time | date: '%s' }}"></script>
63
63
  {%- endif -%}
64
64
 
65
- <!-- Optional fork overrides: opt-in via `site.user_overrides: true` in _config.yml. -->
65
+ {% comment %} Optional fork overrides: opt-in via `site.user_overrides: true` in _config.yml. {% endcomment %}
66
66
  {% if site.user_overrides %}
67
67
  <script defer src="{{ '/assets/js/user-overrides.js' | relative_url }}"></script>
68
68
  {% endif %}
@@ -13,7 +13,7 @@
13
13
  - "panel" — self-contained "Language" section for the
14
14
  Settings offcanvas (components/info-section.html),
15
15
  rendered as an always-visible list of choices
16
- with its own <h6> heading
16
+ with its own section heading
17
17
  Reads: page.lang / page.url / page.translation_source_url and the
18
18
  generated _data/i18n/manifest.yml.
19
19
  Depends on: site.translation.* config, site.data.i18n.manifest,
@@ -44,7 +44,7 @@
44
44
  row via aria-describedby. Per-row text was the single
45
45
  biggest contributor to menu width.
46
46
  Trigger changes (icon-only, no caret) apply to the navbar
47
- variant only — the panel has an <h6> heading, not a button.
47
+ variant only — the panel has a section heading, not a button.
48
48
 
49
49
  New ui keys (lang_machine_translated, lang_machine_translated_title,
50
50
  lang_untranslated_note) live in _data/ui-text.yml `en`. core/i18n.html
@@ -94,9 +94,9 @@
94
94
  {%- assign _lt_fallback_url = _lt_src_url | default: '/' | relative_url -%}
95
95
  {%- if _lt_variant == 'panel' -%}
96
96
  <div class="mb-4 nav-lang-panel" id="zer0-lang-toggle">
97
- <h6 class="text-body-secondary small text-uppercase fw-semibold mb-2">
97
+ <h3 class="h6 text-body-secondary small text-uppercase fw-semibold mb-2">
98
98
  <i class="bi bi-translate me-1" aria-hidden="true"></i>{{ ui.lang_toggle_label | default: "Language" }}
99
- </h6>
99
+ </h3>
100
100
  <div class="list-group nav-lang-options" role="group" aria-label="{{ ui.lang_toggle_aria | default: 'Change language' }}">
101
101
  {%- if _lt_current == _lt_source %}
102
102
  <span class="list-group-item nav-lang-item is-current" aria-current="true">