diff --git a/README.md b/README.md
index 2ad22c5..1f542d8 100644
--- a/README.md
+++ b/README.md
@@ -8,6 +8,20 @@ This theme is pretty basic and covers all of the essentials. All you have to do
### DEMO - https://hugo-hello-friend.now.sh/
+---
+
+- [Features](#features)
+- [Built-in shortcodes](#built-in-shortcodes)
+- [Code highlighting](#code-highlighting)
+- [How to start](#how-to-start)
+- [How to configure](#how-to-configure)
+- [Add-ons](#add-ons)
+- [How to run your site](#how-to-run-your-site)
+- [How to edit the theme](#how-to-edit-the-theme)
+- [How to contribute](#how-to-contribute)
+- [Hello Friend theme user?](#hello-friend-theme-user)
+- [Licence](#licence)
+
## Features
- **dark/light mode**, depending on your preferences (dark is default, but you can change it)
@@ -67,7 +81,7 @@ paginate = 5
defaultTheme = "dark"
# if you set this to 0, only submenu trigger will be visible
showMenuItems = 2
- # Enable to show reading time in minutes for posts
+ # Show reading time in minutes for posts
showReadingTime = false
[languages]
@@ -83,6 +97,8 @@ paginate = 5
newerPosts = "Newer posts"
olderPosts = "Older posts"
minuteReadingTime = "min read"
+ dateFormatSingle = "2006-01-02"
+ dateFormatList = "2006-01-02"
[languages.en.params.logo]
logoText = "hello friend"
@@ -107,6 +123,10 @@ to `config.toml` file in your Hugo root directory and change params fields. In c
**NOTE:** Please keep in mind that currently main menu doesn't support nesting.
+## Add-ons
+
+- **Comments** — for adding comments to your blog posts please take a look at `layouts/partials/comments.html` https://github.com/panr/hugo-theme-terminal/blob/master/layouts/partials/comments.html.
+
## How to run your site
From your Hugo root directory run:
@@ -119,7 +139,7 @@ and go to `localhost:1313` in your browser. From now on all the changes you make
## How to edit the theme
-If you have to override some of the styles, you can do this easily by adding `static/styles.css` in your root directory and point things you want to change.
+If you have to override some of the styles, you can do this easily by adding `static/style.css` in your root directory and point things you want to change.
Otherwise, if you really want to edit the theme, you need to install Node dependencies. To do so, go to the theme directory (from your Hugo root directory):
@@ -139,6 +159,10 @@ $ yarn
If you spot any bugs, please use [Issue Tracker](https://github.com/panr/hugo-theme-hello-friend/issues) or if you want to add a new feature directly please create a new [Pull Request](https://github.com/panr/hugo-theme-hello-friend/pulls).
+## `Hello Friend` theme user?
+
+I'd be happy to know more about you and what you are doing. If you want to share it, please make a contribution and [add your site to the list](https://github.com/panr/hugo-theme-hello-friend/blob/master/USERS.md)! 🤗
+
## Licence
Copyright © 2019 Radosław Kozieł ([@panr](https://twitter.com/panr))
diff --git a/USERS.md b/USERS.md
new file mode 100644
index 0000000..7896b8f
--- /dev/null
+++ b/USERS.md
@@ -0,0 +1,8 @@
+# Meet the users of Hello Friend theme!
+
+
diff --git a/exampleSite/config.toml b/exampleSite/config.toml
index e315abf..9ec00e9 100644
--- a/exampleSite/config.toml
+++ b/exampleSite/config.toml
@@ -8,7 +8,10 @@ paginate = 5
contentTypeName = "post"
# "light" or "dark"
defaultTheme = "dark"
+ # if you set this to 0, only submenu trigger will be visible
showMenuItems = 2
+ # Enable to show reading time in minutes for posts
+ showReadingTime = false
[languages]
[languages.en]
@@ -22,6 +25,9 @@ paginate = 5
readOtherPosts = "Read other posts"
newerPosts = "Newer posts"
olderPosts = "Older posts"
+ minuteReadingTime = "min read"
+ dateFormatSingle = "2006-01-02"
+ dateFormatList = "2006-01-02"
[languages.en.params.logo]
logoText = "hello friend"
diff --git a/layouts/_default/list.html b/layouts/_default/list.html
index 6da2c7e..eda29eb 100644
--- a/layouts/_default/list.html
+++ b/layouts/_default/list.html
@@ -9,11 +9,11 @@
- {{ .Date.Format "2006-01-02" }}
+ {{ .Date.Format ($.Site.Params.DateFormatList | default "2006-01-02") }}
{{ with .Params.Author }}— {{ $.Site.Params.WrittenBy | default "Written by" }} {{ . }}{{ end }}
{{ if $.Site.Params.ShowReadingTime }}
- — ⏰ {{ .ReadingTime }} {{ $.Site.Params.MinuteReadingTime | default "min read" }}
+ — {{ .ReadingTime }} {{ $.Site.Params.MinuteReadingTime | default "min read" }}
{{ end }}
diff --git a/layouts/_default/single.html b/layouts/_default/single.html
index b30f221..5ab166f 100644
--- a/layouts/_default/single.html
+++ b/layouts/_default/single.html
@@ -4,12 +4,12 @@
{{ with .Date | default nil }}
- {{ .Format "2006-01-02" }}
+ {{ .Format ($.Site.Params.DateFormatSingle | default "2006-01-02") }}
{{ end }}
{{ with .Params.Author }}— {{ $.Site.Params.WrittenBy | default "Written by" }} {{ . }}{{ end }}
{{ if $.Site.Params.ShowReadingTime }}
- — ⏰ {{ .ReadingTime }} {{ $.Site.Params.MinuteReadingTime | default "min read" }}
+ — {{ .ReadingTime }} {{ $.Site.Params.MinuteReadingTime | default "min read" }}
{{ end }}
diff --git a/source/js/menu.js b/source/js/menu.js
index 63d9663..286d202 100644
--- a/source/js/menu.js
+++ b/source/js/menu.js
@@ -20,7 +20,7 @@ menuMore && menuMore.addEventListener("click", e => e.stopPropagation());
isMobileMenu();
document.body.addEventListener("click", () => {
- if (!isMobile() && !menuMore.classList.contains("hidden")) {
+ if (!isMobile() && menuMore && !menuMore.classList.contains("hidden")) {
menuMore.classList.add("hidden");
} else if (isMobile() && !menu.classList.contains("hidden")) {
menu.classList.add("hidden");
@@ -44,7 +44,10 @@ desktopMenuTrigger &&
e.stopPropagation();
menuMore && menuMore.classList.toggle("hidden");
- if (menuMore.getBoundingClientRect().right > container.getBoundingClientRect().right) {
+ if (
+ menuMore &&
+ menuMore.getBoundingClientRect().right > container.getBoundingClientRect().right
+ ) {
menuMore.style.left = "auto";
menuMore.style.right = 0;
}
diff --git a/static/assets/main.js b/static/assets/main.js
index 6f7703e..8cd177b 100644
--- a/static/assets/main.js
+++ b/static/assets/main.js
@@ -1 +1,133 @@
-!function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){n(1),n(2),e.exports=n(3)},function(e,t){},function(e,t){var n=document.querySelector(".container"),o=document.querySelector(".menu"),r=document.querySelector(".menu-trigger"),i=(document.querySelector(".menu__inner--desktop"),document.querySelector(".menu__sub-inner-more-trigger")),c=document.querySelector(".menu__sub-inner-more"),d=getComputedStyle(document.body).getPropertyValue("--phoneWidth"),u=function(){return window.matchMedia(d).matches},l=function(){r&&r.classList.toggle("hidden",!u()),o&&o.classList.toggle("hidden",u()),c&&c.classList.toggle("hidden",!u())};o&&o.addEventListener("click",function(e){return e.stopPropagation()}),c&&c.addEventListener("click",function(e){return e.stopPropagation()}),l(),document.body.addEventListener("click",function(){u()||c.classList.contains("hidden")?u()&&!o.classList.contains("hidden")&&o.classList.add("hidden"):c.classList.add("hidden")}),window.addEventListener("resize",l),r&&r.addEventListener("click",function(e){e.stopPropagation(),o&&o.classList.toggle("hidden")}),i&&i.addEventListener("click",function(e){e.stopPropagation(),c&&c.classList.toggle("hidden"),c.getBoundingClientRect().right>n.getBoundingClientRect().right&&(c.style.left="auto",c.style.right=0)})},function(e,t){var n=window.localStorage&&window.localStorage.getItem("theme"),o=document.querySelector(".theme-toggle"),r="dark"===n;null!==n&&document.body.classList.toggle("dark-theme",r),o.addEventListener("click",function(){document.body.classList.toggle("dark-theme"),window.localStorage&&window.localStorage.setItem("theme",document.body.classList.contains("dark-theme")?"dark":"light")})}]);
\ No newline at end of file
+/******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = 0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./source/js/index.js":
+/*!****************************!*\
+ !*** ./source/js/index.js ***!
+ \****************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("// Add your script here\n\n//# sourceURL=webpack:///./source/js/index.js?");
+
+/***/ }),
+
+/***/ "./source/js/menu.js":
+/*!***************************!*\
+ !*** ./source/js/menu.js ***!
+ \***************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("var container = document.querySelector(\".container\");\nvar menu = document.querySelector(\".menu\");\nvar mobileMenuTrigger = document.querySelector(\".menu-trigger\");\nvar desktopMenu = document.querySelector(\".menu__inner--desktop\");\nvar desktopMenuTrigger = document.querySelector(\".menu__sub-inner-more-trigger\");\nvar menuMore = document.querySelector(\".menu__sub-inner-more\");\nvar mobileQuery = getComputedStyle(document.body).getPropertyValue(\"--phoneWidth\");\n\nvar isMobile = function isMobile() {\n return window.matchMedia(mobileQuery).matches;\n};\n\nvar isMobileMenu = function isMobileMenu() {\n mobileMenuTrigger && mobileMenuTrigger.classList.toggle(\"hidden\", !isMobile());\n menu && menu.classList.toggle(\"hidden\", isMobile());\n menuMore && menuMore.classList.toggle(\"hidden\", !isMobile());\n}; // Common\n\n\nmenu && menu.addEventListener(\"click\", function (e) {\n return e.stopPropagation();\n});\nmenuMore && menuMore.addEventListener(\"click\", function (e) {\n return e.stopPropagation();\n});\nisMobileMenu();\ndocument.body.addEventListener(\"click\", function () {\n if (!isMobile() && menuMore && !menuMore.classList.contains(\"hidden\")) {\n menuMore.classList.add(\"hidden\");\n } else if (isMobile() && !menu.classList.contains(\"hidden\")) {\n menu.classList.add(\"hidden\");\n }\n});\nwindow.addEventListener(\"resize\", isMobileMenu); // Mobile menu\n\nmobileMenuTrigger && mobileMenuTrigger.addEventListener(\"click\", function (e) {\n e.stopPropagation();\n menu && menu.classList.toggle(\"hidden\");\n}); // Desktop menu\n\ndesktopMenuTrigger && desktopMenuTrigger.addEventListener(\"click\", function (e) {\n e.stopPropagation();\n menuMore && menuMore.classList.toggle(\"hidden\");\n\n if (menuMore && menuMore.getBoundingClientRect().right > container.getBoundingClientRect().right) {\n menuMore.style.left = \"auto\";\n menuMore.style.right = 0;\n }\n});\n\n//# sourceURL=webpack:///./source/js/menu.js?");
+
+/***/ }),
+
+/***/ "./source/js/theme.js":
+/*!****************************!*\
+ !*** ./source/js/theme.js ***!
+ \****************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("// Toggle theme\nvar getTheme = window.localStorage && window.localStorage.getItem(\"theme\");\nvar themeToggle = document.querySelector(\".theme-toggle\");\nvar isDark = getTheme === \"dark\";\n\nif (getTheme !== null) {\n document.body.classList.toggle(\"dark-theme\", isDark);\n}\n\nthemeToggle.addEventListener(\"click\", function () {\n document.body.classList.toggle(\"dark-theme\");\n window.localStorage && window.localStorage.setItem(\"theme\", document.body.classList.contains(\"dark-theme\") ? \"dark\" : \"light\");\n});\n\n//# sourceURL=webpack:///./source/js/theme.js?");
+
+/***/ }),
+
+/***/ 0:
+/*!***************************************************************************!*\
+ !*** multi ./source/js/index.js ./source/js/menu.js ./source/js/theme.js ***!
+ \***************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("__webpack_require__(/*! /Users/radek/Documents/Git/Moje/hugoBasicExampleHelloFriend/themes/hello-friend/source/js/index.js */\"./source/js/index.js\");\n__webpack_require__(/*! /Users/radek/Documents/Git/Moje/hugoBasicExampleHelloFriend/themes/hello-friend/source/js/menu.js */\"./source/js/menu.js\");\nmodule.exports = __webpack_require__(/*! /Users/radek/Documents/Git/Moje/hugoBasicExampleHelloFriend/themes/hello-friend/source/js/theme.js */\"./source/js/theme.js\");\n\n\n//# sourceURL=webpack:///multi_./source/js/index.js_./source/js/menu.js_./source/js/theme.js?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/static/assets/prism.js b/static/assets/prism.js
index c3f0ac1..58548fe 100644
--- a/static/assets/prism.js
+++ b/static/assets/prism.js
@@ -1,8 +1,122 @@
-!function(e){var t={};function n(a){if(t[a])return t[a].exports;var i=t[a]={i:a,l:!1,exports:{}};return e[a].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=e,n.c=t,n.d=function(e,t,a){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(n.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(a,i,function(t){return e[t]}.bind(null,i));return a},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=4)}([,,,,function(e,t,n){(function(t){var a="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},i=function(){var e=/\blang(?:uage)?-([\w-]+)\b/i,t=0,n=a.Prism={manual:a.Prism&&a.Prism.manual,disableWorkerMessageHandler:a.Prism&&a.Prism.disableWorkerMessageHandler,util:{encode:function(e){return e instanceof i?new i(e.type,n.util.encode(e.content),e.alias):"Array"===n.util.type(e)?e.map(n.util.encode):e.replace(/&/g,"&").replace(/e.length)return;if(!(k instanceof l)){if(m&&v!=t.length-1){if(p.lastIndex=w,!(C=p.exec(e)))break;for(var S=C.index+(f?C[1].length:0),x=C.index+C[0].length,A=v,E=w,L=t.length;L>A&&(x>E||!t[A].type&&!t[A-1].greedy);++A)S>=(E+=t[A].length)&&(++v,w=E);if(t[v]instanceof l)continue;_=A-v,k=e.slice(w,E),C.index-=w}else{p.lastIndex=0;var C=p.exec(k),_=1}if(C){f&&(b=C[1]?C[1].length:0);x=(S=C.index+b)+(C=C[0].slice(b)).length;var T=k.slice(0,S),I=k.slice(x),R=[v,_];T&&(++v,w+=T.length,R.push(T));var P=new l(c,g?n.tokenize(C,g):C,h,C,m);if(R.push(P),I&&R.push(I),Array.prototype.splice.apply(t,R),1!=_&&n.matchGrammar(e,t,a,v,w,!0,c),o)break}else if(o)break}}}}},tokenize:function(e,t){var a=[e],i=t.rest;if(i){for(var r in i)t[r]=i[r];delete t.rest}return n.matchGrammar(e,a,t,0,0,!1),a},hooks:{all:{},add:function(e,t){var a=n.hooks.all;a[e]=a[e]||[],a[e].push(t)},run:function(e,t){var a=n.hooks.all[e];if(a&&a.length)for(var i,r=0;i=a[r++];)i(t)}}},i=n.Token=function(e,t,n,a,i){this.type=e,this.content=t,this.alias=n,this.length=0|(a||"").length,this.greedy=!!i};if(i.stringify=function(e,t,a){if("string"==typeof e)return e;if("Array"===n.util.type(e))return e.map(function(n){return i.stringify(n,t,e)}).join("");var r={type:e.type,content:i.stringify(e.content,t,a),tag:"span",classes:["token",e.type],attributes:{},language:t,parent:a};if(e.alias){var o="Array"===n.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(r.classes,o)}n.hooks.run("wrap",r);var s=Object.keys(r.attributes).map(function(e){return e+'="'+(r.attributes[e]||"").replace(/"/g,""")+'"'}).join(" ");return"<"+r.tag+' class="'+r.classes.join(" ")+'"'+(s?" "+s:"")+">"+r.content+""+r.tag+">"},!a.document)return a.addEventListener?(n.disableWorkerMessageHandler||a.addEventListener("message",function(e){var t=JSON.parse(e.data),i=t.language,r=t.code,o=t.immediateClose;a.postMessage(n.highlight(r,n.languages[i],i)),o&&a.close()},!1),a.Prism):a.Prism;var r=document.currentScript||[].slice.call(document.getElementsByTagName("script")).pop();return r&&(n.filename=r.src,n.manual||r.hasAttribute("data-manual")||("loading"!==document.readyState?window.requestAnimationFrame?window.requestAnimationFrame(n.highlightAll):window.setTimeout(n.highlightAll,16):document.addEventListener("DOMContentLoaded",n.highlightAll))),a.Prism}();e.exports&&(e.exports=i),void 0!==t&&(t.Prism=i),i.languages.markup={comment://,prolog:/<\?[\s\S]+?\?>/,doctype://i,cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/i,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+)/i,inside:{punctuation:[/^=/,{pattern:/(^|[^\\])["']/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/?[\da-z]{1,8};/i},i.languages.markup.tag.inside["attr-value"].inside.entity=i.languages.markup.entity,i.hooks.add("wrap",function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))}),i.languages.xml=i.languages.markup,i.languages.html=i.languages.markup,i.languages.mathml=i.languages.markup,i.languages.svg=i.languages.markup,i.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-]+?[\s\S]*?(?:;|(?=\s*\{))/i,inside:{rule:/@[\w-]+/}},url:/url\((?:(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,selector:/[^{}\s][^{};]*?(?=\s*\{)/,string:{pattern:/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},property:/[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i,important:/!important\b/i,function:/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:,]/},i.languages.css.atrule.inside.rest=i.languages.css,i.languages.markup&&(i.languages.insertBefore("markup","tag",{style:{pattern:/(