elixir-toolkit-theme 4.2.0 → 6.0.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 (44) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +10 -5
  3. data/_includes/affiliation-logo.html +10 -0
  4. data/_includes/affiliation-tiles-page.html +27 -27
  5. data/_includes/citation-page.html +19 -17
  6. data/_includes/contributor-avatar.html +16 -0
  7. data/_includes/contributor-card.html +33 -0
  8. data/_includes/contributor-carousel-selection.html +19 -69
  9. data/_includes/contributor-minitiles-page.html +18 -108
  10. data/_includes/contributor-tiles-all.html +8 -61
  11. data/_includes/events.html +1 -1
  12. data/_includes/footer.html +16 -6
  13. data/_includes/github-buttons.html +18 -22
  14. data/_includes/head.html +36 -30
  15. data/_includes/more-information-tiles.html +5 -5
  16. data/_includes/news.html +1 -1
  17. data/_includes/page-metadata-tabs.html +92 -0
  18. data/_includes/pageids-overview.html +1 -1
  19. data/_includes/related-pages.html +1 -1
  20. data/_includes/resource-table-all.html +29 -17
  21. data/_includes/resource-table-page.html +2 -2
  22. data/_includes/scroll-top.html +1 -1
  23. data/_includes/section-navigation-tiles.html +12 -7
  24. data/_includes/sidebar.html +58 -42
  25. data/_includes/toc.html +1 -1
  26. data/_includes/topnav.html +2 -1
  27. data/_layouts/default.html +3 -3
  28. data/_layouts/page.html +5 -5
  29. data/_sass/_bootstrap_variables.scss +2 -1
  30. data/_sass/_variables.scss +11 -17
  31. data/assets/css/main.scss +287 -146
  32. data/assets/img/apple-touch-icon.png +0 -0
  33. data/assets/img/favicon.svg +24 -0
  34. data/assets/img/site.webmanifest +19 -17
  35. data/assets/img/web-app-manifest-192x192.png +0 -0
  36. data/assets/img/web-app-manifest-512x512.png +0 -0
  37. data/assets/js/custom.js +0 -0
  38. data/assets/js/main.js +133 -22
  39. data/assets/js/toc.js +66 -35
  40. metadata +12 -8
  41. data/assets/img/android-chrome-192x192.png +0 -0
  42. data/assets/img/android-chrome-512x512.png +0 -0
  43. data/assets/img/safari-pinned-tab.svg +0 -29
  44. data/assets/js/jquery.navgoco.js +0 -314
Binary file
@@ -0,0 +1,24 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="77.2" height="77.12"><svg id="SvgjsSvg1005" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="77.2" height="77.12" viewBox="0 0 77.2 77.12">
2
+ <defs>
3
+ <style>
4
+ .cls-1 {
5
+ fill: #0d6efd;
6
+ }
7
+
8
+ .cls-2, .cls-3 {
9
+ fill: #fff;
10
+ }
11
+
12
+ .cls-2 {
13
+ opacity: 0.18;
14
+ }
15
+ </style>
16
+ </defs>
17
+ <g>
18
+ <circle class="cls-1" cx="38.56" cy="38.56" r="38.56"></circle>
19
+ <path class="cls-2" d="M9,48.08a44.19,44.19,0,0,0,4.68,19.84A38.56,38.56,0,1,0,55.16,3.72c-.59,0-1.19-.05-1.79-.05A44.4,44.4,0,0,0,9,48.08Z"></path>
20
+ <path class="cls-3" d="M54,20.52H13.64a.85.85,0,0,0-.84.85v34a.84.84,0,0,0,.84.84H30a.84.84,0,0,0,.85-.84V51.16a.85.85,0,0,0-.85-.85H20.07a.85.85,0,0,1-.85-.85V42a.85.85,0,0,1,.85-.84h8.66a.85.85,0,0,0,.85-.85V36.06a.85.85,0,0,0-.85-.85H20.07a.85.85,0,0,1-.85-.84V27.29a.85.85,0,0,1,.85-.85H38.26a.85.85,0,0,1,.85.85V55.38a.84.84,0,0,0,.85.84h4.73a.84.84,0,0,0,.85-.84V27.29a.85.85,0,0,1,.84-.85H61.27a.85.85,0,0,1,.84.85V55.38a.84.84,0,0,0,.85.84h4.73a.84.84,0,0,0,.85-.84V27.29a.85.85,0,0,1,.85-.85h6.77a.84.84,0,0,0,.84-.85V21.37a.84.84,0,0,0-.84-.85Z"></path>
21
+ </g>
22
+ </svg><style>@media (prefers-color-scheme: light) { :root { filter: none; } }
23
+ @media (prefers-color-scheme: dark) { :root { filter: none; } }
24
+ </style></svg>
@@ -3,21 +3,23 @@ layout: none
3
3
  permalink: assets/img/site.webmanifest
4
4
  ---
5
5
  {
6
- "name": "",
7
- "short_name": "",
8
- "icons": [
9
- {
10
- "src": "android-chrome-192x192.png",
11
- "sizes": "192x192",
12
- "type": "image/png"
13
- },
14
- {
15
- "src": "android-chrome-512x512.png",
16
- "sizes": "512x512",
17
- "type": "image/png"
18
- }
19
- ],
20
- "theme_color": "#{{ site.theme_variables.theme_color | default: '0d6efd' }}",
21
- "background_color": "#ffffff",
22
- "display": "standalone"
6
+ "name": "{{ site.title | default: '0d6efd' }}",
7
+ "short_name": "",
8
+ "icons": [
9
+ {
10
+ "src": "{{ 'assets/img/web-app-manifest-192x192.png' | relative_url }}",
11
+ "sizes": "192x192",
12
+ "type": "image/png",
13
+ "purpose": "maskable"
14
+ },
15
+ {
16
+ "src": "{{ 'assets/img/web-app-manifest-512x512.png' | relative_url }}",
17
+ "sizes": "512x512",
18
+ "type": "image/png",
19
+ "purpose": "maskable"
20
+ }
21
+ ],
22
+ "theme_color": "#{{ site.theme_variables.theme_color | default: '0d6efd' }}",
23
+ "background_color": "#ffffff",
24
+ "display": "standalone"
23
25
  }
File without changes
data/assets/js/main.js CHANGED
@@ -27,27 +27,45 @@ $(document).ready(function () {
27
27
  });
28
28
 
29
29
  /**
30
- * Settings for side navigation
30
+ * Sidebar height
31
31
  */
32
32
  $(document).ready(function () {
33
- // Initialize navgoco with default options
34
- $("#sidebar>nav>ul").navgoco({
35
- caretHtml: '',
36
- accordion: true,
37
- openClass: 'active', // open
38
- save: false, // leave false or nav highlighting doesn't work right
39
- cookie: {
40
- name: 'navgoco',
41
- expires: false,
42
- path: '/'
43
- },
44
- slide: {
45
- duration: 400,
46
- easing: 'swing'
47
- }
48
- });
33
+ const breakpointLg = 992; // Bootstrap's lg breakpoint in pixels
34
+ const main = document.getElementById('main');
35
+ const sideNav = document.getElementById('side-nav');
36
+
37
+ // If either element is missing, don't do anything
38
+ if (!main || !sideNav) return;
39
+
40
+ function getVisibleHeight(el) {
41
+ const rect = el.getBoundingClientRect();
42
+ const windowHeight = window.innerHeight || document.documentElement.clientHeight;
43
+
44
+ const visibleTop = Math.max(rect.top, 0);
45
+ const visibleBottom = Math.min(rect.bottom, windowHeight);
46
+ const visibleHeight = Math.max(0, visibleBottom - visibleTop);
47
+
48
+ return visibleHeight;
49
+ }
50
+
51
+ function adjustSidebarHeight() {
52
+ window.requestAnimationFrame(() => {
53
+ if (window.innerWidth < breakpointLg) {
54
+ sideNav.style.height = 'auto';
55
+ } else {
56
+ const visibleHeight = getVisibleHeight(main);
57
+ sideNav.style.height = visibleHeight + 'px';
58
+ }
59
+ });
60
+ }
61
+
62
+ adjustSidebarHeight();
63
+
64
+ window.addEventListener('scroll', adjustSidebarHeight);
65
+ window.addEventListener('resize', adjustSidebarHeight);
49
66
  });
50
67
 
68
+
51
69
  /**
52
70
  * Back to top button
53
71
  */
@@ -170,8 +188,101 @@ $(function () {
170
188
  */
171
189
 
172
190
  $(function () {
173
- var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'))
174
- var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
175
- return new bootstrap.Popover(popoverTriggerEl)
176
- })
177
- })
191
+ const bs = window.bootstrap;
192
+ // Initialize all popovers (click to open; HTML allowed; render in body)
193
+ $('[data-bs-toggle="popover"]').each(function () {
194
+ new bs.Popover(this, {
195
+ html: true,
196
+ sanitize: false, // allow dropdown markup inside
197
+ container: 'body',
198
+ trigger: 'click'
199
+ });
200
+ });
201
+
202
+ // When a popover is shown, initialize any dropdowns inside it
203
+ $(document).on('shown.bs.popover', '[data-bs-toggle="popover"]', function () {
204
+ const tipId = $(this).attr('aria-describedby');
205
+ if (!tipId) return;
206
+ const $tip = $('#' + tipId);
207
+ if (!$tip.length) return;
208
+
209
+ $tip.find('[data-bs-toggle="dropdown"]').each(function () {
210
+ new bs.Dropdown(this);
211
+ });
212
+ });
213
+
214
+ // Prevent clicks *inside* the popover from bubbling up (so it doesn't immediately close)
215
+ $('body').on('click', function (e) {
216
+ if ($(e.target).closest('.popover').length) {
217
+ e.stopPropagation();
218
+ }
219
+ });
220
+
221
+ // Close popovers when clicking outside any popover/trigger
222
+ $(document).on('click', function (e) {
223
+ const $t = $(e.target);
224
+ const clickedTrigger = $t.closest('[data-bs-toggle="popover"]').length > 0;
225
+ const clickedInsidePopover = $t.closest('.popover').length > 0;
226
+ if (clickedTrigger || clickedInsidePopover) return;
227
+
228
+ $('[data-bs-toggle="popover"]').each(function () {
229
+ const inst = bs.Popover.getInstance(this);
230
+ if (inst) inst.hide();
231
+ });
232
+ });
233
+
234
+ // Close on ESC
235
+ $(document).on('keydown', function (e) {
236
+ if (e.key !== 'Escape') return;
237
+ $('[data-bs-toggle="popover"]').each(function () {
238
+ const inst = bs.Popover.getInstance(this);
239
+ if (inst) inst.hide();
240
+ });
241
+ });
242
+ });
243
+
244
+
245
+ /**
246
+ * Equalize contributor card heights in carousels and position arrows
247
+ */
248
+ function equalizeContributorCardHeights() {
249
+ $('.carousel[id^="contributors-carousel-"]').each(function() {
250
+ var carousel = $(this);
251
+ var maxHeight = 0;
252
+
253
+ carousel.find('.contributor-cards .card').css('min-height', '');
254
+
255
+ // Measure all slides by temporarily making them active
256
+ carousel.find('.carousel-item').each(function() {
257
+ var $item = $(this);
258
+ var wasActive = $item.hasClass('active');
259
+
260
+ $item.addClass('active').css({'visibility': 'hidden', 'position': 'absolute'});
261
+ $item.find('.contributor-cards .card').each(function() {
262
+ maxHeight = Math.max(maxHeight, $(this).outerHeight());
263
+ });
264
+ $item.css({'visibility': '', 'position': ''});
265
+ if (!wasActive) $item.removeClass('active');
266
+ });
267
+
268
+ // Apply max height and position arrows
269
+ if (maxHeight > 0) {
270
+ carousel.find('.contributor-cards .card').css('min-height', maxHeight + 'px');
271
+ carousel.find('.carousel-control-prev, .carousel-control-next').css('top', (maxHeight / 2 - 24) + 'px');
272
+ }
273
+ });
274
+ }
275
+
276
+ $(document).ready(function() {
277
+ // Equalize heights on page load
278
+ equalizeContributorCardHeights();
279
+
280
+ // Re-equalize on window resize
281
+ var resizeTimer;
282
+ $(window).on('resize', function() {
283
+ clearTimeout(resizeTimer);
284
+ resizeTimer = setTimeout(function() {
285
+ equalizeContributorCardHeights();
286
+ }, 250);
287
+ });
288
+ });
data/assets/js/toc.js CHANGED
@@ -5,85 +5,116 @@
5
5
  title: '<i>Jump to...</i>',
6
6
  minimumHeaders: 3,
7
7
  headers: 'h1, h2, h3, h4, h5, h6',
8
- listType: 'ol', // values: [ol|ul]
9
- showEffect: 'show', // values: [show|slideDown|fadeIn|none]
10
- showSpeed: 'slow', // set to 0 to deactivate effect
8
+ listType: 'ol', // values: [ol|ul]
9
+ showEffect: 'show', // values: [show|slideDown|fadeIn|none]
10
+ showSpeed: 'slow', // set to 0 to deactivate effect
11
11
  classes: {
12
12
  list: '',
13
13
  item: '',
14
14
  link: '',
15
15
  toc: ''
16
16
  }
17
- },
18
- settings = $.extend(defaults, options);
17
+ };
18
+
19
+ // Do not mutate defaults; merge into a fresh object
20
+ var settings = $.extend({}, defaults, options);
19
21
 
22
+ // Encode fragment identifiers safely (e.g., handle !'()*)
20
23
  function fixedEncodeURIComponent(str) {
21
24
  return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {
22
25
  return '%' + c.charCodeAt(0).toString(16);
23
26
  });
24
27
  }
25
28
 
29
+ // Build an <a> for a given header; ensure it has an id
26
30
  function createLink(header) {
27
- var innerText = header.textContent || header.innerText;
28
- return "<a class='" + settings.classes.link + "' href='#" + fixedEncodeURIComponent(header.id) + "'>" + innerText + "</a>";
31
+ var innerText = header.textContent || header.innerText || '';
32
+ if (!header.id) {
33
+ header.id = innerText.trim()
34
+ ? innerText.trim().replace(/\s+/g, '-').toLowerCase()
35
+ : ('heading-' + Math.random().toString(36).slice(2, 8)); // fallback id
36
+ }
37
+ return "<a class='" + settings.classes.link + "' href='#" +
38
+ fixedEncodeURIComponent(header.id) + "'>" + innerText + "</a>";
29
39
  }
30
40
 
41
+ // Collect headers and ensure they have IDs (filter out those that still don't)
31
42
  var headers = $(settings.headers).filter(function () {
32
- // Ensure headers have IDs
33
43
  if (!this.id) {
34
- this.id = $(this).text().trim().replace(/\s+/g, '-').toLowerCase();
44
+ var text = $(this).text().trim();
45
+ this.id = text ? text.replace(/\s+/g, '-').toLowerCase() : '';
35
46
  }
36
47
  return this.id;
37
48
  });
38
49
 
39
- var output = $(this);
50
+ var output = $(this); // the TOC container (e.g., #toc-contents)
51
+ var main = $('#main');
52
+ var button = $('#btn-toc-hide')
40
53
 
41
- // Check if there are any headers
42
- if (!$('#page-img .page-img-lg').length ) {
43
- if ( !headers.length || headers.length < settings.minimumHeaders || !output.length ) {
44
- $('#main').removeClass("add-grid");
45
- $("#toc").hide();
46
- return; // Exit early if there are no headers
47
- }
54
+ // Prevents calling get_level(headers[0]) on undefined and collapses layout/space.
55
+ if (!headers.length || headers.length < settings.minimumHeaders || !output.length) {
56
+ main.removeClass('add-grid'); // collapse layout (your existing side-effect + our flag)
57
+ output.empty().hide(); // hide/clear inner TOC container
58
+ return;
48
59
  }
49
60
 
50
- if (settings.showSpeed === 0) {
51
- settings.showEffect = 'none';
52
- }
61
+ // If speed is 0, disable visual effect
62
+ if (settings.showSpeed === 0) settings.showEffect = 'none';
53
63
 
54
- $(this).addClass(settings.classes.toc);
64
+ // Optional extra class on the container
65
+ output.addClass(settings.classes.toc);
55
66
 
56
67
  var render = {
57
- show: function () { output.hide().html(html).show(settings.showSpeed); },
68
+ show: function () { output.hide().html(html).show(settings.showSpeed); },
58
69
  slideDown: function () { output.hide().html(html).slideDown(settings.showSpeed); },
59
- fadeIn: function () { output.hide().html(html).fadeIn(settings.showSpeed); },
60
- none: function () { output.html(html); }
70
+ fadeIn: function () { output.hide().html(html).fadeIn(settings.showSpeed); },
71
+ none: function () { output.html(html); }
72
+ };
73
+
74
+ // Resilient parser of header levels (H1..H6 → 1..6). Returns NaN if invalid.
75
+ var get_level = function (ele) {
76
+ return (ele && ele.nodeName) ? parseInt(ele.nodeName.replace(/H/i, ''), 10) : NaN;
61
77
  };
62
78
 
63
- var get_level = function (ele) { return parseInt(ele.nodeName.replace("H", ""), 10); };
64
- var highest_level = headers.map(function (_, ele) { return get_level(ele); }).get().sort()[0];
65
- var level = get_level(headers[0]), this_level;
79
+ // Validate first level before proceeding
80
+ var level = get_level(headers[0]);
81
+ if (!isFinite(level)) {
82
+ output.hide().empty();
83
+ return;
84
+ }
85
+
86
+ var this_level;
66
87
  var html = settings.title + " <" + settings.listType + " class=\"" + settings.classes.list + "\">";
67
88
 
89
+ // Build nested list based on header levels
68
90
  headers.each(function (_, header) {
69
91
  this_level = get_level(header);
70
- if (this_level === level) { // same level as before; same indenting
92
+ if (!isFinite(this_level)) return; // skip anything unexpected
93
+
94
+ if (this_level === level) { // same level; same indent
71
95
  html += "<li class=\"" + settings.classes.item + "\">" + createLink(header);
72
- } else if (this_level <= level) { // higher level than before; end parent ol
96
+ } else if (this_level <= level) { // moving up; close lists
73
97
  for (var i = this_level; i < level; i++) {
74
- html += "</li></" + settings.listType + ">"
98
+ html += "</li></" + settings.listType + ">";
75
99
  }
76
100
  html += "<li class=\"" + settings.classes.item + "\">" + createLink(header);
77
- } else if (this_level > level) { // lower level than before; expand the previous to contain a ol
78
- for (i = this_level; i > level; i--) {
101
+ } else { // moving down; open nested lists
102
+ for (var j = this_level; j > level; j--) {
79
103
  html += "<" + settings.listType + " class=\"" + settings.classes.list + "\">" +
80
- "<li class=\"" + settings.classes.item + "\">"
104
+ "<li class=\"" + settings.classes.item + "\">";
81
105
  }
82
106
  html += createLink(header);
83
107
  }
84
- level = this_level; // update for the next one
108
+ level = this_level; // update for next header
85
109
  });
110
+
86
111
  html += "</" + settings.listType + ">";
87
- render[settings.showEffect]();
112
+
113
+ // Render with the selected effect
114
+ (render[settings.showEffect] || render.none)();
115
+
116
+ // Add grid + flag on #main (if your layout uses it), and flag #toc so CSS applies margin.
117
+ main.addClass('add-grid');
118
+ button.show()
88
119
  };
89
120
  })(jQuery);
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elixir-toolkit-theme
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.0
4
+ version: 6.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - bedroesb
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-03-18 00:00:00.000000000 Z
11
+ date: 2026-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 0.1.10
33
+ version: 1.1.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 0.1.10
40
+ version: 1.1.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -76,12 +76,15 @@ files:
76
76
  - LICENSE
77
77
  - README.md
78
78
  - _data/countries.yml
79
+ - _includes/affiliation-logo.html
79
80
  - _includes/affiliation-tiles-page.html
80
81
  - _includes/affiliation-tiles-selection.html
81
82
  - _includes/banner.html
82
83
  - _includes/breadcrumb.html
83
84
  - _includes/callout.html
84
85
  - _includes/citation-page.html
86
+ - _includes/contributor-avatar.html
87
+ - _includes/contributor-card.html
85
88
  - _includes/contributor-carousel-selection.html
86
89
  - _includes/contributor-minitiles-page.html
87
90
  - _includes/contributor-tiles-all.html
@@ -94,6 +97,7 @@ files:
94
97
  - _includes/image.html
95
98
  - _includes/more-information-tiles.html
96
99
  - _includes/news.html
100
+ - _includes/page-metadata-tabs.html
97
101
  - _includes/pageids-overview.html
98
102
  - _includes/related-pages.html
99
103
  - _includes/resource-table-all.html
@@ -479,8 +483,6 @@ files:
479
483
  - assets/flags/zm.svg
480
484
  - assets/flags/zw.svg
481
485
  - assets/img/Flag_of_Europe.svg
482
- - assets/img/android-chrome-192x192.png
483
- - assets/img/android-chrome-512x512.png
484
486
  - assets/img/apple-touch-icon.png
485
487
  - assets/img/carpentries_logo.svg
486
488
  - assets/img/dsw_logo.svg
@@ -492,24 +494,26 @@ files:
492
494
  - assets/img/favicon-16x16.png
493
495
  - assets/img/favicon-32x32.png
494
496
  - assets/img/favicon.ico
497
+ - assets/img/favicon.svg
495
498
  - assets/img/main_logo.svg
496
499
  - assets/img/rdmkit_logo.svg
497
- - assets/img/safari-pinned-tab.svg
498
500
  - assets/img/site.webmanifest
499
501
  - assets/img/tess_logo.svg
502
+ - assets/img/web-app-manifest-192x192.png
503
+ - assets/img/web-app-manifest-512x512.png
500
504
  - assets/img/youtube_logo.svg
501
505
  - assets/img/zenodo_logo.svg
502
506
  - assets/js/anchor.min.js
503
507
  - assets/js/bootstrap.bundle.min.js
504
508
  - assets/js/bootstrap.bundle.min.js.map
505
509
  - assets/js/clipboard.min.js
510
+ - assets/js/custom.js
506
511
  - assets/js/dataTables.bootstrap5.min.js
507
512
  - assets/js/dataTables.dateTime.min.js
508
513
  - assets/js/dataTables.searchBuilder.min.js
509
514
  - assets/js/jquery.dataTables.min.js
510
515
  - assets/js/jquery.min.js
511
516
  - assets/js/jquery.min.map
512
- - assets/js/jquery.navgoco.js
513
517
  - assets/js/lunr.min.js
514
518
  - assets/js/main.js
515
519
  - assets/js/search-data.json
Binary file
Binary file
@@ -1,29 +0,0 @@
1
- <?xml version="1.0" standalone="no"?>
2
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
3
- "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
4
- <svg version="1.0" xmlns="http://www.w3.org/2000/svg"
5
- width="700.000000pt" height="700.000000pt" viewBox="0 0 700.000000 700.000000"
6
- preserveAspectRatio="xMidYMid meet">
7
- <metadata>
8
- Created by potrace 1.14, written by Peter Selinger 2001-2017
9
- </metadata>
10
- <g transform="translate(0.000000,700.000000) scale(0.100000,-0.100000)"
11
- fill="#000000" stroke="none">
12
- <path d="M3270 6994 c-432 -38 -776 -119 -1123 -265 -1015 -427 -1773 -1308
13
- -2041 -2374 -73 -289 -101 -529 -101 -855 0 -333 28 -566 106 -874 269 -1067
14
- 1059 -1965 2089 -2376 922 -368 1976 -323 2861 120 956 480 1649 1386 1859
15
- 2430 54 267 64 378 64 700 0 223 -4 327 -17 425 -24 175 -68 394 -111 543 -20
16
- 68 -36 125 -36 128 0 2 -123 4 -274 4 -261 0 -274 -1 -300 -21 l-26 -20 -2
17
- -1310 -3 -1311 -24 -19 c-21 -18 -42 -19 -271 -19 l-249 0 -20 26 -21 27 0
18
- 1299 0 1299 -25 24 -24 25 -701 0 -701 0 -24 -25 -25 -24 0 -1299 0 -1299 -21
19
- -27 -20 -26 -248 0 c-198 0 -251 3 -267 14 -19 14 -19 42 -24 1326 l-5 1312
20
- -28 24 -28 24 -839 0 c-617 0 -846 -3 -865 -12 -42 -19 -46 -57 -43 -409 3
21
- -305 4 -328 22 -348 19 -21 25 -21 426 -21 419 0 460 -3 480 -40 6 -11 10
22
- -114 10 -238 0 -201 -2 -222 -19 -243 l-19 -24 -431 -5 c-396 -5 -432 -6 -448
23
- -23 -17 -16 -18 -46 -18 -387 l0 -369 23 -23 23 -23 484 -3 484 -3 21 -26 c19
24
- -24 20 -39 20 -240 0 -214 0 -214 -25 -238 l-24 -25 -775 0 -775 0 -20 26 -21
25
- 27 0 1566 c1 1215 3 1570 13 1582 7 9 22 21 34 27 16 9 682 12 2697 12 1472 0
26
- 2676 2 2676 5 0 13 -99 178 -176 295 -427 646 -1089 1149 -1827 1389 -346 112
27
- -638 160 -1022 165 -132 2 -260 2 -285 0z"/>
28
- </g>
29
- </svg>