[
  {
    "path": ".gitignore",
    "content": "node_modules\n_config.yml\n"
  },
  {
    "path": "LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2016 zchen9(zhao.zchen9@gmail.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE."
  },
  {
    "path": "README.md",
    "content": "# Hexo-theme-hollow\n\n一款极致简洁的博客主题，可访问 [My Fragment](https://www.chen9.info/fragment/) 查看效果\n\n## 安装\n\n在你的 Hexo 博客仓库下 clone 主题\n```\ngit clone https://github.com/zchen9/hexo-theme-hollow.git themes/hollow\n```\n在博客下的 _config.yml 文件修改主题为 hollow\n```\ntheme: hollow\n```\n启动博客\n```\nhexo clean\nhexo generate\nhexo server\n```\n发布博客\n```\nhexo deploy\n```\n## 配置\n\n主题下的 _config.yml 文件\n\n```\n# Camera icon for website\n# 填写 baseurl 开启主页小相机，也可以在博客根目录的 _config.yml 文件末尾添加\nbaseurl:\n\n# Default post title\n# 默认文章标题\ndefault_post_title: Halo\n\n# Date Format\n# 文章时间戳格式\n# 也可以在博客主体的 _config.yml 配置，优先取博客主体的时间配置\ndate_format: YYYY 年 MM 月 DD 日\n\n# Comment.\ncomments:\n  # Disqus comment\n  # 填写 disqus_shortname 即可使用 disqus\n  disqus_shortname:\n\n# Google Analytics Tracking ID\n# 填写谷歌分析跟踪 ID，使用谷歌分析应用\ngoogle_analytics:\n\n# Register service worker\n# 使用 Service Workers\nservice_worker: false\n\n# Local search with atom.xml, dependency hexo-generator-feed plugin\n# 主页搜索服务，依赖插件 hexo-generator-feed\n# 需要运行 npm install hexo-generator-feed --save 安装此插件\nlocal_search: true\n\n# using viewer.js to view image\n# https://fengyuanchen.github.io/viewerjs/\n# 使用 viewer.js 查看图片\nimage_viewer: true\n\n# Table of content\n# Maybe support more toc style in future.\n# 文章目录\n# 也许在之后的更新中会支持更多目录样式\ntoc:\n  enable: true\n```\n\n## 文章格式\n\n以下为 markdown 格式：\n\n```\ntitle: <文章标题>\ncategory: <文章分类>\ndate: <文章日期> [YYYY-MM-DD]\n\n---\n\n文章预览内容\n\n<!--more-->\n\n文章正文在此\n\n```\n\n## CHANGELOG\n\n20220202 @zchen9\n- 调整 toc 样式\n- 修复 Bootstrap CDN 404 问题\n- 更新小相机配置\n\n20210424 @zchen9\n- 调整细节样式\n- 优化深色模式配色\n\n20210424 @fakeYanss [pull/44](https://github.com/zchen9/hexo-theme-hollow/pull/44)\n- 支持文章目录\n- 支持深色模式\n\n20190526 @zchen9\n- 主页开放小相机\n- 微调阅读样式\n- 优化搜索功能\n\n20190519 @fakeYanss [pull/36](https://github.com/zchen9/hexo-theme-hollow/pull/36)\n- 增加service worker\n- 本地搜索\n- 文章图片放大查看\n\n## 其他\n\n- 作者很懒，更新频率看心情，欢迎贡献你的设计\n\n## LICENSE\n\n[MIT](https://github.com/zchen9/hexo-theme-hollow/blob/master/LICENSE)\n"
  },
  {
    "path": "languages/default.yml",
    "content": "prev: 上一页\nnext: 下一页\ncomment: 留言\narchive_a: 归档\narchive_b: 归档：%s\n"
  },
  {
    "path": "languages/en.yml",
    "content": "prev: Older Posts\nnext: Newer Posts\ncomment: Comments\narchive_a: Archives\narchive_b: \"Archives: %s\""
  },
  {
    "path": "languages/zh-CN.yml",
    "content": "prev: 上一页\nnext: 下一页\ncomment: 留言\narchive_a: 归档\narchive_b: 归档：%s\n"
  },
  {
    "path": "languages/zh-Hans.yml",
    "content": "prev: 上一页\nnext: 下一页\ncomment: 留言\narchive_a: 归档\narchive_b: 归档：%s"
  },
  {
    "path": "languages/zh-TW.yml",
    "content": "prev: 上一頁\nnext: 下一頁\ncomment: 留言\narchive_a: 彙整\narchive_b: 彙整：%s"
  },
  {
    "path": "layout/_partial/article-archive.ejs",
    "content": "<div class=\"post-preview archive\">\n    <a href=\"<%- config.root %><%- item.path %>\">\n        <h1 class=\"post-title archive\">\n            <%- item.title || theme.default_post_title || \"Untitled\" %>\n        </h1>\n    </a>\n</div>\n "
  },
  {
    "path": "layout/_partial/article-categories.ejs",
    "content": "<%\n    var categories = [];\n    item.categories.forEach(function(category){\n        categories.push('<a href=\"' + config.root + category.path + '\">' + category.name + '</a>');\n    });\n%>\n\n<%- categories.join('/ ') %>\n"
  },
  {
    "path": "layout/_partial/article-full.ejs",
    "content": "<section class=\"article-container\">\n    <!-- Back Home -->\n    <%- partial('_partial/backhome') %>\n\n        <!-- Page Header -->\n        <header class=\"intro-header\">\n            <div class=\"container\">\n                <div class=\"row\">\n                    <div class=\"col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1\">\n                        <div class=\"post-heading\">\n                            <h1>\n                                <%- item.title || theme.default_post_title || \"Untitled\" %>\n                            </h1>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </header>\n\n        <!-- Post Content -->\n        <article>\n            <div class=\"container\">\n                <div class=\"row\">\n                    <!-- Post Main Content -->\n                    <div class=\"post-content col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1\">\n                        <%- item.content %>\n\n                            <!-- Meta -->\n                            <div class=\"post-meta\">\n                                <hr>\n                                <br>\n                                <div class=\"post-tags\">\n                                    <% if (item.tags && item.tags.length){ %>\n                                        <%- partial('article-tags', {item: item}) %>\n                                            <% } else if (item.categories && item.categories.length) { %>\n                                                <%- partial('article-categories', {item: item}) %>\n                                                    <% } %>\n                                </div>\n                                <div class=\"post-date\">\n                                    <% if (item.date){ %>\n                                        <%- item.date.format(config.date_format || theme.date_format) %>\n                                    <% } %>\n                                </div>\n                            </div>\n                    </div>\n\n                    <!-- Comments -->\n                    <div class=\"col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1\">\n                        <%- partial(\"_partial/comment.ejs\") %>\n                    </div>\n                </div>\n            </div>\n        </article>\n</section>\n\n<!-- Image viewer-->\n<%- partial('_partial/img-viewer') %>\n\n<!-- TOC -->\n<%- partial(\"_partial/toc\", {post: item}) %>"
  },
  {
    "path": "layout/_partial/article-index.ejs",
    "content": "<div class=\"post-preview\">\n    <a href=\"<%- config.root %><%- item.path %>\">\n        <h2 class=\"post-title\">\n            <%- item.title || theme.default_post_title || \"Untitled\" %>\n        </h2>\n        <%- item.excerpt %>\n    </a>\n</div>"
  },
  {
    "path": "layout/_partial/article-tags.ejs",
    "content": "<%\n    var tags = [];\n    item.tags.forEach(function(tag){\n        tags.push('<a href=\"' + config.root + tag.path + '\">#' + tag.name + '</a>');\n    });\n%>\n\n<%- tags.join(' ') %>\n\n"
  },
  {
    "path": "layout/_partial/backhome.ejs",
    "content": "<a class=\"nav-back\" href=\"<%- config.root %>\">\n    <i class=\"fa fa-puzzle-piece\"></i>\n</a>"
  },
  {
    "path": "layout/_partial/comment.ejs",
    "content": "<!-- Disqus Comments -->\n<% if (theme.comments && theme.comments.disqus_shortname){ %>\n  <div id=\"disqus_thread\" class=\"comment\"></div>\n  <script>\n    var disqus_shortname = '<%= theme.comments.disqus_shortname %>';\n    var disqus_website = '<%= theme.baseurl %>';\n    var disqus_config = function () {\n      this.page.url = disqus_website;\n      this.page.identifier = disqus_shortname;\n    };\n    (function () {\n      var d = document, s = d.createElement('script');\n      s.src = 'https://' + disqus_shortname + '.disqus.com/embed.js';\n      s.setAttribute('data-timestamp', +new Date());\n      (d.head || d.body).appendChild(s);\n    })();\n  </script>\n  <noscript>Please enable JavaScript to view the <a href=\"https://disqus.com/?ref_noscript\">comments powered by\n      Disqus.</a></noscript>\n<% } %>\n"
  },
  {
    "path": "layout/_partial/google-analytics.ejs",
    "content": "<% if (theme.google_analytics){ %>\n    <script>\n        (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n                    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n                m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n        })(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n\n        ga('create', '<%= theme.google_analytics %>', 'auto');\n        ga('send', 'pageview');\n\n    </script>\n<% } %>\n"
  },
  {
    "path": "layout/_partial/gosite.ejs",
    "content": "<% if (config.baseurl || theme.baseurl) { %>\n<a class=\"nav-back\" href=\"<%- config.baseurl || theme.baseurl %>\">\n    <i class=\"fa fa-camera-retro\"></i>\n</a>\n<% } %>\n"
  },
  {
    "path": "layout/_partial/head.ejs",
    "content": "<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\n    <!--Description-->\n    <% if (page.description){ %>\n        <meta name=\"description\" content=\"<%= page.description %>\">\n    <% } else if (config.description){ %>\n        <meta name=\"description\" content=\"<%= config.description %>\">\n    <% } else if (page.excerpt){ %>\n        <meta name=\"description\" content=\"<%= strip_html(page.excerpt).replace(/^\\s*/, '').replace(/\\s*$/, '') %>\">\n    <% } else if (page.content){ %>\n        <meta name=\"description\" content=\"<%= strip_html(page.content).replace(/^\\s*/, '').replace(/\\s*$/, '').substring(0, 150) %>\">\n    <% } %>\n\n    <!--Author-->\n    <% if (config.author){ %>\n        <meta name=\"author\" content=\"<%= config.author %>\">\n    <% } %>\n\n    <!-- Title -->\n    <%\n    var title = [];\n    if (page.current > 1) title.push(__('page', page.current));\n    if (page.title) title.push(page.title);\n    if (page.category) title.push(page.category);\n    if (page.tag) title.push(page.tag);\n    if (page.archive) {\n        if (page.year) title.push(__('archive_b', page.year + (page.month ? '/' + page.month : '')));\n        else title.push(__('archive_a'));\n    }\n    title.push(config.title);\n    %>\n    <title><%= title.join(' | ') %></title>\n\n    <!-- Bootstrap Core CSS -->\n    <link href=\"//cdn.jsdelivr.net/npm/bootstrap@3.3.6/dist/css/bootstrap.min.css\" rel=\"stylesheet\">\n\n    <!-- Custom CSS -->\n    <%- css('css/style.css') %>\n\n    <!-- Custom Fonts -->\n    <link href=\"//cdn.jsdelivr.net/npm/font-awesome@4.5.0/css/font-awesome.min.css\" rel=\"stylesheet\" type=\"text/css\">\n    <link href='//fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>\n    <link href='//fonts.googleapis.com/css?family=Noto+Serif:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>\n\n    <!-- jQuery -->\n    <script src=\"//cdn.bootcss.com/jquery/2.2.1/jquery.min.js\"></script>\n    <!-- Bootstrap -->\n    <script src=\"//cdn.jsdelivr.net/npm/bootstrap@3.3.6/dist/js/bootstrap.min.js\"></script>\n\n    <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->\n    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->\n    <!--[if lt IE 9]>\n    <script src=\"https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js\"></script>\n    <script src=\"https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js\"></script>\n    <![endif]-->\n</head>\n"
  },
  {
    "path": "layout/_partial/img-viewer.ejs",
    "content": "<% if (theme.image_viewer){ %>\n    <!-- Custom picture view-->\n    <link href=\"<%= config.root %>css/viewer.min.css\" rel=\"stylesheet\" />\n    <script\n      src=\"<%= config.root %>js/viewer.min.js\"\n      type=\"text/javascript\"\n      charset=\"utf-8\"\n    ></script>\n    \n    <script type=\"text/javascript\">\n      // set image viewer\n      Viewer.setDefaults({\n        zoomRatio: [0.5],\n        navbar: false,\n        toolbar: false,\n        button: false,\n        title: [2, (image, imageData) => `${image.alt}`],\n        show: function() {\n          this.viewer.zoomTo(0.5);\n        }\n      });\n      var imageList = document.getElementsByTagName(\"img\");\n      Array.prototype.forEach.call(imageList, element => {\n        var viewer = new Viewer(element);\n      });\n    </script>\n<% } %>\n    "
  },
  {
    "path": "layout/_partial/pagination.ejs",
    "content": "<ul class=\"pagiantion\">\n    <% if (page.prev){ %>\n        <li class=\"previous\"><a href=\"<%- config.root %><%- page.prev_link %>\"><%- __('prev')%></a></li>\n    <% } %>\n    <% if (page.next){ %>\n        <li class=\"next\"><a href=\"<%- config.root %><%- page.next_link %>\"><%- __('next')%></a></li>\n    <% } %>\n</ul>"
  },
  {
    "path": "layout/_partial/scripts.ejs",
    "content": "<script type=\"text/javascript\">\n    console.log(\"© zchen9 🙋 2015-\" + new Date().getFullYear());\n</script>\n  "
  },
  {
    "path": "layout/_partial/search.ejs",
    "content": "<% if (theme.local_search){ %>\n    <a class=\"nav-search\" data-toggle=\"modal\" data-target=\"#searchModalCenter\">\n      <i class=\"fa fa-search\"></i>\n    </a>\n    \n    <div\n      class=\"modal fade\"\n      id=\"searchModalCenter\"\n      tabindex=\"-1\"\n      role=\"dialog\"\n      aria-labelledby=\"searchModalCenterTitle\"\n      aria-hidden=\"true\"\n    >\n      <div class=\"modal-dialog modal-dialog-centered\" role=\"document\">\n        <div class=\"modal-content\">\n          <div class=\"modal-header\">\n            <input\n              type=\"text\"\n              id=\"local-search-input\"\n              class=\"form-control\"\n              placeholder=\"<%- config.search_placeholder %>\"\n            />\n          </div>\n          <div class=\"modal-body\">\n            <div id=\"local-search-result\"></div>\n          </div>\n        </div>\n      </div>\n    </div>\n    \n    <script type=\"text/javascript\">\n      // define the search function\n      var searchFunc = function(path, search_id, content_id) {\n        \"use strict\";\n        $.ajax({\n          url: path,\n          dataType: \"xml\",\n          success: function(xmlResponse) {\n            // get the contents from search data\n            var datas = $(\"entry\", xmlResponse)\n              .map(function() {\n                return {\n                  title: $(\"title\", this).text(),\n                  content: $(\"content\", this).text(),\n                  url: $(\"id\", this).text()\n                };\n              })\n              .get();\n            var $input = document.getElementById(search_id);\n            var $resultContent = document.getElementById(content_id);\n            $input.addEventListener(\"input\", function() {\n              var str = '<ul class=\"search-result-list\">';\n              var keywords = this.value\n                .trim()\n                .toLowerCase()\n                .split(/[\\s\\-]+/);\n              $resultContent.innerHTML = \"\";\n              if (this.value.trim().length <= 0) {\n                return;\n              }\n              // perform local searching\n              datas.forEach(function(data) {\n                var isMatch = true;\n                var content_index = [];\n                var data_title = data.title.trim().toLowerCase();\n                var data_content = data.content\n                  .trim()\n                  .replace(/<[^>]+>/g, \"\")\n                  .toLowerCase();\n                var data_url = data.url;\n                var index_title = -1;\n                var index_content = -1;\n                var first_occur = -1;\n                // only match artiles with not empty titles and contents\n                if (data_title != \"\" && data_content != \"\") {\n                  keywords.forEach(function(keyword, i) {\n                    index_title = data_title.indexOf(keyword);\n                    index_content = data_content.indexOf(keyword);\n                    if (index_title < 0 && index_content < 0) {\n                      isMatch = false;\n                    } else {\n                      if (index_content < 0) {\n                        index_content = 0;\n                      }\n                      if (i == 0) {\n                        first_occur = index_content;\n                      }\n                    }\n                  });\n                }\n                // show search results\n                if (isMatch) {\n                  str +=\n                    \"<li><a href='\" +\n                    data_url +\n                    \"' class='search-result-title'>\" +\n                    data_title;\n                  var content = data.content.trim().replace(/<[^>]+>/g, \"\");\n                  if (first_occur >= 0) {\n                    // cut out 30 characters\n                    var start = first_occur - 15;\n                    var end = first_occur + 15;\n                    if (start < 0) {\n                      start = 0;\n                    }\n                    if (start == 0) {\n                      end = 30;\n                    }\n                    if (end > content.length) {\n                      end = content.length;\n                    }\n    \n                    var match_content = content.substr(start, end);\n                    // highlight all keywords\n                    keywords.forEach(function(keyword) {\n                      var regS = new RegExp(keyword, \"gi\");\n                      match_content = match_content.replace(\n                        regS,\n                        '<em class=\"search-keyword\">' + keyword + \"</em>\"\n                      );\n                    });\n    \n                    str += '<p class=\"search-result\">' + match_content + \"...</p>\";\n                  }\n                  str += \"</a></li>\";\n                }\n              });\n              str += \"</ul>\";\n              $resultContent.innerHTML = str;\n            });\n          }\n        });\n      };\n    \n      // use atom.xml to search blog\n      searchFunc(\"<%- config.root %>atom.xml\", \"local-search-input\", \"local-search-result\");\n      $(\"#searchModalCenter\").on(\"shown.bs.modal\", function(e) {\n        setTimeout(function() {\n          $(\"#local-search-input\").focus();\n        }, 1);\n      });\n    </script>\n<% } %>\n"
  },
  {
    "path": "layout/_partial/service-worker.ejs",
    "content": "<!-- if using service worker -->\n<% if (theme.service_worker){ %>\n    <script text=\"module\">\n      if (\"serviceWorker\" in navigator) {\n        navigator.serviceWorker\n          .register(\"/sw.js\")\n          .then(function() {\n            console.log(\"A new service worker is being installed.\");\n          })\n          .catch(function(error) {\n            console.log(\"Service worker registration failed:\", error);\n          });\n      } else {\n        console.log(\"Service workers are not supported.\");\n      }\n    </script>\n<% } %>\n    "
  },
  {
    "path": "layout/_partial/toc.ejs",
    "content": "<% if (theme.toc.enable){ %>\n    <aside id=\"article-toc\" role=\"navigation\" class=\"fixed\">\n        <div id=\"article-toc-inner\">\n            <%- toc(post.content, {list_number: false}) %>\n        </div>\n    </aside>\n<% } %>"
  },
  {
    "path": "layout/archive.ejs",
    "content": "<%\n    var title = '';\n    if (page.category) title = page.category;\n    if (page.tag) title = \"#\" + page.tag;\n    if (page.archive) {\n        if (page.year) title = page.year + (page.month ? '/' + page.month : '');\n        else title = __('archive_a');\n    }\n%>\n\n<!-- Back Home -->\n<%- partial('_partial/backhome') %>\n\n<!-- Page Header -->\n<header class=\"intro-header\">\n    <div class=\"container\">\n        <div class=\"row\">\n            <div class=\"col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1\">\n                <div class=\"site-heading\">\n                    <h1><%- title %></h1>\n                </div>\n            </div>\n        </div>\n    </div>\n</header>\n\n<!-- Main Content -->\n<div class=\"container\">\n    <div class=\"row\">\n        <div class=\"col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1\">\n            <% page.posts.each(function(item){ %>\n                <%- partial('_partial/article-archive', {item: item}) %>\n            <% }); %>\n            <div class=\"archive-before-pagination\"></div>\n            <%- partial('_partial/pagination') %>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "layout/index.ejs",
    "content": "<!-- Go Site -->\n<%- partial('_partial/gosite') %>\n\n<!-- Main Content -->\n<section class=\"intro\">\n    <div class=\"container\">\n        <div class=\"row\">\n            <div class=\"col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1\">\n                <% page.posts.each(function(item){ %>\n                    <%- partial('_partial/article-index', {item: item}) %>\n                <% }); %>\n            </div>\n        </div>\n        <!-- Pagination -->\n        <%- partial('_partial/pagination') %>\n        <!-- Search -->\n        <%- partial('_partial/search') %>\n    </div>\n</section>\n"
  },
  {
    "path": "layout/layout.ejs",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-Hans\">\n\n<!-- Head tag -->\n<%- partial('_partial/head') %>\n\n<body>\n\n    <!-- Content -->\n    <%- body %>\n    <!-- Scripts -->\n    <%- partial('_partial/scripts') %>\n    <!-- Google Analytics -->\n    <%- partial('_partial/google-analytics') %>\n    <!-- Service Worker -->\n    <%- partial('_partial/service-worker') %>\n</body>\n\n</html>"
  },
  {
    "path": "layout/page.ejs",
    "content": "<%- partial('_partial/article-full', {item: page}) %>"
  },
  {
    "path": "layout/post.ejs",
    "content": "<%- partial('_partial/article-full', {item: page}) %>"
  },
  {
    "path": "source/css/article.styl",
    "content": "@import \"mixins.styl\"\n@import \"variables.styl\"\n\n.article-container\n  @extend .animation\n\narticle\n  .container\n    .row\n      // Responsive Images\n      img\n        position relative\n        margin 30px auto\n        max-width 55% !important\n        height auto\n        display inline-block\n        box-shadow 0 0 0 5px #FFF, 0 0 15px 0 gray-dark\n      @media only screen and (max-width: 768px)\n        img {\n          max-width 80% !important\n        }\n      // Video Containers\n      .video-container\n        position relative\n        padding-bottom 56.25%\n        padding-top 30px\n        height 0\n        overflow hidden\n        iframe, object, embed\n          position absolute\n          top 0\n          left 0\n          width 100%\n          height 100%\n          margin-top 0\n      blockquote\n        font-family font-serif\n        font-size 1em\n        padding 3px 30px 15px\n        color gray\n        text-align left\n        footer\n          border-top none\n          font-size 0.8em\n          line-height 1\n          margin 20px 0 0\n          padding-top 0\n          cite\n            &:before\n              content '—'\n              color #ccc\n              padding 0 0.5em\n\n      .pullquote\n        float right\n        border none\n        padding 0\n        margin 1em 0 0.5em 1.5em\n        text-align left\n        width 45%\n        font-size 1.5em\n        &.left\n          float left\n\n      ul\n        padding-left 36px\n        line-height 1.8\n\nfigure.highlight\n  background #eee\n  border 1px solid color-border\n  margin-top 15px\n  padding 7px 15px\n  border-radius 2px\n  text-shadow 0 0 1px #fff\n  line-height 1.6\n  overflow auto\n  position relative\n  font-size 0.9em\n  figcaption\n    color color-meta\n    font-family font-mono\n    margin-bottom 5px\n    text-shadow 0 0 1px #fff\n    a\n      position absolute\n      right 15px\n\n  pre\n    border none\n    padding 0\n    margin 0\n    background none\n\n  table\n    margin-top 0\n    border-spacing 0\n\n    .gutter\n      color color-meta\n      padding-right 15px\n      border-right 1px solid color-border\n      text-align right\n\n    .code\n      padding-left 15px\n      border-left 1px solid #fff\n      color #666\n\n    .line\n      height: 20px\n\n    .line.marked\n      background: #d6d6d6\n\npre\n  // Theme: Solarized - Light\n  // More theme here: http://softwaremaniacs.org/media/soft/highlight/test.html\n  .comment\n  .template_comment\n  .diff .header\n  .doctype\n  .pi\n  .lisp .string\n  .javadoc\n    color #93a1a1\n    font-style italic\n\n  .keyword\n  .winutils\n  .method\n  .addition\n  .css .tag\n  .request\n  .status\n  .nginx .title\n    color #859900\n\n  .number\n  .command\n  .string\n  .tag .value\n  .phpdoc\n  .tex .formula\n  .regexp\n  .hexcolor\n    color #2aa198\n\n  .title\n  .localvars\n  .chunk\n  .decorator\n  .built_in\n  .identifier\n  .vhdl\n  .literal\n  .id\n    color #268bd2\n\n  .attribute\n  .variable\n  .lisp .body\n  .smalltalk .number\n  .constant\n  .class .title\n  .parent\n  .haskell .type\n    color #b58900\n\n  .preprocessor\n  .preprocessor .keyword\n  .shebang\n  .symbol\n  .symbol .string\n  .diff .change\n  .special\n  .attr_selector\n  .important\n  .subst\n  .cdata\n  .clojure .title\n    color #cb4b16\n\n  .deletion\n    color #dc322f\n"
  },
  {
    "path": "source/css/base.styl",
    "content": "@import \"variables.styl\"\n@import \"mixins.styl\"\n\nbody,\nhtml\n  width 100%\n  font-size 18px\n  color gray-dark\n  @extend .serif\n\np\n  letter-spacing .1px\n  line-height 1.8\n  margin 20px 0\n  a\n    text-decoration underline\n\nh1, h2, h3\n  @extend .serif\n  font-weight 800\n  margin 32px 0 20px\n\nh4, h5, h6\n  @extend .serif\n  font-weight 500\n  margin 20px 0\n\na\n  color red\n  &:hover, &:focus\n    color gray-dark\n    text-decoration none\n  &:visited, &:link\n    color red\na img\n  &:hover, &:focus\n    cursor zoom-in\n\nhr.small\n  max-width 100px\n  margin 20px auto\n  border-width 4px\n  border-color white\n\na.nav-back\n  position absolute\n  top 15px\n  left 15px\n  color white-faded\n  z-index 99\n  &:hover, &:focus\n    color red\n\nnav\n  position absolute\n  top 0\n  left 0\n  width 100%\n  z-index 3\n  @extend .serif\n\n.intro \n  width 100%\n  height 100%\n  position relative\n  margin: 80px auto 0\n  \n.intro-header\n  background-color transparent\n  background no-repeat center center\n  background-attachment scroll\n  background-size 100%\n  @extend .background-cover\n  margin-bottom 50px\n  .site-heading, .post-heading, .page-heading\n    padding 100px 0 20px\n    color gray-dark\n    &.archives\n      color white-faded\n      margin-top 60px\n  .site-heading, .page-heading\n    text-align center\n    h1\n      margin-top 0\n      font-size 2em\n      color red\n    .subheading\n      font-size 24px\n      line-height 1.1\n      display block\n      @extend .serif\n      font-weight 300\n      margin 10px 0 0\n    @media only screen and (min-width: 768px)\n      h1\n        font-size 2.2em\n  .post-heading\n    h1\n      font-size 35px\n    .subheading\n      line-height 1.1\n      display block\n      @extend .serif\n      font-size 24px\n      margin 10px 0 30px\n      font-weight 600\n\n    @media only screen and (min-width: 768px)\n      h1\n        font-size 55px\n      .subheading\n        font-size 30px\n\n.post-preview\n  position relative\n  padding 25px 0 35px\n  min-height 14em\n  overflow hidden\n  clear both\n  @extend .animation\n  &.archive\n    padding 12px 0\n  p\n    margin-left 36%\n    padding-left .6em\n    font-size 1.1em\n    line-height 1.5\n  blockquote\n    margin-left 36%\n    padding .7em\n    margin-top 10px\n    border none\n    font-size 1em\n    p \n      margin 0\n      padding 0\n  > a\n    width 100%\n    height 100%\n    color gray-dark\n    &:hover, &:focus\n      text-decoration none\n      > .post-title\n        color red\n    > .post-title\n      float left\n      width 32%\n      height 100%\n      font-size 2em\n      margin 21px 0\n      word-wrap break-word\n      overflow hidden\n      text-overflow ellipsis\n      display -webkit-box\n      -webkit-line-clamp 2\n      -webkit-box-orient vertical\n      &.archive\n        font-size 22px\n        width 100%\n\n  img \n    display: none\n\n.section-heading\n  font-size 36px\n  margin-top 60px\n  font-weight 700\n\n.caption\n  text-align center\n  font-size 14px\n  padding 10px\n  font-style italic\n  margin 0\n  display block\n  border-bottom-right-radius 5px\n  border-bottom-left-radius 5px\n  \n.post-content\n  padding-bottom 100px\n  \n.post-meta\n  padding-top 50px\n\n.post-tags, .post-categories, .post-date\n  text-align right\n  font-size 1em\n  margin 10px 0\n  a\n    text-transform uppercase\n    color red\n    &:hover, &:visited, &:focus\n      text-decoration none\n\n.archive-before-pagination\n  height 50px\n  \n.comment\n  margin 20px 0 100px\n\nfooter\n  padding 50px 0 65px\n  color white-faded\n  text-align center\n\n.floating-label-form-group\n  font-size 14px\n  position relative\n  margin-bottom 0\n  padding-bottom 0.5em\n  border-bottom 1px solid gray-light\n  input, textarea\n    z-index 1\n    position relative\n    padding-right 0\n    padding-left 0\n    border none\n    border-radius 0\n    font-size 1.5em\n    background none\n    box-shadow none !important\n    resize none\n  label\n    display block\n    z-index 0\n    position relative\n    top 2em\n    margin 0\n    font-size 0.85em\n    line-height 1.764705882em\n    vertical-align middle\n    vertical-align baseline\n    opacity 0\n    -webkit-transition top 0.3s ease,opacity 0.3s ease\n    -moz-transition top 0.3s ease,opacity 0.3s ease\n    -ms-transition top 0.3s ease,opacity 0.3s ease\n    transition top 0.3s ease,opacity 0.3s ease\n  &::not(:first-child)\n    padding-left 14px\n    border-left 1px solid gray-light\n\n.floating-label-form-group-with-value\n  label\n    top 0\n    opacity 1\n\n.floating-label-form-group-with-focus\n  label\n    color brand-primary\n\nform .row:first-child .floating-label-form-group\n  border-top 1px solid gray-light\n\n.btn\n  @extend .serif\n  text-transform uppercase\n  font-size 14px\n  font-weight 800\n  letter-spacing 1px\n  border-radius 0\n  padding 15px 25px\n\n.btn-lg\n  font-size 16px\n  padding 25px 35px\n\n.btn-default\n  &:hover, &:focus\n    background-color brand-primary\n    border 1px solid brand-primary\n    color white\n\n.pagiantion\n  display block\n  padding 55px 0\n  margin 0\n  text-align center\n  list-style none\n  li\n    display inline\n    > a, > span\n      @extend .serif\n      text-transform uppercase\n      font-size 14px\n      font-weight 800\n      letter-spacing 1px\n      padding 15px 25px\n      color white-faded\n      border none\n      border-radius none\n    > a:hover, > a:focus\n      text-decoration none\n      color red\n      background-color transparent\n  .disabled\n    > a, > a:hover, > a:focus, > span\n      color gray\n      cursor not-allowed\n\n::-moz-selection\n  color white\n  text-shadow none\n  background brand-primary\n\n::selection\n  color white\n  text-shadow none\n  background brand-primary\n\nimg::selection\n  color white\n  background transparent\n\nimg::-moz-selection\n  color white\n  background transparent\n\nbody\n  webkit-tap-highlight-color brand-primary\n"
  },
  {
    "path": "source/css/custom.styl",
    "content": "// write you own style here"
  },
  {
    "path": "source/css/darkmode.styl",
    "content": "@media (prefers-color-scheme: dark) {\n    // change color here\n    :root {\n        --bg-color: #222831;\n        --font-color: #94a1b4;\n        --link-color: #a7dfe4;\n        --line-color: #161d27;\n    }\n\n    a {\n        .fa-camera-retro, .fa-search, .fa-puzzle-piece {\n            color: var(--font-color);\n        }\n        &:focus, &:hover {\n            .fa-camera-retro, .fa-search, .fa-puzzle-piece {\n                color: var(--link-color);\n            }\n        }\n    }\n\n\n    body {\n        color: var(--font-color);\n        background: var(--bg-color);\n    }\n\n    .modal-content {\n        color: var(--font-color);\n        background: var(--bg-color);\n        border-bottom: 1px solid var(--font-color);\n        box-shadow: none;\n        .form-control {\n            color: var(--font-color);\n            background: var(--bg-color);\n            caret-color: var(--link-color);\n        }\n        .search-result-list {\n            .search-result-title {\n                color: var(--link-color);\n                &:focus, &:hover {\n                    color: var(--link-color);\n                }\n            }\n            .search-result {\n                color: var(--font-color);\n                .search-keyword {\n                    color: var(--link-color);\n                }\n            }\n        }\n    }\n\n    .post-heading h1,\n    .intro-header .site-heading h1 {\n        color: var(--font-color);\n    }\n\n    a,\n    p a,\n    .pagiantion li > a,\n    #article-toc-inner .toc-link {\n        color: var(--font-color);\n        text-decoration: none;\n        &:focus, &:hover,\n        &:visited, &:link {\n            color: var(--link-color);\n        }\n    }\n\n    .post-tags a {\n        color: var(--link-color);\n        &:focus, &:hover {\n            color: var(--link-color);\n        }\n    }\n\n    .post-preview a {\n        color: var(--font-color);\n        &:focus, &:hover {\n            .post-title {\n                color: var(--link-color);\n            }\n        }\n    }\n\n    // code block\n    figure.highlight {\n        background-color: var(--bg-color);\n        color: var(--font-color);\n        border-color: var(--line-color);\n        text-shadow: var(--bg-color) 0px 0px 1px;\n    }\n    figure.highlight table .line {\n        color: var(--font-color);\n    }\n\n    // code inline\n    code {\n        color: var(--font-color);\n        background-color: #273435;\n    }\n\n    article .container .row blockquote {\n        color: var(--font-color);\n        background: var(--line-color);\n    }\n\n    article .container .row img {\n        opacity: .7;\n        transition: opacity .5s ease-in-out;\n    }\n    article .container .row img:hover {\n        opacity: 1;\n    }\n}\n"
  },
  {
    "path": "source/css/mixins.styl",
    "content": "transition-all()\n  -webkit-transition all 0.5s\n  -moz-transition all 0.5s\n  transition all 0.5s\n\n.transition-all\n  transition-all()\n\nbackground-cover()\n  -webkit-background-size cover\n  -moz-background-size cover\n  background-size cover\n  -o-background-size cover\n\n.background-cover\n  background-cover()\n\nserif()\n  font-family 'Noto Serif', 'Times New Roman', serif\n\n.serif\n  serif()\n\nsans-serif()\n  font-family 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif\n\n.sans-serif\n  sans-serif()\n  \nanimation()\n  animation bodyshow .9s linear\n  \n.animation\n  animation()\n\n@keyframes 'bodyshow' {\n  0% {\n    top: -60px;\n    opacity: 0;\n  }\n\n  33% {\n    top: -40px;\n    opacity: .2;\n  }\n\n  66% {\n    top: -20px;\n    opacity: .6;\n  }\n\n  100% {\n    top: 0;\n    opacity: 1;\n  }\n}\n\n"
  },
  {
    "path": "source/css/more.styl",
    "content": "/*\n * @author fakeyanss, zchen9\n */\n\n@import \"variables.styl\"\n\n// gist embed\n.blob-num \n  border none !important\n\n// search icon\na.nav-search \n  position fixed\n  bottom 15px\n  right 15px\n  color white-faded\n  cursor pointer\n  z-index 99\n  &:hover, &:focus\n    color red\n  @media only screen and (max-width: 1024px)\n    display none\n    opacity 0\n\n// search result\n.modal-dialog\n  margin 120px auto\n  @media only screen and (min-width: 1280px)\n    width 50%\n  @media only screen and (min-width: 1024px) and (max-width: 1280px)\n    width 75%\n\n.modal-content \n  border none\n  border-radius 0\n  overflow hidden\n  box-shadow 2px 2px 22px gray\n\n.modal-body \n  padding 0\n\n.form-control \n  border none\n  outline none\n  caret-color red\n  box-shadow none\n  &:focus \n    box-shadow none\n\n.search-result-title\n  display block\n  font-size 18px\n\n.search-result-list \n  padding 20px\n  margin 0 auto\n  list-style none\n  font-size 14px\n\n.search-keyword \n  font-style normal\n  font-weight 500\n  color red\n\n.search-result \n  margin 5px 0 20px\n  overflow hidden\n  line-height 1.8\n  color gray-dark\n  max-height 7.2em\n  font-size 16px\n\n// github table style\nth \n  text-align center\n  border 1px solid #dfe2e5\n  padding 6px 13px\ntd \n  border 1px solid #dfe2e5\n  padding 6px 13px\n\n// fix conflict between table and code\n.gutter \n  padding 0\n  padding-right 15px\n  border none\n  border-right 1px solid #ddd\n.code \n  padding 0\n  padding-left 15px\n  border none\n  border-left 1px solid #fff\n"
  },
  {
    "path": "source/css/style.styl",
    "content": "\n@import \"base.styl\"\n@import \"article.styl\"\n@import \"more.styl\"\n@import \"custom.styl\"\n@import \"toc.styl\"\n@import \"darkmode.styl\""
  },
  {
    "path": "source/css/toc.styl",
    "content": "#article-toc-inner:after,#article-toc-inner:before,.inner:after,.inner:before {\n    content: \"\";\n    display: table\n}\n\n#article-toc-inner:after,.inner:after {\n    clear: both\n}\n\n#article-toc {\n    display: block;\n    position: fixed;\n    top: 0;\n    bottom: 0;\n    right: 0;\n    width: 16%;\n}\n\n@media screen and (max-width:986px) {\n    #article-toc {\n        display: none;\n    }\n}\n\n#article-toc-inner {\n    width: 100%;\n    position: absolute;\n    top: 50%;\n    transform: translateY(-50%);\n}\n\n#article-toc-inner .toc {\n    font-size: 15px;\n    list-style-type: circle;\n    padding: 0;\n    margin: 0;\n}\n\n#article-toc-inner .toc-item {\n    line-height: 2em;\n    padding: 0;\n    margin: 0;\n}\n\n#article-toc-inner .toc-child {\n    padding: 0;\n    margin-left: 1em;\n    line-height: 2em;\n}\n\n#article-toc-inner .toc-child .toc-item {\n    margin: 0;\n    padding: 0;\n    list-style-type: square;\n}\n\n#article-toc-inner .toc-link {\n    color: gray-dark;\n    font-weight: 700;\n    &:focus, &:hover {\n        color: red;\n        text-decoration: none;\n    }\n}\n"
  },
  {
    "path": "source/css/variables.styl",
    "content": "brand-primary = lighten(rgba(206, 35, 35, .9), 20%)\ngray-dark = lighten(rgba(0, 0, 0, 1), 30%)\ngray = lighten(rgba(0, 0, 0, .9), 45%)\nwhite-faded = rgba(0, 0, 0, .5)\ngray-light = rgba(235, 235, 235, .8)\ncolor-border = #EEE\ncolor-meta = #CCC\nred = #CE2323\n\nfont-mono = Monaco, Menlo, Consolas, Courier New, monospace\nfont-serif = \"Georgia\", serif\n"
  },
  {
    "path": "source/sw.js",
    "content": "\"use strict\";\n(function() {\n  var cacheVersion = \"-180503\";\n  var staticCacheName = \"asset\" + cacheVersion;\n  var maxEntries = 100;\n  self.importScripts(\"https://cdn.jsdelivr.net/npm/sw-toolbox@3.6.0/sw-toolbox.js\");\n\n  self.toolbox.options.debug = false;\n  self.toolbox.options.networkTimeoutSeconds = 1;\n\n  /* staticImageCache */\n  self.toolbox.router.get(\"/(.*)\", self.toolbox.cacheFirst, {\n    cache: {\n      name: staticCacheName,\n      maxEntries: maxEntries\n    }\n  });\n})();\n"
  }
]