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,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">