jekyll-theme-chirpy 6.5.5 → 7.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.
- checksums.yaml +4 -4
- data/README.md +8 -6
- data/_data/origin/basic.yml +3 -10
- data/_data/origin/cors.yml +17 -22
- data/_includes/analytics/cloudflare.html +7 -0
- data/_includes/analytics/goatcounter.html +6 -0
- data/_includes/analytics/google.html +13 -0
- data/_includes/analytics/matomo.html +14 -0
- data/_includes/analytics/umami.html +6 -0
- data/_includes/comments/disqus.html +5 -5
- data/_includes/comments/giscus.html +3 -3
- data/_includes/comments/utterances.html +4 -5
- data/_includes/comments.html +3 -3
- data/_includes/embed/audio.html +35 -0
- data/_includes/embed/bilibili.html +3 -4
- data/_includes/embed/video.html +59 -0
- data/_includes/embed/youtube.html +1 -1
- data/_includes/footer.html +8 -1
- data/_includes/head.html +21 -25
- data/_includes/js-selector.html +31 -37
- data/_includes/lang.html +3 -1
- data/_includes/{img-url.html → media-url.html} +8 -8
- data/_includes/mermaid.html +31 -27
- data/_includes/mode-toggle.html +24 -51
- data/_includes/pageviews/goatcounter.html +18 -0
- data/_includes/post-description.html +16 -0
- data/_includes/refactor-content.html +1 -1
- data/_includes/related-posts.html +2 -4
- data/_includes/search-loader.html +1 -1
- data/_includes/search-results.html +1 -1
- data/_includes/sidebar.html +2 -2
- data/_includes/toc.html +2 -2
- data/_includes/topbar.html +1 -1
- data/_layouts/compress.html +2 -2
- data/_layouts/default.html +3 -8
- data/_layouts/home.html +2 -5
- data/_layouts/post.html +17 -4
- data/_sass/addon/commons.scss +38 -46
- data/_sass/colors/typography-dark.scss +0 -4
- data/_sass/dist/bootstrap.css +5 -0
- data/_sass/layout/post.scss +23 -10
- data/_sass/main.bundle.scss +2 -0
- data/assets/css/jekyll-theme-chirpy.scss +5 -1
- data/assets/feed.xml +1 -8
- data/assets/js/data/mathjax.js +25 -0
- data/assets/js/data/swconf.js +0 -14
- data/assets/js/dist/app.min.js +4 -0
- data/assets/js/dist/categories.min.js +2 -2
- data/assets/js/dist/commons.min.js +2 -2
- data/assets/js/dist/home.min.js +2 -2
- data/assets/js/dist/misc.min.js +2 -2
- data/assets/js/dist/page.min.js +2 -2
- data/assets/js/dist/post.min.js +2 -2
- data/assets/js/dist/sw.min.js +5 -0
- metadata +22 -12
- data/_includes/goatcounter.html +0 -8
- data/_includes/google-analytics.html +0 -14
- data/assets/js/pwa/app.js +0 -54
- data/assets/js/pwa/sw.js +0 -101
| @@ -1,25 +1,25 @@ | |
| 1 1 | 
             
            {%- comment -%}
         | 
| 2 | 
            -
              Generate  | 
| 2 | 
            +
              Generate media resource final URL based on `site.cdn`, `page.media_subpath`
         | 
| 3 3 |  | 
| 4 4 | 
             
              Arguments:
         | 
| 5 | 
            -
                src - required, basic  | 
| 6 | 
            -
                 | 
| 5 | 
            +
                src - required, basic media resources path
         | 
| 6 | 
            +
                subpath - optional, relative path of media resources
         | 
| 7 7 | 
             
                absolute - optional, boolean, if true, generate absolute URL
         | 
| 8 8 |  | 
| 9 9 | 
             
              Return:
         | 
| 10 | 
            -
                 | 
| 10 | 
            +
                media resources URL
         | 
| 11 11 | 
             
            {%- endcomment -%}
         | 
| 12 12 |  | 
| 13 13 | 
             
            {% assign url = include.src %}
         | 
| 14 14 |  | 
| 15 15 | 
             
            {%- if url -%}
         | 
| 16 16 | 
             
              {% unless url contains ':' %}
         | 
| 17 | 
            -
                {%- comment -%} Add  | 
| 18 | 
            -
                {% assign url = include. | 
| 17 | 
            +
                {%- comment -%} Add media resources subpath prefix {%- endcomment -%}
         | 
| 18 | 
            +
                {% assign url = include.subpath | default: '' | append: '/' | append: url %}
         | 
| 19 19 |  | 
| 20 20 | 
             
                {%- comment -%} Prepend CND URL {%- endcomment -%}
         | 
| 21 | 
            -
                {% if site. | 
| 22 | 
            -
                  {% assign url = site. | 
| 21 | 
            +
                {% if site.cdn %}
         | 
| 22 | 
            +
                  {% assign url = site.cdn | append: '/' | append: url %}
         | 
| 23 23 | 
             
                {% endif %}
         | 
| 24 24 |  | 
| 25 25 | 
             
                {% assign url = url | replace: '///', '/' | replace: '//', '/' | replace: ':/', '://' %}
         | 
    
        data/_includes/mermaid.html
    CHANGED
    
    | @@ -1,29 +1,33 @@ | |
| 1 1 | 
             
            <!-- mermaid-js loader -->
         | 
| 2 2 | 
             
            <script type="text/javascript">
         | 
| 3 | 
            -
               | 
| 4 | 
            -
                 | 
| 5 | 
            -
                   | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
                     | 
| 9 | 
            -
                      return;
         | 
| 10 | 
            -
                    }
         | 
| 11 | 
            -
             | 
| 12 | 
            -
                    let expectedTheme = mode === ModeToggle.DARK_MODE ? 'dark' : 'default';
         | 
| 13 | 
            -
                    let config = { theme: expectedTheme };
         | 
| 14 | 
            -
             | 
| 15 | 
            -
                    /* Re-render the SVG › <https://github.com/mermaid-js/mermaid/issues/311#issuecomment-332557344> */
         | 
| 16 | 
            -
                    $('.mermaid').each(function () {
         | 
| 17 | 
            -
                      let svgCode = $(this).prev().children().html();
         | 
| 18 | 
            -
                      $(this).removeAttr('data-processed');
         | 
| 19 | 
            -
                      $(this).html(svgCode);
         | 
| 20 | 
            -
                    });
         | 
| 21 | 
            -
             | 
| 22 | 
            -
                    mermaid.initialize(config);
         | 
| 23 | 
            -
                    mermaid.init(undefined, '.mermaid');
         | 
| 3 | 
            +
              function updateMermaid(event) {
         | 
| 4 | 
            +
                if (event.source === window && event.data && event.data.direction === ModeToggle.ID) {
         | 
| 5 | 
            +
                  const mode = event.data.message;
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                  if (typeof mermaid === 'undefined') {
         | 
| 8 | 
            +
                    return;
         | 
| 24 9 | 
             
                  }
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  let expectedTheme = mode === ModeToggle.DARK_MODE ? 'dark' : 'default';
         | 
| 12 | 
            +
                  let config = { theme: expectedTheme };
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  {%- comment -%}
         | 
| 15 | 
            +
                    Re-render the SVG › <https://github.com/mermaid-js/mermaid/issues/311#issuecomment-332557344>
         | 
| 16 | 
            +
                  {%- endcomment -%}
         | 
| 17 | 
            +
                  const mermaidList = document.getElementsByClassName('mermaid');
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  [...mermaidList].forEach((elem) => {
         | 
| 20 | 
            +
                    const svgCode = elem.previousSibling.children.item(0).innerHTML;
         | 
| 21 | 
            +
                    elem.innerHTML = svgCode;
         | 
| 22 | 
            +
                    elem.removeAttribute('data-processed');
         | 
| 23 | 
            +
                  });
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  mermaid.initialize(config);
         | 
| 26 | 
            +
                  mermaid.init(undefined, '.mermaid');
         | 
| 25 27 | 
             
                }
         | 
| 28 | 
            +
              }
         | 
| 26 29 |  | 
| 30 | 
            +
              (function () {
         | 
| 27 31 | 
             
                let initTheme = 'default';
         | 
| 28 32 | 
             
                const html = document.documentElement;
         | 
| 29 33 |  | 
| @@ -35,15 +39,16 @@ | |
| 35 39 | 
             
                }
         | 
| 36 40 |  | 
| 37 41 | 
             
                let mermaidConf = {
         | 
| 38 | 
            -
                  theme: initTheme  | 
| 42 | 
            +
                  theme: initTheme {%- comment -%}  <default | dark | forest | neutral> {%- endcomment -%}
         | 
| 39 43 | 
             
                };
         | 
| 40 44 |  | 
| 41 | 
            -
                 | 
| 42 | 
            -
                document. | 
| 45 | 
            +
                {%- comment -%} Create mermaid tag {%- endcomment -%}
         | 
| 46 | 
            +
                const basicList = document.getElementsByClassName('language-mermaid');
         | 
| 47 | 
            +
                [...basicList].forEach((elem) => {
         | 
| 43 48 | 
             
                  const svgCode = elem.textContent;
         | 
| 44 49 | 
             
                  const backup = elem.parentElement;
         | 
| 45 | 
            -
                  backup.classList.add(' | 
| 46 | 
            -
                   | 
| 50 | 
            +
                  backup.classList.add('d-none');
         | 
| 51 | 
            +
                  {%- comment -%} create mermaid node {%- endcomment -%}
         | 
| 47 52 | 
             
                  let mermaid = document.createElement('pre');
         | 
| 48 53 | 
             
                  mermaid.classList.add('mermaid');
         | 
| 49 54 | 
             
                  const text = document.createTextNode(svgCode);
         | 
| @@ -52,7 +57,6 @@ | |
| 52 57 | 
             
                });
         | 
| 53 58 |  | 
| 54 59 | 
             
                mermaid.initialize(mermaidConf);
         | 
| 55 | 
            -
             | 
| 56 60 | 
             
                window.addEventListener('message', updateMermaid);
         | 
| 57 61 | 
             
              })();
         | 
| 58 62 | 
             
            </script>
         | 
    
        data/_includes/mode-toggle.html
    CHANGED
    
    | @@ -19,45 +19,32 @@ | |
| 19 19 | 
             
                }
         | 
| 20 20 |  | 
| 21 21 | 
             
                constructor() {
         | 
| 22 | 
            -
                  if (this.hasMode) {
         | 
| 23 | 
            -
                    if (this.isDarkMode) {
         | 
| 24 | 
            -
                      if (!this.isSysDarkPrefer) {
         | 
| 25 | 
            -
                        this.setDark();
         | 
| 26 | 
            -
                      }
         | 
| 27 | 
            -
                    } else {
         | 
| 28 | 
            -
                      if (this.isSysDarkPrefer) {
         | 
| 29 | 
            -
                        this.setLight();
         | 
| 30 | 
            -
                      }
         | 
| 31 | 
            -
                    }
         | 
| 32 | 
            -
                  }
         | 
| 33 | 
            -
             | 
| 34 22 | 
             
                  let self = this;
         | 
| 35 23 |  | 
| 36 | 
            -
                   | 
| 24 | 
            +
                  {%- comment -%} always follow the system prefers {%- endcomment -%}
         | 
| 37 25 | 
             
                  this.sysDarkPrefers.addEventListener('change', () => {
         | 
| 38 26 | 
             
                    if (self.hasMode) {
         | 
| 39 | 
            -
                      if (self.isDarkMode) {
         | 
| 40 | 
            -
                        if (!self.isSysDarkPrefer) {
         | 
| 41 | 
            -
                          self.setDark();
         | 
| 42 | 
            -
                        }
         | 
| 43 | 
            -
                      } else {
         | 
| 44 | 
            -
                        if (self.isSysDarkPrefer) {
         | 
| 45 | 
            -
                          self.setLight();
         | 
| 46 | 
            -
                        }
         | 
| 47 | 
            -
                      }
         | 
| 48 | 
            -
             | 
| 49 27 | 
             
                      self.clearMode();
         | 
| 50 28 | 
             
                    }
         | 
| 51 | 
            -
             | 
| 52 29 | 
             
                    self.notify();
         | 
| 53 30 | 
             
                  });
         | 
| 54 | 
            -
             | 
| 31 | 
            +
             | 
| 32 | 
            +
                  if (!this.hasMode) {
         | 
| 33 | 
            +
                    return;
         | 
| 34 | 
            +
                  }
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                  if (this.isDarkMode) {
         | 
| 37 | 
            +
                    this.setDark();
         | 
| 38 | 
            +
                  } else {
         | 
| 39 | 
            +
                    this.setLight();
         | 
| 40 | 
            +
                  }
         | 
| 41 | 
            +
                }
         | 
| 55 42 |  | 
| 56 43 | 
             
                get sysDarkPrefers() {
         | 
| 57 44 | 
             
                  return window.matchMedia('(prefers-color-scheme: dark)');
         | 
| 58 45 | 
             
                }
         | 
| 59 46 |  | 
| 60 | 
            -
                get  | 
| 47 | 
            +
                get isPreferDark() {
         | 
| 61 48 | 
             
                  return this.sysDarkPrefers.matches;
         | 
| 62 49 | 
             
                }
         | 
| 63 50 |  | 
| @@ -65,10 +52,6 @@ | |
| 65 52 | 
             
                  return this.mode === ModeToggle.DARK_MODE;
         | 
| 66 53 | 
             
                }
         | 
| 67 54 |  | 
| 68 | 
            -
                get isLightMode() {
         | 
| 69 | 
            -
                  return this.mode === ModeToggle.LIGHT_MODE;
         | 
| 70 | 
            -
                }
         | 
| 71 | 
            -
             | 
| 72 55 | 
             
                get hasMode() {
         | 
| 73 56 | 
             
                  return this.mode != null;
         | 
| 74 57 | 
             
                }
         | 
| @@ -77,12 +60,12 @@ | |
| 77 60 | 
             
                  return sessionStorage.getItem(ModeToggle.MODE_KEY);
         | 
| 78 61 | 
             
                }
         | 
| 79 62 |  | 
| 80 | 
            -
                 | 
| 63 | 
            +
                {%- comment -%} get the current mode on screen {%- endcomment -%}
         | 
| 81 64 | 
             
                get modeStatus() {
         | 
| 82 | 
            -
                  if (this. | 
| 83 | 
            -
                    return  | 
| 65 | 
            +
                  if (this.hasMode) {
         | 
| 66 | 
            +
                    return this.mode;
         | 
| 84 67 | 
             
                  } else {
         | 
| 85 | 
            -
                    return ModeToggle.LIGHT_MODE;
         | 
| 68 | 
            +
                    return this.isPreferDark ? ModeToggle.DARK_MODE : ModeToggle.LIGHT_MODE;
         | 
| 86 69 | 
             
                  }
         | 
| 87 70 | 
             
                }
         | 
| 88 71 |  | 
| @@ -101,7 +84,9 @@ | |
| 101 84 | 
             
                  sessionStorage.removeItem(ModeToggle.MODE_KEY);
         | 
| 102 85 | 
             
                }
         | 
| 103 86 |  | 
| 104 | 
            -
                 | 
| 87 | 
            +
                {%- comment -%}
         | 
| 88 | 
            +
                  Notify another plugins that the theme mode has changed
         | 
| 89 | 
            +
                {%- endcomment -%}
         | 
| 105 90 | 
             
                notify() {
         | 
| 106 91 | 
             
                  window.postMessage(
         | 
| 107 92 | 
             
                    {
         | 
| @@ -114,21 +99,9 @@ | |
| 114 99 |  | 
| 115 100 | 
             
                flipMode() {
         | 
| 116 101 | 
             
                  if (this.hasMode) {
         | 
| 117 | 
            -
                     | 
| 118 | 
            -
                      if (this.isLightMode) {
         | 
| 119 | 
            -
                        this.clearMode();
         | 
| 120 | 
            -
                      } else {
         | 
| 121 | 
            -
                        this.setLight();
         | 
| 122 | 
            -
                      }
         | 
| 123 | 
            -
                    } else {
         | 
| 124 | 
            -
                      if (this.isDarkMode) {
         | 
| 125 | 
            -
                        this.clearMode();
         | 
| 126 | 
            -
                      } else {
         | 
| 127 | 
            -
                        this.setDark();
         | 
| 128 | 
            -
                      }
         | 
| 129 | 
            -
                    }
         | 
| 102 | 
            +
                    this.clearMode();
         | 
| 130 103 | 
             
                  } else {
         | 
| 131 | 
            -
                    if (this. | 
| 104 | 
            +
                    if (this.isPreferDark) {
         | 
| 132 105 | 
             
                      this.setLight();
         | 
| 133 106 | 
             
                    } else {
         | 
| 134 107 | 
             
                      this.setDark();
         | 
| @@ -136,8 +109,8 @@ | |
| 136 109 | 
             
                  }
         | 
| 137 110 |  | 
| 138 111 | 
             
                  this.notify();
         | 
| 139 | 
            -
                } | 
| 140 | 
            -
              } | 
| 112 | 
            +
                }
         | 
| 113 | 
            +
              }
         | 
| 141 114 |  | 
| 142 115 | 
             
              const modeToggle = new ModeToggle();
         | 
| 143 116 | 
             
            </script>
         | 
| @@ -0,0 +1,18 @@ | |
| 1 | 
            +
            <!-- Display GoatCounter pageviews -->
         | 
| 2 | 
            +
            <script>
         | 
| 3 | 
            +
              let pv = document.getElementById('pageviews');
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              if (pv !== null) {
         | 
| 6 | 
            +
                const uri = location.pathname.replace(/\/$/, '');
         | 
| 7 | 
            +
                const url = `https://{{ site.analytics.goatcounter.id }}.goatcounter.com/counter/${encodeURIComponent(uri)}.json`;
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                fetch(url)
         | 
| 10 | 
            +
                  .then((response) => response.json())
         | 
| 11 | 
            +
                  .then((data) => {
         | 
| 12 | 
            +
                    pv.innerText = new Intl.NumberFormat().format(data.count);
         | 
| 13 | 
            +
                  })
         | 
| 14 | 
            +
                  .catch((error) => {
         | 
| 15 | 
            +
                    pv.innerText = '1';
         | 
| 16 | 
            +
                  });
         | 
| 17 | 
            +
              }
         | 
| 18 | 
            +
            </script>
         | 
| @@ -0,0 +1,16 @@ | |
| 1 | 
            +
            {%- comment -%}
         | 
| 2 | 
            +
              Get post description or generate it from the post content.
         | 
| 3 | 
            +
            {%- endcomment -%}
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            {%- assign max_length = include.max_length | default: 200 -%}
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            {%- capture description -%}
         | 
| 8 | 
            +
            {%- if post.description -%}
         | 
| 9 | 
            +
              {{- post.description -}}
         | 
| 10 | 
            +
            {%- else -%}
         | 
| 11 | 
            +
              {%- include no-linenos.html content=post.content -%}
         | 
| 12 | 
            +
              {{- content | markdownify | strip_html -}}
         | 
| 13 | 
            +
            {%- endif -%}
         | 
| 14 | 
            +
            {%- endcapture -%}
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            {{- description | strip | truncate: max_length | escape -}}
         | 
| @@ -97,7 +97,7 @@ | |
| 97 97 | 
             
                {% assign _lazyload = true %}
         | 
| 98 98 |  | 
| 99 99 | 
             
                {%- capture _img_url -%}
         | 
| 100 | 
            -
                  {% include  | 
| 100 | 
            +
                  {% include media-url.html src=_src subpath=page.media_subpath %}
         | 
| 101 101 | 
             
                {%- endcapture -%}
         | 
| 102 102 |  | 
| 103 103 | 
             
                {% assign _path_prefix = _img_url | remove: _src %}
         | 
| @@ -21,6 +21,7 @@ | |
| 21 21 | 
             
              {% assign match_posts = match_posts | push: site.tags[tag] | uniq %}
         | 
| 22 22 | 
             
            {% endfor %}
         | 
| 23 23 |  | 
| 24 | 
            +
            {% assign match_posts = match_posts | reverse %}
         | 
| 24 25 | 
             
            {% assign last_index = match_posts.size | minus: 1 %}
         | 
| 25 26 | 
             
            {% assign score_list = '' | split: '' %}
         | 
| 26 27 |  | 
| @@ -81,10 +82,7 @@ | |
| 81 82 | 
             
                          {% include datetime.html date=post.date lang=include.lang %}
         | 
| 82 83 | 
             
                          <h4 class="pt-0 my-2">{{ post.title }}</h4>
         | 
| 83 84 | 
             
                          <div class="text-muted">
         | 
| 84 | 
            -
                            <p>
         | 
| 85 | 
            -
                              {% include no-linenos.html content=post.content %}
         | 
| 86 | 
            -
                              {{ content | markdownify | strip_html | truncate: 200 | escape }}
         | 
| 87 | 
            -
                            </p>
         | 
| 85 | 
            +
                            <p>{% include post-description.html %}</p>
         | 
| 88 86 | 
             
                          </div>
         | 
| 89 87 | 
             
                        </div>
         | 
| 90 88 | 
             
                      </a>
         | 
| @@ -19,7 +19,7 @@ | |
| 19 19 | 
             
            {% capture not_found %}<p class="mt-5">{{ site.data.locales[include.lang].search.no_results }}</p>{% endcapture %}
         | 
| 20 20 |  | 
| 21 21 | 
             
            <script>
         | 
| 22 | 
            -
               | 
| 22 | 
            +
              {%- comment -%} Note: dependent library will be loaded in `js-selector.html` {%- endcomment -%}
         | 
| 23 23 | 
             
              SimpleJekyllSearch({
         | 
| 24 24 | 
             
                searchInput: document.getElementById('search-input'),
         | 
| 25 25 | 
             
                resultsContainer: document.getElementById('search-results'),
         | 
| @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            <!-- The Search results -->
         | 
| 2 2 |  | 
| 3 | 
            -
            <div id="search-result-wrapper" class="d-flex justify-content-center  | 
| 3 | 
            +
            <div id="search-result-wrapper" class="d-flex justify-content-center d-none">
         | 
| 4 4 | 
             
              <div class="col-11 content">
         | 
| 5 5 | 
             
                <div id="search-hints">
         | 
| 6 6 | 
             
                  {% include_cached trending-tags.html %}
         | 
    
        data/_includes/sidebar.html
    CHANGED
    
    | @@ -5,7 +5,7 @@ | |
| 5 5 | 
             
                <a href="{{ '/' | relative_url }}" id="avatar" class="rounded-circle">
         | 
| 6 6 | 
             
                  {%- if site.avatar != empty and site.avatar -%}
         | 
| 7 7 | 
             
                    {%- capture avatar_url -%}
         | 
| 8 | 
            -
                      {% include  | 
| 8 | 
            +
                      {% include media-url.html src=site.avatar %}
         | 
| 9 9 | 
             
                    {%- endcapture -%}
         | 
| 10 10 | 
             
                    <img src="{{- avatar_url -}}" width="112" height="112" alt="avatar" onerror="this.style.display='none'">
         | 
| 11 11 | 
             
                  {%- endif -%}
         | 
| @@ -44,7 +44,7 @@ | |
| 44 44 |  | 
| 45 45 | 
             
              <div class="sidebar-bottom d-flex flex-wrap  align-items-center w-100">
         | 
| 46 46 | 
             
                {% unless site.theme_mode %}
         | 
| 47 | 
            -
                  <button type="button" class=" | 
| 47 | 
            +
                  <button type="button" class="btn btn-link nav-link" aria-label="Switch Mode" id="mode-toggle">
         | 
| 48 48 | 
             
                    <i class="fas fa-adjust"></i>
         | 
| 49 49 | 
             
                  </button>
         | 
| 50 50 |  | 
    
        data/_includes/toc.html
    CHANGED
    
    | @@ -6,8 +6,8 @@ | |
| 6 6 | 
             
            {% endif %}
         | 
| 7 7 |  | 
| 8 8 | 
             
            {% if enable_toc %}
         | 
| 9 | 
            -
              <section id="toc-wrapper" class="ps-0 pe-4">
         | 
| 10 | 
            -
                <h2 class="panel-heading ps-3  | 
| 9 | 
            +
              <section id="toc-wrapper" class="d-none ps-0 pe-4">
         | 
| 10 | 
            +
                <h2 class="panel-heading ps-3 mb-2">{{- site.data.locales[include.lang].panel.toc -}}</h2>
         | 
| 11 11 | 
             
                <nav id="toc"></nav>
         | 
| 12 12 | 
             
              </section>
         | 
| 13 13 | 
             
            {% endif %}
         | 
    
        data/_includes/topbar.html
    CHANGED
    
    
    
        data/_layouts/compress.html
    CHANGED
    
    | @@ -1,10 +1,10 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            # Jekyll layout that compresses HTML
         | 
| 3 | 
            -
            # v3. | 
| 3 | 
            +
            # v3.2.0
         | 
| 4 4 | 
             
            # http://jch.penibelst.de/
         | 
| 5 5 | 
             
            # © 2014–2015 Anatol Broder
         | 
| 6 6 | 
             
            # MIT License
         | 
| 7 7 | 
             
            ---
         | 
| 8 8 |  | 
| 9 9 | 
             
            {% capture _LINE_FEED %}
         | 
| 10 | 
            -
            {% endcapture %}{% if site.compress_html.ignore.envs contains jekyll.environment or site.compress_html.ignore.envs == "all" %}{{ content }}{% else %}{% capture _content %}{{ content }}{% endcapture %}{% assign _profile = site.compress_html.profile %}{% if site.compress_html.endings == "all" %}{% assign _endings = "html head body li dt dd optgroup option colgroup caption thead tbody tfoot tr td th" | split: " " %}{% else %}{% assign _endings = site.compress_html.endings %}{% endif %}{% for _element in _endings %}{% capture _end %}</{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _end %}{% endfor %}{% if _profile and _endings %}{% assign _profile_endings = _content | size | plus: 1 %}{% endif %}{% for _element in site.compress_html.startings %}{% capture _start %}<{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _start %}{% endfor %}{% if _profile and site.compress_html.startings %}{% assign _profile_startings = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.comments == "all" %}{% assign _comments = "<!-- -->" | split: " " %}{% else %}{% assign _comments = site.compress_html.comments %}{% endif %}{% if _comments.size == 2 %}{% capture _comment_befores %}.{{ _content }}{% endcapture %}{% assign _comment_befores = _comment_befores | split: _comments.first %}{% for _comment_before in _comment_befores %}{% if forloop.first %}{% continue %}{% endif %}{% capture _comment_outside %}{% if _carry %}{{ _comments.first }}{% endif %}{{ _comment_before }}{% endcapture %}{% capture _comment %}{% unless _carry %}{{ _comments.first }}{% endunless %}{{ _comment_outside | split: _comments.last | first }}{% if _comment_outside contains _comments.last %}{{ _comments.last }}{% assign _carry = false %}{% else %}{% assign _carry = true %}{% endif %}{% endcapture %}{% assign _content = _content | remove_first: _comment %}{% endfor %}{% if _profile %}{% assign _profile_comments = _content | size | plus: 1 %}{% endif %}{% endif %}{% assign _pre_befores = _content | split: "<pre" %}{% assign _content = "" %}{% for _pre_before in _pre_befores %}{% assign _pres = _pre_before | split: "</pre>" %}{% assign _pres_after = "" %}{% if _pres.size != 0 %}{% if site.compress_html.blanklines %}{% assign _lines = _pres.last | split: _LINE_FEED %}{% capture _pres_after %}{% for _line in _lines %}{% assign _trimmed = _line | split: " " | join: " " %}{% if _trimmed != empty or forloop.last %}{% unless forloop.first %}{{ _LINE_FEED }}{% endunless %}{{ _line }}{% endif %}{% endfor %}{% endcapture %}{% else %}{% assign _pres_after = _pres.last | split: " " | join: " " %}{% endif %}{% endif %}{% capture _content %}{{ _content }}{% if _pre_before contains "</pre>" %}<pre{{ _pres.first }}</pre>{% endif %}{% unless _pre_before contains "</pre>" and _pres.size == 1 %}{{ _pres_after }}{% endunless %}{% endcapture %}{% endfor %}{% if _profile %}{% assign _profile_collapse = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.clippings == "all" %}{% assign _clippings = "html head title base link meta style body article section nav aside h1 h2 h3 h4 h5 h6 hgroup header footer address p hr blockquote ol ul li dl dt dd figure figcaption main div table caption colgroup col tbody thead tfoot tr td th" | split: " " %}{% else %}{% assign _clippings = site.compress_html.clippings %}{% endif %}{% for _element in _clippings %}{% assign _edges = " <e;<e; </e>;</e>;</e> ;</e>" | replace: "e", _element | split: ";" %}{% assign _content = _content | replace: _edges[0], _edges[1] | replace: _edges[2], _edges[3] | replace: _edges[4], _edges[5] %}{% endfor %}{% if _profile and _clippings %}{% assign _profile_clippings = _content | size | plus: 1 %}{% endif %}{{ _content }}{% if _profile %} <table id="compress_html_profile_{{ site.time | date: "%Y%m%d" }}" class="compress_html_profile"> <thead> <tr> <td>Step <td>Bytes <tbody> <tr> <td>raw <td>{{ content | size }}{% if _profile_endings %} <tr> <td>endings <td>{{ _profile_endings }}{% endif %}{% if _profile_startings %} <tr> <td>startings <td>{{ _profile_startings }}{% endif %}{% if _profile_comments %} <tr> <td>comments <td>{{ _profile_comments }}{% endif %}{% if _profile_collapse %} <tr> <td>collapse <td>{{ _profile_collapse }}{% endif %}{% if _profile_clippings %} <tr> <td>clippings <td>{{ _profile_clippings }}{% endif %} </table>{% endif %}{% endif %}
         | 
| 10 | 
            +
            {% endcapture %}{% if site.compress_html.ignore.envs contains jekyll.environment or site.compress_html.ignore.envs == "all" or page.compress_html == false %}{{ content }}{% else %}{% capture _content %}{{ content }}{% endcapture %}{% assign _profile = site.compress_html.profile %}{% if site.compress_html.endings == "all" %}{% assign _endings = "html head body li dt dd optgroup option colgroup caption thead tbody tfoot tr td th" | split: " " %}{% else %}{% assign _endings = site.compress_html.endings %}{% endif %}{% for _element in _endings %}{% capture _end %}</{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _end %}{% endfor %}{% if _profile and _endings %}{% assign _profile_endings = _content | size | plus: 1 %}{% endif %}{% for _element in site.compress_html.startings %}{% capture _start %}<{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _start %}{% endfor %}{% if _profile and site.compress_html.startings %}{% assign _profile_startings = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.comments == "all" %}{% assign _comments = "<!-- -->" | split: " " %}{% else %}{% assign _comments = site.compress_html.comments %}{% endif %}{% if _comments.size == 2 %}{% capture _comment_befores %}.{{ _content }}{% endcapture %}{% assign _comment_befores = _comment_befores | split: _comments.first %}{% for _comment_before in _comment_befores %}{% if forloop.first %}{% continue %}{% endif %}{% capture _comment_outside %}{% if _carry %}{{ _comments.first }}{% endif %}{{ _comment_before }}{% endcapture %}{% capture _comment %}{% unless _carry %}{{ _comments.first }}{% endunless %}{{ _comment_outside | split: _comments.last | first }}{% if _comment_outside contains _comments.last %}{{ _comments.last }}{% assign _carry = false %}{% else %}{% assign _carry = true %}{% endif %}{% endcapture %}{% assign _content = _content | remove_first: _comment %}{% endfor %}{% if _profile %}{% assign _profile_comments = _content | size | plus: 1 %}{% endif %}{% endif %}{% assign _pre_befores = _content | split: "<pre" %}{% assign _content = "" %}{% for _pre_before in _pre_befores %}{% assign _pres = _pre_before | split: "</pre>" %}{% assign _pres_after = "" %}{% if _pres.size != 0 %}{% if site.compress_html.blanklines %}{% assign _lines = _pres.last | split: _LINE_FEED %}{% capture _pres_after %}{% for _line in _lines %}{% assign _trimmed = _line | split: " " | join: " " %}{% if _trimmed != empty or forloop.last %}{% unless forloop.first %}{{ _LINE_FEED }}{% endunless %}{{ _line }}{% endif %}{% endfor %}{% endcapture %}{% else %}{% assign _pres_after = _pres.last | split: " " | join: " " %}{% endif %}{% endif %}{% capture _content %}{{ _content }}{% if _pre_before contains "</pre>" %}<pre{{ _pres.first }}</pre>{% endif %}{% unless _pre_before contains "</pre>" and _pres.size == 1 %}{{ _pres_after }}{% endunless %}{% endcapture %}{% endfor %}{% if _profile %}{% assign _profile_collapse = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.clippings == "all" %}{% assign _clippings = "html head title base link meta style body article section nav aside h1 h2 h3 h4 h5 h6 hgroup header footer address p hr blockquote ol ul li dl dt dd figure figcaption main div table caption colgroup col tbody thead tfoot tr td th" | split: " " %}{% else %}{% assign _clippings = site.compress_html.clippings %}{% endif %}{% for _element in _clippings %}{% assign _edges = " <e;<e; </e>;</e>;</e> ;</e>" | replace: "e", _element | split: ";" %}{% assign _content = _content | replace: _edges[0], _edges[1] | replace: _edges[2], _edges[3] | replace: _edges[4], _edges[5] %}{% endfor %}{% if _profile and _clippings %}{% assign _profile_clippings = _content | size | plus: 1 %}{% endif %}{{ _content }}{% if _profile %} <table id="compress_html_profile_{{ site.time | date: "%Y%m%d" }}" class="compress_html_profile"> <thead> <tr> <td>Step <td>Bytes <tbody> <tr> <td>raw <td>{{ content | size }}{% if _profile_endings %} <tr> <td>endings <td>{{ _profile_endings }}{% endif %}{% if _profile_startings %} <tr> <td>startings <td>{{ _profile_startings }}{% endif %}{% if _profile_comments %} <tr> <td>comments <td>{{ _profile_comments }}{% endif %}{% if _profile_collapse %} <tr> <td>collapse <td>{{ _profile_collapse }}{% endif %}{% if _profile_clippings %} <tr> <td>clippings <td>{{ _profile_clippings }}{% endif %} </table>{% endif %}{% endif %}
         | 
    
        data/_layouts/default.html
    CHANGED
    
    | @@ -13,7 +13,7 @@ layout: compress | |
| 13 13 | 
             
            {% endif %}
         | 
| 14 14 |  | 
| 15 15 | 
             
            <!-- `site.alt_lang` can specify a language different from the UI -->
         | 
| 16 | 
            -
            <html lang="{{ site.alt_lang | default: site.lang }}" {{ prefer_mode }}>
         | 
| 16 | 
            +
            <html lang="{{ page.lang | default: site.alt_lang | default: site.lang }}" {{ prefer_mode }}>
         | 
| 17 17 | 
             
              {% include head.html %}
         | 
| 18 18 |  | 
| 19 19 | 
             
              <body>
         | 
| @@ -75,13 +75,8 @@ layout: compress | |
| 75 75 | 
             
                {% endif %}
         | 
| 76 76 |  | 
| 77 77 | 
             
                <!-- JavaScripts -->
         | 
| 78 | 
            +
                {% include js-selector.html lang=lang %}
         | 
| 78 79 |  | 
| 79 | 
            -
                {%  | 
| 80 | 
            -
             | 
| 81 | 
            -
                {% if page.mermaid %}
         | 
| 82 | 
            -
                  {% include mermaid.html %}
         | 
| 83 | 
            -
                {% endif %}
         | 
| 84 | 
            -
             | 
| 85 | 
            -
                {% include_cached search-loader.html %}
         | 
| 80 | 
            +
                {% include_cached search-loader.html lang=lang %}
         | 
| 86 81 | 
             
              </body>
         | 
| 87 82 | 
             
            </html>
         | 
    
        data/_layouts/home.html
    CHANGED
    
    | @@ -49,7 +49,7 @@ refactor: true | |
| 49 49 | 
             
                    {% if post.image %}
         | 
| 50 50 | 
             
                      {% assign src = post.image.path | default: post.image %}
         | 
| 51 51 | 
             
                      {% unless src contains '//' %}
         | 
| 52 | 
            -
                        {% assign src = post. | 
| 52 | 
            +
                        {% assign src = post.media_subpath | append: '/' | append: src | replace: '//', '/' %}
         | 
| 53 53 | 
             
                      {% endunless %}
         | 
| 54 54 |  | 
| 55 55 | 
             
                      {% assign alt = post.image.alt | xml_escape | default: 'Preview Image' %}
         | 
| @@ -72,10 +72,7 @@ refactor: true | |
| 72 72 | 
             
                        <h1 class="card-title my-2 mt-md-0">{{ post.title }}</h1>
         | 
| 73 73 |  | 
| 74 74 | 
             
                        <div class="card-text content mt-0 mb-3">
         | 
| 75 | 
            -
                          <p>
         | 
| 76 | 
            -
                            {% include no-linenos.html content=post.content %}
         | 
| 77 | 
            -
                            {{ content | markdownify | strip_html | truncate: 200 | escape }}
         | 
| 78 | 
            -
                          </p>
         | 
| 75 | 
            +
                          <p>{% include post-description.html %}</p>
         | 
| 79 76 | 
             
                        </div>
         | 
| 80 77 |  | 
| 81 78 | 
             
                        <div class="post-meta flex-grow-1 d-flex align-items-end">
         | 
    
        data/_layouts/post.html
    CHANGED
    
    | @@ -14,6 +14,9 @@ tail_includes: | |
| 14 14 | 
             
            <article class="px-1">
         | 
| 15 15 | 
             
              <header>
         | 
| 16 16 | 
             
                <h1 data-toc-skip>{{ page.title }}</h1>
         | 
| 17 | 
            +
                {% if page.description %}
         | 
| 18 | 
            +
                  <p class="post-desc fw-light mb-4">{{ page.description }}</p>
         | 
| 19 | 
            +
                {% endif %}
         | 
| 17 20 |  | 
| 18 21 | 
             
                <div class="post-meta text-muted">
         | 
| 19 22 | 
             
                  <!-- published date -->
         | 
| @@ -74,12 +77,22 @@ tail_includes: | |
| 74 77 | 
             
                      </em>
         | 
| 75 78 | 
             
                    </span>
         | 
| 76 79 |  | 
| 77 | 
            -
                     | 
| 78 | 
            -
             | 
| 80 | 
            +
                    <div>
         | 
| 81 | 
            +
                      <!-- pageviews -->
         | 
| 82 | 
            +
                      {% if site.pageviews.provider and site.analytics[site.pageviews.provider].id %}
         | 
| 83 | 
            +
                        <span>
         | 
| 84 | 
            +
                          <em id="pageviews">
         | 
| 85 | 
            +
                            <i class="fas fa-spinner fa-spin small"></i>
         | 
| 86 | 
            +
                          </em>
         | 
| 87 | 
            +
                          {{ site.data.locales[lang].post.pageview_measure }}
         | 
| 88 | 
            +
                        </span>
         | 
| 89 | 
            +
                      {% endif %}
         | 
| 90 | 
            +
             | 
| 91 | 
            +
                      <!-- read time -->
         | 
| 92 | 
            +
                      {% include read-time.html content=content prompt=true lang=lang %}
         | 
| 93 | 
            +
                    </div>
         | 
| 79 94 | 
             
                  </div>
         | 
| 80 | 
            -
                  <!-- .d-flex -->
         | 
| 81 95 | 
             
                </div>
         | 
| 82 | 
            -
                <!-- .post-meta -->
         | 
| 83 96 | 
             
              </header>
         | 
| 84 97 |  | 
| 85 98 | 
             
              <div class="content">
         | 
    
        data/_sass/addon/commons.scss
    CHANGED
    
    | @@ -129,6 +129,11 @@ kbd { | |
| 129 129 | 
             
              box-shadow: inset 0 -2px 0 var(--kbd-wrap-color);
         | 
| 130 130 | 
             
            }
         | 
| 131 131 |  | 
| 132 | 
            +
            hr {
         | 
| 133 | 
            +
              border-color: var(--main-border-color);
         | 
| 134 | 
            +
              opacity: 1;
         | 
| 135 | 
            +
            }
         | 
| 136 | 
            +
             | 
| 132 137 | 
             
            footer {
         | 
| 133 138 | 
             
              background-color: var(--main-bg);
         | 
| 134 139 | 
             
              height: $footer-height;
         | 
| @@ -364,7 +369,6 @@ main { | |
| 364 369 |  | 
| 365 370 | 
             
              h1 {
         | 
| 366 371 | 
             
                margin-top: 2rem;
         | 
| 367 | 
            -
                margin-bottom: 1.5rem;
         | 
| 368 372 | 
             
              }
         | 
| 369 373 |  | 
| 370 374 | 
             
              p {
         | 
| @@ -550,17 +554,32 @@ main { | |
| 550 554 | 
             
              width: 100%;
         | 
| 551 555 | 
             
              height: 100%;
         | 
| 552 556 | 
             
              margin-bottom: 1rem;
         | 
| 557 | 
            +
              aspect-ratio: 16 / 9;
         | 
| 553 558 |  | 
| 554 559 | 
             
              @extend %rounded;
         | 
| 555 560 |  | 
| 556 | 
            -
              &.youtube,
         | 
| 557 | 
            -
              &.bilibili {
         | 
| 558 | 
            -
                aspect-ratio: 16 / 9;
         | 
| 559 | 
            -
              }
         | 
| 560 | 
            -
             | 
| 561 561 | 
             
              &.twitch {
         | 
| 562 562 | 
             
                aspect-ratio: 310 / 189;
         | 
| 563 563 | 
             
              }
         | 
| 564 | 
            +
             | 
| 565 | 
            +
              &.file {
         | 
| 566 | 
            +
                display: block;
         | 
| 567 | 
            +
                width: auto;
         | 
| 568 | 
            +
                height: auto;
         | 
| 569 | 
            +
                max-width: 100%;
         | 
| 570 | 
            +
                max-height: 100%;
         | 
| 571 | 
            +
                margin: auto;
         | 
| 572 | 
            +
                margin-bottom: 0;
         | 
| 573 | 
            +
              }
         | 
| 574 | 
            +
             | 
| 575 | 
            +
              @extend %img-caption;
         | 
| 576 | 
            +
            }
         | 
| 577 | 
            +
             | 
| 578 | 
            +
            .embed-audio {
         | 
| 579 | 
            +
              width: 100%;
         | 
| 580 | 
            +
              display: block;
         | 
| 581 | 
            +
             | 
| 582 | 
            +
              @extend %img-caption;
         | 
| 564 583 | 
             
            }
         | 
| 565 584 |  | 
| 566 585 | 
             
            /* --- buttons --- */
         | 
| @@ -577,26 +596,6 @@ main { | |
| 577 596 |  | 
| 578 597 | 
             
            /* --- Effects classes --- */
         | 
| 579 598 |  | 
| 580 | 
            -
            .loaded {
         | 
| 581 | 
            -
              display: block !important;
         | 
| 582 | 
            -
             | 
| 583 | 
            -
              @at-root .d-flex#{&} {
         | 
| 584 | 
            -
                display: flex !important;
         | 
| 585 | 
            -
              }
         | 
| 586 | 
            -
            }
         | 
| 587 | 
            -
             | 
| 588 | 
            -
            .unloaded {
         | 
| 589 | 
            -
              display: none !important;
         | 
| 590 | 
            -
            }
         | 
| 591 | 
            -
             | 
| 592 | 
            -
            .visible {
         | 
| 593 | 
            -
              visibility: visible !important;
         | 
| 594 | 
            -
            }
         | 
| 595 | 
            -
             | 
| 596 | 
            -
            .hidden {
         | 
| 597 | 
            -
              visibility: hidden !important;
         | 
| 598 | 
            -
            }
         | 
| 599 | 
            -
             | 
| 600 599 | 
             
            .flex-grow-1 {
         | 
| 601 600 | 
             
              flex-grow: 1 !important;
         | 
| 602 601 | 
             
            }
         | 
| @@ -653,18 +652,6 @@ main { | |
| 653 652 |  | 
| 654 653 | 
             
            /* --- Overriding --- */
         | 
| 655 654 |  | 
| 656 | 
            -
            /* magnific-popup */
         | 
| 657 | 
            -
             | 
| 658 | 
            -
            figure .mfp-title {
         | 
| 659 | 
            -
              text-align: center;
         | 
| 660 | 
            -
              padding-right: 0;
         | 
| 661 | 
            -
              margin-top: 0.5rem;
         | 
| 662 | 
            -
            }
         | 
| 663 | 
            -
             | 
| 664 | 
            -
            .mfp-img {
         | 
| 665 | 
            -
              transition: none;
         | 
| 666 | 
            -
            }
         | 
| 667 | 
            -
             | 
| 668 655 | 
             
            /* mermaid */
         | 
| 669 656 | 
             
            .mermaid {
         | 
| 670 657 | 
             
              text-align: center;
         | 
| @@ -836,7 +823,10 @@ $btn-mb: 0.5rem; | |
| 836 823 | 
             
                  display: flex;
         | 
| 837 824 | 
             
                  align-items: center;
         | 
| 838 825 | 
             
                  justify-content: center;
         | 
| 839 | 
            -
             | 
| 826 | 
            +
             | 
| 827 | 
            +
                  &:not(:focus-visible) {
         | 
| 828 | 
            +
                    box-shadow: var(--sidebar-border-color) 0 0 0 1px;
         | 
| 829 | 
            +
                  }
         | 
| 840 830 |  | 
| 841 831 | 
             
                  &:hover {
         | 
| 842 832 | 
             
                    background-color: var(--sidebar-hover-bg);
         | 
| @@ -857,10 +847,7 @@ $btn-mb: 0.5rem; | |
| 857 847 | 
             
                  line-height: $btn-size;
         | 
| 858 848 | 
             
                }
         | 
| 859 849 |  | 
| 860 | 
            -
                 | 
| 861 | 
            -
                  padding: 0;
         | 
| 862 | 
            -
                  border: 0;
         | 
| 863 | 
            -
             | 
| 850 | 
            +
                #mode-toggle {
         | 
| 864 851 | 
             
                  @extend %button;
         | 
| 865 852 | 
             
                  @extend %sidebar-links;
         | 
| 866 853 | 
             
                  @extend %sidebar-link-hover;
         | 
| @@ -1139,7 +1126,8 @@ search { | |
| 1139 1126 | 
             
            /* --- button back-to-top --- */
         | 
| 1140 1127 |  | 
| 1141 1128 | 
             
            #back-to-top {
         | 
| 1142 | 
            -
               | 
| 1129 | 
            +
              visibility: hidden;
         | 
| 1130 | 
            +
              opacity: 0;
         | 
| 1143 1131 | 
             
              z-index: 1;
         | 
| 1144 1132 | 
             
              cursor: pointer;
         | 
| 1145 1133 | 
             
              position: fixed;
         | 
| @@ -1152,8 +1140,7 @@ search { | |
| 1152 1140 | 
             
              height: $back2top-size;
         | 
| 1153 1141 | 
             
              border-radius: 50%;
         | 
| 1154 1142 | 
             
              border: 1px solid var(--btn-backtotop-border-color);
         | 
| 1155 | 
            -
              transition: transform 0.2s ease-out;
         | 
| 1156 | 
            -
              -webkit-transition: transform 0.2s ease-out;
         | 
| 1143 | 
            +
              transition: opacity 0.5s ease-in-out, transform 0.2s ease-out;
         | 
| 1157 1144 |  | 
| 1158 1145 | 
             
              &:hover {
         | 
| 1159 1146 | 
             
                transform: translate3d(0, -5px, 0);
         | 
| @@ -1165,6 +1152,11 @@ search { | |
| 1165 1152 | 
             
                position: relative;
         | 
| 1166 1153 | 
             
                bottom: 2px;
         | 
| 1167 1154 | 
             
              }
         | 
| 1155 | 
            +
             | 
| 1156 | 
            +
              &.show {
         | 
| 1157 | 
            +
                opacity: 1;
         | 
| 1158 | 
            +
                visibility: visible;
         | 
| 1159 | 
            +
              }
         | 
| 1168 1160 | 
             
            }
         | 
| 1169 1161 |  | 
| 1170 1162 | 
             
            #notification {
         |