diff --git a/assets/fonts/forkawesome-webfont.eot b/assets/fonts/forkawesome-webfont.eot new file mode 100644 index 0000000..c2c24b4 Binary files /dev/null and b/assets/fonts/forkawesome-webfont.eot differ diff --git a/assets/fonts/forkawesome-webfont.svg b/assets/fonts/forkawesome-webfont.svg new file mode 100644 index 0000000..bd45b30 --- /dev/null +++ b/assets/fonts/forkawesome-webfont.svg @@ -0,0 +1,3232 @@ + + + + + +Created by FontForge 20190801 at Fri Aug 27 00:07:49 2021 + By shine +The Fork Awesome font is licensed under the SIL OFL 1.1 (http://scripts.sil.org/OFL). Fork Awesome is a fork based of off Font Awesome 4.7.0 by Dave Gandy. More info on licenses at https://forkawesome.github.io + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/fonts/forkawesome-webfont.ttf b/assets/fonts/forkawesome-webfont.ttf new file mode 100644 index 0000000..1f1d8f3 Binary files /dev/null and b/assets/fonts/forkawesome-webfont.ttf differ diff --git a/assets/fonts/forkawesome-webfont.woff b/assets/fonts/forkawesome-webfont.woff new file mode 100644 index 0000000..cca43af Binary files /dev/null and b/assets/fonts/forkawesome-webfont.woff differ diff --git a/assets/fonts/forkawesome-webfont.woff2 b/assets/fonts/forkawesome-webfont.woff2 new file mode 100644 index 0000000..c96e5bf Binary files /dev/null and b/assets/fonts/forkawesome-webfont.woff2 differ diff --git a/assets/js/fontawesome.js b/assets/js/fontawesome.js deleted file mode 100644 index 1070e47..0000000 --- a/assets/js/fontawesome.js +++ /dev/null @@ -1,5 +0,0 @@ -/*! - * Font Awesome Free 5.15.3 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - */ -!function(){"use strict";var c={},l={};try{"undefined"!=typeof window&&(c=window),"undefined"!=typeof document&&(l=document)}catch(c){}var h=(c.navigator||{}).userAgent,z=void 0===h?"":h,a=c,v=l,m=(a.document,!!v.documentElement&&!!v.head&&"function"==typeof v.addEventListener&&v.createElement,~z.indexOf("MSIE")||z.indexOf("Trident/"),"___FONT_AWESOME___"),e=function(){try{return!0}catch(c){return!1}}();var s=a||{};s[m]||(s[m]={}),s[m].styles||(s[m].styles={}),s[m].hooks||(s[m].hooks={}),s[m].shims||(s[m].shims=[]);var t=s[m];function M(c,z){var l=(2>>0;h--;)l[h]=c[h];return l}function Ac(c){return c.classList?bc(c.classList):(c.getAttribute("class")||"").split(" ").filter(function(c){return c})}function gc(c,l){var h,z=l.split("-"),a=z[0],v=z.slice(1).join("-");return a!==c||""===v||(h=v,~T.indexOf(h))?null:v}function Sc(c){return"".concat(c).replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}function yc(h){return Object.keys(h||{}).reduce(function(c,l){return c+"".concat(l,": ").concat(h[l],";")},"")}function wc(c){return c.size!==Lc.size||c.x!==Lc.x||c.y!==Lc.y||c.rotate!==Lc.rotate||c.flipX||c.flipY}function Zc(c){var l=c.transform,h=c.containerWidth,z=c.iconWidth,a={transform:"translate(".concat(h/2," 256)")},v="translate(".concat(32*l.x,", ").concat(32*l.y,") "),m="scale(".concat(l.size/16*(l.flipX?-1:1),", ").concat(l.size/16*(l.flipY?-1:1),") "),e="rotate(".concat(l.rotate," 0 0)");return{outer:a,inner:{transform:"".concat(v," ").concat(m," ").concat(e)},path:{transform:"translate(".concat(z/2*-1," -256)")}}}var kc={x:0,y:0,width:"100%",height:"100%"};function xc(c){var l=!(1").concat(m.map(Jc).join(""),"")}var $c=function(){};function cl(c){return"string"==typeof(c.getAttribute?c.getAttribute(cc):null)}var ll={replace:function(c){var l=c[0],h=c[1].map(function(c){return Jc(c)}).join("\n");if(l.parentNode&&l.outerHTML)l.outerHTML=h+(lc.keepOriginalSource&&"svg"!==l.tagName.toLowerCase()?"\x3c!-- ".concat(l.outerHTML," Font Awesome fontawesome.com --\x3e"):"");else if(l.parentNode){var z=document.createElement("span");l.parentNode.replaceChild(z,l),z.outerHTML=h}},nest:function(c){var l=c[0],h=c[1];if(~Ac(l).indexOf(lc.replacementClass))return ll.replace(c);var z=new RegExp("".concat(lc.familyPrefix,"-.*"));delete h[0].attributes.style,delete h[0].attributes.id;var a=h[0].attributes.class.split(" ").reduce(function(c,l){return l===lc.replacementClass||l.match(z)?c.toSvg.push(l):c.toNode.push(l),c},{toNode:[],toSvg:[]});h[0].attributes.class=a.toSvg.join(" ");var v=h.map(function(c){return Jc(c)}).join("\n");l.setAttribute("class",a.toNode.join(" ")),l.setAttribute(cc,""),l.innerHTML=v}};function hl(c){c()}function zl(h,c){var z="function"==typeof c?c:$c;if(0===h.length)z();else{var l=hl;lc.mutateApproach===y&&(l=o.requestAnimationFrame||hl),l(function(){var c=!0===lc.autoReplaceSvg?ll.replace:ll[lc.autoReplaceSvg]||ll.replace,l=_c.begin("mutate");h.map(c),l(),z()})}}var al=!1;function vl(){al=!1}var ml=null;function el(c){if(t&&lc.observeMutations){var a=c.treeCallback,v=c.nodeCallback,m=c.pseudoElementsCallback,l=c.observeMutationsRoot,h=void 0===l?C:l;ml=new t(function(c){al||bc(c).forEach(function(c){if("childList"===c.type&&0 li { position: relative; } +} +.#{$fa-css-prefix}-li { + position: absolute; + left: -$fa-li-width; + width: $fa-li-width; + top: (2em / 14); + text-align: center; + &.#{$fa-css-prefix}-lg { + left: -$fa-li-width + (4em / 14); + } +} diff --git a/assets/scss/_mixins.scss b/assets/scss/_mixins.scss new file mode 100644 index 0000000..6fdb128 --- /dev/null +++ b/assets/scss/_mixins.scss @@ -0,0 +1,60 @@ +// Mixins +// -------------------------- + +@mixin fa-icon() { + display: inline-block; + font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} #{$fa-font-family}; // shortening font declaration + font-size: inherit; // can't have font-size inherit on line above, so need to override + text-rendering: auto; // optimizelegibility throws things off #1094 + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + +} + +@mixin fa-icon-rotate($degrees, $rotation) { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})"; + -webkit-transform: rotate($degrees); + -ms-transform: rotate($degrees); + transform: rotate($degrees); +} + +@mixin fa-icon-flip($horiz, $vert, $rotation) { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)"; + -webkit-transform: scale($horiz, $vert); + -ms-transform: scale($horiz, $vert); + transform: scale($horiz, $vert); +} + + +// Only display content to screen readers. A la Bootstrap 4. +// +// See: http://a11yproject.com/posts/how-to-hide-content/ + +@mixin sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0,0,0,0); + border: 0; +} + +// Use in conjunction with .sr-only to only display content when it's focused. +// +// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 +// +// Credit: HTML5 Boilerplate + +@mixin sr-only-focusable { + &:active, + &:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; + } +} diff --git a/assets/scss/_path.scss b/assets/scss/_path.scss new file mode 100644 index 0000000..1566182 --- /dev/null +++ b/assets/scss/_path.scss @@ -0,0 +1,16 @@ +/* FONT PATH + * -------------------------- */ + +@font-face { + font-family: '#{$fa-font-family}'; + src: url('#{$fa-font-path}/forkawesome-webfont.eot?v=#{$fa-version}'); + src: url('#{$fa-font-path}/forkawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), + url('#{$fa-font-path}/forkawesome-webfont.woff2?v=#{$fa-version}') format('woff2'), + url('#{$fa-font-path}/forkawesome-webfont.woff?v=#{$fa-version}') format('woff'), + url('#{$fa-font-path}/forkawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), + url('#{$fa-font-path}/forkawesome-webfont.svg?v=#{$fa-version}#forkawesomeregular') format('svg'); +// src: url('#{$fa-font-path}/ForkAwesome.otf') format('opentype'); // used when developing fonts + font-weight: normal; + font-style: normal; + font-display: block; +} diff --git a/assets/scss/_rotated-flipped.scss b/assets/scss/_rotated-flipped.scss new file mode 100644 index 0000000..a3558fd --- /dev/null +++ b/assets/scss/_rotated-flipped.scss @@ -0,0 +1,20 @@ +// Rotated & Flipped Icons +// ------------------------- + +.#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } +.#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } +.#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } + +.#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } +.#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } + +// Hook for IE8-9 +// ------------------------- + +:root .#{$fa-css-prefix}-rotate-90, +:root .#{$fa-css-prefix}-rotate-180, +:root .#{$fa-css-prefix}-rotate-270, +:root .#{$fa-css-prefix}-flip-horizontal, +:root .#{$fa-css-prefix}-flip-vertical { + filter: none; +} diff --git a/assets/scss/_screen-reader.scss b/assets/scss/_screen-reader.scss new file mode 100644 index 0000000..637426f --- /dev/null +++ b/assets/scss/_screen-reader.scss @@ -0,0 +1,5 @@ +// Screen Readers +// ------------------------- + +.sr-only { @include sr-only(); } +.sr-only-focusable { @include sr-only-focusable(); } diff --git a/assets/scss/_stacked.scss b/assets/scss/_stacked.scss new file mode 100644 index 0000000..aef7403 --- /dev/null +++ b/assets/scss/_stacked.scss @@ -0,0 +1,20 @@ +// Stacked Icons +// ------------------------- + +.#{$fa-css-prefix}-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.#{$fa-css-prefix}-stack-1x { line-height: inherit; } +.#{$fa-css-prefix}-stack-2x { font-size: 2em; } +.#{$fa-css-prefix}-inverse { color: $fa-inverse; } diff --git a/assets/scss/_variables.scss b/assets/scss/_variables.scss new file mode 100644 index 0000000..3a8abf3 --- /dev/null +++ b/assets/scss/_variables.scss @@ -0,0 +1,945 @@ +// Variables +// -------------------------- + +$fa-font-path: "../fonts" !default; +$fa-font-size-base: 14px !default; +$fa-line-height-base: 1 !default; +$fa-css-prefix: "fa" !default; +$fa-font-family: "ForkAwesome" !default; +$fa-version: "1.2.0" !default; +$fa-border-color: #eee !default; +$fa-inverse: #fff !default; +$fa-li-width: (30em / 14) !default; + +$fa-var-500px: \f26e; +$fa-var-activitypub: \f2f2; +$fa-var-address-book: \f2b9; +$fa-var-address-book-o: \f2ba; +$fa-var-address-card: \f2bb; +$fa-var-address-card-o: \f2bc; +$fa-var-adjust: \f042; +$fa-var-adn: \f170; +$fa-var-align-center: \f037; +$fa-var-align-justify: \f039; +$fa-var-align-left: \f036; +$fa-var-align-right: \f038; +$fa-var-amazon: \f270; +$fa-var-ambulance: \f0f9; +$fa-var-american-sign-language-interpreting: \f2a3; +$fa-var-anchor: \f13d; +$fa-var-android: \f17b; +$fa-var-angellist: \f209; +$fa-var-angle-double-down: \f103; +$fa-var-angle-double-left: \f100; +$fa-var-angle-double-right: \f101; +$fa-var-angle-double-up: \f102; +$fa-var-angle-down: \f107; +$fa-var-angle-left: \f104; +$fa-var-angle-right: \f105; +$fa-var-angle-up: \f106; +$fa-var-apple: \f179; +$fa-var-archive: \f187; +$fa-var-archive-org: \f2fc; +$fa-var-archlinux: \f323; +$fa-var-area-chart: \f1fe; +$fa-var-arrow-circle-down: \f0ab; +$fa-var-arrow-circle-left: \f0a8; +$fa-var-arrow-circle-o-down: \f01a; +$fa-var-arrow-circle-o-left: \f190; +$fa-var-arrow-circle-o-right: \f18e; +$fa-var-arrow-circle-o-up: \f01b; +$fa-var-arrow-circle-right: \f0a9; +$fa-var-arrow-circle-up: \f0aa; +$fa-var-arrow-down: \f063; +$fa-var-arrow-left: \f060; +$fa-var-arrow-right: \f061; +$fa-var-arrow-up: \f062; +$fa-var-arrows: \f047; +$fa-var-arrows-alt: \f0b2; +$fa-var-arrows-h: \f07e; +$fa-var-arrows-v: \f07d; +$fa-var-artstation: \f2ed; +$fa-var-askfm: \f33a; +$fa-var-asl-interpreting: \f2a3; +$fa-var-assistive-listening-systems: \f2a2; +$fa-var-asterisk: \f069; +$fa-var-at: \f1fa; +$fa-var-att: \f31e; +$fa-var-audio-description: \f29e; +$fa-var-automobile: \f1b9; +$fa-var-backward: \f04a; +$fa-var-balance-scale: \f24e; +$fa-var-ban: \f05e; +$fa-var-bandcamp: \f2d5; +$fa-var-bank: \f19c; +$fa-var-bar-chart: \f080; +$fa-var-bar-chart-o: \f080; +$fa-var-barcode: \f02a; +$fa-var-bars: \f0c9; +$fa-var-bath: \f2cd; +$fa-var-bathtub: \f2cd; +$fa-var-battery: \f240; +$fa-var-battery-0: \f244; +$fa-var-battery-1: \f243; +$fa-var-battery-2: \f242; +$fa-var-battery-3: \f241; +$fa-var-battery-4: \f240; +$fa-var-battery-empty: \f244; +$fa-var-battery-full: \f240; +$fa-var-battery-half: \f242; +$fa-var-battery-quarter: \f243; +$fa-var-battery-three-quarters: \f241; +$fa-var-bed: \f236; +$fa-var-beer: \f0fc; +$fa-var-behance: \f1b4; +$fa-var-behance-square: \f1b5; +$fa-var-bell: \f0a2; +$fa-var-bell-o: \f0f3; +$fa-var-bell-ringing: \f32d; +$fa-var-bell-ringing-o: \f330; +$fa-var-bell-slash: \f1f6; +$fa-var-bell-slash-o: \f1f7; +$fa-var-bicycle: \f206; +$fa-var-binoculars: \f1e5; +$fa-var-biometric: \f32b; +$fa-var-birthday-cake: \f1fd; +$fa-var-bitbucket: \f171; +$fa-var-bitbucket-square: \f172; +$fa-var-bitcoin: \f15a; +$fa-var-black-tie: \f27e; +$fa-var-blind: \f29d; +$fa-var-blockstack: \f33b; +$fa-var-bluetooth: \f293; +$fa-var-bluetooth-b: \f294; +$fa-var-boardgamegeek: \f33c; +$fa-var-bold: \f032; +$fa-var-bolt: \f0e7; +$fa-var-bomb: \f1e2; +$fa-var-book: \f02d; +$fa-var-bookmark: \f02e; +$fa-var-bookmark-o: \f097; +$fa-var-bootstrap: \f315; +$fa-var-braille: \f2a1; +$fa-var-briefcase: \f0b1; +$fa-var-btc: \f15a; +$fa-var-bug: \f188; +$fa-var-building: \f1ad; +$fa-var-building-o: \f0f7; +$fa-var-bullhorn: \f0a1; +$fa-var-bullseye: \f140; +$fa-var-bunny: \f35f; +$fa-var-bus: \f207; +$fa-var-buymeacoffee: \f33d; +$fa-var-buysellads: \f20d; +$fa-var-c: \f31c; +$fa-var-cab: \f1ba; +$fa-var-calculator: \f1ec; +$fa-var-calendar: \f073; +$fa-var-calendar-check-o: \f274; +$fa-var-calendar-minus-o: \f272; +$fa-var-calendar-o: \f133; +$fa-var-calendar-plus-o: \f271; +$fa-var-calendar-times-o: \f273; +$fa-var-camera: \f030; +$fa-var-camera-retro: \f083; +$fa-var-car: \f1b9; +$fa-var-caret-down: \f0d7; +$fa-var-caret-left: \f0d9; +$fa-var-caret-right: \f0da; +$fa-var-caret-square-o-down: \f150; +$fa-var-caret-square-o-left: \f191; +$fa-var-caret-square-o-right: \f152; +$fa-var-caret-square-o-up: \f151; +$fa-var-caret-up: \f0d8; +$fa-var-cart-arrow-down: \f218; +$fa-var-cart-plus: \f217; +$fa-var-cc: \f20a; +$fa-var-cc-amex: \f1f3; +$fa-var-cc-by: \f33e; +$fa-var-cc-cc: \f33f; +$fa-var-cc-diners-club: \f24c; +$fa-var-cc-discover: \f1f2; +$fa-var-cc-jcb: \f24b; +$fa-var-cc-mastercard: \f1f1; +$fa-var-cc-nc: \f340; +$fa-var-cc-nc-eu: \f341; +$fa-var-cc-nc-jp: \f342; +$fa-var-cc-nd: \f343; +$fa-var-cc-paypal: \f1f4; +$fa-var-cc-pd: \f344; +$fa-var-cc-remix: \f345; +$fa-var-cc-sa: \f346; +$fa-var-cc-share: \f347; +$fa-var-cc-stripe: \f1f5; +$fa-var-cc-visa: \f1f0; +$fa-var-cc-zero: \f348; +$fa-var-certificate: \f0a3; +$fa-var-chain: \f0c1; +$fa-var-chain-broken: \f127; +$fa-var-check: \f00c; +$fa-var-check-circle: \f058; +$fa-var-check-circle-o: \f05d; +$fa-var-check-square: \f14a; +$fa-var-check-square-o: \f046; +$fa-var-chevron-circle-down: \f13a; +$fa-var-chevron-circle-left: \f137; +$fa-var-chevron-circle-right: \f138; +$fa-var-chevron-circle-up: \f139; +$fa-var-chevron-down: \f078; +$fa-var-chevron-left: \f053; +$fa-var-chevron-right: \f054; +$fa-var-chevron-up: \f077; +$fa-var-child: \f1ae; +$fa-var-chrome: \f268; +$fa-var-circle: \f111; +$fa-var-circle-o: \f10c; +$fa-var-circle-o-notch: \f1ce; +$fa-var-circle-thin: \f1db; +$fa-var-classicpress: \f331; +$fa-var-classicpress-circle: \f332; +$fa-var-clipboard: \f0ea; +$fa-var-clock-o: \f017; +$fa-var-clone: \f24d; +$fa-var-close: \f00d; +$fa-var-closed-captioning: \f20a; +$fa-var-cloud: \f0c2; +$fa-var-cloud-download: \f0ed; +$fa-var-cloud-upload: \f0ee; +$fa-var-cny: \f157; +$fa-var-code: \f121; +$fa-var-code-fork: \f126; +$fa-var-codepen: \f1cb; +$fa-var-codiepie: \f284; +$fa-var-coffee: \f0f4; +$fa-var-cog: \f013; +$fa-var-cogs: \f085; +$fa-var-columns: \f0db; +$fa-var-comment: \f075; +$fa-var-comment-o: \f0e5; +$fa-var-commenting: \f27a; +$fa-var-commenting-o: \f27b; +$fa-var-comments: \f086; +$fa-var-comments-o: \f0e6; +$fa-var-community: \f0c0; +$fa-var-compass: \f14e; +$fa-var-compress: \f066; +$fa-var-connectdevelop: \f20e; +$fa-var-contao: \f26d; +$fa-var-conway-glider: \f349; +$fa-var-conway-hacker: \f349; +$fa-var-copy: \f0c5; +$fa-var-copyright: \f1f9; +$fa-var-creative-commons: \f25e; +$fa-var-creative-commons-alt: \f33f; +$fa-var-credit-card: \f09d; +$fa-var-credit-card-alt: \f283; +$fa-var-crop: \f125; +$fa-var-crosshairs: \f05b; +$fa-var-csharp: \f34a; +$fa-var-css3: \f13c; +$fa-var-cube: \f1b2; +$fa-var-cubes: \f1b3; +$fa-var-cut: \f0c4; +$fa-var-cut-key: \f2f7; +$fa-var-cutlery: \f0f5; +$fa-var-dashboard: \f0e4; +$fa-var-dashcube: \f210; +$fa-var-database: \f1c0; +$fa-var-deaf: \f2a4; +$fa-var-deafness: \f2a4; +$fa-var-debian: \f2ff; +$fa-var-dedent: \f03b; +$fa-var-delicious: \f1a5; +$fa-var-desktop: \f108; +$fa-var-dev-to: \f316; +$fa-var-deviantart: \f1bd; +$fa-var-diamond: \f219; +$fa-var-diaspora: \f2e5; +$fa-var-digg: \f1a6; +$fa-var-digitalocean: \f31d; +$fa-var-discord: \f2ee; +$fa-var-discord-alt: \f2ef; +$fa-var-dogmazic: \f303; +$fa-var-dollar: \f155; +$fa-var-dot-circle-o: \f192; +$fa-var-download: \f019; +$fa-var-dribbble: \f17d; +$fa-var-drivers-license: \f2c2; +$fa-var-drivers-license-o: \f2c3; +$fa-var-dropbox: \f16b; +$fa-var-drupal: \f1a9; +$fa-var-edge: \f282; +$fa-var-edit: \f044; +$fa-var-eercast: \f2da; +$fa-var-eject: \f052; +$fa-var-ellipsis-h: \f141; +$fa-var-ellipsis-v: \f142; +$fa-var-email-bulk: \f34b; +$fa-var-email-bulk-o: \f34c; +$fa-var-emby: \f319; +$fa-var-empire: \f1d1; +$fa-var-envelope: \f0e0; +$fa-var-envelope-o: \f003; +$fa-var-envelope-open: \f2b6; +$fa-var-envelope-open-o: \f2b7; +$fa-var-envelope-square: \f199; +$fa-var-envira: \f299; +$fa-var-eraser: \f12d; +$fa-var-ethereum: \f2f3; +$fa-var-etsy: \f2d7; +$fa-var-eur: \f153; +$fa-var-euro: \f153; +$fa-var-exchange: \f0ec; +$fa-var-exclamation: \f12a; +$fa-var-exclamation-circle: \f06a; +$fa-var-exclamation-triangle: \f071; +$fa-var-expand: \f065; +$fa-var-expeditedssl: \f23e; +$fa-var-external-link: \f08e; +$fa-var-external-link-square: \f14c; +$fa-var-eye: \f06e; +$fa-var-eye-slash: \f070; +$fa-var-eyedropper: \f1fb; +$fa-var-f-droid: \f32a; +$fa-var-fa: \f2b4; +$fa-var-facebook: \f09a; +$fa-var-facebook-f: \f09a; +$fa-var-facebook-messenger: \f2fe; +$fa-var-facebook-official: \f230; +$fa-var-facebook-square: \f082; +$fa-var-fast-backward: \f049; +$fa-var-fast-forward: \f050; +$fa-var-fax: \f1ac; +$fa-var-feed: \f09e; +$fa-var-female: \f182; +$fa-var-ffmpeg: \f30f; +$fa-var-fighter-jet: \f0fb; +$fa-var-file: \f15b; +$fa-var-file-archive-o: \f1c6; +$fa-var-file-audio-o: \f1c7; +$fa-var-file-code-o: \f1c9; +$fa-var-file-epub: \f321; +$fa-var-file-excel-o: \f1c3; +$fa-var-file-image-o: \f1c5; +$fa-var-file-movie-o: \f1c8; +$fa-var-file-o: \f016; +$fa-var-file-pdf-o: \f1c1; +$fa-var-file-photo-o: \f1c5; +$fa-var-file-picture-o: \f1c5; +$fa-var-file-powerpoint-o: \f1c4; +$fa-var-file-sound-o: \f1c7; +$fa-var-file-text: \f15c; +$fa-var-file-text-o: \f0f6; +$fa-var-file-video-o: \f1c8; +$fa-var-file-word-o: \f1c2; +$fa-var-file-zip-o: \f1c6; +$fa-var-files-o: \f0c5; +$fa-var-film: \f008; +$fa-var-filter: \f0b0; +$fa-var-fire: \f06d; +$fa-var-fire-extinguisher: \f134; +$fa-var-firefox: \f269; +$fa-var-first-order: \f2b0; +$fa-var-flag: \f024; +$fa-var-flag-checkered: \f11e; +$fa-var-flag-o: \f11d; +$fa-var-flash: \f0e7; +$fa-var-flask: \f0c3; +$fa-var-flickr: \f16e; +$fa-var-floppy-o: \f0c7; +$fa-var-folder: \f07b; +$fa-var-folder-o: \f114; +$fa-var-folder-open: \f07c; +$fa-var-folder-open-o: \f115; +$fa-var-font: \f031; +$fa-var-font-awesome: \f2b4; +$fa-var-fonticons: \f280; +$fa-var-fork-awesome: \f2e3; +$fa-var-fork-circle: \f2e3; +$fa-var-fort-awesome: \f286; +$fa-var-forumbee: \f211; +$fa-var-forward: \f04e; +$fa-var-foursquare: \f180; +$fa-var-free-code-camp: \f2c5; +$fa-var-freedombox: \f2fd; +$fa-var-friendica: \f2e6; +$fa-var-frown-o: \f119; +$fa-var-funkwhale: \f339; +$fa-var-futbol-o: \f1e3; +$fa-var-gamepad: \f11b; +$fa-var-gavel: \f0e3; +$fa-var-gbp: \f154; +$fa-var-ge: \f1d1; +$fa-var-gear: \f013; +$fa-var-gears: \f085; +$fa-var-gem: \f219; +$fa-var-genderless: \f22d; +$fa-var-get-pocket: \f265; +$fa-var-gg: \f260; +$fa-var-gg-circle: \f261; +$fa-var-gift: \f06b; +$fa-var-gimp: \f31b; +$fa-var-git: \f1d3; +$fa-var-git-square: \f1d2; +$fa-var-gitea: \f31f; +$fa-var-github: \f09b; +$fa-var-github-alt: \f113; +$fa-var-github-square: \f092; +$fa-var-gitlab: \f296; +$fa-var-gittip: \f184; +$fa-var-glass: \f000; +$fa-var-glide: \f2a5; +$fa-var-glide-g: \f2a6; +$fa-var-globe: \f0ac; +$fa-var-globe-e: \f304; +$fa-var-globe-w: \f305; +$fa-var-gnu: \f34d; +$fa-var-gnu-social: \f2e7; +$fa-var-gnupg: \f30d; +$fa-var-google: \f1a0; +$fa-var-google-play: \f34e; +$fa-var-google-plus: \f0d5; +$fa-var-google-plus-circle: \f2b3; +$fa-var-google-plus-g: \f0d5; +$fa-var-google-plus-official: \f2b3; +$fa-var-google-plus-square: \f0d4; +$fa-var-google-wallet: \f1ee; +$fa-var-graduation-cap: \f19d; +$fa-var-gratipay: \f184; +$fa-var-grav: \f2d6; +$fa-var-group: \f0c0; +$fa-var-h-square: \f0fd; +$fa-var-hackaday: \f30a; +$fa-var-hacker-news: \f1d4; +$fa-var-hackster: \f326; +$fa-var-hal: \f333; +$fa-var-hand-grab-o: \f255; +$fa-var-hand-lizard-o: \f258; +$fa-var-hand-o-down: \f0a7; +$fa-var-hand-o-left: \f0a5; +$fa-var-hand-o-right: \f0a4; +$fa-var-hand-o-up: \f0a6; +$fa-var-hand-paper-o: \f256; +$fa-var-hand-peace-o: \f25b; +$fa-var-hand-pointer-o: \f25a; +$fa-var-hand-rock-o: \f255; +$fa-var-hand-scissors-o: \f257; +$fa-var-hand-spock-o: \f259; +$fa-var-hand-stop-o: \f256; +$fa-var-handshake-o: \f2b5; +$fa-var-hard-of-hearing: \f2a4; +$fa-var-hashnode: \f317; +$fa-var-hashtag: \f292; +$fa-var-hassio: \f350; +$fa-var-hdd-o: \f0a0; +$fa-var-header: \f1dc; +$fa-var-heading: \f1dc; +$fa-var-headphones: \f025; +$fa-var-heart: \f004; +$fa-var-heart-o: \f08a; +$fa-var-heartbeat: \f21e; +$fa-var-heroku: \f34f; +$fa-var-history: \f1da; +$fa-var-home: \f015; +$fa-var-home-assistant: \f350; +$fa-var-hospital-o: \f0f8; +$fa-var-hotel: \f236; +$fa-var-hourglass: \f254; +$fa-var-hourglass-1: \f251; +$fa-var-hourglass-2: \f252; +$fa-var-hourglass-3: \f253; +$fa-var-hourglass-end: \f253; +$fa-var-hourglass-half: \f252; +$fa-var-hourglass-o: \f250; +$fa-var-hourglass-start: \f251; +$fa-var-houzz: \f27c; +$fa-var-html5: \f13b; +$fa-var-hubzilla: \f2eb; +$fa-var-i-cursor: \f246; +$fa-var-id-badge: \f2c1; +$fa-var-id-card: \f2c2; +$fa-var-id-card-o: \f2c3; +$fa-var-ils: \f20b; +$fa-var-image: \f03e; +$fa-var-imdb: \f2d8; +$fa-var-inbox: \f01c; +$fa-var-indent: \f03c; +$fa-var-industry: \f275; +$fa-var-info: \f129; +$fa-var-info-circle: \f05a; +$fa-var-inkscape: \f312; +$fa-var-inr: \f156; +$fa-var-instagram: \f16d; +$fa-var-institution: \f19c; +$fa-var-internet-explorer: \f26b; +$fa-var-intersex: \f224; +$fa-var-ioxhost: \f208; +$fa-var-italic: \f033; +$fa-var-java: \f351; +$fa-var-jirafeau: \f318; +$fa-var-joomla: \f1aa; +$fa-var-joplin: \f310; +$fa-var-jpy: \f157; +$fa-var-jsfiddle: \f1cc; +$fa-var-julia: \f334; +$fa-var-jupyter: \f335; +$fa-var-key: \f084; +$fa-var-key-modern: \f2f7; +$fa-var-keybase: \f2f4; +$fa-var-keyboard-o: \f11c; +$fa-var-krw: \f159; +$fa-var-language: \f1ab; +$fa-var-laptop: \f109; +$fa-var-laravel: \f30b; +$fa-var-lastfm: \f202; +$fa-var-lastfm-square: \f203; +$fa-var-leaf: \f06c; +$fa-var-leanpub: \f212; +$fa-var-legal: \f0e3; +$fa-var-lemon-o: \f094; +$fa-var-level-down: \f149; +$fa-var-level-up: \f148; +$fa-var-liberapay: \f2e9; +$fa-var-liberapay-square: \f2e8; +$fa-var-life-bouy: \f1cd; +$fa-var-life-buoy: \f1cd; +$fa-var-life-ring: \f1cd; +$fa-var-life-saver: \f1cd; +$fa-var-lightbulb-o: \f0eb; +$fa-var-line-chart: \f201; +$fa-var-link: \f0c1; +$fa-var-linkedin: \f0e1; +$fa-var-linkedin-square: \f08c; +$fa-var-linode: \f2b8; +$fa-var-linux: \f17c; +$fa-var-list: \f03a; +$fa-var-list-alt: \f022; +$fa-var-list-ol: \f0cb; +$fa-var-list-ul: \f0ca; +$fa-var-location-arrow: \f124; +$fa-var-lock: \f023; +$fa-var-long-arrow-down: \f175; +$fa-var-long-arrow-left: \f177; +$fa-var-long-arrow-right: \f178; +$fa-var-long-arrow-up: \f176; +$fa-var-low-vision: \f2a8; +$fa-var-magic: \f0d0; +$fa-var-magnet: \f076; +$fa-var-mail-forward: \f064; +$fa-var-mail-reply: \f112; +$fa-var-mail-reply-all: \f122; +$fa-var-male: \f183; +$fa-var-map: \f279; +$fa-var-map-marker: \f041; +$fa-var-map-o: \f278; +$fa-var-map-pin: \f276; +$fa-var-map-signs: \f277; +$fa-var-mariadb: \f352; +$fa-var-markdown: \f353; +$fa-var-mars: \f222; +$fa-var-mars-double: \f227; +$fa-var-mars-stroke: \f229; +$fa-var-mars-stroke-h: \f22b; +$fa-var-mars-stroke-v: \f22a; +$fa-var-mastodon: \f2e1; +$fa-var-mastodon-alt: \f2e2; +$fa-var-mastodon-square: \f300; +$fa-var-matrix-org: \f313; +$fa-var-maxcdn: \f136; +$fa-var-meanpath: \f20c; +$fa-var-medium: \f23a; +$fa-var-medium-square: \f2f8; +$fa-var-medkit: \f0fa; +$fa-var-meetup: \f2e0; +$fa-var-meh-o: \f11a; +$fa-var-mercury: \f223; +$fa-var-microchip: \f2db; +$fa-var-microphone: \f130; +$fa-var-microphone-slash: \f131; +$fa-var-minus: \f068; +$fa-var-minus-circle: \f056; +$fa-var-minus-square: \f146; +$fa-var-minus-square-o: \f147; +$fa-var-mixcloud: \f289; +$fa-var-mobile: \f10b; +$fa-var-mobile-phone: \f10b; +$fa-var-modx: \f285; +$fa-var-money: \f0d6; +$fa-var-moon: \f328; +$fa-var-moon-o: \f186; +$fa-var-mortar-board: \f19d; +$fa-var-motorcycle: \f21c; +$fa-var-mouse-pointer: \f245; +$fa-var-music: \f001; +$fa-var-mysql: \f354; +$fa-var-navicon: \f0c9; +$fa-var-neuter: \f22c; +$fa-var-newspaper-o: \f1ea; +$fa-var-nextcloud: \f306; +$fa-var-nextcloud-square: \f307; +$fa-var-nodejs: \f308; +$fa-var-nordcast: \f355; +$fa-var-object-group: \f247; +$fa-var-object-ungroup: \f248; +$fa-var-odnoklassniki: \f263; +$fa-var-odnoklassniki-square: \f264; +$fa-var-open-collective: \f336; +$fa-var-opencart: \f23d; +$fa-var-openid: \f19b; +$fa-var-opera: \f26a; +$fa-var-optin-monster: \f23c; +$fa-var-orcid: \f337; +$fa-var-outdent: \f03b; +$fa-var-pagelines: \f18c; +$fa-var-paint-brush: \f1fc; +$fa-var-paper-plane: \f1d8; +$fa-var-paper-plane-o: \f1d9; +$fa-var-paperclip: \f0c6; +$fa-var-paragraph: \f1dd; +$fa-var-paste: \f0ea; +$fa-var-patreon: \f2f0; +$fa-var-pause: \f04c; +$fa-var-pause-circle: \f28b; +$fa-var-pause-circle-o: \f28c; +$fa-var-paw: \f1b0; +$fa-var-paypal: \f1ed; +$fa-var-peertube: \f2e4; +$fa-var-pencil: \f040; +$fa-var-pencil-square: \f14b; +$fa-var-pencil-square-o: \f044; +$fa-var-percent: \f295; +$fa-var-phone: \f095; +$fa-var-phone-square: \f098; +$fa-var-phone-volume: \f2a0; +$fa-var-photo: \f03e; +$fa-var-php: \f30e; +$fa-var-picture-o: \f03e; +$fa-var-pie-chart: \f200; +$fa-var-pinterest: \f0d2; +$fa-var-pinterest-p: \f231; +$fa-var-pinterest-square: \f0d3; +$fa-var-pixelfed: \f314; +$fa-var-plane: \f072; +$fa-var-play: \f04b; +$fa-var-play-circle: \f144; +$fa-var-play-circle-o: \f01d; +$fa-var-pleroma: \f324; +$fa-var-plug: \f1e6; +$fa-var-plume: \f356; +$fa-var-plus: \f067; +$fa-var-plus-circle: \f055; +$fa-var-plus-square: \f0fe; +$fa-var-plus-square-o: \f196; +$fa-var-podcast: \f2ce; +$fa-var-postgresql: \f357; +$fa-var-pound: \f154; +$fa-var-power-off: \f011; +$fa-var-print: \f02f; +$fa-var-product-hunt: \f288; +$fa-var-puzzle-piece: \f12e; +$fa-var-python: \f322; +$fa-var-qq: \f1d6; +$fa-var-qrcode: \f029; +$fa-var-question: \f128; +$fa-var-question-circle: \f059; +$fa-var-question-circle-o: \f29c; +$fa-var-quora: \f2c4; +$fa-var-quote-left: \f10d; +$fa-var-quote-right: \f10e; +$fa-var-ra: \f1d0; +$fa-var-random: \f074; +$fa-var-ravelry: \f2d9; +$fa-var-react: \f302; +$fa-var-rebel: \f1d0; +$fa-var-recycle: \f1b8; +$fa-var-reddit: \f1a1; +$fa-var-reddit-alien: \f281; +$fa-var-reddit-square: \f1a2; +$fa-var-refresh: \f021; +$fa-var-registered: \f25d; +$fa-var-remove: \f00d; +$fa-var-renren: \f18b; +$fa-var-reorder: \f0c9; +$fa-var-repeat: \f01e; +$fa-var-reply: \f112; +$fa-var-reply-all: \f122; +$fa-var-researchgate: \f338; +$fa-var-resistance: \f1d0; +$fa-var-retweet: \f079; +$fa-var-rmb: \f157; +$fa-var-road: \f018; +$fa-var-rocket: \f135; +$fa-var-rotate-left: \f0e2; +$fa-var-rotate-right: \f01e; +$fa-var-rouble: \f158; +$fa-var-rss: \f09e; +$fa-var-rss-square: \f143; +$fa-var-rub: \f158; +$fa-var-ruble: \f158; +$fa-var-rupee: \f156; +$fa-var-s15: \f2cd; +$fa-var-safari: \f267; +$fa-var-sass: \f358; +$fa-var-sass-alt: \f359; +$fa-var-save: \f0c7; +$fa-var-scissors: \f0c4; +$fa-var-scribd: \f28a; +$fa-var-scuttlebutt: \f2ea; +$fa-var-search: \f002; +$fa-var-search-minus: \f010; +$fa-var-search-plus: \f00e; +$fa-var-sellsy: \f213; +$fa-var-send: \f1d8; +$fa-var-send-o: \f1d9; +$fa-var-server: \f233; +$fa-var-shaarli: \f2f5; +$fa-var-shaarli-o: \f2f6; +$fa-var-share: \f064; +$fa-var-share-alt: \f1e0; +$fa-var-share-alt-square: \f1e1; +$fa-var-share-square: \f14d; +$fa-var-share-square-o: \f045; +$fa-var-shekel: \f20b; +$fa-var-sheqel: \f20b; +$fa-var-shield: \f132; +$fa-var-ship: \f21a; +$fa-var-shirtsinbulk: \f214; +$fa-var-shopping-bag: \f290; +$fa-var-shopping-basket: \f291; +$fa-var-shopping-cart: \f07a; +$fa-var-shower: \f2cc; +$fa-var-sign-in: \f090; +$fa-var-sign-language: \f2a7; +$fa-var-sign-out: \f08b; +$fa-var-signal: \f012; +$fa-var-signalapp: \f30c; +$fa-var-signing: \f2a7; +$fa-var-simplybuilt: \f215; +$fa-var-sitemap: \f0e8; +$fa-var-skate: \f35a; +$fa-var-sketchfab: \f35b; +$fa-var-skyatlas: \f216; +$fa-var-skype: \f17e; +$fa-var-slack: \f198; +$fa-var-sliders: \f1de; +$fa-var-slideshare: \f1e7; +$fa-var-smile-o: \f118; +$fa-var-snapchat: \f2ab; +$fa-var-snapchat-ghost: \f2ac; +$fa-var-snapchat-square: \f2ad; +$fa-var-snowdrift: \f2f1; +$fa-var-snowflake-o: \f2dc; +$fa-var-soccer-ball-o: \f1e3; +$fa-var-social-home: \f2ec; +$fa-var-sort: \f0dc; +$fa-var-sort-alpha-asc: \f15d; +$fa-var-sort-alpha-desc: \f15e; +$fa-var-sort-alpha-down: \f15d; +$fa-var-sort-alpha-up: \f15e; +$fa-var-sort-amount-asc: \f160; +$fa-var-sort-amount-desc: \f161; +$fa-var-sort-amount-down: \f160; +$fa-var-sort-amount-up: \f161; +$fa-var-sort-asc: \f0de; +$fa-var-sort-desc: \f0dd; +$fa-var-sort-down: \f0dd; +$fa-var-sort-numeric-asc: \f162; +$fa-var-sort-numeric-desc: \f163; +$fa-var-sort-numeric-down: \f162; +$fa-var-sort-numeric-up: \f163; +$fa-var-sort-up: \f0de; +$fa-var-soundcloud: \f1be; +$fa-var-space-shuttle: \f197; +$fa-var-spell-check: \f327; +$fa-var-spinner: \f110; +$fa-var-spoon: \f1b1; +$fa-var-spotify: \f1bc; +$fa-var-square: \f0c8; +$fa-var-square-o: \f096; +$fa-var-ssb: \f2ea; +$fa-var-stack-exchange: \f18d; +$fa-var-stack-overflow: \f16c; +$fa-var-star: \f005; +$fa-var-star-half: \f089; +$fa-var-star-half-empty: \f123; +$fa-var-star-half-full: \f123; +$fa-var-star-half-o: \f123; +$fa-var-star-o: \f006; +$fa-var-steam: \f1b6; +$fa-var-steam-square: \f1b7; +$fa-var-step-backward: \f048; +$fa-var-step-forward: \f051; +$fa-var-stethoscope: \f0f1; +$fa-var-sticky-note: \f249; +$fa-var-sticky-note-o: \f24a; +$fa-var-stop: \f04d; +$fa-var-stop-circle: \f28d; +$fa-var-stop-circle-o: \f28e; +$fa-var-street-view: \f21d; +$fa-var-strikethrough: \f0cc; +$fa-var-stumbleupon: \f1a4; +$fa-var-stumbleupon-circle: \f1a3; +$fa-var-subscript: \f12c; +$fa-var-subway: \f239; +$fa-var-suitcase: \f0f2; +$fa-var-sun: \f329; +$fa-var-sun-o: \f185; +$fa-var-superpowers: \f2dd; +$fa-var-superscript: \f12b; +$fa-var-support: \f1cd; +$fa-var-sync: \f021; +$fa-var-syncthing: \f311; +$fa-var-table: \f0ce; +$fa-var-tablet: \f10a; +$fa-var-tachometer: \f0e4; +$fa-var-tag: \f02b; +$fa-var-tags: \f02c; +$fa-var-tasks: \f0ae; +$fa-var-taxi: \f1ba; +$fa-var-telegram: \f2c6; +$fa-var-television: \f26c; +$fa-var-tencent-weibo: \f1d5; +$fa-var-terminal: \f120; +$fa-var-tex: \f35c; +$fa-var-text-height: \f034; +$fa-var-text-width: \f035; +$fa-var-textpattern: \f35d; +$fa-var-th: \f00a; +$fa-var-th-large: \f009; +$fa-var-th-list: \f00b; +$fa-var-themeisle: \f2b2; +$fa-var-thermometer: \f2c7; +$fa-var-thermometer-0: \f2cb; +$fa-var-thermometer-1: \f2ca; +$fa-var-thermometer-2: \f2c9; +$fa-var-thermometer-3: \f2c8; +$fa-var-thermometer-4: \f2c7; +$fa-var-thermometer-empty: \f2cb; +$fa-var-thermometer-full: \f2c7; +$fa-var-thermometer-half: \f2c9; +$fa-var-thermometer-quarter: \f2ca; +$fa-var-thermometer-three-quarters: \f2c8; +$fa-var-thumb-tack: \f08d; +$fa-var-thumbs-down: \f165; +$fa-var-thumbs-o-down: \f088; +$fa-var-thumbs-o-up: \f087; +$fa-var-thumbs-up: \f164; +$fa-var-ticket: \f145; +$fa-var-times: \f00d; +$fa-var-times-circle: \f057; +$fa-var-times-circle-o: \f05c; +$fa-var-times-rectangle: \f2d3; +$fa-var-times-rectangle-o: \f2d4; +$fa-var-tint: \f043; +$fa-var-tipeee: \f301; +$fa-var-toggle-down: \f150; +$fa-var-toggle-left: \f191; +$fa-var-toggle-off: \f204; +$fa-var-toggle-on: \f205; +$fa-var-toggle-right: \f152; +$fa-var-toggle-up: \f151; +$fa-var-tor-onion: \f32e; +$fa-var-trademark: \f25c; +$fa-var-train: \f238; +$fa-var-transgender: \f224; +$fa-var-transgender-alt: \f225; +$fa-var-trash: \f1f8; +$fa-var-trash-o: \f014; +$fa-var-tree: \f1bb; +$fa-var-trello: \f181; +$fa-var-tripadvisor: \f262; +$fa-var-trophy: \f091; +$fa-var-truck: \f0d1; +$fa-var-try: \f195; +$fa-var-tty: \f1e4; +$fa-var-tumblr: \f173; +$fa-var-tumblr-square: \f174; +$fa-var-turkish-lira: \f195; +$fa-var-tv: \f26c; +$fa-var-twitch: \f1e8; +$fa-var-twitter: \f099; +$fa-var-twitter-square: \f081; +$fa-var-umbrella: \f0e9; +$fa-var-underline: \f0cd; +$fa-var-undo: \f0e2; +$fa-var-unity: \f35e; +$fa-var-universal-access: \f29a; +$fa-var-university: \f19c; +$fa-var-unlink: \f127; +$fa-var-unlock: \f09c; +$fa-var-unlock-alt: \f13e; +$fa-var-unsorted: \f0dc; +$fa-var-unsplash: \f325; +$fa-var-upload: \f093; +$fa-var-usb: \f287; +$fa-var-usd: \f155; +$fa-var-user: \f007; +$fa-var-user-circle: \f2bd; +$fa-var-user-circle-o: \f2be; +$fa-var-user-md: \f0f0; +$fa-var-user-o: \f2c0; +$fa-var-user-plus: \f234; +$fa-var-user-secret: \f21b; +$fa-var-user-times: \f235; +$fa-var-users: \f0c0; +$fa-var-utensil-spoon: \f1b1; +$fa-var-utensils: \f0f5; +$fa-var-vcard: \f2bb; +$fa-var-vcard-o: \f2bc; +$fa-var-venus: \f221; +$fa-var-venus-double: \f226; +$fa-var-venus-mars: \f228; +$fa-var-viacoin: \f237; +$fa-var-viadeo: \f2a9; +$fa-var-viadeo-square: \f2aa; +$fa-var-video: \f03d; +$fa-var-video-camera: \f03d; +$fa-var-vimeo: \f27d; +$fa-var-vimeo-square: \f194; +$fa-var-vimeo-v: \f27d; +$fa-var-vine: \f1ca; +$fa-var-vk: \f189; +$fa-var-volume-control-phone: \f2a0; +$fa-var-volume-down: \f027; +$fa-var-volume-mute: \f32f; +$fa-var-volume-off: \f026; +$fa-var-volume-up: \f028; +$fa-var-warning: \f071; +$fa-var-wechat: \f1d7; +$fa-var-weibo: \f18a; +$fa-var-weixin: \f1d7; +$fa-var-whatsapp: \f232; +$fa-var-wheelchair: \f193; +$fa-var-wheelchair-alt: \f29b; +$fa-var-wifi: \f1eb; +$fa-var-wikidata: \f31a; +$fa-var-wikipedia-w: \f266; +$fa-var-window-close: \f2d3; +$fa-var-window-close-o: \f2d4; +$fa-var-window-maximize: \f2d0; +$fa-var-window-minimize: \f2d1; +$fa-var-window-restore: \f2d2; +$fa-var-windows: \f17a; +$fa-var-wire: \f32c; +$fa-var-won: \f159; +$fa-var-wordpress: \f19a; +$fa-var-wpbeginner: \f297; +$fa-var-wpexplorer: \f2de; +$fa-var-wpforms: \f298; +$fa-var-wrench: \f0ad; +$fa-var-xing: \f168; +$fa-var-xing-square: \f169; +$fa-var-xmpp: \f2f9; +$fa-var-y-combinator: \f23b; +$fa-var-y-combinator-square: \f1d4; +$fa-var-yahoo: \f19e; +$fa-var-yc: \f23b; +$fa-var-yc-square: \f1d4; +$fa-var-yelp: \f1e9; +$fa-var-yen: \f157; +$fa-var-yoast: \f2b1; +$fa-var-youtube: \f167; +$fa-var-youtube-play: \f16a; +$fa-var-youtube-square: \f166; +$fa-var-zotero: \f309; + diff --git a/assets/scss/fork-awesome.scss b/assets/scss/fork-awesome.scss new file mode 100644 index 0000000..a24f03c --- /dev/null +++ b/assets/scss/fork-awesome.scss @@ -0,0 +1,28 @@ +/*! +Fork Awesome 1.2.0 +License - https://forkaweso.me/Fork-Awesome/license + +Copyright 2018 Dave Gandy & Fork Awesome + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +@import "variables"; +@import "mixins"; +@import "functions"; +@import "path"; +@import "core"; +@import "larger"; +@import "fixed-width"; +@import "list"; +@import "bordered-pulled"; +@import "animated"; +@import "rotated-flipped"; +@import "stacked"; +@import "icons"; +@import "screen-reader"; diff --git a/configs/scss.ini b/configs/scss.ini new file mode 100644 index 0000000..49ac487 --- /dev/null +++ b/configs/scss.ini @@ -0,0 +1,7 @@ +source_dir = assets/scss/ +output_dir = assets/css/ +output_style = compressed +source_comments = False +precision = 5 +name_prefix = .min +; include_paths = node_modules/,assets/vendor/ diff --git a/packages/lektor-scss/LICENSE b/packages/lektor-scss/LICENSE new file mode 100644 index 0000000..69ca967 --- /dev/null +++ b/packages/lektor-scss/LICENSE @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) 2019 L3D +Copyright (c) 2019 maxbachmann + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/lektor-scss/PKG-INFO b/packages/lektor-scss/PKG-INFO new file mode 100644 index 0000000..8701aa1 --- /dev/null +++ b/packages/lektor-scss/PKG-INFO @@ -0,0 +1,94 @@ +Metadata-Version: 2.1 +Name: lektor-scss +Version: 1.4.1 +Summary: Lektor plugin to compile css out of sass - based on libsass +Home-page: https://github.com/chaos-bodensee/lektor-scss.git +Author: L3D +Author-email: l3d@c3woc.de +License: MIT +Keywords: Lektor plugin +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Framework :: Lektor +Classifier: Environment :: Plugins +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Programming Language :: Python :: 3 +Description-Content-Type: text/markdown +License-File: LICENSE + + SCSS compiler for lektor +============================= +[![PyPI version](https://badge.fury.io/py/lektor-scss.svg)](https://badge.fury.io/py/lektor-scss) + [![Downloads](https://pepy.tech/badge/lektor-scss)](https://pepy.tech/project/lektor-scss) + ![Upload Python Package](https://github.com/chaos-bodensee/lektor-scss/workflows/Upload%20Python%20Package/badge.svg) + ![Linting Python package](https://github.com/chaos-bodensee/lektor-scss/workflows/Linting%20Python%20package/badge.svg) + +SCSS compiler for [Lektor](https://getlektor.com) that compiles css from sass. + + How does it actually work? +---------------------------- + + It uses [libsass](https://github.com/sass/libsass-python) + + It looks for ``.scss`` and ``.sass`` files *(ignores part files that begin with a underscore e.g. '_testfile.scss') and compiles them as part of the build process.* + + It only rebuilds the css when it's needed (file changed, a file it imports changed or the config changed). + + When starting the the development server it watches the files for changes in the background and rebuilds them when needed. + + Installation +------------- +You can install the plugin with Lektor's installer: +```bash +lektor plugins add lektor-scss +``` + +Or by hand, adding the plugin to the packages section in your lektorproject file: +```ini +[packages] +lektor-scss = 1.4.1 +``` + Usage +------ +To enable the plugin, pass the ``scss`` flag when starting the development +server or when running a build: +```bash +# build and compile css from scss +lektor build -f scss + +# edit site with new generated css +lektor server -f scss +``` + + Python3 +---------- +It is highly recommended to use this plugin with a python3 version of lektor. + +Since lektor can be used as a python module it is possible to enforce this *(after lektor is installed eg. with ``pip3 install --user --upgrade lektor``)* with the following command: +```bash +# run a python3 lektor server with new generated css +python3 -m lektor server -f scss +``` + + Configuration +------------- +The Plugin has the following settings you can adjust to your needs: + +|parameter |default value |description | +|---------------|-------------------|--------------------------------------------------------------------------------------------------| +|source_dir |assets/scss/ | the directory in which the plugin searchs for sass files (subdirectories are included) | +|output_dir |assets/css/ | the directory the compiled css files get place at | +|output_style |compressed | coding style of the compiled result. choose one of: 'nested', 'expanded', 'compact', 'compressed'| +|source_comments|False | whether to add comments about source lines | +|precision |5 | precision for numbers | +|include_paths | |If you want to include SASS libraries from a different directory, libsass's compile function has a parameter called `include_paths` to add those directories to the search path. | + + +An example file with the default config can be found at ``configs/scss.ini``. For every parameter that is not specified in the config file the default value is used by the plugin. + + Development +------------- +To test and/or develop on this plugin in your running lektor installation, simply place it in the ``packages/`` Folder and have a look at the [Lektor Doku](https://www.getlektor.com/docs/plugins/dev/) + + + + + + diff --git a/packages/lektor-scss/README.md b/packages/lektor-scss/README.md new file mode 100644 index 0000000..b487016 --- /dev/null +++ b/packages/lektor-scss/README.md @@ -0,0 +1,73 @@ + SCSS compiler for lektor +============================= +[![PyPI version](https://badge.fury.io/py/lektor-scss.svg)](https://badge.fury.io/py/lektor-scss) + [![Downloads](https://pepy.tech/badge/lektor-scss)](https://pepy.tech/project/lektor-scss) + ![Upload Python Package](https://github.com/chaos-bodensee/lektor-scss/workflows/Upload%20Python%20Package/badge.svg) + ![Linting Python package](https://github.com/chaos-bodensee/lektor-scss/workflows/Linting%20Python%20package/badge.svg) + +SCSS compiler for [Lektor](https://getlektor.com) that compiles css from sass. + + How does it actually work? +---------------------------- + + It uses [libsass](https://github.com/sass/libsass-python) + + It looks for ``.scss`` and ``.sass`` files *(ignores part files that begin with a underscore e.g. '_testfile.scss') and compiles them as part of the build process.* + + It only rebuilds the css when it's needed (file changed, a file it imports changed or the config changed). + + When starting the the development server it watches the files for changes in the background and rebuilds them when needed. + + Installation +------------- +You can install the plugin with Lektor's installer: +```bash +lektor plugins add lektor-scss +``` + +Or by hand, adding the plugin to the packages section in your lektorproject file: +```ini +[packages] +lektor-scss = 1.4.1 +``` + Usage +------ +To enable the plugin, pass the ``scss`` flag when starting the development +server or when running a build: +```bash +# build and compile css from scss +lektor build -f scss + +# edit site with new generated css +lektor server -f scss +``` + + Python3 +---------- +It is highly recommended to use this plugin with a python3 version of lektor. + +Since lektor can be used as a python module it is possible to enforce this *(after lektor is installed eg. with ``pip3 install --user --upgrade lektor``)* with the following command: +```bash +# run a python3 lektor server with new generated css +python3 -m lektor server -f scss +``` + + Configuration +------------- +The Plugin has the following settings you can adjust to your needs: + +|parameter |default value |description | +|---------------|-------------------|--------------------------------------------------------------------------------------------------| +|source_dir |assets/scss/ | the directory in which the plugin searchs for sass files (subdirectories are included) | +|output_dir |assets/css/ | the directory the compiled css files get place at | +|output_style |compressed | coding style of the compiled result. choose one of: 'nested', 'expanded', 'compact', 'compressed'| +|source_comments|False | whether to add comments about source lines | +|precision |5 | precision for numbers | +|include_paths | |If you want to include SASS libraries from a different directory, libsass's compile function has a parameter called `include_paths` to add those directories to the search path. | + + +An example file with the default config can be found at ``configs/scss.ini``. For every parameter that is not specified in the config file the default value is used by the plugin. + + Development +------------- +To test and/or develop on this plugin in your running lektor installation, simply place it in the ``packages/`` Folder and have a look at the [Lektor Doku](https://www.getlektor.com/docs/plugins/dev/) + + + + diff --git a/packages/lektor-scss/configs/scss.ini b/packages/lektor-scss/configs/scss.ini new file mode 100644 index 0000000..49ac487 --- /dev/null +++ b/packages/lektor-scss/configs/scss.ini @@ -0,0 +1,7 @@ +source_dir = assets/scss/ +output_dir = assets/css/ +output_style = compressed +source_comments = False +precision = 5 +name_prefix = .min +; include_paths = node_modules/,assets/vendor/ diff --git a/packages/lektor-scss/lektor_scss.py b/packages/lektor-scss/lektor_scss.py new file mode 100755 index 0000000..bd578dd --- /dev/null +++ b/packages/lektor-scss/lektor_scss.py @@ -0,0 +1,173 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +from __future__ import print_function + +import os +import sass +import errno +import re +from lektor.pluginsystem import Plugin +from termcolor import colored +import threading +import time + +COMPILE_FLAG = "scss" + +class scssPlugin(Plugin): + name = u'Lektor scss' + description = u'Lektor plugin to compile css out of sass - based on libsass' + + def __init__(self, *args, **kwargs): + Plugin.__init__(self, *args, **kwargs) + config = self.get_config() + self.source_dir = config.get('source_dir', 'assets/scss/') + self.output_dir = config.get('output_dir', 'assets/css/') + self.output_style = config.get('output_style', 'compressed') + self.source_comments = config.get('source_comments', 'False') + self.precision = config.get('precision', '5') + self.name_prefix = config.get('name_prefix', '') + self.include_paths = [] + raw_include_paths = config.get('include_paths', '') + # convert a path expression with ',' as seperator symbol + include_path_list = list(filter(lambda el: len(el) > 0, raw_include_paths.split(','))) + for path in include_path_list: + if path.startswith('/'): + self.include_paths.append(path) + else: + self.include_paths.append(os.path.realpath(os.path.join(self.env.root_path, path))) + self.watcher = None + self.run_watcher = False + + def is_enabled(self, build_flags): + return bool(build_flags.get(COMPILE_FLAG)) + + def find_dependencies(self, target): + dependencies = [target] + with open(target, 'r') as f: + data = f.read() + imports = re.findall(r'@import\s+((?:[\'|\"]\S+[\'|\"]\s*(?:,\s*(?:\/\/\s*|)|;))+)', data) + for files in imports: + files = re.sub('[\'\"\n\r;]', '', files) + + # find correct filename and add to watchlist (recursive so dependencies of dependencies get added aswell) + for file in files.split(","): + file = file.strip() + # when filename ends with css libsass converts it to a url() + if file.endswith('.css'): + continue + + basepath = os.path.dirname(target) + filepath = os.path.dirname(file) + basename = os.path.basename(file) + filenames = [ + basename, + '_' + basename, + basename + '.scss', + basename + '.css', + '_' + basename + '.scss', + '_' + basename + '.css' + ] + + for filename in filenames: + path = os.path.join(basepath, filepath, filename) + if os.path.isfile(path): + dependencies += self.find_dependencies(path) + return dependencies + + def compile_file(self, target, output, dependencies): + """ + Compiles the target scss file. + """ + filename = os.path.splitext(os.path.basename(target))[0] + if not filename.endswith(self.name_prefix): + filename += self.name_prefix + filename += '.css' + output_file = os.path.join(output, filename) + + # check if dependency changed and rebuild if it did + rebuild = False + for dependency in dependencies: + if ( not os.path.isfile(output_file) or os.path.getmtime(dependency) > os.path.getmtime(output_file)): + rebuild = True + break + if not rebuild: + return + result = sass.compile( + filename=target, + output_style=self.output_style, + precision=int(self.precision), + source_comments=(self.source_comments.lower()=='true'), + include_paths=self.include_paths + ) + with open(output_file, 'w') as fw: + fw.write(result) + + print(colored('css', 'green'), self.source_dir + os.path.basename(target), '\u27a1', self.output_dir + filename) + + def find_files(self, destination): + """ + Finds all scss files in the given destination. (ignore files starting with _) + """ + for root, dirs, files in os.walk(destination): + for f in files: + if (f.endswith('.scss') or f.endswith('.sass')) and not f.startswith('_'): + yield os.path.join(root, f) + + def thread(self, output, watch_files): + while True: + if not self.run_watcher: + self.watcher = None + break + for filename, dependencies in watch_files: + self.compile_file(filename, output, dependencies) + time.sleep(1) + + def on_server_spawn(self, **extra): + self.run_watcher = True + + def on_server_stop(self, **extra): + if self.watcher is not None: + self.run_watcher = False + print('stopped') + + def make_sure_path_exists(self, path): + try: + os.makedirs(path) + except OSError as exception: + if exception.errno != errno.EEXIST: + raise + + def on_before_build_all(self, builder, **extra): + try: # lektor 3+ + is_enabled = self.is_enabled(builder.extra_flags) + except AttributeError: # lektor 2+ + is_enabled = self.is_enabled(builder.build_flags) + + # only run when server runs + if not is_enabled or self.watcher: + return + + root_scss = os.path.join(self.env.root_path, self.source_dir ) + output = os.path.join(self.env.root_path, self.output_dir ) + config_file = os.path.join(self.env.root_path, 'configs/scss.ini') + + # output path has to exist + #os.makedirs(output, exist_ok=True) when python2 finally runs out + self.make_sure_path_exists(output) + + dependencies = [] + if ( os.path.isfile(config_file)): + dependencies.append(config_file) + + if self.run_watcher: + watch_files = [] + for filename in self.find_files(root_scss): + dependencies += self.find_dependencies(filename) + watch_files.append([filename, dependencies]) + self.watcher = threading.Thread(target=self.thread, args=(output, watch_files)) + self.watcher.start() + else: + for filename in self.find_files(root_scss): + # get dependencies by searching imports in target files + dependencies += self.find_dependencies(filename) + self.compile_file(filename, output, dependencies) diff --git a/packages/lektor-scss/setup.cfg b/packages/lektor-scss/setup.cfg new file mode 100644 index 0000000..8bfd5a1 --- /dev/null +++ b/packages/lektor-scss/setup.cfg @@ -0,0 +1,4 @@ +[egg_info] +tag_build = +tag_date = 0 + diff --git a/packages/lektor-scss/setup.py b/packages/lektor-scss/setup.py new file mode 100644 index 0000000..382f42e --- /dev/null +++ b/packages/lektor-scss/setup.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +import ast +import io +import re + +from setuptools import setup, find_packages + +with io.open('README.md', 'rt', encoding="utf8") as f: + readme = f.read() + +setup( + author='L3D', + author_email='l3d@c3woc.de', + description='Lektor plugin to compile css out of sass - based on libsass', + keywords='Lektor plugin', + license='MIT', + long_description=readme, + long_description_content_type='text/markdown', + name='lektor-scss', + packages=find_packages(), + py_modules=['lektor_scss'], + url='https://github.com/chaos-bodensee/lektor-scss.git', + version='1.4.1', + install_requires = [ + "libsass==0.21.0", "termcolor", + ], + classifiers=[ + "Development Status :: 5 - Production/Stable", + 'Framework :: Lektor', + "Environment :: Plugins", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Programming Language :: Python :: 3", + ], + entry_points={ + 'lektor.plugins': [ + 'scss = lektor_scss:scssPlugin', + ] + } +) diff --git a/templates/about.html b/templates/about.html index 22af187..a7cd5eb 100644 --- a/templates/about.html +++ b/templates/about.html @@ -4,8 +4,8 @@

{{ this.about_title }}

- Discord - Weblate + Discord + Weblate
diff --git a/templates/footer.html b/templates/footer.html index 29e3838..4f1be02 100644 --- a/templates/footer.html +++ b/templates/footer.html @@ -1,9 +1,9 @@
diff --git a/templates/meta.html b/templates/meta.html index 13a74f1..9abe7d3 100644 --- a/templates/meta.html +++ b/templates/meta.html @@ -20,8 +20,8 @@ {{ this.title }} - - + +